transmogrifier 0.0.4 → 0.1.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.
@@ -1,6 +1,10 @@
1
1
  module Transmogrifier
2
2
  class Engine
3
- def self.from_rules_array(rules_array)
3
+ def self.from_rules_array(rules_array, migrators=[])
4
+ migrator_map = migrators.reduce({}) do |memo, migrator|
5
+ memo[migrator.name] = migrator
6
+ memo
7
+ end
4
8
  new(
5
9
  rules_array.map do |rule|
6
10
  type = rule["type"].capitalize
@@ -12,6 +16,7 @@ module Transmogrifier
12
16
  rule["name"],
13
17
  rule["pattern"],
14
18
  rule["replacement"],
19
+ retrieve_migrator(rule["migrator"], migrator_map)
15
20
  ].compact
16
21
  Transmogrifier::Rules.const_get(type).new(selector, *options)
17
22
  end
@@ -31,5 +36,13 @@ module Transmogrifier
31
36
  @rules.each { |rule| output_hash = rule.apply!(output_hash) }
32
37
  output_hash
33
38
  end
39
+
40
+ private
41
+ def self.retrieve_migrator(migrator_name, migrators)
42
+ return nil if migrator_name.nil?
43
+
44
+ raise "Unknown Migrator #{migrator_name}" unless migrators[migrator_name]
45
+ migrators[migrator_name]
46
+ end
34
47
  end
35
48
  end
@@ -0,0 +1,13 @@
1
+ module Transmogrifier
2
+ module Rules
3
+ class Code
4
+ def initialize(parent_selector, klass=nil)
5
+ @klass = klass
6
+ end
7
+
8
+ def apply!(input_hash)
9
+ @klass.new.apply!(input_hash)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module Transmogrifier
2
- VERSION = "0.0.4"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -1,9 +1,40 @@
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
+
3
11
  describe Transmogrifier::Engine do
4
12
  subject(:engine) { described_class.from_rules_array(rules) }
5
13
 
14
+
6
15
  describe "#run" do
16
+
17
+ describe "with migrators" do
18
+
19
+ it "raises for unknown migrator" do
20
+ expect {
21
+ engine = Transmogrifier::Engine.from_rules_array([{
22
+ "type" => "code",
23
+ "migrator" => "SomeOtherMigrator"
24
+ }], [SomeMigrator])
25
+ }.to raise_error
26
+ end
27
+
28
+ it "runs custom migrator" do
29
+ engine = Transmogrifier::Engine.from_rules_array([{
30
+ "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}
35
+ end
36
+ end
37
+
7
38
  context "when there are multiple rules" do
8
39
  let(:rules) do
9
40
  [
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transmogrifier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - John Foley
@@ -13,6 +14,7 @@ dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bundler
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ~>
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ~>
25
28
  - !ruby/object:Gem::Version
@@ -27,6 +30,7 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: rake
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
35
  - - ! '>='
32
36
  - !ruby/object:Gem::Version
@@ -34,6 +38,7 @@ dependencies:
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - ! '>='
39
44
  - !ruby/object:Gem::Version
@@ -41,6 +46,7 @@ dependencies:
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: rspec
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
51
  - - ! '>='
46
52
  - !ruby/object:Gem::Version
@@ -48,6 +54,7 @@ dependencies:
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
59
  - - ! '>='
53
60
  - !ruby/object:Gem::Version
@@ -68,6 +75,7 @@ files:
68
75
  - lib/transmogrifier/nodes/value_node.rb
69
76
  - lib/transmogrifier/rules.rb
70
77
  - lib/transmogrifier/rules/append.rb
78
+ - lib/transmogrifier/rules/code.rb
71
79
  - lib/transmogrifier/rules/copy.rb
72
80
  - lib/transmogrifier/rules/delete.rb
73
81
  - lib/transmogrifier/rules/modify.rb
@@ -94,26 +102,27 @@ files:
94
102
  homepage: http://github.com/jfoley/transmogrifier
95
103
  licenses:
96
104
  - MIT
97
- metadata: {}
98
105
  post_install_message:
99
106
  rdoc_options: []
100
107
  require_paths:
101
108
  - lib
102
109
  required_ruby_version: !ruby/object:Gem::Requirement
110
+ none: false
103
111
  requirements:
104
112
  - - ! '>='
105
113
  - !ruby/object:Gem::Version
106
114
  version: '0'
107
115
  required_rubygems_version: !ruby/object:Gem::Requirement
116
+ none: false
108
117
  requirements:
109
118
  - - ! '>='
110
119
  - !ruby/object:Gem::Version
111
120
  version: '0'
112
121
  requirements: []
113
122
  rubyforge_project:
114
- rubygems_version: 2.1.11
123
+ rubygems_version: 1.8.23
115
124
  signing_key:
116
- specification_version: 4
125
+ specification_version: 3
117
126
  summary: A tool for manipulating schemas
118
127
  test_files:
119
128
  - spec/engine_spec.rb
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MmRlZjJhNjI1YTc0NWUyMGU0ZDM1NGYwNmRlNGJkYjg1MTI5ZDdhMg==
5
- data.tar.gz: !binary |-
6
- NjQxOGFhOGYwNzhhNGVjNTJkNTllNDYxZjc2ZTkyNDZiZWE0MTFhMg==
7
- SHA512:
8
- metadata.gz: !binary |-
9
- YmQ3YmI3MTFjOGM1Y2I3ZGQ0NTc1NGE4MmEzNTgzMmUyMzllZWE1NGUyZmQ0
10
- NzYzYWI0NGUwOTU4Y2Y3MjBkNDYzZTZjNDU5Njg2Mzk3M2RkNzRhNzRmMzEy
11
- MDU5ODk1MWJkZmNkYTAyNjIxNmNmOWYzMzBiOGJhZmU4NzVjYjA=
12
- data.tar.gz: !binary |-
13
- YzI4MzZlODAyNDZjNTA4MDEyNGVkNjFlYWI5NWJlNzk2YWQ3MjU1YTdhMWVj
14
- ZTc2ZWFkY2JjNDFlYTcwYmVhYWM4NTVmYTUyZDc1MjU1OTk4YTg1ZTQ5ZmYz
15
- ZTEzNGZiZjE1OGU5OGNlNGJhY2MwNTNkMDliYjdlZGE4MDczODk=