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.
@@ -3,6 +3,7 @@ require "muffins/mapping_decorator"
3
3
  require "muffins/version"
4
4
 
5
5
  module Muffins
6
+
6
7
  def self.included(base)
7
8
  base.extend(ClassMethods)
8
9
  end
@@ -1,7 +1,9 @@
1
+ class Boolean; end;
2
+
1
3
  module Muffins
2
4
  class Mapping
3
-
4
- PRIMITIVE_TYPES = [String, Float, Time, Date, DateTime, Integer]
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? "#{options[:type]}".constantize
46
+ PRIMITIVE_TYPES.include?(constant)
41
47
  end
42
48
 
43
49
  def typecast(node)
44
- value, constant = node.try(:text), "#{options[:type]}"
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
- if constant == String
55
+ case constant
56
+ when 'String'
52
57
  value.to_s
53
- elsif constant == Float
58
+ when 'Float'
54
59
  value.to_f
55
- elsif constant == Time
60
+ when 'Time'
56
61
  Time.parse(value) rescue Time.at(value.to_i)
57
- elsif constant == Date
62
+ when 'Date'
58
63
  Date.parse(value)
59
- elsif constant == DateTime
64
+ when 'DateTime'
60
65
  DateTime.parse(value)
61
- elsif constant == Integer
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
@@ -1,3 +1,3 @@
1
1
  module Muffins
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -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.3
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: &22082580 !ruby/object:Gem::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: *22082580
25
+ version_requirements: *21418860
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: nokogiri
28
- requirement: &22082100 !ruby/object:Gem::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: *22082100
36
+ version_requirements: *21418380
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: bundler
39
- requirement: &22081460 !ruby/object:Gem::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: *22081460
47
+ version_requirements: *21417740
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: cucumber
50
- requirement: &22081020 !ruby/object:Gem::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: *22081020
58
+ version_requirements: *21417300
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: rspec
61
- requirement: &22080580 !ruby/object:Gem::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: *22080580
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