looksist 0.2.5 → 0.2.6

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: d37e2dc990cb95ab09f7a065a226c2265808e1d7
4
- data.tar.gz: 6e6886eca193e7b311b5c94ead38e098257d1821
3
+ metadata.gz: ac523f9688ba86477a776e9350c37978d8bbd46f
4
+ data.tar.gz: 4c0f7bdd47f0e43ac9ab7a87fcc8c28b3bb759b4
5
5
  SHA512:
6
- metadata.gz: 82919b4456e2340f65119e66f7411051c9b5cccad412e2a150e2f03982542e1214ad4ad7f6c412567e7d447dfb722041c211bbaa6d25e8298ee899e195b285eb
7
- data.tar.gz: 06003bbbc83e7499be00083848a16f97fc0d8db1e25c7376c16b0209807a172e712b444181e5c9cb0f8f9d24fcc968057df9fd64051f28448d5cfb728f82c2b8
6
+ metadata.gz: b7112c481f716d6d9180c4174cc43e73789aafff7a20173a30f7c4609fd0895ca0890c90dc9c4f7a0a198e068384c35bc3f6675871b76aedd48dae65db7b0cf2
7
+ data.tar.gz: 3f255b69863bf7bfbac3885af83c32631104861778dea24a27f9b4266de055a1e55a4faa39921f81f090368cff8256d7a6406e4448516df1cd997eb692e0ffe7
data/README.md CHANGED
@@ -31,7 +31,7 @@ Or install it yourself as:
31
31
 
32
32
  ``` ruby
33
33
  Looksist.configure do |looksist|
34
- looksist.lookup_store = Redis.new(:url => (ENV['REDIS_URL'], :driver => :hiredis)
34
+ looksist.lookup_store = Redis.new(:url => ENV['REDIS_URL'], :driver => :hiredis)
35
35
  looksist.driver = Looksist::Serializers::Her
36
36
  end
37
37
  ```
@@ -45,7 +45,7 @@ it 'should generate declarative attributes on the model with simple lookup value
45
45
  class Employee
46
46
  include Looksist
47
47
  attr_accessor :id
48
- lookup :name, using= :id
48
+ lookup :name, using: :id
49
49
 
50
50
  def initialize(id)
51
51
  @id = id
@@ -58,18 +58,22 @@ it 'should generate declarative attributes on the model with simple lookup value
58
58
  expect(e.name).to eq('Employee Name')
59
59
  end
60
60
  ```
61
- lookup takes the following form:
61
+ lookup can take the following forms:
62
62
 
63
63
  ``` ruby
64
64
  # will lookup "employees/#{employee_id}" from the store
65
- lookup :name, using = :employee_id
65
+ lookup :name, using: :employee_id
66
66
 
67
67
  # will lookup "stars/#{employee_id}" from the store
68
- lookup :name, using = :employee_id, bucket_name="stars"
68
+ lookup :name, using: :employee_id, bucket_name: "stars"
69
69
 
70
70
  # will lookup "stars/#{employee_id}" from the store
71
71
  # for an object with two attributes (name, location)
72
- lookup [:name, :location], using = :employee_id
72
+ lookup [:name, :location], using: :employee_id
73
+
74
+ # will lookup "stars/#{employee_id}" from the store
75
+ # for an object with two attributes (name, location) and expose name as nome
76
+ lookup [:name, :age], using: :id, as: {name: 'nome'}
73
77
 
74
78
  ```
75
79
 
@@ -186,3 +190,17 @@ it 'should be capable to deep lookup and inject' do
186
190
  end
187
191
  ```
188
192
 
193
+ ### Controlling the L2 cache
194
+ Looksist has support for an in memory L2 cache which it uses to optimize redis lookups. To disable L2 cache initialize looksists as below.
195
+
196
+ * Note that in no L2 cache mode, all lookups would go to redis and the gem would not optimize redundant lookups.
197
+ * Hash based lookups would still see optimizations which come from performing unique on keys when injecting values.
198
+
199
+ ```ruby
200
+ Looksist.configure do |looksist|
201
+ looksist.lookup_store = Redis.new(:url => ENV['REDIS_URL'], :driver => :hiredis)
202
+ looksist.driver = Looksist::Serializers::Her
203
+ looksist.l2_cache = :no_cache
204
+ end
205
+
206
+ ```
data/lib/looksist/core.rb CHANGED
@@ -42,7 +42,12 @@ module Looksist
42
42
 
43
43
 
44
44
  def as_json(opts)
45
- Looksist.driver.json_opts(self, self.class.lookup_attributes, opts)
45
+ parent_lookups = {}
46
+ class_lookups = self.class.lookup_attributes || {}
47
+ if self.class.superclass.respond_to?(:lookup_attributes)
48
+ parent_lookups = self.class.superclass.lookup_attributes || {}
49
+ end
50
+ Looksist.driver.json_opts(self, class_lookups.merge(parent_lookups), opts)
46
51
  end
