dyna_model 0.0.2 → 0.0.3

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: 254b9c0ebdd7a60601af697b4702fa53d9dc3f0e
4
- data.tar.gz: 9129d092e187f9284e1853d63e744ffa56e9d84a
3
+ metadata.gz: 28909cf001a45617ccab2dd172777e7fc30da156
4
+ data.tar.gz: 558bab75c352c91888ad15dc1efb9c11242bca4d
5
5
  SHA512:
6
- metadata.gz: 3dd8cca0fe4249f173fceb88d4a29b706409de9a017049844493a6066ef67f2238548bddd18b9278d5ba390eeeb0910d82c103ad4db3ffe4e7171903433d164f
7
- data.tar.gz: 9c27a58d8bb188a5a29bf49c4ab6163ae9d3f3525d85e4d6a16f6466a586c31aed0e744a36ba7de1ff31b37f4d0aefd0a50cf95ca1bbb07cce6122d5defd1ab7
6
+ metadata.gz: 1a86fff50cdefb2e16b1d0d490b4b595615a3d3c58b56ff8de283b87379f0696719fa6a0de9c37be7062173b7328854529e2ef4dea36377eae6c63951e1dd753
7
+ data.tar.gz: 10b9bd47c3694eeba33bfc7b29ac493bbfbfb4f982d23f492c1245709efe5602f7596d7ad74ebded563e2668daa7800ea4ec66925934a0efd0253f95c62bcabb
data/README.md CHANGED
@@ -86,6 +86,15 @@ class Item
86
86
  end
87
87
  ```
88
88
 
89
- # AWS::Record
89
+ ## CarrierWave compatible adapter
90
+ ```
91
+ require "dyna_model/adapters/carrierwave/dyna_model"
92
+ class Item
93
+ include DynaModel::Document
94
+ mount_uploader :favicon, FaviconUploader
95
+ end
96
+ ```
97
+
98
+ ## AWS::Record
90
99
  * http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/Record.html
91
100
  * https://github.com/aws/aws-sdk-ruby/blob/master/lib/aws/record/abstract_base.rb
@@ -0,0 +1,33 @@
1
+ require 'carrierwave'
2
+ require 'carrierwave/validations/active_model'
3
+
4
+ module CarrierWave
5
+ module DynaModel
6
+ include CarrierWave::Mount
7
+
8
+ def mount_uploader(column, uploader, options={}, &block)
9
+ options[:mount_on] ||= "#{column}_identifier"
10
+ string_attr options[:mount_on].to_sym
11
+
12
+ super
13
+
14
+ alias_method :read_uploader, :[]
15
+ alias_method :write_uploader, :[]=
16
+ public :read_uploader
17
+ public :write_uploader
18
+
19
+ include CarrierWave::Validations::ActiveModel
20
+
21
+ validates_integrity_of column if uploader_option(column.to_sym, :validate_integrity)
22
+ validates_processing_of column if uploader_option(column.to_sym, :validate_processing)
23
+
24
+ after_save "store_#{column}!".to_sym
25
+ before_save "write_#{column}_identifier".to_sym
26
+ after_destroy "remove_#{column}!".to_sym
27
+
28
+ end
29
+
30
+ end
31
+ end
32
+
33
+ DynaModel::Document::ClassMethods.send(:include, CarrierWave::DynaModel)
@@ -45,6 +45,17 @@ module DynaModel
45
45
  hash.merge(attr_name => __send__(attr_name))
46
46
  end
47
47
  end
48
+
49
+ # OVERRIDE
50
+ # https://github.com/aws/aws-sdk-ruby/blob/master/lib/aws/record/abstract_base.rb#L273
51
+ # AWS::Record::AbstractBase to trigger update even without changes (for callbacks etc)
52
+ private
53
+ def update
54
+ #return unless changed?
55
+ touch_timestamps('updated_at')
56
+ increment_optimistic_lock_value
57
+ update_storage
58
+ end
48
59
  end
49
60
 
50
61
  include ActiveModel::Conversion
@@ -27,19 +27,19 @@ module DynaModel
27
27
  def update_storage
28
28
  # Only enumerating dirty (i.e. changed) attributes. Empty
29
29
  # (nil and empty set) values are deleted, the others are replaced.
30
- attr_updates = {}
31
- changed.each do |attr_name|
32
- attribute = self.class.attribute_for(attr_name)
33
- value = serialize_attribute(attribute, @_data[attr_name])
34
- if value.nil? or value == []
35
- attr_updates[attr_name] = nil
36
- else
37
- attr_updates[attr_name] = value
38
- end
39
- end
40
-
41
30
  run_callbacks :save do
42
31
  run_callbacks :update do
32
+ attr_updates = {}
33
+ changed.each do |attr_name|
34
+ attribute = self.class.attribute_for(attr_name)
35
+ value = serialize_attribute(attribute, @_data[attr_name])
36
+ if value.nil? or value == []
37
+ attr_updates[attr_name] = nil
38
+ else
39
+ attr_updates[attr_name] = value
40
+ end
41
+ end
42
+
43
43
  self.class.dynamo_db_table.write(attr_updates, {
44
44
  update_item: dynamo_db_item_key_values,
45
45
  shard_name: self.shard
@@ -168,7 +168,8 @@ module DynaModel
168
168
  def get_item(hash_key, options={})
169
169
  options[:consistent_read] = false unless options[:consistent_read]
170
170
  options[:return_consumed_capacity] ||= :none # "NONE" # || "TOTAL"
171
- options[:select] ||= []
171
+ options[:select] ||= [] # no :projected option, always an array or :all
172
+ raise ArgumentError, "Invalid :select. GetItem :select must be an Array (blank for :all)" unless options[:select].is_a?(Array)
172
173
 
173
174
  get_item_request = {
174
175
  table_name: @model.dynamo_db_table_name(options[:shard_name]),
@@ -176,7 +177,11 @@ module DynaModel
176
177
  consistent_read: options[:consistent_read],
177
178
  return_consumed_capacity: RETURNED_CONSUMED_CAPACITY[options[:return_consumed_capacity]]
178
179
  }
179
- get_item_request.merge!( attributes_to_get: [options[:select]].flatten ) unless options[:select].blank?
180
+ if options[:select].blank?
181
+ options[:select] = :all # for obj_from_attrs
182
+ else
183
+ get_item_request.merge!( attributes_to_get: [options[:select]].flatten )
184
+ end
180
185
  @model.dynamo_db_client.get_item(get_item_request)
181
186
  end
182
187
 
@@ -273,7 +278,7 @@ module DynaModel
273
278
 
274
279
  def batch_get_item(keys, options={})
275
280
  options[:return_consumed_capacity] ||= :none
276
- options[:select] ||= []
281
+ options[:select] ||= [] # no :projected option, always an array or :all
277
282
  options[:consistent_read] = false unless options[:consistent_read]
278
283
 
279
284
  raise ArgumentError, "must include between 1 - 100 keys" if keys.size == 0 || keys.size > 100
@@ -295,7 +300,11 @@ module DynaModel
295
300
 
296
301
  request_items_request = {}
297
302
  request_items_request.merge!( keys: keys_request )
298
- request_items_request.merge!( attributes_to_get: [options[:select]].flatten ) unless options[:select].blank?
303
+ if options[:select].blank?
304
+ options[:select] = :all # for obj_from_attrs
305
+ else
306
+ request_items_request.merge!( attributes_to_get: [options[:select]].flatten )
307
+ end
299
308
  request_items_request.merge!( consistent_read: options[:consistent_read] ) if options[:consistent_read]
300
309
  batch_get_item_request = {
301
310
  request_items: { @model.dynamo_db_table_name(options[:shard_name]) => request_items_request },
@@ -1,3 +1,3 @@
1
1
  module DynaModel
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dyna_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cary Dunn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-06 00:00:00.000000000 Z
11
+ date: 2014-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -136,6 +136,7 @@ files:
136
136
  - Rakefile
137
137
  - dyna_model.gemspec
138
138
  - lib/dyna_model.rb
139
+ - lib/dyna_model/adapters/carrierwave/dyna_model.rb
139
140
  - lib/dyna_model/adapters/elasticsearch/dyna_model_adapter.rb
140
141
  - lib/dyna_model/attributes.rb
141
142
  - lib/dyna_model/aws/record/attributes/serialized_attr.rb