muffins 0.0.3 → 0.0.4

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