storable 0.8.6 → 0.9.pre.RC2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1fe040169d9300d29f3a00c5e46e74580a6f5a124b6dabda16ad3a8132d5a6eb
4
+ data.tar.gz: 24de9dc3bf471ef05c6aad494482925131f0b00d3a4f3dff5f478eec4b655dee
5
+ SHA512:
6
+ metadata.gz: fdaa8dc26da7cf8163dcb1d5d6249a894816445fdf0309bff690e0fc70cc13b637bf3d9ae0557d5eec2a6cabe32986b318a683b3529b0fdee466b733e1c11afb
7
+ data.tar.gz: 363d57e409178dac08aac9809768d6a1cfb7e4bccf2056be267da51718cc505219eb5a182a41cb3b87be2d5b4d569506dbbe473ee082e4ce8c3162f9cd9ccda7
@@ -1,76 +1,76 @@
1
- = Storable - v0.8
1
+ # Storable - v0.9-RC2
2
2
 
3
- Marshal Ruby classes into and out of multiple formats (yaml, json, csv, tsv)
3
+ Marshal Ruby classes in to and out of multiple formats (yaml, json, csv, tsv).
4
+
5
+ ## Example
4
6
 
5
- == Example
6
-
7
7
  require 'storable'
8
-
8
+
9
9
  class Machine < Storable
10
10
  field :environment # Define field names for Machine. The
11
11
  field :role # default type is String, but you can
12
12
  field :position => Integer # specify a type using a hash syntax.
13
13
  end
14
-
14
+
15
15
  mac1 = Machine.new # Instances of Machine have accessors
16
- mac1.environment = "stage" # just like regular attributes.
16
+ mac1.environment = "stage" # just like regular attributes.
17
17
  mac1.role = "app"
18
18
  mac1.position = 1
19
-
20
- puts "# YAML", mac1.to_yaml # Note: the field order is maintained
19
+
20
+ puts "# YAML", mac1.to_yaml # Note: the field order is maintained
21
21
  puts "# CSV", mac1.to_csv # => stage,app,1
22
22
  puts "# JSON", mac1.to_json # Note: field order not maintained.
23
-
23
+
24
24
  mac2 = Machine.from_yaml(mac1.to_yaml)
25
25
  puts mac2.environment # => "stage"
26
26
  puts mac2.position.class # => Fixnum
27
27
 
28
28
 
29
- == Sensitive Fields
29
+ ## Sensitive Fields
30
30
 
31
31
  require 'storable'
32
-
32
+
33
33
  class Calc < Storable
34
34
  field :three
35
35
  field :two
36
36
  field :one
37
37
  sensitive_fields :three
38
38
  end
39
-
39
+
40
40
  calc = Calc.new 3, 2, 1
41
41
  calc.to_a # => [3, 2, 1]
42
42
  calc.sensitive!
43
43
  calc.to_a # => [2, 1]
44
-
45
-
46
- == Storing Procs
47
44
 
48
- Storable can also marshal Proc objects to and from their actual source code.
49
-
45
+
46
+ ## Storing Procs
47
+
48
+ Storable can also marshal Proc objects to and from their actual source code.
49
+
50
50
  require 'storable'
51
-
51
+
52
52
  class Maths < Storable
53
53
  field :x => Float
54
54
  field :y => Float
55
55
  field :calculate => Proc
56
56
  end
57
-
57
+
58
58
  m1 = Maths.new 2.0, 3.0
59
59
  m1.calculate = Proc.new { @x * @y }
60
-
60
+
61
61
  m1.calculate.source # => "{ @x * @y }"
62
62
  m1.call :calculate # => 6.0
63
-
63
+
64
64
  dump = m1.to_json
65
-
65
+
66
66
  m2 = Maths.from_json dump
67
67
  m2.call :calculate # => 6.0
68
-
69
-
70
- Anything is possible when you keep your mind open and you use Ruby.
71
68
 
72
69
 
73
- == Installation
70
+ Anything is possible when you keep your mind open and you use Ruby.
71
+
72
+
73
+ ## Installation
74
74
 
75
75
  Via Rubygems, one of:
76
76
 
@@ -80,29 +80,30 @@ Via Rubygems, one of:
80
80
  or via download:
81
81
  * storable-latest.tar.gz[http://github.com/delano/storable/tarball/latest]
82
82
  * storable-latest.zip[http://github.com/delano/storable/zipball/latest]
83
-
84
83
 
85
- == Prerequisites
86
84
 
87
- * Ruby 1.8, Ruby 1.9, or JRuby 1.2+
85
+ ## Prerequisites
86
+
87
+ * Ruby <=2.7, >=1.9, possibly JRuby
88
88
 
89
89
 
90
- == Credits
90
+ ## Credits
91
91
 
92
92
  * Delano Mandelbaum (delano@solutious.com)
93
93
  * lib/proc_source.rb is based on http://github.com/imedo/background
94
94
  * OrderedHash implementation by Jan Molic
95
95
 
96
96
 
97
- == Thanks
97
+ ## Thanks
98
98
 
99
- * Pierre Riteau (priteau[http://github.com/priteau]) for bug fixes.
99
+ * Pierre Riteau (priteau[https://github.com/priteau]) for bug fixes.
100
+ * notro[https://github.com/priteau] for proc_source improvements.
100
101
 
101
102
 
102
- == More Info
103
+ ## More Info
103
104
 
104
- * Codes[http://github.com/delano/storable]
105
+ * GitHub[http://github.com/delano/storable]
105
106
 
106
- == License
107
+ ## License
107
108
 
108
- See: LICENSE.txt
109
+ See: LICENSE.txt
data/Rakefile CHANGED
@@ -1,22 +1,17 @@
1
1
  require 'rubygems'
2
2
  require 'rake/clean'
3
- require 'rake/gempackagetask'
3
+ require 'rubygems/package_task'
4
4
  require 'fileutils'
5
+ require 'rdoc/task'
5
6
  include FileUtils
6
7
 
7
- begin
8
- require 'hanna/rdoctask'
9
- rescue LoadError
10
- require 'rake/rdoctask'
11
- end
12
-
13
8
  task :default => :package
14
-
9
+
10
+
15
11
  # CONFIG =============================================================
16
12
 
17
13
  # Change the following according to your needs
18
- README = "README.rdoc"
19
- CHANGES = "CHANGES.txt"
14
+ README = "README.md"
20
15
  LICENSE = "LICENSE.txt"
21
16
 
22
17
  # Files and directories to be deleted when you run "rake clean"
@@ -28,20 +23,22 @@ load "#{name}.gemspec"
28
23
  version = @spec.version
29
24
 
30
25
  # That's it! The following defaults should allow you to get started
31
- # on other things.
26
+ # on other things.
32
27
 
33
28
 
34
29
  # TESTS/SPECS =========================================================
35
30
 
36
-
31
+ task :test do
32
+ sh "try"
33
+ end
37
34
 
38
35
  # INSTALL =============================================================
39
36
 
40
- Rake::GemPackageTask.new(@spec) do |p|
37
+ Gem::PackageTask.new(@spec) do |p|
41
38
  p.need_tar = true if RUBY_PLATFORM !~ /mswin/
42
39
  end
43
40
 
44
- task :build => [ :package ]
41
+ task :build => [ :test, :package ]
45
42
  task :release => [ :rdoc, :package ]
46
43
  task :install => [ :rdoc, :package ] do
47
44
  sh %{sudo gem install pkg/#{name}-#{version}.gem}
@@ -51,65 +48,15 @@ task :uninstall => [ :clean ] do
51
48
  end
52
49
 
53
50
 
54
- # RUBYFORGE RELEASE / PUBLISH TASKS ==================================
55
-
56
- if @spec.rubyforge_project
57
- desc 'Publish website to rubyforge'
58
- task 'publish:rdoc' => 'doc/index.html' do
59
- sh "scp -rp doc/* rubyforge.org:/var/www/gforge-projects/#{name}/"
60
- end
61
-
62
- desc 'Public release to rubyforge'
63
- task 'publish:gem' => [:package] do |t|
64
- sh <<-end
65
- rubyforge add_release -o Any -a #{CHANGES} -f -n #{README} #{name} #{name} #{@spec.version} pkg/#{name}-#{@spec.version}.gem &&
66
- rubyforge add_file -o Any -a #{CHANGES} -f -n #{README} #{name} #{name} #{@spec.version} pkg/#{name}-#{@spec.version}.tgz
67
- end
68
- end
69
- end
70
-
71
-
72
-
73
51
  # RUBY DOCS TASK ==================================
74
- begin
75
- require 'hanna/rdoctask'
76
- rescue LoadError
77
- require 'rake/rdoctask'
78
- end
79
52
 
80
- Rake::RDocTask.new do |t|
53
+ RDoc::Task.new do |t|
81
54
  t.rdoc_dir = 'doc'
82
55
  t.title = @spec.summary
83
56
  t.options << '--line-numbers' << '--inline-source' << '-A cattr_accessor=object'
84
57
  t.options << '--charset' << 'utf-8'
85
58
  t.rdoc_files.include(LICENSE)
86
59
  t.rdoc_files.include(README)
87
- t.rdoc_files.include(CHANGES)
88
60
  #t.rdoc_files.include('bin/*')
89
61
  t.rdoc_files.include('lib/**/*.rb')
90
62
  end
91
-
92
-
93
-
94
-
95
- #Hoe.new('rspec', Spec::VERSION::STRING) do |p|
96
- # p.summary = Spec::VERSION::SUMMARY
97
- # p.description = "Behaviour Driven Development for Ruby."
98
- # p.rubyforge_name = 'rspec'
99
- # p.developer('RSpec Development Team', 'rspec-devel@rubyforge.org')
100
- # p.extra_dev_deps = [["cucumber",">= 0.1.13"]]
101
- # p.remote_rdoc_dir = "rspec/#{Spec::VERSION::STRING}"
102
- # p.rspec_options = ['--options', 'spec/spec.opts']
103
- # p.history_file = 'History.rdoc'
104
- # p.readme_file = 'README.rdoc'
105
- # p.post_install_message = <<-POST_INSTALL_MESSAGE
106
- ##{'*'*50}
107
- #
108
- # Thank you for installing rspec-#{Spec::VERSION::STRING}
109
- #
110
- # Please be sure to read History.rdoc and Upgrade.rdoc
111
- # for useful information about this release.
112
- #
113
- #{'*'*50}
114
- #POST_INSTALL_MESSAGE
115
- #end
data/lib/core_ext.rb ADDED
@@ -0,0 +1,273 @@
1
+
2
+ #
3
+ # RubyToken was removed in >= 2.7
4
+ # Direct copy from Ruby 2.6.6 source
5
+ #
6
+
7
+ # frozen_string_literal: false
8
+ #
9
+ # irb/ruby-token.rb - ruby tokens
10
+ # $Release Version: 0.9.6$
11
+ # $Revision$
12
+ # by Keiju ISHITSUKA(keiju@ruby-lang.org)
13
+ #
14
+ # --
15
+ #
16
+ #
17
+ #
18
+ # :stopdoc:
19
+ module RubyToken
20
+ EXPR_BEG = :EXPR_BEG
21
+ EXPR_MID = :EXPR_MID
22
+ EXPR_END = :EXPR_END
23
+ EXPR_ARG = :EXPR_ARG
24
+ EXPR_FNAME = :EXPR_FNAME
25
+ EXPR_DOT = :EXPR_DOT
26
+ EXPR_CLASS = :EXPR_CLASS
27
+
28
+ class Token
29
+ def initialize(seek, line_no, char_no)
30
+ @seek = seek
31
+ @line_no = line_no
32
+ @char_no = char_no
33
+ end
34
+ attr_reader :seek, :line_no, :char_no
35
+ end
36
+
37
+ class TkNode < Token
38
+ def initialize(seek, line_no, char_no)
39
+ super
40
+ end
41
+ attr_reader :node
42
+ end
43
+
44
+ class TkId < Token
45
+ def initialize(seek, line_no, char_no, name)
46
+ super(seek, line_no, char_no)
47
+ @name = name
48
+ end
49
+ attr_reader :name
50
+ end
51
+
52
+ class TkVal < Token
53
+ def initialize(seek, line_no, char_no, value = nil)
54
+ super(seek, line_no, char_no)
55
+ @value = value
56
+ end
57
+ attr_reader :value
58
+ end
59
+
60
+ class TkOp < Token
61
+ attr_accessor :name
62
+ end
63
+
64
+ class TkOPASGN < TkOp
65
+ def initialize(seek, line_no, char_no, op)
66
+ super(seek, line_no, char_no)
67
+ op = TkReading2Token[op][0] unless op.kind_of?(Symbol)
68
+ @op = op
69
+ end
70
+ attr_reader :op
71
+ end
72
+
73
+ class TkUnknownChar < Token
74
+ def initialize(seek, line_no, char_no, id)
75
+ super(seek, line_no, char_no)
76
+ @name = name
77
+ end
78
+ attr_reader :name
79
+ end
80
+
81
+ class TkError < Token
82
+ end
83
+
84
+ def Token(token, value = nil)
85
+ case token
86
+ when String
87
+ if (tk = TkReading2Token[token]).nil?
88
+ IRB.fail TkReading2TokenNoKey, token
89
+ end
90
+ tk = Token(tk[0], value)
91
+ if tk.kind_of?(TkOp)
92
+ tk.name = token
93
+ end
94
+ return tk
95
+ when Symbol
96
+ if (tk = TkSymbol2Token[token]).nil?
97
+ IRB.fail TkSymbol2TokenNoKey, token
98
+ end
99
+ return Token(tk[0], value)
100
+ else
101
+ if (token.ancestors & [TkId, TkVal, TkOPASGN, TkUnknownChar]).empty?
102
+ token.new(@prev_seek, @prev_line_no, @prev_char_no)
103
+ else
104
+ token.new(@prev_seek, @prev_line_no, @prev_char_no, value)
105
+ end
106
+ end
107
+ end
108
+
109
+ TokenDefinitions = [
110
+ [:TkCLASS, TkId, "class", EXPR_CLASS],
111
+ [:TkMODULE, TkId, "module", EXPR_BEG],
112
+ [:TkDEF, TkId, "def", EXPR_FNAME],
113
+ [:TkUNDEF, TkId, "undef", EXPR_FNAME],
114
+ [:TkBEGIN, TkId, "begin", EXPR_BEG],
115
+ [:TkRESCUE, TkId, "rescue", EXPR_MID],
116
+ [:TkENSURE, TkId, "ensure", EXPR_BEG],
117
+ [:TkEND, TkId, "end", EXPR_END],
118
+ [:TkIF, TkId, "if", EXPR_BEG, :TkIF_MOD],
119
+ [:TkUNLESS, TkId, "unless", EXPR_BEG, :TkUNLESS_MOD],
120
+ [:TkTHEN, TkId, "then", EXPR_BEG],
121
+ [:TkELSIF, TkId, "elsif", EXPR_BEG],
122
+ [:TkELSE, TkId, "else", EXPR_BEG],
123
+ [:TkCASE, TkId, "case", EXPR_BEG],
124
+ [:TkWHEN, TkId, "when", EXPR_BEG],
125
+ [:TkWHILE, TkId, "while", EXPR_BEG, :TkWHILE_MOD],
126
+ [:TkUNTIL, TkId, "until", EXPR_BEG, :TkUNTIL_MOD],
127
+ [:TkFOR, TkId, "for", EXPR_BEG],
128
+ [:TkBREAK, TkId, "break", EXPR_END],
129
+ [:TkNEXT, TkId, "next", EXPR_END],
130
+ [:TkREDO, TkId, "redo", EXPR_END],
131
+ [:TkRETRY, TkId, "retry", EXPR_END],
132
+ [:TkIN, TkId, "in", EXPR_BEG],
133
+ [:TkDO, TkId, "do", EXPR_BEG],
134
+ [:TkRETURN, TkId, "return", EXPR_MID],
135
+ [:TkYIELD, TkId, "yield", EXPR_END],
136
+ [:TkSUPER, TkId, "super", EXPR_END],
137
+ [:TkSELF, TkId, "self", EXPR_END],
138
+ [:TkNIL, TkId, "nil", EXPR_END],
139
+ [:TkTRUE, TkId, "true", EXPR_END],
140
+ [:TkFALSE, TkId, "false", EXPR_END],
141
+ [:TkAND, TkId, "and", EXPR_BEG],
142
+ [:TkOR, TkId, "or", EXPR_BEG],
143
+ [:TkNOT, TkId, "not", EXPR_BEG],
144
+ [:TkIF_MOD, TkId],
145
+ [:TkUNLESS_MOD, TkId],
146
+ [:TkWHILE_MOD, TkId],
147
+ [:TkUNTIL_MOD, TkId],
148
+ [:TkALIAS, TkId, "alias", EXPR_FNAME],
149
+ [:TkDEFINED, TkId, "defined?", EXPR_END],
150
+ [:TklBEGIN, TkId, "BEGIN", EXPR_END],
151
+ [:TklEND, TkId, "END", EXPR_END],
152
+ [:Tk__LINE__, TkId, "__LINE__", EXPR_END],
153
+ [:Tk__FILE__, TkId, "__FILE__", EXPR_END],
154
+
155
+ [:TkIDENTIFIER, TkId],
156
+ [:TkFID, TkId],
157
+ [:TkGVAR, TkId],
158
+ [:TkCVAR, TkId],
159
+ [:TkIVAR, TkId],
160
+ [:TkCONSTANT, TkId],
161
+
162
+ [:TkINTEGER, TkVal],
163
+ [:TkFLOAT, TkVal],
164
+ [:TkSTRING, TkVal],
165
+ [:TkXSTRING, TkVal],
166
+ [:TkREGEXP, TkVal],
167
+ [:TkSYMBOL, TkVal],
168
+
169
+ [:TkDSTRING, TkNode],
170
+ [:TkDXSTRING, TkNode],
171
+ [:TkDREGEXP, TkNode],
172
+ [:TkNTH_REF, TkNode],
173
+ [:TkBACK_REF, TkNode],
174
+
175
+ [:TkUPLUS, TkOp, "+@"],
176
+ [:TkUMINUS, TkOp, "-@"],
177
+ [:TkPOW, TkOp, "**"],
178
+ [:TkCMP, TkOp, "<=>"],
179
+ [:TkEQ, TkOp, "=="],
180
+ [:TkEQQ, TkOp, "==="],
181
+ [:TkNEQ, TkOp, "!="],
182
+ [:TkGEQ, TkOp, ">="],
183
+ [:TkLEQ, TkOp, "<="],
184
+ [:TkANDOP, TkOp, "&&"],
185
+ [:TkOROP, TkOp, "||"],
186
+ [:TkMATCH, TkOp, "=~"],
187
+ [:TkNMATCH, TkOp, "!~"],
188
+ [:TkDOT2, TkOp, ".."],
189
+ [:TkDOT3, TkOp, "..."],
190
+ [:TkAREF, TkOp, "[]"],
191
+ [:TkASET, TkOp, "[]="],
192
+ [:TkLSHFT, TkOp, "<<"],
193
+ [:TkRSHFT, TkOp, ">>"],
194
+ [:TkCOLON2, TkOp],
195
+ [:TkCOLON3, TkOp],
196
+ [:TkASSOC, TkOp, "=>"],
197
+ [:TkQUESTION, TkOp, "?"], #?
198
+ [:TkCOLON, TkOp, ":"], #:
199
+
200
+ [:TkfLPAREN], # func( #
201
+ [:TkfLBRACK], # func[ #
202
+ [:TkfLBRACE], # func{ #
203
+ [:TkSTAR], # *arg
204
+ [:TkAMPER], # &arg #
205
+ [:TkSYMBEG], # :SYMBOL
206
+
207
+ [:TkGT, TkOp, ">"],
208
+ [:TkLT, TkOp, "<"],
209
+ [:TkPLUS, TkOp, "+"],
210
+ [:TkMINUS, TkOp, "-"],
211
+ [:TkMULT, TkOp, "*"],
212
+ [:TkDIV, TkOp, "/"],
213
+ [:TkMOD, TkOp, "%"],
214
+ [:TkBITOR, TkOp, "|"],
215
+ [:TkBITXOR, TkOp, "^"],
216
+ [:TkBITAND, TkOp, "&"],
217
+ [:TkBITNOT, TkOp, "~"],
218
+ [:TkNOTOP, TkOp, "!"],
219
+
220
+ [:TkBACKQUOTE, TkOp, "`"],
221
+
222
+ [:TkASSIGN, Token, "="],
223
+ [:TkDOT, Token, "."],
224
+ [:TkLPAREN, Token, "("], #(exp)
225
+ [:TkLBRACK, Token, "["], #[arry]
226
+ [:TkLBRACE, Token, "{"], #{hash}
227
+ [:TkRPAREN, Token, ")"],
228
+ [:TkRBRACK, Token, "]"],
229
+ [:TkRBRACE, Token, "}"],
230
+ [:TkCOMMA, Token, ","],
231
+ [:TkSEMICOLON, Token, ";"],
232
+
233
+ [:TkCOMMENT],
234
+ [:TkRD_COMMENT],
235
+ [:TkSPACE],
236
+ [:TkNL],
237
+ [:TkEND_OF_SCRIPT],
238
+
239
+ [:TkBACKSLASH, TkUnknownChar, "\\"],
240
+ [:TkAT, TkUnknownChar, "@"],
241
+ [:TkDOLLAR, TkUnknownChar, "$"],
242
+ ]
243
+
244
+ # {reading => token_class}
245
+ # {reading => [token_class, *opt]}
246
+ TkReading2Token = {}
247
+ TkSymbol2Token = {}
248
+
249
+ def RubyToken.def_token(token_n, super_token = Token, reading = nil, *opts)
250
+ token_n = token_n.id2name if token_n.kind_of?(Symbol)
251
+ if RubyToken.const_defined?(token_n)
252
+ IRB.fail AlreadyDefinedToken, token_n
253
+ end
254
+ token_c = eval("class #{token_n} < #{super_token}; end; #{token_n}")
255
+
256
+ if reading
257
+ if TkReading2Token[reading]
258
+ IRB.fail TkReading2TokenDuplicateError, token_n, reading
259
+ end
260
+ if opts.empty?
261
+ TkReading2Token[reading] = [token_c]
262
+ else
263
+ TkReading2Token[reading] = [token_c].concat(opts)
264
+ end
265
+ end
266
+ TkSymbol2Token[token_n.intern] = token_c
267
+ end
268
+
269
+ for defs in TokenDefinitions
270
+ def_token(*defs)
271
+ end
272
+ end
273
+ # :startdoc: