transmogrifier 0.1.0 → 0.1.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c1fba6f6737e7d22786c88bb4d01af9b30da81cc
4
+ data.tar.gz: baf7b233faf47b6d5301304ac9aa06c8530885fd
5
+ SHA512:
6
+ metadata.gz: ded29069cd163adae7738c2cafe02adce1e59073998855947bebdbd61cdba0c42c713c80175fade04f4a5f7beafdbbcfb01274a01c53cb2b1fb2a479b9fac97f
7
+ data.tar.gz: 4debd6846baa113bcb9906c74a4dc3db202c586b769b092395a5d22dbf1445ec62fa9a429b0298ca8aaba1c19002946dbb3746ec6ad73a86f529d9a13c429e41
data/README.md CHANGED
@@ -19,7 +19,7 @@ output_hash = engine.run(input_hash)
19
19
  # output_hash => {"key" => "value", "new_key" => "new_value"}
20
20
  ```
21
21
 
22
- ### Updating a node
22
+ #### Updating a node
23
23
  ```ruby
24
24
  engine = Transmogrifier::Engine.new
25
25
  update = Transmogrifier::Rules::Update.new("nested.nested_key", "updated-value")
@@ -14,7 +14,7 @@ module Transmogrifier
14
14
  if first_key.nil?
15
15
  [self]
16
16
  elsif child = @hash[first_key]
17
- Node.for(child).find_all(remaining_keys)
17
+ Node.for(child, self).find_all(remaining_keys)
18
18
  else
19
19
  []
20
20
  end
@@ -1,13 +1,13 @@
1
1
  module Transmogrifier
2
2
  class Node
3
- def self.for(obj)
3
+ def self.for(obj, parent_node=nil)
4
4
  case obj
5
5
  when Hash
6
6
  HashNode.new(obj)
7
7
  when Array
8
8
  ArrayNode.new(obj)
9
9
  else
10
- ValueNode.new(obj)
10
+ ValueNode.new(obj, parent_node)
11
11
  end
12
12
  end
13
13
 
@@ -2,8 +2,11 @@ require_relative "node"
2
2
 
3
3
  module Transmogrifier
4
4
  class ValueNode < Node
5
- def initialize(value)
5
+ attr_reader :parent_node
6
+
7
+ def initialize(value, parent_node=nil)
6
8
  @value = value
9
+ @parent_node = parent_node
7
10
  end
8
11
 
9
12
  def find_all(keys)
@@ -2,12 +2,16 @@ module Transmogrifier
2
2
  module Rules
3
3
  class Code
4
4
  def initialize(parent_selector, klass=nil)
5
+ @parent_selector = parent_selector
5
6
  @klass = klass
6
7
  end
7
8
 
8
9
  def apply!(input_hash)
9
- @klass.new.apply!(input_hash)
10
+ @klass.new.apply!(selector: parent_selector, original_hash: input_hash)
10
11
  end
12
+
13
+ private
14
+ attr_reader :parent_selector
11
15
  end
12
16
  end
13
17
  end
@@ -1,3 +1,3 @@
1
1
  module Transmogrifier
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -69,7 +69,7 @@ describe Transmogrifier::Rules::Update do
69
69
 
70
70
  context "when the selector does not find a node" do
71
71
  context "when the selector finds a hash as the parent" do
72
- subject(:update) { described_class.new("non-existant-key", "new-value") }
72
+ subject(:update) { described_class.new("non-existent-key", "new-value") }
73
73
 
74
74
  it "raises a SelectorNotFoundError" do
