muffins 0.0.3 → 0.0.4
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.
- data/lib/muffins.rb +1 -0
- data/lib/muffins/mapping.rb +20 -14
- data/lib/muffins/version.rb +1 -1
- data/spec/{mapping_spec.rb → muffins/mapping_spec.rb} +62 -1
- metadata +13 -13
data/lib/muffins.rb
CHANGED
data/lib/muffins/mapping.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
class Boolean; end;
|
2
|
+
|
1
3
|
module Muffins
|
2
4
|
class Mapping
|
3
|
-
|
4
|
-
PRIMITIVE_TYPES =
|
5
|
+
|
6
|
+
PRIMITIVE_TYPES = %w(String Float Time Date DateTime Integer Boolean)
|
5
7
|
|
6
8
|
attr_reader :name, :options
|
7
9
|
|
@@ -32,42 +34,46 @@ module Muffins
|
|
32
34
|
@path ||= path
|
33
35
|
end
|
34
36
|
|
37
|
+
def constant
|
38
|
+
@constant ||= "#{options[:type]}"
|
39
|
+
end
|
40
|
+
|
35
41
|
def collection?
|
36
42
|
!!options[:collection]
|
37
43
|
end
|
38
44
|
|
39
45
|
def primitive?
|
40
|
-
PRIMITIVE_TYPES.include?
|
46
|
+
PRIMITIVE_TYPES.include?(constant)
|
41
47
|
end
|
42
48
|
|
43
49
|
def typecast(node)
|
44
|
-
value
|
50
|
+
value = node.try(:text)
|
45
51
|
|
46
52
|
return value if value.blank? || constant.blank?
|
47
53
|
|
48
|
-
constant = constant.constantize
|
49
|
-
|
50
54
|
if primitive?
|
51
|
-
|
55
|
+
case constant
|
56
|
+
when 'String'
|
52
57
|
value.to_s
|
53
|
-
|
58
|
+
when 'Float'
|
54
59
|
value.to_f
|
55
|
-
|
60
|
+
when 'Time'
|
56
61
|
Time.parse(value) rescue Time.at(value.to_i)
|
57
|
-
|
62
|
+
when 'Date'
|
58
63
|
Date.parse(value)
|
59
|
-
|
64
|
+
when 'DateTime'
|
60
65
|
DateTime.parse(value)
|
61
|
-
|
66
|
+
when 'Integer'
|
62
67
|
value.to_i
|
68
|
+
when 'Boolean'
|
69
|
+
['true', 't', '1'].include?(value.to_s.downcase)
|
63
70
|
else
|
64
71
|
value
|
65
72
|
end
|
66
73
|
|
67
74
|
else
|
68
|
-
constant.parse(node)
|
75
|
+
constant.constantize.parse(node)
|
69
76
|
end
|
70
|
-
|
71
77
|
end
|
72
78
|
end
|
73
79
|
end
|
data/lib/muffins/version.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module Muffins
|
4
|
+
class Book
|
5
|
+
include Muffins
|
6
|
+
end
|
7
|
+
|
4
8
|
describe Mapping do
|
5
9
|
|
6
10
|
let(:name) { :foo }
|
@@ -199,6 +203,64 @@ module Muffins
|
|
199
203
|
subject.typecast(node).should be_a(Integer)
|
200
204
|
end
|
201
205
|
end
|
206
|
+
|
207
|
+
context "options[:type] = Boolean" do
|
208
|
+
let(:options) { {:type => Boolean} }
|
209
|
+
|
210
|
+
context "value = 't'" do
|
211
|
+
|
212
|
+
let(:value) { 't' }
|
213
|
+
|
214
|
+
it "returns true" do
|
215
|
+
subject.typecast(node).should be_true
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
context "value = 'true'" do
|
220
|
+
|
221
|
+
let(:value) { 'true' }
|
222
|
+
|
223
|
+
it "returns true" do
|
224
|
+
subject.typecast(node).should be_true
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
context "value = '1'" do
|
229
|
+
|
230
|
+
let(:value) { '1' }
|
231
|
+
|
232
|
+
it "returns true" do
|
233
|
+
subject.typecast(node).should be_true
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
context "value = '0'" do
|
238
|
+
|
239
|
+
let(:value) { '0' }
|
240
|
+
|
241
|
+
it "returns false" do
|
242
|
+
subject.typecast(node).should be_false
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
context "value = 'false'" do
|
247
|
+
|
248
|
+
let(:value) { 'false' }
|
249
|
+
|
250
|
+
it "returns false" do
|
251
|
+
subject.typecast(node).should be_false
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
context "value = 'f'" do
|
256
|
+
|
257
|
+
let(:value) { 'f' }
|
258
|
+
|
259
|
+
it "returns false" do
|
260
|
+
subject.typecast(node).should be_false
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
202
264
|
end
|
203
265
|
|
204
266
|
context "#primitive? returns false" do
|
@@ -216,4 +278,3 @@ module Muffins
|
|
216
278
|
end
|
217
279
|
end
|
218
280
|
end
|
219
|
-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: muffins
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ default_executable:
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
17
|
-
requirement: &
|
17
|
+
requirement: &21418860 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 2.3.10
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *21418860
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: nokogiri
|
28
|
-
requirement: &
|
28
|
+
requirement: &21418380 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '1.4'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *21418380
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: bundler
|
39
|
-
requirement: &
|
39
|
+
requirement: &21417740 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '1.0'
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *21417740
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: cucumber
|
50
|
-
requirement: &
|
50
|
+
requirement: &21417300 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ~>
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0.10'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *21417300
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: rspec
|
61
|
-
requirement: &
|
61
|
+
requirement: &21416860 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ~>
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
version: '2.6'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *21416860
|
70
70
|
description: An Object to XML/HTML mapping library using Nokogiri
|
71
71
|
email:
|
72
72
|
- ryan.closner@gmail.com
|
@@ -90,8 +90,8 @@ files:
|
|
90
90
|
- lib/muffins/mapping_decorator.rb
|
91
91
|
- lib/muffins/version.rb
|
92
92
|
- muffins.gemspec
|
93
|
-
- spec/mapping_spec.rb
|
94
93
|
- spec/muffins/mapping_decorator_spec.rb
|
94
|
+
- spec/muffins/mapping_spec.rb
|
95
95
|
- spec/muffins_spec.rb
|
96
96
|
- spec/spec_helper.rb
|
97
97
|
has_rdoc: true
|
@@ -127,7 +127,7 @@ test_files:
|
|
127
127
|
- features/specified_typing.feature
|
128
128
|
- features/step_definitions/application_steps.rb
|
129
129
|
- features/support/env.rb
|
130
|
-
- spec/mapping_spec.rb
|
131
130
|
- spec/muffins/mapping_decorator_spec.rb
|
131
|
+
- spec/muffins/mapping_spec.rb
|
132
132
|
- spec/muffins_spec.rb
|
133
133
|
- spec/spec_helper.rb
|