saper 0.5.1 → 0.5.2
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 +4 -4
- data/README.md +3 -0
- data/Rakefile +6 -6
- data/bin/saper +17 -36
- data/lib/saper.rb +63 -20
- data/lib/saper/actions/append_with.rb +1 -1
- data/lib/saper/actions/convert_to_html.rb +1 -1
- data/lib/saper/actions/convert_to_json.rb +6 -2
- data/lib/saper/actions/convert_to_markdown.rb +1 -1
- data/lib/saper/actions/convert_to_time.rb +38 -1
- data/lib/saper/actions/convert_to_xml.rb +1 -1
- data/lib/saper/actions/create_atom.rb +6 -2
- data/lib/saper/actions/fetch.rb +3 -2
- data/lib/saper/actions/fetch_with_token.rb +18 -0
- data/lib/saper/actions/find.rb +1 -1
- data/lib/saper/actions/find_first.rb +1 -1
- data/lib/saper/actions/get_attribute.rb +7 -2
- data/lib/saper/actions/get_contents.rb +1 -1
- data/lib/saper/actions/get_text.rb +1 -1
- data/lib/saper/actions/nothing.rb +11 -0
- data/lib/saper/actions/prepend_with.rb +2 -2
- data/lib/saper/actions/remove_after.rb +2 -2
- data/lib/saper/actions/remove_before.rb +2 -2
- data/lib/saper/actions/remove_matching.rb +2 -2
- data/lib/saper/actions/remove_tags.rb +1 -1
- data/lib/saper/actions/replace.rb +1 -1
- data/lib/saper/actions/run_recipe.rb +2 -2
- data/lib/saper/actions/run_recipe_and_save.rb +3 -3
- data/lib/saper/actions/save.rb +2 -2
- data/lib/saper/actions/select_matching.rb +2 -2
- data/lib/saper/actions/set_input.rb +1 -1
- data/lib/saper/actions/skip_tags.rb +1 -1
- data/lib/saper/actions/split.rb +1 -1
- data/lib/saper/arguments/attribute.rb +6 -0
- data/lib/saper/arguments/recipe.rb +12 -6
- data/lib/saper/arguments/service.rb +12 -0
- data/lib/saper/arguments/text.rb +1 -0
- data/lib/saper/arguments/timezone.rb +2 -1
- data/lib/saper/arguments/url.rb +12 -0
- data/lib/saper/arguments/variable.rb +2 -1
- data/lib/saper/arguments/xpath.rb +2 -1
- data/lib/saper/core/action.rb +43 -13
- data/lib/saper/core/argument.rb +30 -14
- data/lib/saper/core/browser.rb +29 -28
- data/lib/saper/core/dsl.rb +14 -16
- data/lib/saper/core/error.rb +1 -1
- data/lib/saper/core/item.rb +2 -2
- data/lib/saper/core/keychain.rb +58 -5
- data/lib/saper/core/namespace.rb +15 -18
- data/lib/saper/core/recipe.rb +53 -12
- data/lib/saper/core/result.rb +72 -0
- data/lib/saper/core/runtime.rb +44 -177
- data/lib/saper/core/stack.rb +57 -0
- data/lib/saper/items/atom.rb +18 -1
- data/lib/saper/items/document.rb +39 -19
- data/lib/saper/items/html.rb +52 -7
- data/lib/saper/items/json.rb +19 -1
- data/lib/saper/items/markdown.rb +14 -4
- data/lib/saper/items/nothing.rb +6 -0
- data/lib/saper/items/text.rb +28 -3
- data/lib/saper/items/time.rb +25 -2
- data/lib/saper/items/url.rb +8 -2
- data/lib/saper/items/xml.rb +51 -11
- data/lib/{lib → saper/patches}/mechanize.rb +0 -0
- data/lib/{lib → saper/patches}/nokogiri.rb +0 -0
- data/lib/saper/version.rb +2 -2
- data/spec/actions/append_with_spec.rb +29 -52
- data/spec/actions/convert_to_html_spec.rb +13 -30
- data/spec/actions/convert_to_json_spec.rb +13 -30
- data/spec/actions/convert_to_markdown_spec.rb +17 -19
- data/spec/actions/convert_to_time_spec.rb +25 -43
- data/spec/actions/convert_to_xml_spec.rb +15 -11
- data/spec/actions/create_atom_spec.rb +11 -19
- data/spec/actions/fetch_spec.rb +3 -8
- data/spec/actions/find_first_spec.rb +38 -40
- data/spec/actions/find_spec.rb +23 -39
- data/spec/actions/get_attribute_spec.rb +30 -3
- data/spec/actions/{get_contents.rb → get_contents_spec.rb} +0 -0
- data/spec/actions/{get_text.rb → get_text_spec.rb} +0 -0
- data/spec/actions/nothing_spec.rb +7 -0
- data/spec/actions/prepend_with_spec.rb +31 -18
- data/spec/actions/{remove_after.rb → remove_after_spec.rb} +0 -0
- data/spec/actions/{remove_before.rb → remove_before_spec.rb} +0 -0
- data/spec/actions/remove_matching_spec.rb +7 -0
- data/spec/actions/remove_tags_spec.rb +7 -0
- data/spec/actions/run_recipe_and_save_spec.rb +7 -0
- data/spec/actions/run_recipe_spec.rb +7 -0
- data/spec/arguments/attribute_spec.rb +7 -0
- data/spec/arguments/recipe_spec.rb +7 -0
- data/spec/arguments/text_spec.rb +7 -0
- data/spec/arguments/timezone_spec.rb +7 -0
- data/spec/arguments/variable_spec.rb +7 -0
- data/spec/arguments/xpath_spec.rb +7 -0
- data/spec/core/action_spec.rb +13 -142
- data/spec/core/argument_spec.rb +38 -71
- data/spec/core/browser_spec.rb +18 -3
- data/spec/core/dsl_spec.rb +1 -1
- data/spec/core/item_spec.rb +1 -1
- data/spec/core/namespace_spec.rb +0 -11
- data/spec/core/recipe_spec.rb +54 -77
- data/spec/core/result_spec.rb +7 -0
- data/spec/core/runtime_spec.rb +20 -151
- data/spec/core/stack_spec.rb +7 -0
- data/spec/integration/simple_invalid_spec.rb +39 -0
- data/spec/integration/simple_valid_spec.rb +39 -0
- data/spec/items/atom_spec.rb +6 -1
- data/spec/items/document_spec.rb +93 -15
- data/spec/items/html_spec.rb +45 -28
- data/spec/items/json_spec.rb +10 -10
- data/spec/items/markdown_spec.rb +24 -3
- data/spec/items/nothing_spec.rb +1 -1
- data/spec/items/text_spec.rb +13 -41
- data/spec/items/time_spec.rb +25 -4
- data/spec/items/url_spec.rb +1 -7
- data/spec/items/xml_spec.rb +46 -39
- data/spec/spec_helper.rb +2 -21
- metadata +63 -60
- data/lib/lib/json_search.rb +0 -54
- data/spec/actions/run_recipe_and_save_spec.tmp.rb +0 -52
- data/spec/actions/run_recipe_spec.tmp.rb +0 -53
data/spec/spec_helper.rb
CHANGED
@@ -1,22 +1,3 @@
|
|
1
|
+
require 'minitest/spec'
|
2
|
+
require 'minitest/autorun'
|
1
3
|
require 'saper'
|
2
|
-
|
3
|
-
class EmptyAction < Saper::Action
|
4
|
-
# default configuration
|
5
|
-
end
|
6
|
-
|
7
|
-
class TestAction < Saper::Action
|
8
|
-
accepts :text
|
9
|
-
end
|
10
|
-
|
11
|
-
class ActionWithMandatoryArgument < Saper::Action
|
12
|
-
accepts :text
|
13
|
-
argument :text
|
14
|
-
run { |input, string| "%s %s" % [string, input] }
|
15
|
-
end
|
16
|
-
|
17
|
-
class ActionWithOptionalArgument < Saper::Action
|
18
|
-
accepts :text
|
19
|
-
argument :text, :optional => true
|
20
|
-
run { |input, string| "%s %s" % [string, input] }
|
21
|
-
end
|
22
|
-
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: saper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Serebryakov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mechanize
|
@@ -52,20 +52,6 @@ dependencies:
|
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 1.8.1
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: vremya
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.0.0
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ~>
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 1.0.0
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: reverse_markdown
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,75 +81,61 @@ dependencies:
|
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: 2.0.0
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ~>
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: 10.3.1
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ~>
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: 10.3.1
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rspec
|
84
|
+
name: jpath
|
113
85
|
requirement: !ruby/object:Gem::Requirement
|
114
86
|
requirements:
|
115
87
|
- - ~>
|
116
88
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
118
|
-
type: :
|
89
|
+
version: 0.1.0
|
90
|
+
type: :runtime
|
119
91
|
prerelease: false
|
120
92
|
version_requirements: !ruby/object:Gem::Requirement
|
121
93
|
requirements:
|
122
94
|
- - ~>
|
123
95
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
96
|
+
version: 0.1.0
|
125
97
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
98
|
+
name: vremya
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
128
100
|
requirements:
|
129
101
|
- - ~>
|
130
102
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.
|
132
|
-
type: :
|
103
|
+
version: 1.0.0
|
104
|
+
type: :runtime
|
133
105
|
prerelease: false
|
134
106
|
version_requirements: !ruby/object:Gem::Requirement
|
135
107
|
requirements:
|
136
108
|
- - ~>
|
137
109
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0.
|
110
|
+
version: 1.0.0
|
139
111
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
112
|
+
name: rake
|
141
113
|
requirement: !ruby/object:Gem::Requirement
|
142
114
|
requirements:
|
143
115
|
- - ~>
|
144
116
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
117
|
+
version: 10.3.2
|
146
118
|
type: :development
|
147
119
|
prerelease: false
|
148
120
|
version_requirements: !ruby/object:Gem::Requirement
|
149
121
|
requirements:
|
150
122
|
- - ~>
|
151
123
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
124
|
+
version: 10.3.2
|
153
125
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
126
|
+
name: yard
|
155
127
|
requirement: !ruby/object:Gem::Requirement
|
156
128
|
requirements:
|
157
129
|
- - ~>
|
158
130
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
131
|
+
version: 0.8.7
|
160
132
|
type: :development
|
161
133
|
prerelease: false
|
162
134
|
version_requirements: !ruby/object:Gem::Requirement
|
163
135
|
requirements:
|
164
136
|
- - ~>
|
165
137
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
138
|
+
version: 0.8.7
|
167
139
|
description: Web automation library that allows to crawl websites and extract data
|
168
140
|
in an efficient and fault-tolerant manner.
|
169
141
|
email: alex@merimond.com
|
@@ -173,9 +145,6 @@ extensions: []
|
|
173
145
|
extra_rdoc_files: []
|
174
146
|
files:
|
175
147
|
- bin/saper
|
176
|
-
- lib/lib/json_search.rb
|
177
|
-
- lib/lib/mechanize.rb
|
178
|
-
- lib/lib/nokogiri.rb
|
179
148
|
- lib/saper/actions/append_with.rb
|
180
149
|
- lib/saper/actions/convert_to_html.rb
|
181
150
|
- lib/saper/actions/convert_to_json.rb
|
@@ -184,11 +153,13 @@ files:
|
|
184
153
|
- lib/saper/actions/convert_to_xml.rb
|
185
154
|
- lib/saper/actions/create_atom.rb
|
186
155
|
- lib/saper/actions/fetch.rb
|
156
|
+
- lib/saper/actions/fetch_with_token.rb
|
187
157
|
- lib/saper/actions/find.rb
|
188
158
|
- lib/saper/actions/find_first.rb
|
189
159
|
- lib/saper/actions/get_attribute.rb
|
190
160
|
- lib/saper/actions/get_contents.rb
|
191
161
|
- lib/saper/actions/get_text.rb
|
162
|
+
- lib/saper/actions/nothing.rb
|
192
163
|
- lib/saper/actions/prepend_with.rb
|
193
164
|
- lib/saper/actions/remove_after.rb
|
194
165
|
- lib/saper/actions/remove_before.rb
|
@@ -204,8 +175,10 @@ files:
|
|
204
175
|
- lib/saper/actions/split.rb
|
205
176
|
- lib/saper/arguments/attribute.rb
|
206
177
|
- lib/saper/arguments/recipe.rb
|
178
|
+
- lib/saper/arguments/service.rb
|
207
179
|
- lib/saper/arguments/text.rb
|
208
180
|
- lib/saper/arguments/timezone.rb
|
181
|
+
- lib/saper/arguments/url.rb
|
209
182
|
- lib/saper/arguments/variable.rb
|
210
183
|
- lib/saper/arguments/xpath.rb
|
211
184
|
- lib/saper/core/action.rb
|
@@ -218,7 +191,9 @@ files:
|
|
218
191
|
- lib/saper/core/logger.rb
|
219
192
|
- lib/saper/core/namespace.rb
|
220
193
|
- lib/saper/core/recipe.rb
|
194
|
+
- lib/saper/core/result.rb
|
221
195
|
- lib/saper/core/runtime.rb
|
196
|
+
- lib/saper/core/stack.rb
|
222
197
|
- lib/saper/core/type.rb
|
223
198
|
- lib/saper/items/atom.rb
|
224
199
|
- lib/saper/items/document.rb
|
@@ -230,6 +205,8 @@ files:
|
|
230
205
|
- lib/saper/items/time.rb
|
231
206
|
- lib/saper/items/url.rb
|
232
207
|
- lib/saper/items/xml.rb
|
208
|
+
- lib/saper/patches/mechanize.rb
|
209
|
+
- lib/saper/patches/nokogiri.rb
|
233
210
|
- lib/saper/version.rb
|
234
211
|
- lib/saper.rb
|
235
212
|
- Rakefile
|
@@ -246,19 +223,28 @@ files:
|
|
246
223
|
- spec/actions/find_first_spec.rb
|
247
224
|
- spec/actions/find_spec.rb
|
248
225
|
- spec/actions/get_attribute_spec.rb
|
249
|
-
- spec/actions/
|
250
|
-
- spec/actions/
|
226
|
+
- spec/actions/get_contents_spec.rb
|
227
|
+
- spec/actions/get_text_spec.rb
|
228
|
+
- spec/actions/nothing_spec.rb
|
251
229
|
- spec/actions/prepend_with_spec.rb
|
252
|
-
- spec/actions/
|
253
|
-
- spec/actions/
|
230
|
+
- spec/actions/remove_after_spec.rb
|
231
|
+
- spec/actions/remove_before_spec.rb
|
232
|
+
- spec/actions/remove_matching_spec.rb
|
233
|
+
- spec/actions/remove_tags_spec.rb
|
254
234
|
- spec/actions/replace_spec.rb
|
255
|
-
- spec/actions/run_recipe_and_save_spec.
|
256
|
-
- spec/actions/run_recipe_spec.
|
235
|
+
- spec/actions/run_recipe_and_save_spec.rb
|
236
|
+
- spec/actions/run_recipe_spec.rb
|
257
237
|
- spec/actions/save_spec.rb
|
258
238
|
- spec/actions/select_matching_spec.rb
|
259
239
|
- spec/actions/set_input_spec.rb
|
260
240
|
- spec/actions/skip_tags_spec.rb
|
261
241
|
- spec/actions/split_spec.rb
|
242
|
+
- spec/arguments/attribute_spec.rb
|
243
|
+
- spec/arguments/recipe_spec.rb
|
244
|
+
- spec/arguments/text_spec.rb
|
245
|
+
- spec/arguments/timezone_spec.rb
|
246
|
+
- spec/arguments/variable_spec.rb
|
247
|
+
- spec/arguments/xpath_spec.rb
|
262
248
|
- spec/core/action_spec.rb
|
263
249
|
- spec/core/argument_spec.rb
|
264
250
|
- spec/core/browser_spec.rb
|
@@ -268,8 +254,12 @@ files:
|
|
268
254
|
- spec/core/logger_spec.rb
|
269
255
|
- spec/core/namespace_spec.rb
|
270
256
|
- spec/core/recipe_spec.rb
|
257
|
+
- spec/core/result_spec.rb
|
271
258
|
- spec/core/runtime_spec.rb
|
259
|
+
- spec/core/stack_spec.rb
|
272
260
|
- spec/core/type_spec.rb
|
261
|
+
- spec/integration/simple_invalid_spec.rb
|
262
|
+
- spec/integration/simple_valid_spec.rb
|
273
263
|
- spec/items/atom_spec.rb
|
274
264
|
- spec/items/document_spec.rb
|
275
265
|
- spec/items/html_spec.rb
|
@@ -301,7 +291,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
301
291
|
version: '0'
|
302
292
|
requirements: []
|
303
293
|
rubyforge_project:
|
304
|
-
rubygems_version: 2.0.
|
294
|
+
rubygems_version: 2.0.14
|
305
295
|
signing_key:
|
306
296
|
specification_version: 4
|
307
297
|
summary: Ruby data scraping library
|
@@ -317,19 +307,28 @@ test_files:
|
|
317
307
|
- spec/actions/find_first_spec.rb
|
318
308
|
- spec/actions/find_spec.rb
|
319
309
|
- spec/actions/get_attribute_spec.rb
|
320
|
-
- spec/actions/
|
321
|
-
- spec/actions/
|
310
|
+
- spec/actions/get_contents_spec.rb
|
311
|
+
- spec/actions/get_text_spec.rb
|
312
|
+
- spec/actions/nothing_spec.rb
|
322
313
|
- spec/actions/prepend_with_spec.rb
|
323
|
-
- spec/actions/
|
324
|
-
- spec/actions/
|
314
|
+
- spec/actions/remove_after_spec.rb
|
315
|
+
- spec/actions/remove_before_spec.rb
|
316
|
+
- spec/actions/remove_matching_spec.rb
|
317
|
+
- spec/actions/remove_tags_spec.rb
|
325
318
|
- spec/actions/replace_spec.rb
|
326
|
-
- spec/actions/run_recipe_and_save_spec.
|
327
|
-
- spec/actions/run_recipe_spec.
|
319
|
+
- spec/actions/run_recipe_and_save_spec.rb
|
320
|
+
- spec/actions/run_recipe_spec.rb
|
328
321
|
- spec/actions/save_spec.rb
|
329
322
|
- spec/actions/select_matching_spec.rb
|
330
323
|
- spec/actions/set_input_spec.rb
|
331
324
|
- spec/actions/skip_tags_spec.rb
|
332
325
|
- spec/actions/split_spec.rb
|
326
|
+
- spec/arguments/attribute_spec.rb
|
327
|
+
- spec/arguments/recipe_spec.rb
|
328
|
+
- spec/arguments/text_spec.rb
|
329
|
+
- spec/arguments/timezone_spec.rb
|
330
|
+
- spec/arguments/variable_spec.rb
|
331
|
+
- spec/arguments/xpath_spec.rb
|
333
332
|
- spec/core/action_spec.rb
|
334
333
|
- spec/core/argument_spec.rb
|
335
334
|
- spec/core/browser_spec.rb
|
@@ -339,8 +338,12 @@ test_files:
|
|
339
338
|
- spec/core/logger_spec.rb
|
340
339
|
- spec/core/namespace_spec.rb
|
341
340
|
- spec/core/recipe_spec.rb
|
341
|
+
- spec/core/result_spec.rb
|
342
342
|
- spec/core/runtime_spec.rb
|
343
|
+
- spec/core/stack_spec.rb
|
343
344
|
- spec/core/type_spec.rb
|
345
|
+
- spec/integration/simple_invalid_spec.rb
|
346
|
+
- spec/integration/simple_valid_spec.rb
|
344
347
|
- spec/items/atom_spec.rb
|
345
348
|
- spec/items/document_spec.rb
|
346
349
|
- spec/items/html_spec.rb
|
data/lib/lib/json_search.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
# XPath-style library for JSON
|
2
|
-
|
3
|
-
module JSONSearch
|
4
|
-
|
5
|
-
def self.find(object, selector)
|
6
|
-
if object.is_a?(Array)
|
7
|
-
return object.map { |item|
|
8
|
-
find(item, selector)
|
9
|
-
}.flatten.compact
|
10
|
-
end
|
11
|
-
case selector
|
12
|
-
when /\A\/([^\/]+)/
|
13
|
-
name = $1
|
14
|
-
sub = selector.sub($&, "")
|
15
|
-
children(object, name).map { |child|
|
16
|
-
find(child, sub)
|
17
|
-
}.flatten.compact
|
18
|
-
when /\A\/\/([^\/]+)/
|
19
|
-
name = $1
|
20
|
-
sub = selector.sub($&, "")
|
21
|
-
descendants(object, name).map { |descendant|
|
22
|
-
find(descendant, sub)
|
23
|
-
}.flatten.compact
|
24
|
-
when /\A\z/
|
25
|
-
object
|
26
|
-
else
|
27
|
-
raise "Unsupported selector"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def self.children(object, name)
|
32
|
-
case object
|
33
|
-
when Array
|
34
|
-
object.map { |item|
|
35
|
-
children(item, name)
|
36
|
-
}.flatten
|
37
|
-
when Hash
|
38
|
-
if name == "*"
|
39
|
-
object.values
|
40
|
-
else
|
41
|
-
[object[name]]
|
42
|
-
end
|
43
|
-
else
|
44
|
-
[]
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.descendants(object, name)
|
49
|
-
children(object, "*").map { |child|
|
50
|
-
descendants(child, name)
|
51
|
-
}.push(*children(object, name))
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
require './spec/spec_helper'
|
2
|
-
|
3
|
-
describe Saper::Actions::RunRecipeAndSave do
|
4
|
-
|
5
|
-
let(:namespace) do
|
6
|
-
Saper::Namespace.parse do |ns|
|
7
|
-
recipe :child do
|
8
|
-
prepend_with 'test-'
|
9
|
-
end
|
10
|
-
recipe :parent do
|
11
|
-
run_recipe_and_save :variable, :child
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context "when argument is missing" do
|
17
|
-
it "raises InvalidArgument" do
|
18
|
-
expect { Saper::Action.new(:run_recipe_and_save).run }.to raise_error(Saper::InvalidArgument)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context "when input is invalid" do
|
23
|
-
let(:runtime) do
|
24
|
-
namespace.run(:parent, nil)
|
25
|
-
end
|
26
|
-
it "raises no errors" do
|
27
|
-
expect { runtime }.to_not raise_error
|
28
|
-
end
|
29
|
-
it "returns valid output" do
|
30
|
-
runtime.results.should == nil
|
31
|
-
end
|
32
|
-
it "sets error flag in runtime" do
|
33
|
-
runtime.error?.should be_true
|
34
|
-
end
|
35
|
-
it "records error in runtime" do
|
36
|
-
runtime.error.should be_a(Saper::InvalidInput)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "when input and arguments are valid" do
|
41
|
-
let(:runtime) do
|
42
|
-
Saper::Action.new(:run_recipe_and_save, :variable, :child).run('string', :namespace => namespace)
|
43
|
-
end
|
44
|
-
it "raises no errors" do
|
45
|
-
expect { runtime }.to_not raise_error
|
46
|
-
end
|
47
|
-
it "returns valid output" do
|
48
|
-
runtime.results.should == ['test-string']
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require './spec/spec_helper'
|
2
|
-
|
3
|
-
describe Saper::Actions::RunRecipe do
|
4
|
-
|
5
|
-
let(:child) do
|
6
|
-
Saper::Recipe.new do |recipe|
|
7
|
-
recipe << Saper::Action.new(:prepend_with, 'test-')
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
let(:namespace) do
|
12
|
-
Saper::Namespace.new do |ns|
|
13
|
-
ns[:child] = child
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "when argument is missing" do
|
18
|
-
it "raises InvalidArgument" do
|
19
|
-
expect { Saper::Action.new(:run_recipe).run }.to raise_error(Saper::InvalidArgument)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "when input is invalid" do
|
24
|
-
let(:runtime) do
|
25
|
-
Saper::Action.new(:run_recipe, :child).run(nil, :namespace => namespace)
|
26
|
-
end
|
27
|
-
it "raises no errors" do
|
28
|
-
expect { runtime }.to_not raise_error
|
29
|
-
end
|
30
|
-
it "returns valid output" do
|
31
|
-
runtime.results.should == nil
|
32
|
-
end
|
33
|
-
it "sets error flag in runtime" do
|
34
|
-
runtime.error?.should be_true
|
35
|
-
end
|
36
|
-
it "records error in runtime" do
|
37
|
-
runtime.error.should be_a(Saper::InvalidInput)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context "when input and arguments are valid" do
|
42
|
-
let(:runtime) do
|
43
|
-
Saper::Action.new(:run_recipe, :child).run('string', :namespace => namespace)
|
44
|
-
end
|
45
|
-
it "raises no errors" do
|
46
|
-
expect { runtime }.to_not raise_error
|
47
|
-
end
|
48
|
-
it "returns valid output" do
|
49
|
-
runtime.results.should == 'test-string'
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|