tarvit-helpers 0.0.17 → 0.0.18

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: f05ecb11ce055643c43b40cc820e3c66f999374f
4
- data.tar.gz: d94035c4af11f06e9f0d16ad037cb8e09582d247
3
+ metadata.gz: 1e736059b1e4ba9be2a14c72da7181ed9ac8ff9a
4
+ data.tar.gz: 15a634622c8d7f8ffcd3912019d0868af0732f81
5
5
  SHA512:
6
- metadata.gz: 36b61567a2c03af8f0c6223d5f41fee45a3d447a23fe0b940bb57fa8ded14c868aa1fbc30a65e9f30e50f6a2296df22ab3dfdae121409fd65b3e68711321945a
7
- data.tar.gz: 45eb5df5f82f596c64d894d2016cf1e094bb64717c37b792b96d45d95fefb5b601c94ea7c7774494fd3604fefdd2eff4fe30c5c8962af7d4f2a858cf0b1e497a
6
+ metadata.gz: 3d0e930b2cd0cd563471183b86c6210243623557fabb09c8a36eebd286b6606562829804b439b3fb15fef62bd5715e5f42bbbaa638182c19f6d0b5b30120fd42
7
+ data.tar.gz: 27c9eceaa2616e5ac1288e353293d6961a3862aeda69210cea0bd87475d2f403873d9a7a6f0ada8352dbde46194cd602897d5639f7d5f158940231ca22f7e629
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.17
1
+ 0.0.18
@@ -12,4 +12,3 @@ module TarvitHelpers
12
12
  end
13
13
  end
14
14
  end
15
-
@@ -1,66 +1,48 @@
1
1
  module TarvitHelpers
2
2
  module HashPresenter
3
3
 
4
- class Custom < Cached
5
- attr_reader :_rules_holder
4
+ class Custom < WithRules
6
5
 
7
- def initialize(hash, levels=[], rules_holder=nil, &rules)
8
- super(hash, levels)
9
- @_rules_holder = rules_holder || _init_rules_holder
10
- _init_rules
11
- rules.call(_rules_holder) if rules
12
- end
13
-
14
- def _current_path(method_name)
15
- _levels + [ method_name ]
6
+ def _custom_hash
7
+ _rules_holder.rules.each_with_object(_hash.clone) do |rule, res|
8
+ _apply_rule(res, rule, rule.path.clone, [])
9
+ end
16
10
  end
17
11
 
18
12
  protected
19
13
 
20
- def _hash_value(method_name)
21
- value = super
22
- rule = _rules_holder.rule_for(_path(method_name))
23
- rule ? rule.value_transformer.call(value, self) : value
24
- end
14
+ def _apply_rule(node, rule, rule_path, current_path)
15
+ current_level = rule_path.shift
25
16
 
26
- def _new_level_presenter(value, method_name)
27
- self.class.new(value, _path(method_name), _rules_holder)
28
- end
17
+ if rule_path.empty?
18
+ _assign_value(node, rule, current_path, current_level) && return
19
+ end
29
20
 
30
- def _init_rules; end
21
+ current_node = node[current_level]
22
+ current_path << current_level
31
23
 
32
- def _init_rules_holder
33
- RulesHolder.new
24
+ if current_node.is_a?(Array)
25
+ current_node.each_with_index do |node_element, index|
26
+ _apply_rule(node_element, rule, rule_path.clone, (current_path + [ index ]))
27
+ end
28
+ else
29
+ _apply_rule(current_node, rule, rule_path.clone, current_path.clone)
30
+ end
34
31
  end
35
32
 
36
- def _accessor_method?(method_name)
37
- super(method_name) || _rules_holder.rules.map{|r| r.path.last }.include?(method_name)
33
+ def _assign_value(node, rule, current_path, current_level)
34
+ presenter = _path_presenter(current_path)
35
+ node[ current_level ] = rule.value_transformer.call(node[current_level], presenter)
38
36
  end
39
37
 
40
- alias_method :_rules, :_rules_holder
41
-
42
- class RulesHolder
43
- attr_reader :rules
44
-
45
- def initialize
46
- @rules = []
47
- end
48
-
49
- def when(path, &_transform_value)
50
- self.rules << Rule.new(path, _transform_value)
51
- end
52
-
53
- def rule_for(path)
54
- rules.find{|r| r.path == path }
38
+ def _path_presenter(path)
39
+ res = self
40
+ path.each do |level|
41
+ res = res.is_a?(Array) ? res[level] : res.send(level)
55
42
  end
43
+ res
56
44
  end
57
45
 
58
- class Rule
59
- attr_reader :path, :value_transformer
60
- def initialize(path, value_transformer)
61
- @path, @value_transformer = path, value_transformer
62
- end
63
- end
64
46
  end
65
47
  end
66
48
  end
