muffins 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|