75
75
  expect {
@@ -79,7 +79,7 @@ describe Transmogrifier::Rules::Update do
79
79
  end
80
80
 
81
81
  context "when the selector finds an array as the parent" do
82
- subject(:update) { described_class.new("array.[name=non-existant-key]", "new-value") }
82
+ subject(:update) { described_class.new("array.[name=non-existent-key]", "new-value") }
83
83
 
84
84
  it "raises a SelectorNotFoundError" do
85
85
  expect {
@@ -1,13 +1,5 @@
1
1
  require "transmogrifier"
2
2
 
3
- class SomeMigrator
4
- def apply!(hash)
5
- hash[:fancy_key] = 4
6
- hash
7
- end
8
- end
9
-
10
-
11
3
  describe Transmogrifier::Engine do
12
4
  subject(:engine) { described_class.from_rules_array(rules) }
13
5
 
@@ -15,23 +7,31 @@ describe Transmogrifier::Engine do
15
7
  describe "#run" do
16
8
 
17
9
  describe "with migrators" do
18
-
19
10
  it "raises for unknown migrator" do
20
11
  expect {
21
12
  engine = Transmogrifier::Engine.from_rules_array([{
22
13
  "type" => "code",
23
14
  "migrator" => "SomeOtherMigrator"
24
- }], [SomeMigrator])
15
+ }], [])
25
16
  }.to raise_error
26
17
  end
27
18
 
28
19
  it "runs custom migrator" do
20
+ TEST_MIGRATOR = Class.new do
21
+ def apply!(selector: nil, original_hash: nil)
22
+ original_hash[selector] = "new value!"
23
+ original_hash
24
+ end
25
+ end
26
+
29
27
  engine = Transmogrifier::Engine.from_rules_array([{
30
28
  "type" => "code",
31
- "migrator" => "SomeMigrator"
32
- }], [SomeMigrator])
33
- result = engine.run({:fancy_key => 1, :shabby_key => 8})
34
- result.should == {:fancy_key => 4, :shabby_key => 8}
29
+ "migrator" => "TEST_MIGRATOR",
30
+ "selector" => "key"
31
+ }], [TEST_MIGRATOR])
32
+
33
+ result = engine.run({"key" => "old value"})
34
+ result.should == {"key" => "new value!"}
35
35
  end
36
36
  end
37
37
 
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transmogrifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- prerelease:
4
+ version: 0.1.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - John Foley
@@ -14,7 +13,6 @@ dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,33 +27,29 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  description: A tool for manipulating schemas
@@ -66,6 +59,9 @@ executables: []
66
59
  extensions: []
67
60
  extra_rdoc_files: []
68
61
  files:
62
+ - Gemfile
63
+ - LICENSE.txt
64
+ - README.md
69
65
  - lib/transmogrifier.rb
70
66
  - lib/transmogrifier/engine.rb
71
67
  - lib/transmogrifier/nodes.rb
@@ -83,9 +79,6 @@ files:
83
79
  - lib/transmogrifier/rules/update.rb
84
80
  - lib/transmogrifier/selector.rb
85
81
  - lib/transmogrifier/version.rb
86
- - README.md
87
- - LICENSE.txt
88
- - Gemfile
89
82
  - spec/engine_spec.rb
90
83
  - spec/nodes/array_node_spec.rb
91
84
  - spec/nodes/hash_node_spec.rb
@@ -102,27 +95,26 @@ files:
102
95
  homepage: http://github.com/jfoley/transmogrifier
103
96
  licenses:
104
97
  - MIT
98
+ metadata: {}
105
99
  post_install_message:
106
100
  rdoc_options: []
107
101
  require_paths:
108
102
  - lib
109
103
  required_ruby_version: !ruby/object:Gem::Requirement
110
- none: false
111
104
  requirements:
112
- - - ! '>='
105
+ - - '>='
113
106
  - !ruby/object:Gem::Version
114
107
  version: '0'
115
108
  required_rubygems_version: !ruby/object:Gem::Requirement
116
- none: false
117
109
  requirements:
118
- - - ! '>='
110
+ - - '>='
119
111
  - !ruby/object:Gem::Version
120
112
  version: '0'
121
113
  requirements: []
122
114
  rubyforge_project:
123
- rubygems_version: 1.8.23
115
+ rubygems_version: 2.2.1
124
116
  signing_key:
125
- specification_version: 3
117
+ specification_version: 4
126
118
  summary: A tool for manipulating schemas
127
119
  test_files:
128
120
  - spec/engine_spec.rb