@@ -0,0 +1,62 @@
1
+ module TarvitHelpers
2
+ module HashPresenter
3
+
4
+ class WithRules < Cached
5
+ attr_reader :_rules_holder
6
+
7
+ def initialize(hash, levels=[], rules_holder=nil, &rules)
8
+ super(hash, levels)
9
+ @_rules_holder = rules_holder || RulesHolder.new
10
+ _init_rules if _rules_holder.rules.empty?
11
+ rules.call(_rules_holder) if rules
12
+ end
13
+
14
+ def _current_path(method_name)
15
+ _levels + [ method_name ]
16
+ end
17
+
18
+ protected
19
+
20
+ def _hash_value(method_name)
21
+ value = super
22
+ rule = _rules_holder.rule_for(_path(method_name))
23
+ rule ? rule.value_transformer.call(value, self) : value
24
+ end
25
+
26
+ def _new_level_presenter(value, method_name)
27
+ self.class.new(value, _path(method_name), _rules_holder)
28
+ end
29
+
30
+ def _init_rules; end
31
+
32
+ def _accessor_method?(method_name)
33
+ super(method_name) || _rules_holder.rules.map{|r| r.path.last }.include?(method_name)
34
+ end
35
+
36
+ alias_method :_rules, :_rules_holder
37
+
38
+ class RulesHolder
39
+ attr_reader :rules
40
+
41
+ def initialize
42
+ @rules = []
43
+ end
44
+
45
+ def when(path, &_transform_value)
46
+ self.rules << Rule.new(path, _transform_value)
47
+ end
48
+
49
+ def rule_for(path)
50
+ rules.find{|r| r.path == path }
51
+ end
52
+ end
53
+
54
+ class Rule
55
+ attr_reader :path, :value_transformer
56
+ def initialize(path, value_transformer)
57
+ @path, @value_transformer = path, value_transformer
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -3,6 +3,7 @@ module TarvitHelpers
3
3
  require_relative '../modules/hash_presenter/simple_hash_presenter'
4
4
  require_relative '../modules/hash_presenter/cached_hash_presenter'
5
5
  require_relative '../modules/hash_presenter/observable_hash_presenter'
6
+ require_relative '../modules/hash_presenter/with_rules_hash_presenter'
6
7
  require_relative '../modules/hash_presenter/custom_hash_presenter'
7
8
 
8
9
  def self.present(hash, option = :cached )
@@ -148,7 +148,7 @@ describe HashPresenter::Custom do
148
148
 
149
149
  rules.when([ :user, :age ]){|age| age.to_i }
150
150
  rules.when([ :user, :posts, :title ]){|title| title.capitalize }
151
- rules.when([ :user,:address ]){|list| list.join(?/) }
151
+ rules.when([ :user, :address ]){|list| list.join(?/) }
152
152
  end
153
153
 
154
154
  expect(presenter.user.date).to eq(Date.new(2015, 11, 11))
@@ -227,8 +227,21 @@ describe HashPresenter::Custom do
227
227
  expect(account.collections[0].folder).to eq('folders/TestCollection')
228
228
  expect(account.collections[1].name).to eq('BestCollection')
229
229
  expect(account.collections[1].folder).to eq('folders/BestCollection')
230
- end
231
230
 
231
+ expect(@presenter._custom_hash).to eq({
232
+ :accounts => [
233
+ {
234
+ :id=>1,
235
+ :name=>'director',
236
+ :collections=>[
237
+ {:id=>42, :name=>'TestCollection', :folder=>'folders/TestCollection'},
238
+ {:id=>24, :name=>'BestCollection', :folder=>'folders/BestCollection'},
239
+ ],
240
+ :website=>'www.johndoe.com/director'
241
+ }
242
+ ]
243
+ })
244
+ end
232
245
  end
233
246
  end
234
247
  end
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: tarvit-helpers 0.0.17 ruby lib
5
+ # stub: tarvit-helpers 0.0.18 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "tarvit-helpers"
9
- s.version = "0.0.17"
9
+ s.version = "0.0.18"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Vitaly Tarasenko"]
14
- s.date = "2015-10-26"
14
+ s.date = "2015-10-27"
15
15
  s.description = " Simple extensions to standard Ruby classes and useful helpers. "
16
16
  s.email = "vetal.tarasenko@gmail.com"
17
17
  s.extra_rdoc_files = [
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
34
34
  "lib/tarvit-helpers/modules/hash_presenter/custom_hash_presenter.rb",
35
35
  "lib/tarvit-helpers/modules/hash_presenter/observable_hash_presenter.rb",
36
36
  "lib/tarvit-helpers/modules/hash_presenter/simple_hash_presenter.rb",
37
+ "lib/tarvit-helpers/modules/hash_presenter/with_rules_hash_presenter.rb",
37
38
  "lib/tarvit-helpers/modules/non_shared_accessors.rb",
38
39
  "lib/tarvit-helpers/modules/recursive_loader.rb",
39
40
  "lib/tarvit-helpers/modules/simple_crypt.rb",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tarvit-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vitaly Tarasenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-26 00:00:00.000000000 Z
11
+ date: 2015-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -117,6 +117,7 @@ files:
117
117
  - lib/tarvit-helpers/modules/hash_presenter/custom_hash_presenter.rb
118
118
  - lib/tarvit-helpers/modules/hash_presenter/observable_hash_presenter.rb
119
119
  - lib/tarvit-helpers/modules/hash_presenter/simple_hash_presenter.rb
120
+ - lib/tarvit-helpers/modules/hash_presenter/with_rules_hash_presenter.rb
120
121
  - lib/tarvit-helpers/modules/non_shared_accessors.rb
121
122
  - lib/tarvit-helpers/modules/recursive_loader.rb
122
123
  - lib/tarvit-helpers/modules/simple_crypt.rb