odm 0.3.0 → 0.4.0
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 +4 -4
- data/README.md +54 -7
- data/VERSION +1 -1
- data/examples/level.rb +6 -4
- data/lib/odm.rb +50 -24
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 442aa0b448f0dee8bf70643a1e325d46dbe2a72c
|
4
|
+
data.tar.gz: c1ce6e3f2412782cf388c08f200a1dedf72c0f3a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4c5d51f2ce44cbfcb1c4c6b2380e983af6d39940ed6fb32a00ab308dbdd77fbda2c6f88a23f488bd77591c9be94d759fc23931bb51a86d8d3c0a00df5c41937
|
7
|
+
data.tar.gz: 3045e9e10c500c495c608363cd76baff55a5ecf2b9d6e326dd6148657f9b5716713258391221e41f35aeddd774db2c2818947a33a21099ccfe94e42fb72c5966
|
data/README.md
CHANGED
@@ -11,7 +11,11 @@ at this point the following classes (and they child's) are implemented:
|
|
11
11
|
initialize method will be called directly in array and hash classes,
|
12
12
|
but will be exception handled if Argument or NoMethod Error occurs
|
13
13
|
|
14
|
-
###
|
14
|
+
### Example
|
15
|
+
|
16
|
+
#### Simple
|
17
|
+
|
18
|
+
we can simply pass to opts the defaults we want to be used when the parser find an object
|
15
19
|
|
16
20
|
```ruby
|
17
21
|
|
@@ -26,11 +30,6 @@ but will be exception handled if Argument or NoMethod Error occurs
|
|
26
30
|
end
|
27
31
|
|
28
32
|
class HASH < Hash
|
29
|
-
|
30
|
-
def initialize original_obj
|
31
|
-
# some stuff on init for fun
|
32
|
-
end
|
33
|
-
|
34
33
|
end
|
35
34
|
|
36
35
|
odm= ODM.new do |opts|
|
@@ -45,7 +44,55 @@ but will be exception handled if Argument or NoMethod Error occurs
|
|
45
44
|
|
46
45
|
```
|
47
46
|
|
48
|
-
|
47
|
+
#### Complex
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
|
51
|
+
|
52
|
+
class ARRAYDEF < Array
|
53
|
+
end
|
54
|
+
|
55
|
+
class ARRAY1 < Array
|
56
|
+
end
|
57
|
+
|
58
|
+
class ARRAY2 < Array
|
59
|
+
end
|
60
|
+
|
61
|
+
#> for deepness level 0 | for deepness level 1 set instance variable "var" with value: "hello"
|
62
|
+
odm= ODM.new( { array: ARRAY1 }, { array: ARRAY2 }, [:var,"hello"] ) do |opts|
|
63
|
+
|
64
|
+
# defaults for else places (if block not given, no parse will be made)
|
65
|
+
opts.array= ARRAYDEF
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
#> test obj
|
70
|
+
obj= [[[]]]
|
71
|
+
|
72
|
+
var= odm.parse obj
|
73
|
+
|
74
|
+
#> make an ARRAY1[ ARRAY2[ ARRAYDEF[] ] ]
|
75
|
+
#> each object got a var instance variable with a "hello" string
|
76
|
+
|
77
|
+
```
|
78
|
+
|
79
|
+
### Better to be known
|
80
|
+
|
81
|
+
when parsing a Hash or an Array object, the default initialize method is [] and not :new
|
82
|
+
when parsing else objects the default behavior is trying to call the class :new method with the original object
|
83
|
+
|
84
|
+
### YAML and JSON
|
85
|
+
|
86
|
+
yaml and json can be parsed too:
|
87
|
+
|
88
|
+
* parse_json
|
89
|
+
* parse_yaml
|
90
|
+
* or parse_yml
|
91
|
+
* parse_safe_yaml
|
92
|
+
* or parse_safe_yml
|
93
|
+
|
94
|
+
|
95
|
+
#### Example for yaml parse
|
49
96
|
|
50
97
|
```ruby
|
51
98
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/examples/level.rb
CHANGED
@@ -9,23 +9,25 @@ end
|
|
9
9
|
class ARRAY2 < Array
|
10
10
|
end
|
11
11
|
|
12
|
-
#> for deepness level 0 | for deepness level 1
|
13
|
-
odm= ODM.new(
|
12
|
+
#> for deepness level 0 | for deepness level 1 set instance variable "var" with value: "hello"
|
13
|
+
odm= ODM.new( { array: ARRAY1 }, { array: ARRAY2 }, [:var,"hello"] ) do |opts|
|
14
14
|
|
15
15
|
# defaults for else places (if block not given, no parse will be made)
|
16
16
|
opts.array= ARRAYDEF
|
17
17
|
|
18
18
|
end
|
19
|
-
#> else -> use core classes
|
20
19
|
|
21
20
|
|
22
21
|
obj= [[[]]]
|
23
22
|
var= odm.parse obj
|
23
|
+
puts odm.state
|
24
24
|
|
25
25
|
|
26
26
|
puts obj.inspect
|
27
27
|
puts [obj.class,obj[0].class,obj[0][0].class].join(', '),"\n"
|
28
28
|
|
29
29
|
puts var.inspect
|
30
|
-
puts [var.class,var[0].class,var[0][0].class].join(', ')
|
30
|
+
puts [ var.class, var[0].class, var[0][0].class ].join(', ')
|
31
|
+
|
32
|
+
print "instance variable 'var': ",var[0][0].instance_variable_get("@#{:var}"),"\n\n"
|
31
33
|
|
data/lib/odm.rb
CHANGED
@@ -87,15 +87,28 @@ module ODM
|
|
87
87
|
def initialize *args, &block
|
88
88
|
|
89
89
|
@classes_instance= Classes.new(*args,&block)
|
90
|
+
@instance_variables= args.select{|e|(e.class <= ::Array)}.select{|ary|(ary.size == 2)}
|
90
91
|
|
91
92
|
#> set deepness level to 1
|
92
93
|
@level= 0
|
93
94
|
|
94
95
|
end
|
95
96
|
|
97
|
+
def level &block
|
98
|
+
@level += 1
|
99
|
+
var= block.call unless block.nil?
|
100
|
+
@level -= 1
|
101
|
+
return var
|
102
|
+
end
|
96
103
|
|
97
104
|
def parse(obj,*args,&block)
|
98
105
|
|
106
|
+
get_class= Proc.new do |object|
|
107
|
+
klass= @classes_instance.__send__(ODM::Helper.class?( object.class ).to_s.downcase)
|
108
|
+
return object if klass.nil?
|
109
|
+
klass #> pass klass value
|
110
|
+
end
|
111
|
+
|
99
112
|
# duplicate obj
|
100
113
|
begin
|
101
114
|
obj= obj.dup
|
@@ -106,38 +119,48 @@ module ODM
|
|
106
119
|
end
|
107
120
|
end
|
108
121
|
|
109
|
-
|
110
122
|
@classes_instance.class_leveler(@level)
|
111
|
-
|
112
123
|
case ODM::Helper.class?( obj.class ).to_s.downcase.to_sym
|
113
124
|
|
114
125
|
when :array
|
115
|
-
klass= @classes_instance.__send__(ODM::Helper.class?( obj.class ).to_s.downcase)
|
116
|
-
return obj if klass.nil?
|
117
126
|
|
118
|
-
|
119
|
-
var=
|
120
|
-
|
127
|
+
klass= get_class.call(obj)
|
128
|
+
var= nil
|
129
|
+
|
130
|
+
return level do
|
131
|
+
var= klass[ *obj.map!{ |e| self.parse(e) } ]
|
132
|
+
@instance_variables.each do |ary|
|
133
|
+
var.instance_variable_set( "@#{ary[0]}",ary[1] )
|
134
|
+
end
|
121
135
|
|
122
|
-
|
136
|
+
var #> return
|
137
|
+
end
|
123
138
|
|
124
139
|
when :hash
|
125
|
-
klass= @classes_instance.__send__(ODM::Helper.class?( obj.class ).to_s.downcase)
|
126
|
-
return obj if klass.nil?
|
127
140
|
|
128
|
-
|
129
|
-
|
130
|
-
|
141
|
+
klass= get_class.call(obj)
|
142
|
+
return level do
|
143
|
+
var= klass[ *obj.map{ |k,v| { self.parse(k) => self.parse(v) } } ]
|
131
144
|
|
132
|
-
|
145
|
+
@instance_variables.each do |ary|
|
146
|
+
var.instance_variable_set( "@#{ary[0]}",ary[1] )
|
147
|
+
end
|
148
|
+
|
149
|
+
var #> return
|
150
|
+
end
|
133
151
|
|
134
152
|
else
|
135
153
|
|
136
154
|
begin
|
137
155
|
|
138
|
-
klass=
|
139
|
-
|
140
|
-
|
156
|
+
klass= get_class.call(obj)
|
157
|
+
var= klass.new(obj) #> ,*args,&block
|
158
|
+
|
159
|
+
@instance_variables.each do |ary|
|
160
|
+
var.instance_variable_set( "@#{ary[0]}",ary[1] )
|
161
|
+
end
|
162
|
+
|
163
|
+
return var
|
141
164
|
|
142
165
|
rescue ::NoMethodError, ::ArgumentError
|
143
166
|
return obj
|
@@ -147,30 +170,33 @@ module ODM
|
|
147
170
|
|
148
171
|
end
|
149
172
|
|
150
|
-
|
151
173
|
def parse_json(obj,*args)
|
152
174
|
require 'json'
|
153
|
-
self.parse(JSON.parse(obj),*args
|
175
|
+
self.parse(JSON.parse(obj),*args)
|
154
176
|
end
|
155
177
|
|
156
178
|
def parse_yaml(obj,*args)
|
157
179
|
require 'yaml'
|
158
|
-
self.parse(YAML.load(obj),*args
|
180
|
+
self.parse(YAML.load(obj),*args)
|
159
181
|
end
|
160
182
|
|
161
183
|
alias parse_yml parse_yaml
|
162
184
|
|
163
185
|
def parse_safe_yaml(obj,*args)
|
164
186
|
require 'yaml'
|
165
|
-
self.parse(YAML.safe_load(obj),*args
|
187
|
+
self.parse(YAML.safe_load(obj),*args)
|
166
188
|
end
|
167
189
|
|
168
190
|
alias parse_safe_yml parse_safe_yaml
|
169
191
|
|
170
|
-
def
|
192
|
+
def state
|
193
|
+
|
194
|
+
tmp_hash= {}
|
195
|
+
@classes_instance.instance_variables.each { |ivar|
|
196
|
+
tmp_hash.merge!({ ivar.to_s.sub('@','').to_sym => @classes_instance.instance_variable_get(ivar) })
|
197
|
+
}
|
171
198
|
|
172
|
-
|
173
|
-
@classes_instance.conv2hash
|
199
|
+
return tmp_hash
|
174
200
|
|
175
201
|
end
|
176
202
|
|