dynamo_record 0.0.11 → 0.0.12

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.
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