47
52
 
48
53
  end
@@ -51,7 +56,7 @@ module Looksist
51
56
  class Her
52
57
  class << self
53
58
  def json_opts(obj, lookup_attributes, _)
54
- lookup_attributes ||= {}
59
+ lookup_attributes ||= {}
55
60
  other_attributes = lookup_attributes.keys.each_with_object({}) do |a, acc|
56
61
  using = lookup_attributes[a]
57
62
  acc[a] = obj.send(a) if obj.respond_to?(using)
@@ -34,12 +34,12 @@ module Looksist
34
34
  def find_all(entity, ids)
35
35
  raise 'Buffer overflow! Increase buffer size' if ids.length > @buffer_size && @buffer_size != 0
36
36
  keys = ids.collect { |id| redis_key(entity, id) }
37
- missed_keys = cache_op(proc_from { keys.uniq }) { (keys - @cache.keys).uniq }
37
+ missed_keys = cache_op(proc { keys.uniq }) { (keys - @cache.keys).uniq }
38
38
  unless missed_keys.empty?
39
39
  response = Hash[*missed_keys.zip(@client.mget *missed_keys).flatten]
40
40
  cache_op { @cache.merge!(response) }
41
41
  end
42
- (cache_op(proc_from { keys.collect {|k| response[k] } }) { @cache.mslice(keys) })
42
+ (cache_op(proc { keys.collect {|k| response[k] } }) { @cache.mslice(keys) })
43
43
  end
44
44
 
45
45
  def cache_op(computed = nil)
@@ -58,15 +58,13 @@ module Looksist
58
58
  end
59
59
 
60
60
  def fetch(key, &block)
61
- (cache_op(proc_from { block.call }) { @cache[key] ||= block.call })
61
+ (cache_op(proc { block.call }) { @cache[key] ||= block.call })
62
62
  end
63
63
 
64
64
  def redis_key(entity, id)
65
65
  "#{entity.pluralize}/#{id}"
66
66
  end
67
67
 
68
- def proc_from
69
- Proc.new
70
- end
68
+
71
69
  end
72
70
  end
@@ -1,3 +1,3 @@
1
1
  module Lookist
2
- VERSION = '0.2.5'
2
+ VERSION = '0.2.6'
3
3
  end
@@ -340,7 +340,6 @@ describe Looksist::Hashed do
340
340
  @mock = {}
341
341
  Looksist.configure do |looksist|
342
342
  looksist.lookup_store = @mock
343
- looksist.cache_buffer_size = 10
344
343
  looksist.l2_cache = :no_cache
345
344
  end
346
345
  end
@@ -60,6 +60,51 @@ describe Looksist do
60
60
  expect(e.to_json).to eq("{\"nome\":\"Rajini\",\"age\":16,\"id\":1}")
61
61
  end
62
62
  end
63
+
64
+ context 'Look up support in case of Inheritance' do
65
+ it 'should also get parent class lookups during to json conversion' do
66
+
67
+ module InheritedLookUp
68
+ class Employee
69
+ include Her::Model
70
+ use_api TEST_API
71
+ include Looksist
72
+ attr_accessor :id
73
+ attr_accessor :department_id
74
+ lookup :name, using: :id, bucket_name: 'employees'
75
+
76
+ def initialize(id, department_id)
77
+ @id = id
78
+ @department_id = department_id
79
+ end
80
+
81
+ def as_json(opts)
82
+ super(opts).merge(id: @id)
83
+ end
84
+ end
85
+
86
+ class Manager < Employee
87
+ lookup :name, using: :department_id, as: {name: 'department_name'}
88
+
89
+ def is_manager?
90
+ true
91
+ end
92
+
93
+ def as_json(opts)
94
+ super(opts).merge(is_manager: is_manager?)
95
+ end
96
+ end
97
+ end
98
+
99
+ expect(@mock).to receive(:get).once.with('employees/1').and_return('SuperStar')
100
+ expect(@mock).to receive(:get).once.with('departments/2').and_return('Kollywood')
101
+
102
+ e = InheritedLookUp::Manager.new(1, 2)
103
+
104
+ expect(e.to_json).to eq("{\"department_name\":\"Kollywood\",\"name\":\"SuperStar\",\"id\":1,\"is_manager\":true}")
105
+ end
106
+ end
107
+
63
108
  end
64
109
  context 'with l2 cache' do
65
110
  before(:each) do
@@ -127,7 +172,7 @@ describe Looksist do
127
172
  end
128
173
  end
129
174
  end
130
- expect(@mock).to receive(:get).never.with('employees_/1')
175
+ expect(@mock).to receive(:get).never.with('employees/1')
131
176
  e = TolerantLookUp::Employee.new
132
177
  expect(e.to_json).to eq('{}')
133
178
  end
@@ -291,5 +336,6 @@ describe Looksist do
291
336
  employee_second_instance.name
292
337
  end
293
338
  end
339
+
294
340
  end
295
341
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: looksist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - RC