hq-engine 0.0.13 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dcb4e7698ec7f5dea42319d06693715c8298e09b
4
- data.tar.gz: 19db413442a4ab4a3474e9d67ec2c427beb658fd
3
+ metadata.gz: 3dfe1ba890c382485213a074683030ee06736e54
4
+ data.tar.gz: c75fa82d77e182ab2b243efcf9aebaa3799e4adb
5
5
  SHA512:
6
- metadata.gz: 4ecea554285470f2bc6e86640bbe889a1e6f2f97bb9370c3664e412b2cce816a115789df44f625b966977e938ffb61c925b0304eddd955a159d3f83133567d9c
7
- data.tar.gz: d6a3f189fb6e347ebcacf69cf7cf6fda4982a92d18d6f101ae4aec2169067532bff1203077d5bd4e28ddf228cbd546b3d54c40f693c8a02a641d728127409344
6
+ metadata.gz: 4d39b500ce568c06e775d08e0714f580a183febb3421916571f8042220e2ab8bbf2aa1c1187ecfd58f017b8b684ca17f79518ffcc1e764170c90513e4636bcb2
7
+ data.tar.gz: abff7975df830b6ecd77c33776d95a76e2fa6e3b1f12aa0f06708fcb0f1a9331f8bffaae4e1545e7e91aeb082b945a796a37c4c4a3a5f2a753b7883685c35daa
@@ -0,0 +1,128 @@
1
+ Feature: Engine
2
+
3
+ Background:
4
+
5
+ Given a file "config/rules/input-schema.rb":
6
+ """
7
+ # (: out schema :)
8
+ require "xml"
9
+ proc do |hq|
10
+ doc = XML::Document.string '
11
+ <schema name="input">
12
+ <id><text name="name"/></id>
13
+ <fields><text name="value"/></fields>
14
+ </schema>
15
+ '
16
+ hq.write doc.root
17
+ end
18
+ """
19
+
20
+ And a file "config/rules/schema-schema.rb":
21
+ """
22
+ # (: out schema :)
23
+ require "xml"
24
+ proc do |hq|
25
+ doc = XML::Document.string '
26
+ <schema name="schema">
27
+ <id><text name="name"/></id>
28
+ <fields/>
29
+ </schema>
30
+ '
31
+ hq.write doc.root
32
+ end
33
+ """
34
+
35
+ And a file "config/rules/output-schema.rb":
36
+ """
37
+ # (: out schema :)
38
+ require "xml"
39
+ proc do |hq|
40
+ doc = XML::Document.string '
41
+ <schema name="output">
42
+ <id><text name="name"/></id>
43
+ <fields><text name="value"/></fields>
44
+ </schema>
45
+ '
46
+ hq.write doc.root
47
+ end
48
+ """
49
+
50
+ And a file "config/rules/input-to-output.rb":
51
+ """
52
+ # (: in input :)
53
+ # (: out output :)
54
+ require "xml"
55
+ proc do |hq|
56
+ hq.find("input").each do
57
+ |input|
58
+ output = XML::Node.new "output"
59
+ output["name"] = input["name"]
60
+ output["value"] = input["value"].upcase
61
+ hq.write output
62
+ end
63
+ end
64
+ """
65
+
66
+ And a file "work/input.yaml":
67
+ """
68
+ - id: input/name
69
+ type: input
70
+ value:
71
+ name: name
72
+ value: value
73
+ """
74
+
75
+ And a file "default.args":
76
+ """
77
+ --config config
78
+ --work work
79
+ """
80
+
81
+ Scenario: Success
82
+
83
+ When I invoke engine with "default.args"
84
+
85
+ Then there should be a file "work/output/data/output/name.xml":
86
+ """
87
+ <output name="name" value="VALUE"/>
88
+ """
89
+
90
+ Then there should be a file "work/output/data/schema/schema.xml":
91
+ """
92
+ <schema name="schema">
93
+ <id>
94
+ <text name="name"/>
95
+ </id>
96
+ <fields/>
97
+ </schema>
98
+ """
99
+
100
+ Then there should be a file "work/output/data/schema/output.xml":
101
+ """
102
+ <schema name="output">
103
+ <id>
104
+ <text name="name"/>
105
+ </id>
106
+ <fields>
107
+ <text name="value"/>
108
+ </fields>
109
+ </schema>
110
+ """
111
+
112
+ Then there should be a file "work/output/data/schema/input.xml":
113
+ """
114
+ <schema name="input">
115
+ <id>
116
+ <text name="name"/>
117
+ </id>
118
+ <fields>
119
+ <text name="value"/>
120
+ </fields>
121
+ </schema>
122
+ """
123
+
124
+ Then there should be a file "work/output/data/input/name.xml":
125
+ """
126
+ <input name="name" value="value"/>
127
+ """
128
+
@@ -0,0 +1,10 @@
1
+ require "hq/cucumber/command"
2
+ require "hq/cucumber/temp-dir"
3
+
4
+ require "hq/engine/engine-script"
5
+ require "hq/transform/transform-script"
6
+
7
+ include HQ
8
+
9
+ $commands["engine"] = Engine::EngineScript
10
+ $commands["transform"] = Transform::TransformScript
File without changes
@@ -0,0 +1,111 @@
1
+ Feature: Transformer
2
+
3
+ The transformer takes a schema, a set of data files, and a list of rules, and
4
+ it produces a structured data tree as output. It depends on a backend which
5
+ must be provided externally.
6
+
7
+ Background:
8
+
9
+ Given a file "schema.xml":
10
+ """
11
+ <data>
12
+ <schema name="input">
13
+ <id>
14
+ <text name="name"/>
15
+ </id>
16
+ <fields>
17
+ <text name="value"/>
18
+ </fields>
19
+ </schema>
20
+ <schema name="internal">
21
+ <id>
22
+ <text name="name"/>
23
+ </id>
24
+ <fields>
25
+ <text name="value"/>
26
+ </fields>
27
+ </schema>
28
+ <schema name="output">
29
+ <id>
30
+ <text name="name"/>
31
+ </id>
32
+ <fields>
33
+ <text name="value"/>
34
+ </fields>
35
+ </schema>
36
+ </data>
37
+ """
38
+
39
+ And a file "input/data.xml":
40
+ """
41
+ <data>
42
+ <input name="name" value="value"/>
43
+ </data>
44
+ """
45
+
46
+ And a file "rules/input-to-internal.rb":
47
+ """
48
+ # (: in input :)
49
+ # (: out internal :)
50
+ require "xml"
51
+ include XML
52
+ proc do
53
+ |hq|
54
+ hq.find("input").each do
55
+ |input|
56
+ internal = Node.new "internal"
57
+ internal["name"] = input["name"]
58
+ internal["value"] = input["value"].upcase
59
+ hq.write internal
60
+ end
61
+ end
62
+ """
63
+
64
+ And a file "rules/internal-to-output.rb":
65
+ """
66
+ # (: in internal :)
67
+ # (: out output :)
68
+ require "xml"
69
+ include XML
70
+ proc do
71
+ |hq|
72
+ hq.find("internal").each do
73
+ |internal|
74
+ 2.times do
75
+ |time|
76
+ output = Node.new "output"
77
+ output["name"] = "#{internal["name"]}-#{time}"
78
+ output["value"] = internal["value"]
79
+ hq.write output
80
+ end
81
+ end
82
+ end
83
+ """
84
+
85
+ And a file "default.args":
86
+ """
87
+ --schema schema.xml
88
+ --input input
89
+ --rules rules
90
+ --include include
91
+ --output output
92
+ """
93
+
94
+ Scenario: Success
95
+
96
+ When I invoke transform with "default.args"
97
+
98
+ Then there should be a file "output/data/input/name.xml":
99
+ """
100
+ <input name="name" value="value"/>
101
+ """
102
+
103
+ And there should be a file "output/data/internal/name.xml":
104
+ """
105
+ <internal name="name" value="VALUE"/>
106
+ """
107
+
108
+ And there should be a file "output/data/output/name-1.xml":
109
+ """
110
+ <output name="name-1" value="VALUE"/>
111
+ """
@@ -0,0 +1,66 @@
1
+ require "hq/logger"
2
+ require "hq/tools/base-script"
3
+ require "hq/tools/getopt"
4
+ require "hq/engine/engine"
5
+ require "hq/transform/ruby-backend"
6
+
7
+ module HQ
8
+ module Engine
9
+
10
+ class EngineScript < Tools::BaseScript
11
+
12
+ attr_accessor :logger
13
+ attr_accessor :transform_backend
14
+
15
+ def initialize
16
+
17
+ @logger = Logger.new
18
+ @logger.hostname = "local"
19
+ @logger.add_auto "debug"
20
+
21
+ @transform_backend = Transform::RubyBackend.new
22
+
23
+ end
24
+
25
+ def main
26
+ process_args
27
+ run_engine
28
+ end
29
+
30
+ def process_args
31
+
32
+ @opts, @args =
33
+ Tools::Getopt.process @args, [
34
+
35
+ { :name => :config,
36
+ :required => true },
37
+
38
+ { :name => :work,
39
+ :required => true },
40
+
41
+ ]
42
+
43
+ @args.empty? \
44
+ or raise "Extra args on command line"
45
+
46
+ end
47
+
48
+ def run_engine
49
+
50
+ engine =
51
+ Engine.new
52
+
53
+ engine.logger = logger
54
+ engine.transform_backend = transform_backend
55
+
56
+ engine.config_dir = @opts[:config]
57
+ engine.work_dir = @opts[:work]
58
+
59
+ engine.transform
60
+
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+ end
@@ -1,20 +1,22 @@
1
+ require "xml"
2
+
1
3
  require "hq/engine/libxmlruby-mixin"
