transmogrifier 0.0.4 → 0.1.0

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