hq-engine 0.0.13 → 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.
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