transmogrifier 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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