hq-engine-xqilla 0.0.2 → 0.0.3

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.
@@ -0,0 +1,90 @@
1
+ Feature: Callback functions
2
+
3
+ Scenario: Get by id
4
+
5
+ When I compile the query:
6
+ """
7
+ declare namespace hq = "hq";
8
+ declare function hq:get (
9
+ $id as xs:string
10
+ ) as element () external;
11
+ hq:get ('a')
12
+ """
13
+
14
+ And I run the query against:
15
+ """
16
+ <doc/>
17
+ """
18
+
19
+ Then the result should be:
20
+ """
21
+ <get-record-by-id id="a"/>
22
+ """
23
+
24
+ Scenario: Get by id parts
25
+
26
+ When I compile the query:
27
+ """
28
+ declare namespace hq = "hq";
29
+ declare function hq:get (
30
+ $type as xs:string,
31
+ $id-parts as xs:string *
32
+ ) as element () external;
33
+ hq:get ('a', ('b', 'c'))
34
+ """
35
+
36
+ And I run the query against:
37
+ """
38
+ <doc/>
39
+ """
40
+
41
+ Then the result should be:
42
+ """
43
+ <get-record-by-id id="a/b/c"/>
44
+ """
45
+
46
+ Scenario: Find all by type
47
+
48
+ When I compile the query:
49
+ """
50
+ declare namespace hq = "hq";
51
+ declare function hq:find (
52
+ $type as xs:string
53
+ ) as element () external;
54
+ hq:find ('a')
55
+ """
56
+
57
+ And I run the query against:
58
+ """
59
+ <doc/>
60
+ """
61
+
62
+ Then the result should be:
63
+ """
64
+ <search-records type="a"/>
65
+ """
66
+
67
+ Scenario: Find by type with criteria
68
+
69
+ When I compile the query:
70
+ """
71
+ declare namespace hq = "hq";
72
+ declare function hq:find (
73
+ $type as xs:string,
74
+ $criteria as xs:string *
75
+ ) as element () external;
76
+ hq:find ('a', ('b=1', 'c=2'))
77
+ """
78
+
79
+ And I run the query against:
80
+ """
81
+ <doc/>
82
+ """
83
+
84
+ Then the result should be:
85
+ """
86
+ <search-records type="a">
87
+ <criteria key="b" value="1"/>
88
+ <criteria key="c" value="2"/>
89
+ </search-records>
90
+ """
@@ -0,0 +1,34 @@
1
+ require "yaml"
2
+
3
+ def rule_provider
4
+
5
+ return @rule_provider \
6
+ if @rule_provider
7
+
8
+ require "hq/engine/subprocess-rule-provider/start"
9
+
10
+ spec =
11
+ Gem::Specification.find_by_name \
12
+ "hq-engine-xqilla"
13
+
14
+ rule_provider_path =
15
+ "#{spec.gem_dir}/src/xquery-server"
16
+
17
+ @rule_provider =
18
+ HQ::Engine::SubProcessRuleProvider.start \
19
+ rule_provider_path
20
+
21
+ return @rule_provider
22
+
23
+ end
24
+
25
+ After do
26
+ @rule_provider.close if @rule_provider
27
+ end
28
+
29
+ def rule_provider_session
30
+
31
+ return @rule_provider_session ||=
32
+ rule_provider.session
33
+
34
+ end
@@ -0,0 +1,127 @@
1
+ Given /^an xquery module named "([^"]*)":$/ do
2
+ |module_name, module_text|
3
+ rule_provider_session.set_library_module module_name, module_text
4
+ end
5
+
6
+ Given /^an xquery script:$/ do
7
+ |xquery_text|
8
+ @xquery_text = xquery_text
9
+ end
10
+
11
+ Given /^an input document:$/ do
12
+ |input_text|
13
+ @input_text = input_text
14
+ end
15
+
16
+ Then /^the result should be:$/ do
17
+ |result_text|
18
+ @result_text.should == result_text
19
+ end
20
+
21
+ Then /^I should get an error$/ do
22
+ @exception.should_not be_nil
23
+ @exception = nil
24
+ end
25
+
26
+ Before do
27
+ @input_text = "<xml/>"
28
+ @exception = nil
29
+ end
30
+
31
+ When /^I compile the query$/ do
32
+
33
+ begin
34
+
35
+ @result_text =
36
+ rule_provider_session.compile_xquery \
37
+ @xquery_text,
38
+ "inline.xquery"
39
+
40
+ @exception = nil
41
+
42
+ rescue => exception
43
+ @exception = exception
44
+ @result_text = nil
45
+ end
46
+ end
47
+
48
+ When /^I run the query$/ do
49
+
50
+ require "xml"
51
+
52
+ begin
53
+
54
+ @result_text =
55
+ rule_provider_session.run_xquery @input_text \
56
+ do
57
+ |name, args|
58
+
59
+ case name
60
+
61
+ when "get record by id"
62
+ record = XML::Node.new "get-record-by-id"
63
+ args.each do
64
+ |name, value|
65
+ record[name] = value
66
+ end
67
+ [ record.to_s ]
68
+
69
+ when "get record by id parts"
70
+ record = XML::Node.new "get-record-by-id-parts"
71
+ record["type"] = args["type"]
72
+ args["id parts"].each do
73
+ |arg_part|
74
+ part = XML::Node.new "part"
75
+ part["value"] = arg_part
76
+ record << part
77
+ end
78
+ [ record.to_s ]
79
+
80
+ when "search records"
81
+ record = XML::Node.new "search-records"
82
+ record["type"] = args["type"]
83
+ (args["criteria"] || []).each do
84
+ |key, value|
85
+ criteria_elem = XML::Node.new "criteria"
86
+ criteria_elem["key"] = key
87
+ criteria_elem["value"] = value
88
+ record << criteria_elem
89
+ end
90
+ [ record.to_s ]
91
+
92
+ else
93
+ puts "ERROR #{name}"
94
+ []
95
+
96
+ end
97
+
98
+ end
99
+
100
+ @exception = nil
101
+
102
+ rescue => exception
103
+
104
+ @exception = exception
105
+ @result_text = nil
106
+
107
+ end
108
+
109
+ end
110
+
111
+ When /^I compile the query:$/ do
112
+ |xquery_text|
113
+ step "an xquery script:", xquery_text
114
+ step "I compile the query"
115
+ end
116
+
117
+ When /^I run the query against:$/ do
118
+ |input_text|
119
+ step "an input document:", input_text
120
+ step "I run the query"
121
+ end
122
+
123
+ After do
124
+ if @exception
125
+ raise @exception
126
+ end
127
+ end
@@ -0,0 +1,68 @@
1
+ Feature: XQuery server
2
+
3
+ Scenario: Perform a transform
4
+
5
+ When I compile the query:
6
+ """
7
+ 1 + 1
8
+ """
9
+
10
+ And I run the query
11
+
12
+ Then the result should be:
13
+ """
14
+ 2
15
+ """
16
+
17
+ Scenario: Reference the source document
18
+
19
+ When I compile the query:
20
+ """
21
+ string (/doc/elem/@attr)
22
+ """
23
+
24
+ And I run the query against:
25
+ """
26
+ <doc>
27
+ <elem attr="hello world"/>
28
+ </doc>
29
+ """
30
+
31
+ Then the result should be:
32
+ """
33
+ hello world
34
+ """
35
+
36
+ Scenario: Import a module
37
+
38
+ Given an xquery module named "module.xquery":
39
+ """
40
+ module namespace lib = "module.xquery";
41
+ declare function lib:message () as item () * {
42
+ ("hello world 1", "hello world 2")
43
+ };
44
+ """
45
+
46
+ When I compile the query:
47
+ """
48
+ import module namespace lib = "module.xquery";
49
+ string-join (lib:message (), ', ')
50
+ """
51
+
52
+ And I run the query
53
+
54
+ Then the result should be:
55
+ """
56
+ hello world 1, hello world 2
57
+ """
58
+
59
+ Scenario: Invalid xquery
60
+
61
+ When I compile the query:
62
+ """
63
+ 123;;;
64
+ """
65
+
66
+ And I run the query
67
+
68
+ Then I should get an error
data/src/Rakefile CHANGED
@@ -1,10 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- HQ_DIR = File.expand_path "../..", __FILE__ \
4
- unless defined? HQ_DIR
3
+ src_dir = File.expand_path "..", __FILE__
5
4
 