4
+ require "hq/transform/transformer"
2
5
 
3
6
  module HQ
4
7
  module Engine
8
+
5
9
  class Engine
6
10
 
7
11
  include LibXmlRubyMixin
8
12
 
9
- attr_accessor :main
13
+ attr_accessor :logger
14
+ attr_accessor :transform_backend
10
15
 
11
- attr_accessor :results
16
+ attr_accessor :config_dir
17
+ attr_accessor :work_dir
12
18
 
13
- def config_dir() main.config_dir end
14
- def couch() main.couch end
15
- def logger() main.logger end
16
- def work_dir() main.work_dir end
17
- def rule_provider() main.rule_provider end
19
+ attr_accessor :results
18
20
 
19
21
  def schema_file() "#{work_dir}/schema.xml" end
20
22
 
@@ -87,8 +89,6 @@ class Engine
87
89
 
88
90
  # process abstract config
89
91
 
90
- require "hq/engine/transformer"
91
-
92
92
  transformer = HQ::Engine::Transformer.new
93
93
  transformer.parent = self
94
94
 
@@ -118,7 +118,6 @@ class Engine
118
118
  item_doc.root
119
119
  }
120
120
 
121
-
122
121
  write_data_file schema_file, new_schemas
123
122
 
124
123
  # restart if schema changed
@@ -185,9 +184,7 @@ class Engine
185
184
 
186
185
  logger.notice "loading input from database"
187
186
 
188
- require "xml"
189
-
190
- logger.time "loading input from database" do
187
+ logger.time "converting input" do
191
188
 
192
189
  @input_docs = {}
193
190
  @input_strs = {}
@@ -197,38 +194,24 @@ class Engine
197
194
 
198
195
  FileUtils.mkdir_p "#{work_dir}/input", :mode => 0700
199
196
 
200
- rows = couch.view("root", "by_type")["rows"]
201
197
  values_by_type = Hash.new
202
198
 
203
- legacy = false
199
+ inputs = YAML.load File.read "#{work_dir}/input.yaml"
204
200
 
205
- rows.each do |row|
201
+ inputs.each do
202
+ |input|
206
203
 
207
- if legacy
204
+ id = input["id"]
205
+ type = input["type"]
206
+ value = input["value"]
208
207
 
209
- type = row["value"]["mandar_type"]
210
- value = row["value"]
211
-
212
- else
213
-
214
- type = row["value"]["type"]
215
- value = row["value"]["value"]
216
-
217
- row["id"] =~ /^current\/(.+)$/
218
- value["_id"] = $1
219
-
220
- end
208
+ value["_id"] = id
221
209
 
222
210
  values_by_type[type] ||= Hash.new
223
- values_by_type[type][value["_id"]] = value
224
-
225
- main.continue
211
+ values_by_type[type][id] = value
226
212
 
227
213
  end
228
214
 
229
- change =
230
- staged_change
231
-
232
215
  schema =
233
216
  load_schema_file "#{work_dir}/schema.xml"
234
217
 
@@ -251,20 +234,6 @@ class Engine
251
234
  input_doc = XML::Document.new
252
235
  input_doc.root = XML::Node.new "data"
253
236
 
254
- if change
255
- change["items"].each do |key, item|
256
- case item["action"]
257
- when "create", "update"
258
- next unless key =~ /^#{Regexp.quote type}\//
259
- values[key] = item["record"]
260
- when "delete"
261
- values.delete key
262
- else
263
- raise "Error"
264
- end
265
- end
266
- end
267
-
268
237
  sorted_values =
