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.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -0
  3. data/Rakefile +6 -6
  4. data/bin/saper +17 -36
  5. data/lib/saper.rb +63 -20
  6. data/lib/saper/actions/append_with.rb +1 -1
  7. data/lib/saper/actions/convert_to_html.rb +1 -1
  8. data/lib/saper/actions/convert_to_json.rb +6 -2
  9. data/lib/saper/actions/convert_to_markdown.rb +1 -1
  10. data/lib/saper/actions/convert_to_time.rb +38 -1
  11. data/lib/saper/actions/convert_to_xml.rb +1 -1
  12. data/lib/saper/actions/create_atom.rb +6 -2
  13. data/lib/saper/actions/fetch.rb +3 -2
  14. data/lib/saper/actions/fetch_with_token.rb +18 -0
  15. data/lib/saper/actions/find.rb +1 -1
  16. data/lib/saper/actions/find_first.rb +1 -1
  17. data/lib/saper/actions/get_attribute.rb +7 -2
  18. data/lib/saper/actions/get_contents.rb +1 -1
  19. data/lib/saper/actions/get_text.rb +1 -1
  20. data/lib/saper/actions/nothing.rb +11 -0
  21. data/lib/saper/actions/prepend_with.rb +2 -2
  22. data/lib/saper/actions/remove_after.rb +2 -2
  23. data/lib/saper/actions/remove_before.rb +2 -2
  24. data/lib/saper/actions/remove_matching.rb +2 -2
  25. data/lib/saper/actions/remove_tags.rb +1 -1
  26. data/lib/saper/actions/replace.rb +1 -1
  27. data/lib/saper/actions/run_recipe.rb +2 -2
  28. data/lib/saper/actions/run_recipe_and_save.rb +3 -3
  29. data/lib/saper/actions/save.rb +2 -2
  30. data/lib/saper/actions/select_matching.rb +2 -2
  31. data/lib/saper/actions/set_input.rb +1 -1
  32. data/lib/saper/actions/skip_tags.rb +1 -1
  33. data/lib/saper/actions/split.rb +1 -1
  34. data/lib/saper/arguments/attribute.rb +6 -0
  35. data/lib/saper/arguments/recipe.rb +12 -6
  36. data/lib/saper/arguments/service.rb +12 -0
  37. data/lib/saper/arguments/text.rb +1 -0
  38. data/lib/saper/arguments/timezone.rb +2 -1
  39. data/lib/saper/arguments/url.rb +12 -0
  40. data/lib/saper/arguments/variable.rb +2 -1
  41. data/lib/saper/arguments/xpath.rb +2 -1
  42. data/lib/saper/core/action.rb +43 -13
  43. data/lib/saper/core/argument.rb +30 -14
  44. data/lib/saper/core/browser.rb +29 -28
  45. data/lib/saper/core/dsl.rb +14 -16
  46. data/lib/saper/core/error.rb +1 -1
  47. data/lib/saper/core/item.rb +2 -2
  48. data/lib/saper/core/keychain.rb +58 -5
  49. data/lib/saper/core/namespace.rb +15 -18
  50. data/lib/saper/core/recipe.rb +53 -12
  51. data/lib/saper/core/result.rb +72 -0
  52. data/lib/saper/core/runtime.rb +44 -177
  53. data/lib/saper/core/stack.rb +57 -0
  54. data/lib/saper/items/atom.rb +18 -1
  55. data/lib/saper/items/document.rb +39 -19
  56. data/lib/saper/items/html.rb +52 -7
  57. data/lib/saper/items/json.rb +19 -1
  58. data/lib/saper/items/markdown.rb +14 -4
  59. data/lib/saper/items/nothing.rb +6 -0
  60. data/lib/saper/items/text.rb +28 -3
  61. data/lib/saper/items/time.rb +25 -2
  62. data/lib/saper/items/url.rb +8 -2
  63. data/lib/saper/items/xml.rb +51 -11
  64. data/lib/{lib → saper/patches}/mechanize.rb +0 -0
  65. data/lib/{lib → saper/patches}/nokogiri.rb +0 -0
  66. data/lib/saper/version.rb +2 -2
  67. data/spec/actions/append_with_spec.rb +29 -52
  68. data/spec/actions/convert_to_html_spec.rb +13 -30
  69. data/spec/actions/convert_to_json_spec.rb +13 -30
  70. data/spec/actions/convert_to_markdown_spec.rb +17 -19
  71. data/spec/actions/convert_to_time_spec.rb +25 -43
  72. data/spec/actions/convert_to_xml_spec.rb +15 -11
  73. data/spec/actions/create_atom_spec.rb +11 -19
  74. data/spec/actions/fetch_spec.rb +3 -8
  75. data/spec/actions/find_first_spec.rb +38 -40
  76. data/spec/actions/find_spec.rb +23 -39
  77. data/spec/actions/get_attribute_spec.rb +30 -3
  78. data/spec/actions/{get_contents.rb → get_contents_spec.rb} +0 -0
  79. data/spec/actions/{get_text.rb → get_text_spec.rb} +0 -0
  80. data/spec/actions/nothing_spec.rb +7 -0
  81. data/spec/actions/prepend_with_spec.rb +31 -18
  82. data/spec/actions/{remove_after.rb → remove_after_spec.rb} +0 -0
  83. data/spec/actions/{remove_before.rb → remove_before_spec.rb} +0 -0
  84. data/spec/actions/remove_matching_spec.rb +7 -0
  85. data/spec/actions/remove_tags_spec.rb +7 -0
  86. data/spec/actions/run_recipe_and_save_spec.rb +7 -0
  87. data/spec/actions/run_recipe_spec.rb +7 -0
  88. data/spec/arguments/attribute_spec.rb +7 -0
  89. data/spec/arguments/recipe_spec.rb +7 -0
  90. data/spec/arguments/text_spec.rb +7 -0
  91. data/spec/arguments/timezone_spec.rb +7 -0
  92. data/spec/arguments/variable_spec.rb +7 -0
  93. data/spec/arguments/xpath_spec.rb +7 -0
  94. data/spec/core/action_spec.rb +13 -142
  95. data/spec/core/argument_spec.rb +38 -71
  96. data/spec/core/browser_spec.rb +18 -3
  97. data/spec/core/dsl_spec.rb +1 -1
  98. data/spec/core/item_spec.rb +1 -1
  99. data/spec/core/namespace_spec.rb +0 -11
  100. data/spec/core/recipe_spec.rb +54 -77
  101. data/spec/core/result_spec.rb +7 -0
  102. data/spec/core/runtime_spec.rb +20 -151
  103. data/spec/core/stack_spec.rb +7 -0
  104. data/spec/integration/simple_invalid_spec.rb +39 -0
  105. data/spec/integration/simple_valid_spec.rb +39 -0
  106. data/spec/items/atom_spec.rb +6 -1
  107. data/spec/items/document_spec.rb +93 -15
  108. data/spec/items/html_spec.rb +45 -28
  109. data/spec/items/json_spec.rb +10 -10
  110. data/spec/items/markdown_spec.rb +24 -3
  111. data/spec/items/nothing_spec.rb +1 -1
  112. data/spec/items/text_spec.rb +13 -41
  113. data/spec/items/time_spec.rb +25 -4
  114. data/spec/items/url_spec.rb +1 -7
  115. data/spec/items/xml_spec.rb +46 -39
  116. data/spec/spec_helper.rb +2 -21
  117. metadata +63 -60
  118. data/lib/lib/json_search.rb +0 -54
  119. data/spec/actions/run_recipe_and_save_spec.tmp.rb +0 -52
  120. data/spec/actions/run_recipe_spec.tmp.rb +0 -53
