odm 0.2.0 → 0.3.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/VERSION +1 -1
- data/examples/level.rb +31 -0
- data/examples/{test.rb → parse.rb} +2 -1
- data/lib/odm.rb +81 -23
- data/odm.gemspec +2 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9518ac3935b8d592921d9860e3910b06c1c4c2e7
|
4
|
+
data.tar.gz: dc28868ab840a32090382e233b70ca3c46a312af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd37c2a91f436337dedb2576ba0014b1b0aa60554d31608b887f9450b54ec118fba1f864cd87df409313d93d758b38907dee10761260cf5438beff9403b1a2df
|
7
|
+
data.tar.gz: 4768bc4d5dbe749a7fe49926860855cb553475926c69324432e5393aacae613004157a036c066fa96d68c1718ea8e4ade655240faf4382b2ee1f0efd2f217b08
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/examples/level.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative "../lib/odm"
|
2
|
+
|
3
|
+
class ARRAYDEF < Array
|
4
|
+
end
|
5
|
+
|
6
|
+
class ARRAY1 < Array
|
7
|
+
end
|
8
|
+
|
9
|
+
class ARRAY2 < Array
|
10
|
+
end
|
11
|
+
|
12
|
+
#> for deepness level 0 | for deepness level 1
|
13
|
+
odm= ODM.new( { array: ARRAY1 }, { array: ARRAY2 } ) do |opts|
|
14
|
+
|
15
|
+
# defaults for else places (if block not given, no parse will be made)
|
16
|
+
opts.array= ARRAYDEF
|
17
|
+
|
18
|
+
end
|
19
|
+
#> else -> use core classes
|
20
|
+
|
21
|
+
|
22
|
+
obj= [[[]]]
|
23
|
+
var= odm.parse obj
|
24
|
+
|
25
|
+
|
26
|
+
puts obj.inspect
|
27
|
+
puts [obj.class,obj[0].class,obj[0][0].class].join(', '),"\n"
|
28
|
+
|
29
|
+
puts var.inspect
|
30
|
+
puts [var.class,var[0].class,var[0][0].class].join(', ')
|
31
|
+
|
@@ -16,7 +16,8 @@ odm= ODM.new do |opts|
|
|
16
16
|
end
|
17
17
|
|
18
18
|
var= odm.parse [ {hello: {"world" => "hey!"} }, 123 ]
|
19
|
-
puts [var.class,var[0].class,var[0][:hello].keys[0].class].join(', ')
|
19
|
+
puts [var[0][:hello]["world"].class,var.class,var[0].class,var[0][:hello].keys[0].class].join(', ')
|
20
|
+
|
20
21
|
|
21
22
|
require 'yaml'
|
22
23
|
yaml_data= [ {hello: {"world" => "hey!"} }, 123 ].to_yaml
|
data/lib/odm.rb
CHANGED
@@ -38,7 +38,7 @@ module ODM
|
|
38
38
|
define_method(core_class.to_s.downcase+"=") do |klass|
|
39
39
|
raise(ArgumentError,"Invalid object for class: #{klass}") unless klass.class == ::Class
|
40
40
|
raise(ArgumentError,"Invalid parse class: #{klass}, must be or subclass of the #{core_class} class") unless klass <= core_class
|
41
|
-
self.instance_variable_set( "@#{core_class.to_s.downcase}", klass )
|
41
|
+
self.instance_variable_set( "@#{core_class.to_s.downcase}", klass ) unless self.instance_variable_get("@#{core_class.to_s.downcase}") == klass
|
42
42
|
end
|
43
43
|
|
44
44
|
define_method(core_class.to_s.downcase) do
|
@@ -47,43 +47,97 @@ module ODM
|
|
47
47
|
|
48
48
|
end
|
49
49
|
|
50
|
+
def __default__
|
51
|
+
ODM::CoreClasses.each{ |klass| self.instance_variable_set( "@#{klass.to_s.downcase}", nil ) }
|
52
|
+
__block__
|
53
|
+
end
|
54
|
+
|
55
|
+
def __block__
|
56
|
+
@block.call(self) unless @block.nil?
|
57
|
+
end
|
58
|
+
|
50
59
|
def method_missing *args
|
51
60
|
return nil
|
52
61
|
end
|
53
62
|
|
54
|
-
def
|
55
|
-
|
63
|
+
def class_leveler(level)
|
64
|
+
|
65
|
+
self.__default__
|
66
|
+
unless @class_levels.empty?
|
67
|
+
unless @class_levels[level].nil?
|
68
|
+
@class_levels[level].each{|from_class,to_class| self.__send__( "#{from_class}=",to_class) }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
def initialize *args, &block
|
75
|
+
|
76
|
+
@class_levels= args.select{|e|(e.class <= Hash)}.select{|hsh|(hsh.keys - ODM::CoreClasses.map{|e|e.to_s.downcase.to_sym}).empty?}
|
77
|
+
@block= block
|
78
|
+
|
79
|
+
__block__
|
80
|
+
|
56
81
|
end
|
57
82
|
|
58
83
|
end
|
59
84
|
|
60
85
|
class Parser
|
61
86
|
|
62
|
-
def initialize &block
|
63
|
-
|
87
|
+
def initialize *args, &block
|
88
|
+
|
89
|
+
@classes_instance= Classes.new(*args,&block)
|
90
|
+
|
91
|
+
#> set deepness level to 1
|
92
|
+
@level= 0
|
93
|
+
|
64
94
|
end
|
65
95
|
|
66
|
-
|
96
|
+
|
97
|
+
def parse(obj,*args,&block)
|
98
|
+
|
99
|
+
# duplicate obj
|
100
|
+
begin
|
101
|
+
obj= obj.dup
|
102
|
+
rescue Exception
|
103
|
+
begin
|
104
|
+
obj= obj.clone
|
105
|
+
rescue TypeError
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
@classes_instance.class_leveler(@level)
|
67
111
|
|
68
112
|
case ODM::Helper.class?( obj.class ).to_s.downcase.to_sym
|
69
113
|
|
70
114
|
when :array
|
71
|
-
|
72
|
-
|
115
|
+
klass= @classes_instance.__send__(ODM::Helper.class?( obj.class ).to_s.downcase)
|
116
|
+
return obj if klass.nil?
|
117
|
+
|
118
|
+
@level += 1
|
119
|
+
var= klass[ *obj.map!{ |e| self.parse(e) } ]
|
120
|
+
@level -= 1
|
121
|
+
|
73
122
|
return var
|
74
123
|
|
75
124
|
when :hash
|
76
|
-
|
77
|
-
|
125
|
+
klass= @classes_instance.__send__(ODM::Helper.class?( obj.class ).to_s.downcase)
|
126
|
+
return obj if klass.nil?
|
127
|
+
|
128
|
+
@level += 1
|
129
|
+
var= klass[ *obj.map{ |k,v| { self.parse(k) => self.parse(v) } } ]
|
130
|
+
@level -= 1
|
131
|
+
|
78
132
|
return var
|
79
133
|
|
80
134
|
else
|
81
135
|
|
82
136
|
begin
|
83
137
|
|
84
|
-
klass= @
|
138
|
+
klass= @classes_instance.__send__(ODM::Helper.class?( obj.class ).to_s.downcase)
|
85
139
|
return obj if klass.nil?
|
86
|
-
return klass.new(obj)
|
140
|
+
return klass.new(obj) #> ,*args,&block
|
87
141
|
|
88
142
|
rescue ::NoMethodError, ::ArgumentError
|
89
143
|
return obj
|
@@ -93,36 +147,40 @@ module ODM
|
|
93
147
|
|
94
148
|
end
|
95
149
|
|
96
|
-
def parse(obj)
|
97
|
-
self.parse!(obj.dup)
|
98
|
-
end
|
99
150
|
|
100
|
-
def parse_json(obj)
|
151
|
+
def parse_json(obj,*args)
|
101
152
|
require 'json'
|
102
|
-
self.parse(JSON.parse(obj))
|
153
|
+
self.parse(JSON.parse(obj),*args,&block)
|
103
154
|
end
|
104
155
|
|
105
|
-
def parse_yaml(obj)
|
156
|
+
def parse_yaml(obj,*args)
|
106
157
|
require 'yaml'
|
107
|
-
self.parse(YAML.load(obj))
|
158
|
+
self.parse(YAML.load(obj),*args,&block)
|
108
159
|
end
|
109
160
|
|
110
161
|
alias parse_yml parse_yaml
|
111
162
|
|
112
|
-
def parse_safe_yaml(obj)
|
163
|
+
def parse_safe_yaml(obj,*args)
|
113
164
|
require 'yaml'
|
114
|
-
self.parse(YAML.safe_load(obj))
|
165
|
+
self.parse(YAML.safe_load(obj),*args,&block)
|
115
166
|
end
|
116
167
|
|
117
168
|
alias parse_safe_yml parse_safe_yaml
|
118
169
|
|
170
|
+
def test obj
|
171
|
+
|
172
|
+
require 'mpatch'
|
173
|
+
@classes_instance.conv2hash
|
174
|
+
|
175
|
+
end
|
176
|
+
|
119
177
|
end
|
120
178
|
|
121
179
|
# SyntaxSugar
|
122
180
|
class << self
|
123
181
|
|
124
|
-
def new(
|
125
|
-
Parser.new(
|
182
|
+
def new(*args,&block)
|
183
|
+
Parser.new(*args,&block)
|
126
184
|
end
|
127
185
|
|
128
186
|
alias gen new
|
data/odm.gemspec
CHANGED
@@ -9,6 +9,8 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.description = %q{ Simple Object Data Mapper. Parse Array of Hash into random Class of classes to make it more object oriented }
|
10
10
|
spec.summary = %q{ Simple Object Data Mapper }
|
11
11
|
|
12
|
+
spec.homepage = "https://github.com/adamluzsi/odm"
|
13
|
+
|
12
14
|
spec.files = `git ls-files`.split($/)
|
13
15
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
14
16
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: odm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Luzsi
|
@@ -52,10 +52,11 @@ files:
|
|
52
52
|
- README.md
|
53
53
|
- Rakefile
|
54
54
|
- VERSION
|
55
|
-
- examples/
|
55
|
+
- examples/level.rb
|
56
|
+
- examples/parse.rb
|
56
57
|
- lib/odm.rb
|
57
58
|
- odm.gemspec
|
58
|
-
homepage:
|
59
|
+
homepage: https://github.com/adamluzsi/odm
|
59
60
|
licenses: []
|
60
61
|
metadata: {}
|
61
62
|
post_install_message:
|