269
238
  values.values.sort {
270
239
  |a,b|
@@ -287,27 +256,6 @@ class Engine
287
256
 
288
257
  end
289
258
 
290
- def staged_change
291
-
292
- return nil \
293
- unless $deploy_mode == :staged
294
-
295
- locks =
296
- couch.get "mandar-locks"
297
-
298
- return nil \
299
- unless locks
300
-
301
- change =
302
- locks["changes"][$deploy_role]
303
-
304
- return nil \
305
- unless change
306
-
307
- return change
308
-
309
- end
310
-
311
259
  def load_results
312
260
 
313
261
  @results = {}
@@ -351,5 +299,6 @@ class Engine
351
299
 
352
300
 
353
301
  end
302
+
354
303
  end
355
304
  end
@@ -0,0 +1,85 @@
1
+ module HQ
2
+ module Transform
3
+
4
+ class RubyBackend
5
+
6
+ def session
7
+ return Session.new
8
+ end
9
+
10
+ def extensions
11
+ [ "rb" ]
12
+ end
13
+
14
+ class Session
15
+
16
+ def set_library_module name, content
17
+ end
18
+
19
+ def compile_xquery source, filename
20
+
21
+ @source = source
22
+ @filename = filename
23
+
24
+ @proc = Object.instance_eval source, filename
25
+
26
+ end
27
+
28
+ def run_xquery input, &callback
29
+
30
+ context = Context.new
31
+ context.callback = callback
32
+
33
+ @proc.call context
34
+
35
+ ret = XML::Document.new
36
+ ret.root = XML::Node.new "data"
37
+
38
+ context.results.each do
39
+ |node| ret.root << ret.import(node)
40
+ end
41
+
42
+ return ret.to_s
43
+
44
+ end
45
+
46
+ class Context
47
+
48
+ attr_accessor :callback
49
+ attr_accessor :results
50
+
51
+ def initialize
52
+ @results = []
53
+ end
54
+
55
+ def find type
56
+
57
+ strings =
58
+ @callback.call \
59
+ "search records",
60
+ {
61
+ "type" => type,
62
+ }
63
+
64
+ nodes =
65
+ strings.map {
66
+ |string|
67
+ XML::Document.string(string).root
68
+ }
69
+
70
+ return nodes
71
+
72
+ end
73
+
74
+ def write node
75
+ @results << node
76
+ end
77
+
78
+ end
79
+
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+ end
@@ -0,0 +1,81 @@
1
+ require "hq/logger"
2
+ require "hq/tools/base-script"
3
+ require "hq/tools/getopt"
4
+ require "hq/transform/ruby-backend"
5
+ require "hq/transform/transformer"
6
+
7
+ module HQ
8
+ module Transform
9
+
10
+ class TransformScript < Tools::BaseScript
11
+
12
+ attr_accessor :logger
13
+ attr_accessor :transform_backend
14
+
15
+ def initialize
16
+
17
+ @logger = Logger.new
18
+ @logger.hostname = "local"
19
+ @logger.add_auto "debug"
20
+
21
+ @transform_backend = RubyBackend.new
22
+
23
+ end
24
+
25
+ def main
26
+ process_args
27
+ perform_transform
28
+ end
29
+
30
+ def process_args
31
+
32
+ @opts, @args =
33
+ Tools::Getopt.process @args, [
34
+
35
+ { :name => :input,
36
+ :required => true },
37
+
38
+ { :name => :rules,
39
+ :required => true },
40
+
41
+ { :name => :include,
42
+ :required => true },
43
+
44
+ { :name => :schema,
45
+ :required => true },
46
+
47
+ { :name => :output,
48
+ :required => true }
49
+
50
+ ]
51
+
52
+ @args.empty? \
53
+ or raise "Extra args on command line"
54
+
55
+ end
56
+
57
+ def perform_transform
58
+
59
+ transformer =
60
+ Engine::Transformer.new
61
+
62
+ transformer.parent = self
63
+
64
+ transformer.schema_file = @opts[:schema]
65
+ transformer.rules_dir = @opts[:rules]
66
+ transformer.include_dir = @opts[:include]
67
+ transformer.input_dir = @opts[:input]
68
+ transformer.output_dir = @opts[:output]
69
+
70
+ result =
71
+ transformer.rebuild
72
+
73
+ raise "Error" \
74
+ unless result[:success]
75
+
76
+ end
77
+
78
+ end
79
+
80
+ end
81
+ end
@@ -1,4 +1,5 @@
1
1
  require "hq/engine/libxmlruby-mixin"
2
+ require "hq/engine/rule-error"
2
3
 
3
4
  module HQ
4
5
  module Engine
@@ -9,7 +10,7 @@ class Transformer
9
10
  attr_accessor :parent
10
11
 
11
12
  def logger() parent.logger end
12
- def rule_provider() parent.rule_provider end
13
+ def transform_backend() parent.transform_backend end
13
14
 
14
15
  attr_accessor :schema_file
15
16
  attr_accessor :rules_dir
@@ -35,11 +36,18 @@ class Transformer
35
36
  Dir.glob("#{rules_dir}/**/*").each do
36
37
  |filename|
37
38
 
39
+ extensions_re =
40
+ "(?:%s)" % [
41
+ transform_backend.extensions
42
+ .map { |ext| Regexp.quote ext }
43
+ .join("|")
44
+ ]
45
+
38
46
  next unless filename =~ /^
39
47
  #{Regexp.quote "#{rules_dir}/"}
40
48
  (
41
49
  (.+)
42
- \. (xquery)
50
+ \. (#{extensions_re})
43
51
  )
44
52
  $/x
45
53
 
@@ -65,15 +73,15 @@ class Transformer
65
73
 
66
74
  end
67
75
 
68
- def init_rule_provider_session
76
+ def init_backend_session
69
77
 
70
- @rule_provider_session =
71
- rule_provider.session
78
+ @backend_session =
79
+ transform_backend.session
72
80
 
73
81
  # add hq module
74
82
  # TODO move this somewhere
75
83
 
76
- @rule_provider_session.set_library_module \
84
+ @backend_session.set_library_module \
77
85
  "hq",
78
86
  "
79
87
  module namespace hq = \"hq\";
@@ -105,7 +113,7 @@ class Transformer
105
113
 
106
114
  remove_output
107
115
 
108
- init_rule_provider_session
116
+ init_backend_session
109
117
 
110
118
  @data = {}
111
119
 
@@ -186,7 +194,7 @@ class Transformer
186
194
  path =~ /^ #{Regexp.quote include_dir} \/ (.+) $/x
187
195
  name = $1
188
196
 
189
- @rule_provider_session.set_library_module \
197
+ @backend_session.set_library_module \
190
198
  name,
191
199
  File.read(path)
192
200
 
@@ -318,12 +326,12 @@ class Transformer
318
326
 
319
327
  begin
320
328
 
321
- @rule_provider_session.compile_xquery \
329
+ @backend_session.compile_xquery \
322
330
  rule[:source],
323
331
  rule[:filename]
324
332
 
325
333
  result_str =
326
- @rule_provider_session.run_xquery \
334
+ @backend_session.run_xquery \
327
335
  "<xml/>" \
328
336
  do
329
337
  |name, args|
@@ -1,4 +1,4 @@
1
- require "hq/engine/transformer"
1
+ require "hq/transform/transformer"
2
2
 
3
3
  module HQ
4
4
  module Engine
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hq-engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Pharaoh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-01 00:00:00.000000000 Z
11
+ date: 2013-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: hq-logger
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: hq-tools
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.8.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.8.1
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: multi_json
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -30,14 +58,42 @@ dependencies:
30
58
  requirements:
31
59
  - - '>='
32
60
  - !ruby/object:Gem::Version
33
- version: 1.2.1
61
+ version: 1.3.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.3.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: hq-dev
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: 0.0.18
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: 0.0.18
83
+ - !ruby/object:Gem::Dependency
84
+ name: json
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: 1.7.7
34
90
  type: :development
35
91
  prerelease: false
36
92
  version_requirements: !ruby/object:Gem::Requirement
37
93
  requirements:
38
94
  - - '>='
39
95
  - !ruby/object:Gem::Version
40
- version: 1.2.1
96
+ version: 1.7.7
41
97
  - !ruby/object:Gem::Dependency
42
98
  name: libxml-ruby
43
99
  requirement: !ruby/object:Gem::Requirement
@@ -58,56 +114,56 @@ dependencies:
58
114
  requirements:
59
115
  - - '>='
60
116
  - !ruby/object:Gem::Version
61
- version: 10.0.3
117
+ version: 10.0.4
62
118
  type: :development
63
119
  prerelease: false
64
120
  version_requirements: !ruby/object:Gem::Requirement
65
121
  requirements:
66
122
  - - '>='
67
123
  - !ruby/object:Gem::Version
68
- version: 10.0.3
124
+ version: 10.0.4
69
125
  - !ruby/object:Gem::Dependency
70
126
  name: rspec
71
127
  requirement: !ruby/object:Gem::Requirement
72
128
  requirements:
73
129
  - - '>='
74
130
  - !ruby/object:Gem::Version
75
- version: 2.12.0
131
+ version: 2.13.0
76
132
  type: :development
77
133
  prerelease: false
78
134
  version_requirements: !ruby/object:Gem::Requirement
79
135
  requirements:
80
136
  - - '>='
81
137
  - !ruby/object:Gem::Version
82
- version: 2.12.0
138
+ version: 2.13.0
83
139
  - !ruby/object:Gem::Dependency
84
140
  name: rspec_junit_formatter
85
141
  requirement: !ruby/object:Gem::Requirement
86
142
  requirements:
87
143
  - - '>='
88
144
  - !ruby/object:Gem::Version
89
- version: '0'
145
+ version: 0.1.6
90
146
  type: :development
91
147
  prerelease: false
92
148
  version_requirements: !ruby/object:Gem::Requirement
93
149
  requirements:
94
150
  - - '>='
95
151
  - !ruby/object:Gem::Version
96
- version: '0'
152
+ version: 0.1.6
97
153
  - !ruby/object:Gem::Dependency
98
154
  name: simplecov
99
155
  requirement: !ruby/object:Gem::Requirement
100
156
  requirements:
101
157
  - - '>='
102
158
  - !ruby/object:Gem::Version
103
- version: '0'
159
+ version: 0.7.1
104
160
  type: :development
105
161
  prerelease: false
106
162
  version_requirements: !ruby/object:Gem::Requirement
107
163
  requirements:
108
164
  - - '>='
109
165
  - !ruby/object:Gem::Version
110
- version: '0'
166
+ version: 0.7.1
111
167
  description: HQ transformation engine
112
168
  email:
113
169
  - james@phsys.co.uk
@@ -115,6 +171,7 @@ executables: []
115
171
  extensions: []
116
172
  extra_rdoc_files: []
117
173
  files:
174
+ - lib/hq/engine/engine-script.rb
118
175
  - lib/hq/engine/engine.rb
119
176
  - lib/hq/engine/register-engine-commands.rb
120
177
  - lib/hq/engine/subprocess-rule-provider/self.rb
@@ -122,12 +179,18 @@ files:
122
179
  - lib/hq/engine/subprocess-rule-provider/start.rb
123
180
  - lib/hq/engine/libxmlruby-mixin.rb
124
181
  - lib/hq/engine/unlock-command.rb
125
- - lib/hq/engine/transformer.rb
126
182
  - lib/hq/engine/rule-error.rb
183
+ - lib/hq/transform/ruby-backend.rb
184
+ - lib/hq/transform/transform-script.rb
185
+ - lib/hq/transform/transformer.rb
186
+ - features/engine/engine.feature
187
+ - features/transform/transform.feature
188
+ - features/support/steps.rb
189
+ - features/support/env.rb
127
190
  - spec/hq/engine/libxmlruby-mixin-spec.rb
128
191
  - spec/hq/engine/subprocess-rule-provider/self-spec.rb
129
192
  - spec/hq/engine/subprocess-rule-provider/session-spec.rb
130
- - spec/hq/engine/transformer-spec.rb
193
+ - spec/hq/transform/transformer-spec.rb
131
194
  homepage: https://github.com/jamespharaoh/hq-engine
132
195
  licenses: []
133
196
  metadata: {}
@@ -152,7 +215,11 @@ signing_key:
152
215
  specification_version: 4
153
216
  summary: HQ engine
154
217
  test_files:
218
+ - features/engine/engine.feature
219
+ - features/transform/transform.feature
220
+ - features/support/steps.rb
221
+ - features/support/env.rb
155
222
  - spec/hq/engine/libxmlruby-mixin-spec.rb
156
223
  - spec/hq/engine/subprocess-rule-provider/self-spec.rb
157
224
  - spec/hq/engine/subprocess-rule-provider/session-spec.rb
158
- - spec/hq/engine/transformer-spec.rb
225
+ - spec/hq/transform/transformer-spec.rb