@@ -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.1
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-05-05 00:00:00.000000000 Z
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: rake
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: 2.14.1
118
- type: :development
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: 2.14.1
96
+ version: 0.1.0
125
97
  - !ruby/object:Gem::Dependency
126
- name: yard
98
+ name: vremya
127
99
  requirement: !ruby/object:Gem::Requirement
128
100
  requirements:
129
101
  - - ~>
130
102
  - !ruby/object:Gem::Version
131
- version: 0.8.7
132
- type: :development
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.8.7
110
+ version: 1.0.0
139
111
  - !ruby/object:Gem::Dependency
140
- name: guard
112
+ name: rake
141
113
  requirement: !ruby/object:Gem::Requirement
142
114
  requirements:
143
115
  - - ~>
144
116
  - !ruby/object:Gem::Version
145
- version: 2.6.0
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: 2.6.0
124
+ version: 10.3.2
153
125
  - !ruby/object:Gem::Dependency
154
- name: guard-rspec
126
+ name: yard
155
127
  requirement: !ruby/object:Gem::Requirement
156
128
  requirements:
157
129
  - - ~>
158
130
  - !ruby/object:Gem::Version
159
- version: 4.2.8
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: 4.2.8
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/get_contents.rb
250
- - spec/actions/get_text.rb
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/remove_after.rb
253
- - spec/actions/remove_before.rb
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.tmp.rb
256
- - spec/actions/run_recipe_spec.tmp.rb
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.3
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/get_contents.rb
321
- - spec/actions/get_text.rb
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/remove_after.rb
324
- - spec/actions/remove_before.rb
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.tmp.rb
327
- - spec/actions/run_recipe_spec.tmp.rb
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
@@ -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