dynamo_record 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f57de6493c226fdecb4aebeb48f19da412745684
4
- data.tar.gz: f8d324ad1c4f064666f8ccb5dd85b5a96312f77e
3
+ metadata.gz: 34854f8bcc2d2525ef5abc6394a326d7337c6735
4
+ data.tar.gz: f17c93d66790bec04b3fa1503c550a6afd97b20f
5
5
  SHA512:
6
- metadata.gz: 482813d0e3c551b46c46e218d1a49de64696f6d4f6aaf4cc32fb60bbc5776148fd18e6b6e18339052bcdc5f78820546ef7d86d4996c96ab0ad5553b2a204c491
7
- data.tar.gz: 09ad993078b5e5e5f7d21048754d2b881f9c989e906fbac2eefd4370886e3fb6459876ab8341941d775d946d30d480f42ae54114895338102acea933e06e020a
6
+ metadata.gz: 26cb8fe488e40a5d7d5ac8a41b0d100e5eb37c8af4e84ce2e8f338c737149ce6745ac6b3e54f43f8ab927312491c5195854c49e3dc7300916b9ffc5de091bb6c
7
+ data.tar.gz: 2588c0dd4b2fc17275b40cc4d33b4b182536006af8a81fd3dd30f3f67f1924c1c1e339e33768f88fa3bb308010805d7d1ed1c7b3723169b52a2081ccc982af49
@@ -30,9 +30,36 @@ module DynamoRecord
30
30
 
31
31
  attrs.each do |key, value|
32
32
  next if ignore_unknown_field && !respond_to?("#{key}=")
33
- send("#{key}=", value)
33
+ send("#{key}=", undump_field(value, self.class.attributes[key.to_sym]))
34
34
  end
35
35
  end
36
36
 
37
+ def undump_field(value, options)
38
+ return nil if options.nil?
39
+ case options[:type]
40
+ when :integer
41
+ value.to_i
42
+ when :string
43
+ value.to_s
44
+ when :float
45
+ value.to_f
46
+ when :boolean
47
+ if value == "true" || value == true
48
+ true
49
+ elsif value == "false" || value == false
50
+ false
51
+ else
52
+ raise ArgumentError, "Boolean column neither true nor false"
53
+ end
54
+ when :datetime
55
+ if value.is_a?(Date) || value.is_a?(DateTime) || value.is_a?(Time)
56
+ value
57
+ else
58
+ DateTime.parse(value)
59
+ end
60
+ else
61
+ raise ArgumentError, "Unknown type #{options[:type]}"
62
+ end
63
+ end
37
64
  end
38
65
  end
@@ -7,7 +7,7 @@ module DynamoRecord
7
7
 
8
8
  self.attributes = {}
9
9
 
10
- field :id # default primary key
10
+ field :id, :string # default primary key
11
11
  end
12
12
 
13
13
  module ClassMethods
@@ -1,3 +1,3 @@
1
1
  module DynamoRecord
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
@@ -45,12 +45,27 @@ RSpec.describe DynamoRecord::Fields do
45
45
  expect(person.name).to eq('A person')
46
46
  end
47
47
 
48
+ it 'coearce field to its data type' do
49
+ class Record
50
+ include DynamoRecord::Document
51
+
52
+ field :integer_field, :integer
53
+ field :float_field, :float
54
+ field :datetime_field, :datetime
55
+ field :boolean_field, :boolean
56
+ end
57
+
58
+ expect(Record.new(integer_field: '1').integer_field).to be_a(Fixnum)
59
+ expect(Record.new(float_field: '1').float_field).to be_a(Float)
60
+ expect(Record.new(datetime_field: '2014-12-25T04:08:25Z').datetime_field).to eq(DateTime.parse('2014-12-25T04:08:25Z'))
61
+ expect(Record.new(boolean_field: 'true').boolean_field).to be_truthy
62
+ end
63
+
48
64
  describe 'predicate method' do
49
65
  specify { expect(Person.new(activated: false).activated?).to be_falsy }
50
66
  specify { expect(Person.new(activated: true).activated?).to be_truthy }
51
67
  specify { expect(Person.new(activated: 'true').activated?).to be_truthy }
52
68
  specify { expect(Person.new(activated: 'false').activated?).to be_falsy }
53
- specify { expect(Person.new(activated: '').activated?).to be_truthy }
54
69
  end
55
70
 
56
71
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamo_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nguyen Vu Nguyen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-07 00:00:00.000000000 Z
11
+ date: 2015-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport