looksist 0.2.10 → 0.3.0

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: 357a6b9dc9b97cc730994ffefd01db24f4349afc
4
- data.tar.gz: a13b5765b68bc304bb0ee08725d20ce3cc8411a9
3
+ metadata.gz: 316b9f16c6f5919a7514159b641e9692f8df5d45
4
+ data.tar.gz: 48bebfb3872430070a3bf65ec85c5ec1b79325d5
5
5
  SHA512:
6
- metadata.gz: 84d35f48ca1af7fcba1ef5656f23cdf1cff8a389c46c95bcd709026b74a60307ebd00bf5f1d62f7d52c188f62758c72e25480b44e02a89ee6a460862d6846740
7
- data.tar.gz: 68709cd5211aa716e5a22ac8f91cd35e45a3e2147107e4511f606d06725acd9d604b584d2821660e92af104cc4f5f9f19b3d07713184b4fba1153c7dd525c352
6
+ metadata.gz: e0820b531e51c3c5738e784774c3f338c2defbe13da4f02d62727ee4d86d29c9a2c833f41cfdc472807176480d76069d00b29744344b686148869da4e3a24445
7
+ data.tar.gz: 45cd16626706c6e4725b9fba750979e5885adebbcac455a2ec3065497b6b38262deda4d98b762c06ba1a3e2c246087042215bb7ecaaf721ab3981503d7b4074f
@@ -19,9 +19,9 @@ module Looksist
19
19
  hash = send("#{after}_without_inject".to_sym, *args)
20
20
  self.class.instance_variable_get(:@rules)[after].each do |opts|
21
21
  if opts[:at].is_a? String
22
- hash = update_using_json_path(hash, opts)
22
+ hash = self.class.update_using_json_path(hash, opts)
23
23
  else
24
- inject_attributes_at(hash[opts[:at]], opts)
24
+ self.class.inject_attributes_at(hash[opts[:at]], opts)
25
25
  end
26
26
  end
27
27
  hash
@@ -30,65 +30,86 @@ module Looksist
30
30
  end
31
31
  end
32
32
 
33
+ def class_inject(opts)
34
+ raise 'Incorrect usage' unless [:after, :using, :populate].all? { |e| opts.keys.include? e }
33
35
 
34
- end
36
+ after = opts[:after]
37
+ @rules ||= {}
38
+ (@rules[after] ||= []) << opts
35
39
 
36
- included do |base|
37
- base.class_attribute :rules
38
- base.rules = {}
39
- end
40
+ unless @rules[after].length > 1
41
+ define_singleton_method("#{after}_with_inject") do |*args|
42
+ hash = send("#{after}_without_inject".to_sym, *args)
43
+ @rules[after].each do |opts|
44
+ if opts[:at].is_a? String
45
+ hash = update_using_json_path(hash, opts)
46
+ else
47
+ inject_attributes_at(hash[opts[:at]], opts)
48
+ end
49
+ end
50
+ hash
51
+ end
52
+ self.singleton_class.send(:alias_method_chain, after, :inject)
53
+ end
54
+ end
40
55
 
41
- private
56
+ def inject_attributes_at(hash_offset, opts)
57
+ return hash_offset if hash_offset.nil? or hash_offset.empty?
58
+ keys = hash_offset[opts[:using]]
59
+ entity_name = __entity__(opts[:bucket_name] || opts[:using])
60
+ values = Looksist.redis_service.send("#{entity_name}_for", keys)
61
+ alias_method = find_alias(opts, opts[:populate])
62
+ hash_offset[alias_method] = values
63
+ hash_offset
64
+ end
42
65
 
43
- def inject_attributes_at(hash_offset, opts)
44
- return hash_offset if hash_offset.nil? or hash_offset.empty?
45
- keys = hash_offset[opts[:using]]
46
- entity_name = __entity__(opts[:bucket_name] || opts[:using])
47
- values = Looksist.redis_service.send("#{entity_name}_for", keys)
48
- alias_method = find_alias(opts, opts[:populate])
49
- hash_offset[alias_method] = values
50
- hash_offset
51
- end
66
+ def update_using_json_path(hash, opts)
67
+ if hash.is_a?(Hash)
52
68
 
53
- def update_using_json_path(hash, opts)
54
- if hash.is_a?(Hash)
55
- JsonPath.for(hash.with_indifferent_access).gsub!(opts[:at]) do |i|
56
- i.is_a?(Array) ? inject_attributes_for(i, opts) : inject_attributes_at(i, opts) unless (i.nil? or i.empty?)
57
- i
58
- end.to_hash.deep_symbolize_keys
59
- else
60
- inject_attributes_for(hash, opts)
69
+ JsonPath.for(hash.with_indifferent_access).gsub!(opts[:at]) do |i|
70
+ i.is_a?(Array) ? inject_attributes_for(i, opts) : inject_attributes_at(i, opts) unless (i.nil? or i.empty?)
71
+ i
72
+ end.to_hash.deep_symbolize_keys
73
+ else
74
+ inject_attributes_for(hash, opts)
75
+ end
61
76
  end
62
- end
63
77
 
78
+ def inject_attributes_for(array_of_hashes, opts)
79
+ entity_name = __entity__(opts[:bucket_name] || opts[:using])
80
+ keys = (array_of_hashes.collect { |i| i[opts[:using]] }).compact.uniq
81
+ values = Hash[keys.zip(Looksist.redis_service.send("#{entity_name}_for", keys))]
82
+ opts[:populate].is_a?(Array) ? composite_attribute_lookup(array_of_hashes, opts, values) : single_attribute_lookup(array_of_hashes, opts, values)
83
+ end
64
84
 
65
- def inject_attributes_for(arry_of_hashes, opts)
66
- entity_name = __entity__(opts[:bucket_name] || opts[:using])
67
- keys = (arry_of_hashes.collect { |i| i[opts[:using]] }).compact.uniq
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)
73
- arry_of_hashes.each do |elt|
74
- alias_method = find_alias(opts, opts[:populate])
75
- elt[alias_method] = values[elt[opts[:using]]]
85
+ def single_attribute_lookup(array_of_hashes, opts, values)
86
+ array_of_hashes.each do |elt|
87
+ alias_method = find_alias(opts[:as], opts[:populate])
88
+ elt[alias_method] = values[elt[opts[:using]]]
89
+ end
76
90
  end
77
- end
78
91
 
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]
92
+ def composite_attribute_lookup(array_of_hashes, opts, values)
93
+ array_of_hashes.each do |elt|
94
+ opts[:populate].each do |_key|
95
+ parsed_key = JSON.parse(values[elt[opts[:using]]]).deep_symbolize_keys
96
+ alias_method = find_alias(opts[:as], _key)
97
+ elt[alias_method] = parsed_key[_key]
98
+ end
85
99
  end
86
100
  end
101
+
102
+ def __entity__(entity)
103
+ entity.to_s.gsub('_id', '')
104
+ end
105
+
87
106
  end
88
107
 
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
108
+ included do |base|
109
+ base.class_attribute :rules
110
+ base.rules = {}
92
111
  end
112
+
113
+
93
114
  end
94
115
  end
@@ -1,3 +1,3 @@
1
1
  module Lookist
2
- VERSION = '0.2.10'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -403,9 +403,9 @@ describe Looksist::Hashed do
403
403
  }]
404
404
  )
405
405
 
406
- end
406
+ end
407
407
 
408
- it 'should work for multiple attributes' do
408
+ it 'should work for multiple attributes' do
409
409
  class HashWithMultipleAttributes
410
410
  include Looksist
411
411
 
@@ -413,24 +413,44 @@ describe Looksist::Hashed do
413
413
  [
414
414
  {
415
415
  hero_id: 1
416
- },
416
+ },
417
417
  {
418
418
  hero_id: 2
419
- }
419
+ }
420
420
  ]
421
421
  end
422
422
 
423
- inject after: :metrics, at: '$', using: :hero_id, populate: [:name,:mnemonic], as: {name: 'hero_name', mnemonic: 'hero_mnemonic'}
423
+ inject after: :metrics, at: '$', using: :hero_id, populate: [:name, :mnemonic], as: {name: 'hero_name', mnemonic: 'hero_mnemonic'}
424
424
  end
425
425
  js1 = {name: 'Rajini', mnemonic: 'SuperStart'}.to_json
426
426
  js2 = {name: 'Kamal', mnemonic: 'Ulaganayagan'}.to_json
427
- jsons = [js1,js2]
427
+ jsons = [js1, js2]
428
428
  expect(@mock).to receive(:mget).once.with(*%w(heros/1 heros/2)).and_return(jsons)
429
429
 
430
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"}]
433
- )
431
+ [{:hero_id => 1, :hero_name => "Rajini", :hero_mnemonic => "SuperStart"},
432
+ {:hero_id => 2, :hero_name => "Kamal", :hero_mnemonic => "Ulaganayagan"}]
433
+ )
434
+ end
435
+
436
+ it 'should work for class methods' do
437
+ class SelfHelp
438
+ include Looksist
439
+
440
+ def self.help_me
441
+ [
442
+ {
443
+ a: 1
444
+ }
445
+ ]
446
+ end
447
+
448
+ class_inject after: :help_me, at: '$', using: :a, bucket_name: 'ids', populate: :name
449
+ end
450
+
451
+ expect(@mock).to receive(:mget).once.with('ids/1').and_return(['RC'])
452
+ expect(SelfHelp.help_me).to eq([{:a => 1, :name => "RC"}])
434
453
  end
454
+
435
455
  end
436
456
  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.10
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - RC
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-28 00:00:00.000000000 Z
12
+ date: 2014-10-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler