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 +7 -0
- data/README.md +1 -1
- data/lib/transmogrifier/nodes/hash_node.rb +1 -1
- data/lib/transmogrifier/nodes/node.rb +2 -2
- data/lib/transmogrifier/nodes/value_node.rb +4 -1
- data/lib/transmogrifier/rules/code.rb +5 -1
- data/lib/transmogrifier/version.rb +1 -1
- data/spec/rules/update_spec.rb +2 -2
- data/spec/transmogrifier_spec.rb +14 -14
- metadata +13 -21
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
|
-
|
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")
|
@@ -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,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
|
data/spec/rules/update_spec.rb
CHANGED
@@ -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-
|
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-
|
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 {
|
data/spec/transmogrifier_spec.rb
CHANGED
@@ -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
|
-
}], [
|
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" => "
|
32
|
-
|
33
|
-
|
34
|
-
|
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.
|
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:
|
115
|
+
rubygems_version: 2.2.1
|
124
116
|
signing_key:
|
125
|
-
specification_version:
|
117
|
+
specification_version: 4
|
126
118
|
summary: A tool for manipulating schemas
|
127
119
|
test_files:
|
128
120
|
- spec/engine_spec.rb
|