field_mapper 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,48 @@
1
+ require_relative "../test_helper"
2
+
3
+ module Standard
4
+ class PlatExample < FieldMapper::Standard::Plat
5
+
6
+ field :name, type: String
7
+ field :desc, type: String
8
+
9
+ field :score, default: 2, type: Integer do
10
+ value 1
11
+ value 2
12
+ value 3
13
+ end
14
+
15
+ field :color, type: String do
16
+ load_values File.expand_path("../assets/colors.csv", __FILE__)
17
+ end
18
+
19
+ field :camelCase, type: String
20
+ field :PascalCase, type: String
21
+
22
+ field :artist, type: String do
23
+ value "Leonardo Da Vinci"
24
+ value "Michelangelo Buonarroti"
25
+ value "Raphael Sanzio"
26
+ end
27
+
28
+ field :day, type: String do
29
+ value "Sunday"
30
+ value "Monday"
31
+ value "Tuesday"
32
+ value "Wednesday"
33
+ value "Thursday"
34
+ value "Friday"
35
+ value "Saturday"
36
+ end
37
+
38
+ field :letters, type: FieldMapper::Types::List[String], default: ["a", "b"] do
39
+ value "a"
40
+ value "b"
41
+ value "c"
42
+ end
43
+
44
+ field :parent, type: FieldMapper::Types::Plat[Standard::PlatExample]
45
+ field :children, type: FieldMapper::Types::List[Standard::PlatExample], default: []
46
+
47
+ end
48
+ end
@@ -0,0 +1,304 @@
1
+ require_relative "../test_helper"
2
+ require_relative "plat_example"
3
+
4
+ module Standard
5
+ class PlatTest < MicroTest::Test
6
+
7
+ before do
8
+ @class = Standard::PlatExample
9
+ @instance = Standard::PlatExample.new
10
+ end
11
+
12
+ test "values assigned" do
13
+ assert @class.fields[:score].values.length == 3
14
+ assert @class.fields[:score].values[0].value == 1
15
+ assert @class.fields[:score].values[1].value == 2
16
+ assert @class.fields[:score].values[2].value == 3
17
+ end
18
+
19
+ test "methods defined" do
20
+ assert @instance.respond_to?(:name)
21
+ assert @instance.respond_to?(:name=)
22
+ assert @instance.respond_to?(:camel_case)
23
+ assert @instance.respond_to?(:camel_case=)
24
+ assert @instance.respond_to?(:pascal_case)
25
+ assert @instance.respond_to?(:pascal_case=)
26
+ end
27
+
28
+ test "defaults asigned" do
29
+ assert @instance.score == 2
30
+ assert @instance.letters = ["a", "c"]
31
+ end
32
+
33
+ test "constructor (with params)" do
34
+ instance = @class.new(name: "bar", score: 1)
35
+ assert instance.name == "bar"
36
+ assert instance.score == 1
37
+ end
38
+
39
+ test "read/write attr using []" do
40
+ @instance[:camelCase] = "as defined"
41
+ assert @instance[:camelCase] == "as defined"
42
+
43
+ @instance[:camel_case] = "ruby variant"
44
+ assert @instance[:camel_case] == "ruby variant"
45
+ end
46
+
47
+ test "read/write attr using []" do
48
+ @instance.pascal_case = true
49
+ assert @instance.pascal_case
50
+ end
51
+
52
+ test "read/write attr using getter/setter" do
53
+ @instance.name = "foobar"
54
+ assert @instance.name == "foobar"
55
+ end
56
+
57
+ test "assing multiple values to list field" do
58
+ instance = Standard::PlatExample.new(letters: ["a", "c", 1, true, Object.new])
59
+ assert ["a", "c"] == instance.letters
60
+ end
61
+
62
+ test "to_hash with flatten" do
63
+ hash = @instance.to_hash(flatten: true)
64
+ assert hash[:letters] == "[\"a\",\"b\"]"
65
+ end
66
+
67
+ test "parent & children" do
68
+ parent = Standard::PlatExample.new
69
+ parent_id = parent.object_id
70
+ @instance.parent = parent
71
+
72
+ assert @instance.parent.children.empty?
73
+ assert @instance.parent != @instance
74
+
75
+ child1 = Standard::PlatExample.new
76
+ child1_id = child1.object_id
77
+ @instance.children << child1
78
+
79
+ child2 = Standard::PlatExample.new
80
+ child2_id = child2.object_id
81
+ @instance.children << child2
82
+
83
+ assert @instance.parent.object_id == parent_id
84
+ assert @instance.children.first.object_id == child1_id
85
+ assert @instance.children.last.object_id == child2_id
86
+ assert @instance.parent.children.empty?
87
+ end
88
+
89
+ test "to_hash" do
90
+ parent = Standard::PlatExample.new(children: [@instance])
91
+ @instance.parent = parent
92
+
93
+ child1 = Standard::PlatExample.new(parent: @instance)
94
+ @instance.children << child1
95
+
96
+ child2 = Standard::PlatExample.new(parent: @instance)
97
+ @instance.children << child2
98
+
99
+ expected = {
100
+ "_node_id" => @instance.object_id,
101
+ "_flat" => false,
102
+ "name" => nil,
103
+ "desc" => nil,
104
+ "score" => 2,
105
+ "color" => nil,
106
+ "camelCase" => nil,
107
+ "PascalCase" => nil,
108
+ "artist" => nil,
109
+ "day" => nil,
110
+ "letters" => ["a", "b"],
111
+ "parent"=>{
112
+ "_node_id" => parent.object_id,
113
+ "_flat" => false,
114
+ "name" => nil,
115
+ "desc" => nil,
116
+ "score" => 2,
117
+ "color" => nil,
118
+ "camelCase" => nil,
119
+ "PascalCase" => nil,
120
+ "artist" => nil,
121
+ "day" => nil,
122
+ "letters" => ["a", "b"],
123
+ "parent" => nil,
124
+ "children" => [@instance.object_id]
125
+ },
126
+ "children"=>[
127
+ {
128
+ "_node_id" => child1.object_id,
129
+ "_flat" => false,
130
+ "name" => nil,
131
+ "desc" => nil,
132
+ "score" => 2,
133
+ "color" => nil,
134
+ "camelCase" => nil,
135
+ "PascalCase" => nil,
136
+ "artist" => nil,
137
+ "day" => nil,
138
+ "letters" => ["a", "b"],
139
+ "parent" => @instance.object_id,
140
+ "children" => []
141
+ },
142
+ {
143
+ "_node_id" => child2.object_id,
144
+ "_flat" => false,
145
+ "name" => nil,
146
+ "desc" => nil,
147
+ "score" => 2,
148
+ "color" => nil,
149
+ "camelCase" => nil,
150
+ "PascalCase" => nil,
151
+ "artist" => nil,
152
+ "day" => nil,
153
+ "letters" => ["a", "b"],
154
+ "parent" => @instance.object_id,
155
+ "children" => []
156
+ }
157
+ ]
158
+ }
159
+
160
+ actual = @instance.to_hash
161
+ assert actual == expected
162
+ end
163
+
164
+ test "to_hash flatten" do
165
+ parent = Standard::PlatExample.new(children: [@instance])
166
+ @instance.parent = parent
167
+
168
+ child1 = Standard::PlatExample.new(parent: @instance)
169
+ @instance.children << child1
170
+
171
+ child2 = Standard::PlatExample.new(parent: @instance)
172
+ @instance.children << child2
173
+
174
+ expected = {
175
+ "_node_id" => @instance.object_id,
176
+ "_flat" => true,
177
+ "name" => nil,
178
+ "desc" => nil,
179
+ "score" => 2,
180
+ "color" => nil,
181
+ "camelCase" => nil,
182
+ "PascalCase" => nil,
183
+ "artist" => nil,
184
+ "day" => nil,
185
+ "letters" => "[\"a\",\"b\"]",
186
+ "parent" => "{\"_node_id\":#{parent.object_id},\"_flat\":true,\"name\":null,\"desc\":null,\"score\":2,\"color\":null,\"camelCase\":null,\"PascalCase\":null,\"artist\":null,\"day\":null,\"letters\":\"[\\\"a\\\",\\\"b\\\"]\",\"parent\":null,\"children\":\"[#{@instance.object_id}]\"}",
187
+ "children" => "[{\"_node_id\":#{child1.object_id},\"_flat\":true,\"name\":null,\"desc\":null,\"score\":2,\"color\":null,\"camelCase\":null,\"PascalCase\":null,\"artist\":null,\"day\":null,\"letters\":\"[\\\"a\\\",\\\"b\\\"]\",\"parent\":#{@instance.object_id},\"children\":[]},{\"_node_id\":#{child2.object_id},\"_flat\":true,\"name\":null,\"desc\":null,\"score\":2,\"color\":null,\"camelCase\":null,\"PascalCase\":null,\"artist\":null,\"day\":null,\"letters\":\"[\\\"a\\\",\\\"b\\\"]\",\"parent\":#{@instance.object_id},\"children\":[]}]"
188
+ }
189
+
190
+ actual = @instance.to_hash(flatten: true)
191
+ assert actual[:_flat]
192
+ assert actual == expected
193
+ end
194
+
195
+ test "initialize from to_hash (simple)" do
196
+ @instance.name = "foobar"
197
+ @instance.score = 3
198
+ @instance.letters = ["c"]
199
+ hash = @instance.to_hash
200
+ instance = Standard::PlatExample.new(hash)
201
+ assert @instance.to_hash(include_meta: false) == instance.to_hash(include_meta: false)
202
+ end
203
+
204
+ test "initialize from to_hash (simple flat)" do
205
+ @instance.name = "foobar"
206
+ @instance.score = 3
207
+ @instance.letters = ["c"]
208
+ hash = @instance.to_hash(flatten: true)
209
+ instance = Standard::PlatExample.new(hash)
210
+ assert @instance.to_hash(include_meta: false) == instance.to_hash(include_meta: false)
211
+ end
212
+
213
+ test "initialize from to_hash (parent)" do
214
+ @instance.parent = Standard::PlatExample.new(children: [@instance])
215
+ hash = @instance.to_hash
216
+ instance = Standard::PlatExample.new(hash)
217
+ assert instance.parent.children.length == 1
218
+ assert instance.parent.children.first == instance
219
+ end
220
+
221
+ test "initialize from to_hash flattened (parent)" do
222
+ @instance.parent = Standard::PlatExample.new(children: [@instance])
223
+ hash = @instance.to_hash(flatten: true)
224
+ instance = Standard::PlatExample.new(hash)
225
+ assert instance.parent.children.length == 1
226
+ assert instance.parent.children.first == instance
227
+ end
228
+
229
+ test "initialize from to_hash (children)" do
230
+ child1 = Standard::PlatExample.new(parent: @instance)
231
+ @instance.children << child1
232
+
233
+ child2 = Standard::PlatExample.new(parent: @instance)
234
+ @instance.children << child2
235
+
236
+ hash = @instance.to_hash
237
+ instance = Standard::PlatExample.new(hash)
238
+
239
+ assert instance.children.length == 2
240
+ instance.children.each do |child|
241
+ assert child.parent == instance
242
+ end
243
+ end
244
+
245
+ test "initialize from to_hash flattened (children)" do
246
+ child1 = Standard::PlatExample.new(parent: @instance)
247
+ @instance.children << child1
248
+
249
+ child2 = Standard::PlatExample.new(parent: @instance)
250
+ @instance.children << child2
251
+
252
+ hash = @instance.to_hash(flatten: true)
253
+ instance = Standard::PlatExample.new(hash)
254
+
255
+ assert instance.children.length == 2
256
+ instance.children.each do |child|
257
+ assert child.parent == instance
258
+ end
259
+ end
260
+
261
+ test "initialize from to_hash (parent & children)" do
262
+ @instance.parent = Standard::PlatExample.new(children: [@instance])
263
+
264
+ child1 = Standard::PlatExample.new(parent: @instance)
265
+ @instance.children << child1
266
+
267
+ child2 = Standard::PlatExample.new(parent: @instance)
268
+ @instance.children << child2
269
+
270
+ hash = @instance.to_hash
271
+ instance = Standard::PlatExample.new(hash)
272
+
273
+ assert instance.parent.children.length == 1
274
+ assert instance.parent.children.first == instance
275
+
276
+ assert instance.children.length == 2
277
+ instance.children.each do |child|
278
+ assert child.parent == instance
279
+ end
280
+ end
281
+
282
+ test "initialize from to_hash flattened (parent & children)" do
283
+ @instance.parent = Standard::PlatExample.new(children: [@instance])
284
+
285
+ child1 = Standard::PlatExample.new(parent: @instance)
286
+ @instance.children << child1
287
+
288
+ child2 = Standard::PlatExample.new(parent: @instance)
289
+ @instance.children << child2
290
+
291
+ hash = @instance.to_hash(flatten: true)
292
+ instance = Standard::PlatExample.new(hash)
293
+
294
+ assert instance.parent.children.length == 1
295
+ assert instance.parent.children.first == instance
296
+
297
+ assert instance.children.length == 2
298
+ instance.children.each do |child|
299
+ assert child.parent == instance
300
+ end
301
+ end
302
+
303
+ end
304
+ end
@@ -0,0 +1,28 @@
1
+ require_relative "../test_helper"
2
+
3
+ module Standard
4
+ class ValueTest < MicroTest::Test
5
+
6
+ test "constructor requires field" do
7
+ begin
8
+ FieldMapper::Standard::Value.new("bar")
9
+ rescue ArgumentError => e
10
+ error = e
11
+ end
12
+ assert error.present?
13
+ end
14
+
15
+ test "constructor sets value" do
16
+ field = FieldMapper::Standard::Field.new(:foo, type: String)
17
+ value = FieldMapper::Standard::Value.new("bar", field: field)
18
+ assert value.value == "bar"
19
+ end
20
+
21
+ test "constructor type casts value" do
22
+ field = FieldMapper::Standard::Field.new(:foo, type: Integer)
23
+ value = FieldMapper::Standard::Value.new("100", field: field)
24
+ assert value.value == 100
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,15 @@
1
+ require "simplecov"
2
+
3
+ if ENV["CI"]
4
+ require "coveralls"
5
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
6
+ end
7
+
8
+ SimpleCov.command_name "micro_test"
9
+ SimpleCov.start do
10
+ add_filter "/test/"
11
+ end
12
+
13
+ Coveralls.wear! if ENV["CI"]
14
+
15
+ require_relative "../lib/field_mapper"
@@ -0,0 +1,77 @@
1
+ require_relative "../test_helper"
2
+
3
+ class BooleanTest < MicroTest::Test
4
+ Boolean = FieldMapper::Types::Boolean
5
+
6
+ test "parse nil" do
7
+ assert Boolean.parse(nil) == false
8
+ end
9
+
10
+ test "parse 0" do
11
+ assert Boolean.parse(0) == false
12
+ end
13
+
14
+ test "parse f" do
15
+ assert Boolean.parse("f") == false
16
+ end
17
+
18
+ test "parse F" do
19
+ assert Boolean.parse("F") == false
20
+ end
21
+
22
+ test "parse false" do
23
+ assert Boolean.parse("false") == false
24
+ end
25
+
26
+ test "parse FALSE" do
27
+ assert Boolean.parse("FALSE") == false
28
+ end
29
+
30
+ test "parse FaLsE" do
31
+ assert Boolean.parse("FaLsE") == false
32
+ end
33
+
34
+ test "parse actual false" do
35
+ assert Boolean.parse(false) == false
36
+ end
37
+
38
+ test "parse n" do
39
+ assert Boolean.parse("n") == false
40
+ end
41
+
42
+ test "parse N" do
43
+ assert Boolean.parse("N") == false
44
+ end
45
+
46
+ test "parse no" do
47
+ assert Boolean.parse("no") == false
48
+ end
49
+
50
+ test "parse NO" do
51
+ assert Boolean.parse("NO") == false
52
+ end
53
+
54
+ test "parse No" do
55
+ assert Boolean.parse("No") == false
56
+ end
57
+
58
+ test "parse t" do
59
+ assert Boolean.parse("t")
60
+ end
61
+
62
+ test "parse true" do
63
+ assert Boolean.parse("true")
64
+ end
65
+
66
+ test "parse actual true" do
67
+ assert Boolean.parse(true)
68
+ end
69
+
70
+ test "parse random string" do
71
+ assert Boolean.parse("jfdkhjwe")
72
+ end
73
+
74
+ test "parse random number" do
75
+ assert Boolean.parse(7482397)
76
+ end
77
+ end