looksist 0.2.9 → 0.2.10
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/README.md +29 -0
- data/lib/looksist/hashed.rb +23 -2
- data/lib/looksist/version.rb +1 -1
- data/spec/looksist/hashed_spec.rb +40 -11
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 357a6b9dc9b97cc730994ffefd01db24f4349afc
|
4
|
+
data.tar.gz: a13b5765b68bc304bb0ee08725d20ce3cc8411a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84d35f48ca1af7fcba1ef5656f23cdf1cff8a389c46c95bcd709026b74a60307ebd00bf5f1d62f7d52c188f62758c72e25480b44e02a89ee6a460862d6846740
|
7
|
+
data.tar.gz: 68709cd5211aa716e5a22ac8f91cd35e45a3e2147107e4511f606d06725acd9d604b584d2821660e92af104cc4f5f9f19b3d07713184b4fba1153c7dd525c352
|
data/README.md
CHANGED
@@ -83,6 +83,35 @@ lookup [:name, :age], using: :id, as: {name: 'nome'}
|
|
83
83
|
### With Plain Hashes
|
84
84
|
|
85
85
|
|
86
|
+
#### Array Of Hashes
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
it 'should inject single attribute into array of hashes' do
|
90
|
+
class HashService
|
91
|
+
include Looksist
|
92
|
+
|
93
|
+
def metrics
|
94
|
+
[
|
95
|
+
{
|
96
|
+
employee_id: 5
|
97
|
+
},
|
98
|
+
{
|
99
|
+
employer_id: 3
|
100
|
+
}
|
101
|
+
[
|
102
|
+
end
|
103
|
+
|
104
|
+
inject after: :metrics, at: '$',
|
105
|
+
using: :employee_id, populate: :employee_name
|
106
|
+
end
|
107
|
+
# Removed mock expectations, look at the tests for actuals
|
108
|
+
expect(HashService.new.metrics).to eq([{employeed_id: 5, employee_name: 'Emp 5'},{employeed_id: 3, employee_name: 'Emp 3'}])
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
```
|
113
|
+
|
114
|
+
|
86
115
|
#### Columnar Hashes
|
87
116
|
|
88
117
|
* First Level look ups
|
data/lib/looksist/hashed.rb
CHANGED
@@ -45,7 +45,8 @@ module Looksist
|
|
45
45
|
keys = hash_offset[opts[:using]]
|
46
46
|
entity_name = __entity__(opts[:bucket_name] || opts[:using])
|
47
47
|
values = Looksist.redis_service.send("#{entity_name}_for", keys)
|
48
|
-
|
48
|
+
alias_method = find_alias(opts, opts[:populate])
|
49
|
+
hash_offset[alias_method] = values
|
49
50
|
hash_offset
|
50
51
|
end
|
51
52
|
|
@@ -65,9 +66,29 @@ module Looksist
|
|
65
66
|
entity_name = __entity__(opts[:bucket_name] || opts[:using])
|
66
67
|
keys = (arry_of_hashes.collect { |i| i[opts[:using]] }).compact.uniq
|
67
68
|
values = Hash[keys.zip(Looksist.redis_service.send("#{entity_name}_for", keys))]
|
69
|
+
opts[:populate].is_a?(Array) ? composite_attribute_lookup(arry_of_hashes, opts, values) : single_attribute_lookup(arry_of_hashes, opts, values)
|
70
|
+
end
|
71
|
+
|
72
|
+
def single_attribute_lookup(arry_of_hashes, opts, values)
|
68
73
|
arry_of_hashes.each do |elt|
|
69
|
-
|
74
|
+
alias_method = find_alias(opts, opts[:populate])
|
75
|
+
elt[alias_method] = values[elt[opts[:using]]]
|
70
76
|
end
|
71
77
|
end
|
78
|
+
|
79
|
+
def composite_attribute_lookup(arry_of_hashes, opts, values)
|
80
|
+
arry_of_hashes.each do |elt|
|
81
|
+
opts[:populate].each do |_key|
|
82
|
+
parsed_key = JSON.parse(values[elt[opts[:using]]]).deep_symbolize_keys
|
83
|
+
alias_method = find_alias(opts, _key)
|
84
|
+
elt[alias_method] = parsed_key[_key]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def find_alias(opts,what)
|
90
|
+
as_map = opts[:as]
|
91
|
+
(as_map and as_map.has_key?(what)) ? as_map[what].to_sym : what
|
92
|
+
end
|
72
93
|
end
|
73
94
|
end
|
data/lib/looksist/version.rb
CHANGED
@@ -380,27 +380,56 @@ describe Looksist::Hashed do
|
|
380
380
|
[
|
381
381
|
{
|
382
382
|
item_id: 1
|
383
|
-
|
383
|
+
},
|
384
384
|
{
|
385
385
|
item_id: 2
|
386
|
-
|
386
|
+
}
|
387
387
|
]
|
388
388
|
end
|
389
389
|
|
390
|
-
inject after: :metrics, at: '$', using: :item_id, populate: :item_name
|
390
|
+
inject after: :metrics, at: '$', using: :item_id, populate: :item_name, as: {item_name: 'dish_name'}
|
391
391
|
end
|
392
392
|
|
393
393
|
expect(@mock).to receive(:mget).once.with(*%w(items/1 items/2)).and_return(%w(Idly Pongal))
|
394
394
|
|
395
395
|
expect(ArrayOfHashes.new.metrics).to eq(
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
396
|
+
[{
|
397
|
+
item_id: 1,
|
398
|
+
dish_name: 'Idly'
|
399
|
+
},
|
400
|
+
{
|
401
|
+
item_id: 2,
|
402
|
+
dish_name: 'Pongal'
|
403
|
+
}]
|
404
|
+
)
|
405
|
+
|
406
|
+
end
|
407
|
+
|
408
|
+
it 'should work for multiple attributes' do
|
409
|
+
class HashWithMultipleAttributes
|
410
|
+
include Looksist
|
411
|
+
|
412
|
+
def metrics
|
413
|
+
[
|
414
|
+
{
|
415
|
+
hero_id: 1
|
416
|
+
},
|
417
|
+
{
|
418
|
+
hero_id: 2
|
419
|
+
}
|
420
|
+
]
|
421
|
+
end
|
422
|
+
|
423
|
+
inject after: :metrics, at: '$', using: :hero_id, populate: [:name,:mnemonic], as: {name: 'hero_name', mnemonic: 'hero_mnemonic'}
|
424
|
+
end
|
425
|
+
js1 = {name: 'Rajini', mnemonic: 'SuperStart'}.to_json
|
426
|
+
js2 = {name: 'Kamal', mnemonic: 'Ulaganayagan'}.to_json
|
427
|
+
jsons = [js1,js2]
|
428
|
+
expect(@mock).to receive(:mget).once.with(*%w(heros/1 heros/2)).and_return(jsons)
|
429
|
+
|
430
|
+
expect(HashWithMultipleAttributes.new.metrics).to eq(
|
431
|
+
[{:hero_id=>1, :hero_name=>"Rajini", :hero_mnemonic=>"SuperStart"},
|
432
|
+
{:hero_id=>2, :hero_name=>"Kamal", :hero_mnemonic=>"Ulaganayagan"}]
|
404
433
|
)
|
405
434
|
end
|
406
435
|
end
|