structure_walker 0.1.2 → 2.0.0

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: ec01bff23d577c82e849ade2858c86e7debacf13
4
- data.tar.gz: 93696a192519e2866aea5fc5c52269ebfc81b8a0
3
+ metadata.gz: b475d3a1d902704f86c8a63a378229ffdef56bb2
4
+ data.tar.gz: 0d878b6d9de5636ab82bffc2cdfa6f78160f38a8
5
5
  SHA512:
6
- metadata.gz: 8ba901417942e66855ac44329957c4c622a442c0b2826191ada8b57527581bc1b526b260e3c707778b591703998e87bf248af37bfc4d2f5b957ca686c9f38e3a
7
- data.tar.gz: 83552a33691c8a1f8e6952a4e83e8e3f57ffefef820029ead85566b6bfb46f899a1709ca04b885f1f27fbaa6214c76a269962323f1f603c50f8ee3b9b2b0907d
6
+ metadata.gz: c3fab7aa67d72bdc8a2794e75081d84aa7885fa71b5e03b00faeb1f4d23d7903def07e7edf2898d30b0ed616ee75f7ff0ab78183bf9f2e5773a2991bd20e9e27
7
+ data.tar.gz: 8cd1a126bdd72371bcf6308b3db9fd2ace516e90868c7a3f9686a4a13be89d7888f3d98bc9f62350bbaf644d477643fbecfcf5a286f7c79679252c60946b252b
data/README.md CHANGED
@@ -26,9 +26,9 @@ Examples:
26
26
 
27
27
  handler = ->(data) { data[:example_key] = 'some_value'; data }
28
28
 
29
- data = { some_key: { specific_key: [{ key: 'value' }, { key: 'value' }], another_key: { key: 'value' } } }
29
+ data = { some_key: { specific_key: [{ key: 'value' }, { key: 'value' }], another_key: { key: 'value' } } }
30
30
 
31
- steps = [[:enum, :hash], [:key, :specific_key], [:enum, :array]]
31
+ steps = [:hash, [:key, :specific_key], :array]
32
32
 
33
33
  walker = StructureWalker::Builder.invoke(handler)
34
34
 
@@ -42,22 +42,21 @@ Example with multiple keys:
42
42
 
43
43
  data = { key: { specific_key: [{ key: 'value' }], another_key: [{ key: 'value' }], one_more_key: [{ key: 'value' }] } }
44
44
 
45
- steps = [[:enum, :hash], [:keys, [:specific_key, :one_more_key]], [:enum, :array]]
45
+ steps = [:hash, [:keys, [:specific_key, :one_more_key]], :array]
46
46
 
47
47
  walker = StructureWalker::Builder.invoke(handler)
48
48
 
49
49
  result = walker.call(steps, data)
50
50
 
51
- result # => { key: { specific_key: [{ key: 'value', new_key: 'value' }], another_key: [{ key: 'value' }], one_more_key: [{ key: 'value', new_key: 'value' }] } }
51
+ result # => { key: { specific_key: [{ key: 'value', new_key: 'value' }], another_key: [{ key: 'value' }], one_more_key: [{ key: 'value', new_key: 'value' }]} }
52
52
 
53
53
  Available steps:
54
-
55
- [:enum, :hash] - walk through hash elements value
56
- [:enum, :array] - walk through array elements
54
+
55
+ :hash - walk through hash elements value
56
+ :array - walk through array elements
57
57
  [:key, :some_key] - walk on value of key :some_key
58
58
  [:keys, [:key_one, :key_two]] - walk on values of keys key_one and key_two
59
59
 
60
-
61
60
  ## Contributing
62
61
  Fork it
63
62
  Create your feature branch (git checkout -b my-new-feature)
@@ -1,29 +1,21 @@
1
- require "structure_walker/version"
1
+ require 'structure_walker/version'
2
+ require 'structure_walker/stepper'
3
+ require 'structure_walker/steps'
2
4
 
3
5
  module StructureWalker
4
6
  class Builder
5
7
  class << self
6
8
  def invoke(proc)
7
- walker = -> (steps, data) do
9
+ walker = ->(steps, data) do
8
10
  return if data.nil?
11
+
9
12
  if steps.empty?
10
13
  result = proc.call(data)
11
14
  else
12
15
  steps = steps.clone
13
16
  step = steps.shift
14
- key = step.first
15
- data_type = step.last
16
- result = case key
17
- when :enum
18
- if data_type == :hash
19
- data.each { |_k,v| walker.call(steps, v) }
20
- elsif data_type == :array
21
- data.each { |v| walker.call(steps, v) }
22
- end
23
- when :key, :keys
24
- data_types = [data_type].flatten
25
- data_types.each { |type| walker.call(steps, data[type]) }
26
- end
17
+ type, keys = step.is_a?(Array) ? [step.first, step.last] : [step, nil]
18
+ result = StructureWalker::Stepper.invoke(type).call(data, steps, walker, keys)
27
19
  end
28
20
  result
29
21
  end
@@ -0,0 +1,11 @@
1
+ module StructureWalker
2
+ class Stepper
3
+ class << self
4
+ def invoke(step)
5
+ steps_module = StructureWalker::Steps
6
+ steps = steps_module.constants.grep(/STEP/).map { |e| steps_module.const_get e }.to_h
7
+ steps[step]
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module StructureWalker
2
+ module Steps
3
+ HASH_STEP = [:hash, ->(data, steps, walker, _keys) { data.each { |_k, v| walker.call(steps, v) } }]
4
+
5
+ ARRAY_STEP = [:array, ->(data, steps, walker, _keys) { data.each { |v| walker.call(steps, v) } }]
6
+
7
+ LAMBDA_FOR_KEY = ->(data, steps, walker, keys) do
8
+ keys = [keys].flatten; keys.each { |type| walker.call(steps, data[type]) }
9
+ end
10
+
11
+ KEY_STEP = [:key, LAMBDA_FOR_KEY]
12
+
13
+ KEYS_STEP = [:keys, LAMBDA_FOR_KEY]
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module StructureWalker
2
- VERSION = '0.1.2'
2
+ VERSION = '2.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: structure_walker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kadavar
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-12 00:00:00.000000000 Z
11
+ date: 2017-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -69,6 +69,8 @@ files:
69
69
  - bin/console
70
70
  - bin/setup
71
71
  - lib/structure_walker.rb
72
+ - lib/structure_walker/stepper.rb
73
+ - lib/structure_walker/steps.rb
72
74
  - lib/structure_walker/version.rb
73
75
  - structure_walker.gemspec
74
76
  homepage: https://github.com/Kadavar32/walker.git