dynamo_record 0.0.11 → 0.0.12

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: b01814694fc302d08b6ca66554b33881d65f6bac
4
- data.tar.gz: 2619814e9bd392cb4ddb0338d52174c355f80df2
3
+ metadata.gz: 52df01e379863dd298b03b2d959d5fb413232042
4
+ data.tar.gz: 3551424dafe92d4911befd4724a20419d6af8b95
5
5
  SHA512:
6
- metadata.gz: c94d4a280a054cde24f74e013fac12da4af7cfec3fc71b617cef14fffa16ca71fe1f87c573188e158845e616c675a779e84a4f2a856c4b31832b070c931d629c
7
- data.tar.gz: beafb148cf6219148eca799f7c71234c355d6e1eac9a22a58803da40e33e5e2e6ec66cfb05d80630350f225f62c93eb4f8ea1eea9e7ce49fcb83b4dd55e52067
6
+ metadata.gz: dc3a850ae10daf4bc24b473f6c551ad15d0d3925355a93614f0d8f755f15ecd363ef2cedc9f85c5a6d7ee555b4b78b1de7b3fd07682156e9ced767fc4400c148
7
+ data.tar.gz: 6be092762e7572e4a878649de003facbb40f2f3910c1a0bb1ba7140667fee8b8dab8b9bb687a21ddff04802a71fa89c09f1ae2e6074981ab10fc003d855b0307
@@ -12,9 +12,11 @@ module DynamoRecord
12
12
  end
13
13
 
14
14
  module ClassMethods
15
+
15
16
  def from_database(attrs)
16
17
  self.new(attrs, true).tap { |r| r.new_record = false}
17
18
  end
19
+
18
20
  end
19
21
 
20
22
  attr_accessor :new_record, :attributes
@@ -28,37 +30,13 @@ module DynamoRecord
28
30
  send("#{key}=", value[:options][:default]) if value[:options][:default]
29
31
  end
30
32
 
31
- attrs.each do |key, value|
32
- next if ignore_unknown_field && !respond_to?("#{key}=")
33
- send("#{key}=", undump_field(value, self.class.attributes[key.to_sym]))
34
- end
33
+ load(attrs, ignore_unknown_field)
35
34
  end
36
35
 
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]}"
36
+ def load(attrs, ignore_unknown_field=false)
37
+ attrs.each do |key, value|
38
+ next if ignore_unknown_field && !respond_to?("#{key}=")
39
+ send("#{key}=", self.class.undump_field(value, self.class.attributes[key.to_sym]))
62
40
  end
63
41
  end
64
42
  end
@@ -23,6 +23,52 @@ module DynamoRecord
23
23
  !!value
24
24
  end
25
25
  end
26
+
27
+ def undump_field(value, options)
28
+ return nil if options.nil?
29
+ case options[:type]
30
+ when :integer
31
+ value.to_i
32
+ when :string
33
+ value.to_s
34
+ when :float
35
+ value.to_f
36
+ when :boolean
37
+ if value == "true" || value == true
38
+ true
39
+ elsif value == "false" || value == false
40
+ false
41
+ else
42
+ raise ArgumentError, "Boolean column neither true nor false"
43
+ end
44
+ when :datetime
45
+ if value.is_a?(Date) || value.is_a?(DateTime) || value.is_a?(Time)
46
+ value
47
+ else
48
+ DateTime.parse(value)
49
+ end
50
+ else
51
+ raise ArgumentError, "Unknown type #{options[:type]}"
52
+ end
53
+ end
54
+
55
+ def dump_field(value, options)
56
+ return value if options.nil?
57
+ case options[:type]
58
+ when :datetime
59
+ value.iso8601
60
+ else
61
+ value # aws-sdk supports the rest of data yptes
62
+ end
63
+ end
64
+
65
+ def unload(attrs)
66
+ Hash.new.tap do |hash|
67
+ attrs.each do |key, value|
68
+ hash[key] = dump_field(value, self.attributes[key.to_sym])
69
+ end
70
+ end
71
+ end
26
72
  end
27
73
 
28
74
  def write_attribute(name, value)
@@ -82,12 +82,13 @@ module DynamoRecord
82
82
  options.merge!(condition_expression: 'id <> :s', expression_attribute_values: { ':s' => self.id })
83
83
  end
84
84
 
85
- options.merge!(item: attributes)
85
+ options.merge!(item: self.class.unload(attributes))
86
86
  response = self.class.client.put_item(options)
87
87
  @new_record = false
88
88
  true
89
89
  rescue Aws::DynamoDB::Errors::ConditionalCheckFailedException
90
90
  false
91
91
  end
92
+
92
93
  end
93
94
  end
@@ -1,3 +1,3 @@
1
1
  module DynamoRecord
2
- VERSION = "0.0.11"
2
+ VERSION = "0.0.12"
3
3
  end
@@ -3,4 +3,5 @@ class Person
3
3
 
4
4
  field :name, :string
5
5
  field :activated, :boolean
6
+ field :created_at, :datetime
6
7
  end
@@ -68,4 +68,11 @@ RSpec.describe DynamoRecord::Fields do
68
68
  specify { expect(Person.new(activated: 'false').activated?).to be_falsy }
69
69
  end
70
70
 
71
+ describe '#unload' do
72
+ it 'unloads DateTime into String' do
73
+ now = DateTime.now
74
+ attrs = Person.unload({created_at: now})
75
+ expect(attrs[:created_at]).to eq(now.iso8601)
76
+ end
77
+ end
71
78
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamo_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nguyen Vu Nguyen