commutator 0.1.0 → 0.1.1
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 +4 -4
- data/Changelog.md +12 -1
- data/lib/commutator/collection/cached_lookup.rb +34 -0
- data/lib/commutator/collection.rb +2 -0
- data/lib/commutator/model.rb +6 -8
- data/lib/commutator/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48ccc3f1fbd5002ddd24c28e9ac78c1e9768c123
|
4
|
+
data.tar.gz: 60eac8308078a21d24cc45112c3093ced30116f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1e28a291d82044addad086e6715819711c0a1c01e57ebabdd56b4d88a2daa32d38ffcbc375611cea8dd1c5f95e7db3a5eee52f4ea0c79cfd22cb3b0edbd76b6
|
7
|
+
data.tar.gz: d77480d5eec6b8be9be9e77636a83422bbe81ad6011a94c6d9e9671baf2d04e673e0a56ad626c675e13121e245f7878c9be9951a5831766219faff41dd3e1180
|
data/Changelog.md
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
### Development
|
2
|
-
[Full Changelog](http://github.com/tablexi/commutator/compare/v0.1.
|
2
|
+
[Full Changelog](http://github.com/tablexi/commutator/compare/v0.1.1...master)
|
3
3
|
|
4
|
+
### Development
|
5
|
+
[Full Changelog](http://github.com/tablexi/commutator/compare/v0.1.0...v0.1.1)
|
6
|
+
|
7
|
+
Features:
|
8
|
+
|
9
|
+
* Add `Commutator::Collection::CachedLookup` (Bradley Schaefer)
|
10
|
+
|
11
|
+
Bug fixes:
|
12
|
+
|
13
|
+
* Change lazy-loading of Commutator::Model.client to be eager-loaded
|
14
|
+
to facilitate the ability to override the client. (Bradley Schaefer)
|
4
15
|
|
5
16
|
### 0.1.0 / 2016-01-11
|
6
17
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Commutator
|
2
|
+
class Collection
|
3
|
+
# Implemention of a per-collection cache to avoid repeating expensive
|
4
|
+
# lookups. E.g. if several items in the collection refer to the same User
|
5
|
+
# object, the following pattern would ensure the User is only looked up
|
6
|
+
# once:
|
7
|
+
#
|
8
|
+
# # (inside your model)
|
9
|
+
# CachedUserLookup = Proc.new do
|
10
|
+
# Commutator::Collection::CachedLookup.new(:user, :user_id) do |user_id|
|
11
|
+
# User.find(user_id)
|
12
|
+
# end
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# modify_collection_items_with CachedUserLookup, factory: true
|
16
|
+
#
|
17
|
+
# Note: The cache itself is not accessible since it's hidden by the closure
|
18
|
+
# scope. Additionally, this returns the same instance of the object for
|
19
|
+
# every matching lookup - so be mindful when modifying that object.
|
20
|
+
module CachedLookup
|
21
|
+
def self.new(attr_name, item_key, &block)
|
22
|
+
cache = Hash.new do |h, k|
|
23
|
+
h[k] = block.call(k)
|
24
|
+
end
|
25
|
+
|
26
|
+
Proc.new do |item|
|
27
|
+
item.define_singleton_method(attr_name) do
|
28
|
+
cache[item.send(item_key)]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -5,6 +5,8 @@ module Commutator
|
|
5
5
|
# NOTE: This can't use SimpleDelegator because `Seahorse::Client::Response` does
|
6
6
|
# not implement `#respond_to?` as needed.
|
7
7
|
class Collection
|
8
|
+
autoload :CachedLookup, "commutator/collection/cached_lookup"
|
9
|
+
|
8
10
|
delegate :count,
|
9
11
|
:scanned_count,
|
10
12
|
:last_evaluated_key,
|
data/lib/commutator/model.rb
CHANGED
@@ -48,9 +48,11 @@ module Commutator
|
|
48
48
|
before_get_item :configure_default_get_item
|
49
49
|
|
50
50
|
class_attribute :collection_item_modifiers, instance_accessor: false
|
51
|
+
class_attribute :client
|
52
|
+
self.client = ::Commutator::SimpleClient.new
|
51
53
|
end
|
52
54
|
|
53
|
-
delegate :
|
55
|
+
delegate :options_class, to: 'self.class'
|
54
56
|
|
55
57
|
def initialize(attrs = {})
|
56
58
|
assign_attributes(attrs.symbolize_keys)
|
@@ -130,8 +132,6 @@ module Commutator
|
|
130
132
|
|
131
133
|
# :nodoc:
|
132
134
|
module ClassMethods
|
133
|
-
attr_writer :client
|
134
|
-
|
135
135
|
def inherited(subclass)
|
136
136
|
subclass.attribute_names.merge(attribute_names)
|
137
137
|
before_hooks.each { |k, v| subclass.before_hooks[k] = v.dup }
|
@@ -144,16 +144,14 @@ module Commutator
|
|
144
144
|
subclass.const_set("Scopes", Module.new { include scopes }) if scopes
|
145
145
|
end
|
146
146
|
|
147
|
-
def client
|
148
|
-
@client ||= ::Commutator::SimpleClient.new
|
149
|
-
end
|
150
|
-
|
151
147
|
def create(attrs)
|
152
148
|
new(attrs).tap { |dp| dp.put_item_options.execute }
|
153
149
|
end
|
154
150
|
|
155
151
|
def modify_collection_items_with(*modifiers, factory: false)
|
156
|
-
self.collection_item_modifiers = [
|
152
|
+
self.collection_item_modifiers = [
|
153
|
+
ItemModifiers.new(modifiers, factory: factory)
|
154
|
+
].unshift(*collection_item_modifiers)
|
157
155
|
end
|
158
156
|
|
159
157
|
def get_item_options
|
data/lib/commutator/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: commutator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bradley Schaefer
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-01-
|
12
|
+
date: 2016-01-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -129,6 +129,7 @@ files:
|
|
129
129
|
- commutator.gemspec
|
130
130
|
- lib/commutator.rb
|
131
131
|
- lib/commutator/collection.rb
|
132
|
+
- lib/commutator/collection/cached_lookup.rb
|
132
133
|
- lib/commutator/expressions/attribute_names.rb
|
133
134
|
- lib/commutator/expressions/attribute_values.rb
|
134
135
|
- lib/commutator/expressions/condition_expression.rb
|