6
5
  task :default do
7
6
 
8
- system "cd #{HQ_DIR}/c++; make"
7
+ system "cd #{src_dir}; make"
9
8
 
10
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hq-engine-xqilla
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.2.1
62
+ - !ruby/object:Gem::Dependency
63
+ name: libxml-ruby
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 2.6.0
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 2.6.0
62
78
  - !ruby/object:Gem::Dependency
63
79
  name: rake
64
80
  requirement: !ruby/object:Gem::Requirement
@@ -134,6 +150,10 @@ files:
134
150
  - src/Makefile
135
151
  - src/Rakefile
136
152
  - src/xquery-server.cc
153
+ - features/xquery-server.feature
154
+ - features/functions.feature
155
+ - features/support/steps.rb
156
+ - features/support/env.rb
137
157
  homepage: https://github.com/jamespharaoh/hq-engine-xqilla
138
158
  licenses: []
139
159
  post_install_message:
@@ -158,4 +178,8 @@ rubygems_version: 1.8.23
158
178
  signing_key:
159
179
  specification_version: 3
160
180
  summary: HQ engine xqilla
161
- test_files: []
181
+ test_files:
182
+ - features/xquery-server.feature
183
+ - features/functions.feature
184
+ - features/support/steps.rb
185
+ - features/support/env.rb