scrapinghub-client 0.0.1

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 (61) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +6 -0
  5. data/Gemfile +5 -0
  6. data/LICENSE +21 -0
  7. data/README.md +46 -0
  8. data/Rakefile +22 -0
  9. data/lib/scrapinghub-client.rb +3 -0
  10. data/lib/scrapinghub/jobs.rb +175 -0
  11. data/lib/scrapinghub/version.rb +3 -0
  12. data/scrapinghub.gemspec +26 -0
  13. data/spec/fixtures/vcr_cassettes/jobs/delete/bad_auth.yml +38 -0
  14. data/spec/fixtures/vcr_cassettes/jobs/delete/job/invalid.yml +38 -0
  15. data/spec/fixtures/vcr_cassettes/jobs/delete/job/multiple.yml +38 -0
  16. data/spec/fixtures/vcr_cassettes/jobs/delete/job/single.yml +38 -0
  17. data/spec/fixtures/vcr_cassettes/jobs/delete/project/invalid.yml +39 -0
  18. data/spec/fixtures/vcr_cassettes/jobs/delete/project/valid.yml +38 -0
  19. data/spec/fixtures/vcr_cassettes/jobs/list/bad_auth.yml +38 -0
  20. data/spec/fixtures/vcr_cassettes/jobs/list/count/3.yml +53 -0
  21. data/spec/fixtures/vcr_cassettes/jobs/list/has_tag/invalid.yml +38 -0
  22. data/spec/fixtures/vcr_cassettes/jobs/list/has_tag/multiple.yml +53 -0
  23. data/spec/fixtures/vcr_cassettes/jobs/list/has_tag/single.yml +48 -0
  24. data/spec/fixtures/vcr_cassettes/jobs/list/job/invalid.yml +38 -0
  25. data/spec/fixtures/vcr_cassettes/jobs/list/job/multiple.yml +48 -0
  26. data/spec/fixtures/vcr_cassettes/jobs/list/job/single.yml +43 -0
  27. data/spec/fixtures/vcr_cassettes/jobs/list/lacks_tag/invalid.yml +81 -0
  28. data/spec/fixtures/vcr_cassettes/jobs/list/lacks_tag/multiple.yml +67 -0
  29. data/spec/fixtures/vcr_cassettes/jobs/list/lacks_tag/single.yml +72 -0
  30. data/spec/fixtures/vcr_cassettes/jobs/list/project/invalid.yml +39 -0
  31. data/spec/fixtures/vcr_cassettes/jobs/list/project/valid.yml +81 -0
  32. data/spec/fixtures/vcr_cassettes/jobs/list/spider/invalid.yml +38 -0
  33. data/spec/fixtures/vcr_cassettes/jobs/list/spider/valid.yml +62 -0
  34. data/spec/fixtures/vcr_cassettes/jobs/list/state/finished.yml +81 -0
  35. data/spec/fixtures/vcr_cassettes/jobs/list/state/pending.yml +38 -0
  36. data/spec/fixtures/vcr_cassettes/jobs/schedule/bad_auth.yml +38 -0
  37. data/spec/fixtures/vcr_cassettes/jobs/schedule/project/invalid.yml +39 -0
  38. data/spec/fixtures/vcr_cassettes/jobs/schedule/spider/add_tag.yml +38 -0
  39. data/spec/fixtures/vcr_cassettes/jobs/schedule/spider/already-running.yml +39 -0
  40. data/spec/fixtures/vcr_cassettes/jobs/schedule/spider/extra.yml +38 -0
  41. data/spec/fixtures/vcr_cassettes/jobs/schedule/spider/minimal.yml +38 -0
  42. data/spec/fixtures/vcr_cassettes/jobs/schedule/spider/priority.yml +38 -0
  43. data/spec/fixtures/vcr_cassettes/jobs/stop/bad_auth.yml +38 -0
  44. data/spec/fixtures/vcr_cassettes/jobs/stop/job/already-stopped.yml +38 -0
  45. data/spec/fixtures/vcr_cassettes/jobs/stop/job/invalid.yml +38 -0
  46. data/spec/fixtures/vcr_cassettes/jobs/stop/job/valid.yml +38 -0
  47. data/spec/fixtures/vcr_cassettes/jobs/stop/project/invalid.yml +39 -0
  48. data/spec/fixtures/vcr_cassettes/jobs/update/bad_auth.yml +38 -0
  49. data/spec/fixtures/vcr_cassettes/jobs/update/has_tag.yml +38 -0
  50. data/spec/fixtures/vcr_cassettes/jobs/update/job.yml +38 -0
  51. data/spec/fixtures/vcr_cassettes/jobs/update/lacks_tag.yml +38 -0
  52. data/spec/fixtures/vcr_cassettes/jobs/update/no-query-filters.yml +38 -0
  53. data/spec/fixtures/vcr_cassettes/jobs/update/no-update-params.yml +38 -0
  54. data/spec/fixtures/vcr_cassettes/jobs/update/project/invalid.yml +39 -0
  55. data/spec/fixtures/vcr_cassettes/jobs/update/spider.yml +38 -0
  56. data/spec/fixtures/vcr_cassettes/jobs/update/state.yml +38 -0
  57. data/spec/integration/jobs_spec.rb +567 -0
  58. data/spec/spec_helper.rb +22 -0
  59. data/spec/unit/jobs_spec.rb +188 -0
  60. data/spec/unit/scrapinghub_spec.rb +8 -0
  61. metadata +200 -0
@@ -0,0 +1,22 @@
1
+ if ENV['CODECLIMATE_REPO_TOKEN']
2
+ require "codeclimate-test-reporter"
3
+ CodeClimate::TestReporter.start
4
+ end
5
+ require "rspec"
6
+ require "webmock/rspec"
7
+ require "vcr"
8
+ require "scrapinghub-client"
9
+
10
+ RSpec::Expectations.configuration.warn_about_potential_false_positives = false
11
+
12
+ VCR.configure do |config|
13
+ config.cassette_library_dir = "spec/fixtures/vcr_cassettes"
14
+ config.configure_rspec_metadata!
15
+ config.hook_into :webmock
16
+ # allow code coverage reports to be sent to Code Climate
17
+ config.ignore_hosts "codeclimate.com"
18
+ end
19
+
20
+ RSpec.configure do |c|
21
+ c.extend VCR::RSpec::Macros
22
+ end
@@ -0,0 +1,188 @@
1
+ require File.dirname(__FILE__) + "/../spec_helper"
2
+ require "rspec/autorun"
3
+
4
+ shared_examples "disallows_unknown_keys" do
5
+ it "disallows unknown keys" do
6
+ expect{jobs.send(action, args.merge(foo: "blah"))}.to raise_error ParamContractError
7
+ end
8
+ end
9
+
10
+ describe Scrapinghub::Jobs do
11
+ let(:jobs) { Scrapinghub::Jobs.new(api_key: 'XXX') }
12
+
13
+ context "initialization" do
14
+ context "api_key" do
15
+ it "is required" do
16
+ expect{Scrapinghub::Jobs.new}.to raise_error ParamContractError
17
+ expect{Scrapinghub::Jobs.new({})}.to raise_error ParamContractError
18
+ end
19
+
20
+ it "must be a String" do
21
+ expect{Scrapinghub::Jobs.new(api_key: nil)}.to raise_error ParamContractError
22
+ expect{Scrapinghub::Jobs.new(api_key: 1)}.to raise_error ParamContractError
23
+ expect(Scrapinghub::Jobs.new(api_key: "foo")).to be_a Scrapinghub::Jobs
24
+ end
25
+ end
26
+ end
27
+
28
+ context "#list" do
29
+ let(:action) { :list }
30
+ let(:args) { {project: 1} }
31
+
32
+ it_behaves_like "disallows_unknown_keys"
33
+
34
+ context "valid arguments" do
35
+ it "passes argument validation" do
36
+ expect{jobs.send(action, args)}.not_to raise_error ParamContractError
37
+ end
38
+ end
39
+
40
+ context "project" do
41
+ it "is required" do
42
+ expect{jobs.send(action, args.reject{|k,_| k == :project})}.to raise_error ParamContractError
43
+ end
44
+
45
+ it "must be a natural number" do
46
+ expect{jobs.send(action, args.merge(project: nil))}.to raise_error ParamContractError
47
+ expect{jobs.send(action, args.merge(project: "foo"))}.to raise_error ParamContractError
48
+ expect{jobs.send(action, args.merge(project: 1.234))}.to raise_error ParamContractError
49
+ expect{jobs.send(action, args.merge(project: -1))}.to raise_error ParamContractError
50
+ expect{jobs.send(action, args.merge(project: 1))}.not_to raise_error ParamContractError
51
+ end
52
+ end
53
+
54
+ context "job" do
55
+ it "must be a String or Array[String]" do
56
+ expect{jobs.send(action, args.merge(job: nil))}.to raise_error ParamContractError
57
+ expect{jobs.send(action, args.merge(job: 1.234))}.to raise_error ParamContractError
58
+ expect{jobs.send(action, args.merge(job: -1))}.to raise_error ParamContractError
59
+ expect{jobs.send(action, args.merge(job: 1))}.to raise_error ParamContractError
60
+ expect{jobs.send(action, args.merge(job: "foo"))}.not_to raise_error ParamContractError
61
+ expect{jobs.send(action, args.merge(job: ["foo", "bar"]))}.not_to raise_error ParamContractError
62
+ end
63
+ end
64
+
65
+ context "spider" do
66
+ it "must be a String" do
67
+ expect{jobs.send(action, args.merge(spider: nil))}.to raise_error ParamContractError
68
+ expect{jobs.send(action, args.merge(spider: 1.234))}.to raise_error ParamContractError
69
+ expect{jobs.send(action, args.merge(spider: -1))}.to raise_error ParamContractError
70
+ expect{jobs.send(action, args.merge(spider: 1))}.to raise_error ParamContractError
71
+ expect{jobs.send(action, args.merge(spider: "foo"))}.not_to raise_error ParamContractError
72
+ end
73
+ end
74
+
75
+ context "state" do
76
+ it "must be 'pending', 'running', or 'finished'" do
77
+ expect{jobs.send(action, args.merge(state: nil))}.to raise_error ParamContractError
78
+ expect{jobs.send(action, args.merge(state: []))}.to raise_error ParamContractError
79
+ expect{jobs.send(action, args.merge(state: "foo"))}.to raise_error ParamContractError
80
+ expect{jobs.send(action, args.merge(state: "pending"))}.not_to raise_error ParamContractError
81
+ expect{jobs.send(action, args.merge(state: "running"))}.not_to raise_error ParamContractError
82
+ expect{jobs.send(action, args.merge(state: "finished"))}.not_to raise_error ParamContractError
83
+ end
84
+ end
85
+
86
+ context "has_tag" do
87
+ it "must be a String or Array[String]" do
88
+ expect{jobs.send(action, args.merge(has_tag: nil))}.to raise_error ParamContractError
89
+ expect{jobs.send(action, args.merge(has_tag: 1.234))}.to raise_error ParamContractError
90
+ expect{jobs.send(action, args.merge(has_tag: -1))}.to raise_error ParamContractError
91
+ expect{jobs.send(action, args.merge(has_tag: 1))}.to raise_error ParamContractError
92
+ expect{jobs.send(action, args.merge(has_tag: [1,2,3]))}.to raise_error ParamContractError
93
+ expect{jobs.send(action, args.merge(has_tag: "foo"))}.not_to raise_error ParamContractError
94
+ expect{jobs.send(action, args.merge(has_tag: ["foo", "bar"]))}.not_to raise_error ParamContractError
95
+ end
96
+ end
97
+
98
+ context "lacks_tag" do
99
+ it "must be a String or Array[String]" do
100
+ expect{jobs.send(action, args.merge(lacks_tag: nil))}.to raise_error ParamContractError
101
+ expect{jobs.send(action, args.merge(lacks_tag: 1.234))}.to raise_error ParamContractError
102
+ expect{jobs.send(action, args.merge(lacks_tag: -1))}.to raise_error ParamContractError
103
+ expect{jobs.send(action, args.merge(lacks_tag: 1))}.to raise_error ParamContractError
104
+ expect{jobs.send(action, args.merge(lacks_tag: [1,2,3]))}.to raise_error ParamContractError
105
+ expect{jobs.send(action, args.merge(lacks_tag: "foo"))}.not_to raise_error ParamContractError
106
+ expect{jobs.send(action, args.merge(lacks_tag: ["foo", "bar"]))}.not_to raise_error ParamContractError
107
+ end
108
+ end
109
+ end
110
+
111
+ context "#schedule" do
112
+ let(:action) { :schedule }
113
+ let(:args) { {project: 1, spider: "foo"} }
114
+
115
+ it_behaves_like "disallows_unknown_keys"
116
+
117
+ context "valid arguments" do
118
+ it "passes argument validation" do
119
+ expect{jobs.send(action, args)}.not_to raise_error ParamContractError
120
+ end
121
+ end
122
+
123
+ context "project" do
124
+ it "is required" do
125
+ expect{jobs.send(action, args.reject{|k,_| k == :project})}.to raise_error ParamContractError
126
+ end
127
+
128
+ it "must be a natural number" do
129
+ expect{jobs.send(action, args.merge(project: nil))}.to raise_error ParamContractError
130
+ expect{jobs.send(action, args.merge(project: "foo"))}.to raise_error ParamContractError
131
+ expect{jobs.send(action, args.merge(project: 1.234))}.to raise_error ParamContractError
132
+ expect{jobs.send(action, args.merge(project: -1))}.to raise_error ParamContractError
133
+ expect{jobs.send(action, args.merge(project: 1))}.not_to raise_error ParamContractError
134
+ end
135
+ end
136
+
137
+ context "spider" do
138
+ it "is required" do
139
+ expect{jobs.send(action, args.reject{|k,_| k == :spider})}.to raise_error ParamContractError
140
+ end
141
+
142
+ it "must be a String" do
143
+ expect{jobs.send(action, args.merge(spider: nil))}.to raise_error ParamContractError
144
+ expect{jobs.send(action, args.merge(spider: 1.234))}.to raise_error ParamContractError
145
+ expect{jobs.send(action, args.merge(spider: -1))}.to raise_error ParamContractError
146
+ expect{jobs.send(action, args.merge(spider: 1))}.to raise_error ParamContractError
147
+ expect{jobs.send(action, args.merge(spider: "foo"))}.not_to raise_error ParamContractError
148
+ end
149
+ end
150
+
151
+ context "add_tag" do
152
+ it "must be a String or Array[String]" do
153
+ expect{jobs.send(action, args.merge(add_tag: nil))}.to raise_error ParamContractError
154
+ expect{jobs.send(action, args.merge(add_tag: 1.234))}.to raise_error ParamContractError
155
+ expect{jobs.send(action, args.merge(add_tag: -1))}.to raise_error ParamContractError
156
+ expect{jobs.send(action, args.merge(add_tag: 1))}.to raise_error ParamContractError
157
+ expect{jobs.send(action, args.merge(add_tag: [1,2,3]))}.to raise_error ParamContractError
158
+ expect{jobs.send(action, args.merge(add_tag: "foo"))}.not_to raise_error ParamContractError
159
+ expect{jobs.send(action, args.merge(add_tag: ["foo", "bar"]))}.not_to raise_error ParamContractError
160
+ end
161
+ end
162
+
163
+ context "priority" do
164
+ it "must be 0, 1, 2, 3, or 4" do
165
+ expect{jobs.send(action, args.merge(priority: nil))}.to raise_error ParamContractError
166
+ expect{jobs.send(action, args.merge(priority: 1.234))}.to raise_error ParamContractError
167
+ expect{jobs.send(action, args.merge(priority: -1))}.to raise_error ParamContractError
168
+ expect{jobs.send(action, args.merge(priority: 5))}.to raise_error ParamContractError
169
+ expect{jobs.send(action, args.merge(priority: "foo"))}.to raise_error ParamContractError
170
+ expect{jobs.send(action, args.merge(priority: []))}.to raise_error ParamContractError
171
+ end
172
+ end
173
+
174
+ context "extra" do
175
+ it "must be a HashOf[Symbol => String]" do
176
+ expect{jobs.send(action, args.merge(extra: nil))}.to raise_error ParamContractError
177
+ expect{jobs.send(action, args.merge(extra: 1.234))}.to raise_error ParamContractError
178
+ expect{jobs.send(action, args.merge(extra: -1))}.to raise_error ParamContractError
179
+ expect{jobs.send(action, args.merge(extra: 5))}.to raise_error ParamContractError
180
+ expect{jobs.send(action, args.merge(extra: "foo"))}.to raise_error ParamContractError
181
+ expect{jobs.send(action, args.merge(extra: []))}.to raise_error ParamContractError
182
+ expect{jobs.send(action, args.merge(extra: {"foo" => "bar"}))}.to raise_error ParamContractError
183
+ expect{jobs.send(action, args.merge(extra: {foo: 1}))}.to raise_error ParamContractError
184
+ end
185
+ end
186
+ end
187
+
188
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + "/../spec_helper"
2
+ require "rspec/autorun"
3
+
4
+ describe Scrapinghub do
5
+ it "is equivalent to ScrapingHub" do
6
+ expect(Scrapinghub).to be(ScrapingHub)
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,200 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: scrapinghub-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Abe Voelker
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: contracts
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.11'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: kleisli
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: httparty
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: vcr
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Ruby client for Scrapinghub API
112
+ email: abe@abevoelker.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - ".gitignore"
118
+ - ".rspec"
119
+ - ".travis.yml"
120
+ - Gemfile
121
+ - LICENSE
122
+ - README.md
123
+ - Rakefile
124
+ - lib/scrapinghub-client.rb
125
+ - lib/scrapinghub/jobs.rb
126
+ - lib/scrapinghub/version.rb
127
+ - scrapinghub.gemspec
128
+ - spec/fixtures/vcr_cassettes/jobs/delete/bad_auth.yml
129
+ - spec/fixtures/vcr_cassettes/jobs/delete/job/invalid.yml
130
+ - spec/fixtures/vcr_cassettes/jobs/delete/job/multiple.yml
131
+ - spec/fixtures/vcr_cassettes/jobs/delete/job/single.yml
132
+ - spec/fixtures/vcr_cassettes/jobs/delete/project/invalid.yml
133
+ - spec/fixtures/vcr_cassettes/jobs/delete/project/valid.yml
134
+ - spec/fixtures/vcr_cassettes/jobs/list/bad_auth.yml
135
+ - spec/fixtures/vcr_cassettes/jobs/list/count/3.yml
136
+ - spec/fixtures/vcr_cassettes/jobs/list/has_tag/invalid.yml
137
+ - spec/fixtures/vcr_cassettes/jobs/list/has_tag/multiple.yml
138
+ - spec/fixtures/vcr_cassettes/jobs/list/has_tag/single.yml
139
+ - spec/fixtures/vcr_cassettes/jobs/list/job/invalid.yml
140
+ - spec/fixtures/vcr_cassettes/jobs/list/job/multiple.yml
141
+ - spec/fixtures/vcr_cassettes/jobs/list/job/single.yml
142
+ - spec/fixtures/vcr_cassettes/jobs/list/lacks_tag/invalid.yml
143
+ - spec/fixtures/vcr_cassettes/jobs/list/lacks_tag/multiple.yml
144
+ - spec/fixtures/vcr_cassettes/jobs/list/lacks_tag/single.yml
145
+ - spec/fixtures/vcr_cassettes/jobs/list/project/invalid.yml
146
+ - spec/fixtures/vcr_cassettes/jobs/list/project/valid.yml
147
+ - spec/fixtures/vcr_cassettes/jobs/list/spider/invalid.yml
148
+ - spec/fixtures/vcr_cassettes/jobs/list/spider/valid.yml
149
+ - spec/fixtures/vcr_cassettes/jobs/list/state/finished.yml
150
+ - spec/fixtures/vcr_cassettes/jobs/list/state/pending.yml
151
+ - spec/fixtures/vcr_cassettes/jobs/schedule/bad_auth.yml
152
+ - spec/fixtures/vcr_cassettes/jobs/schedule/project/invalid.yml
153
+ - spec/fixtures/vcr_cassettes/jobs/schedule/spider/add_tag.yml
154
+ - spec/fixtures/vcr_cassettes/jobs/schedule/spider/already-running.yml
155
+ - spec/fixtures/vcr_cassettes/jobs/schedule/spider/extra.yml
156
+ - spec/fixtures/vcr_cassettes/jobs/schedule/spider/minimal.yml
157
+ - spec/fixtures/vcr_cassettes/jobs/schedule/spider/priority.yml
158
+ - spec/fixtures/vcr_cassettes/jobs/stop/bad_auth.yml
159
+ - spec/fixtures/vcr_cassettes/jobs/stop/job/already-stopped.yml
160
+ - spec/fixtures/vcr_cassettes/jobs/stop/job/invalid.yml
161
+ - spec/fixtures/vcr_cassettes/jobs/stop/job/valid.yml
162
+ - spec/fixtures/vcr_cassettes/jobs/stop/project/invalid.yml
163
+ - spec/fixtures/vcr_cassettes/jobs/update/bad_auth.yml
164
+ - spec/fixtures/vcr_cassettes/jobs/update/has_tag.yml
165
+ - spec/fixtures/vcr_cassettes/jobs/update/job.yml
166
+ - spec/fixtures/vcr_cassettes/jobs/update/lacks_tag.yml
167
+ - spec/fixtures/vcr_cassettes/jobs/update/no-query-filters.yml
168
+ - spec/fixtures/vcr_cassettes/jobs/update/no-update-params.yml
169
+ - spec/fixtures/vcr_cassettes/jobs/update/project/invalid.yml
170
+ - spec/fixtures/vcr_cassettes/jobs/update/spider.yml
171
+ - spec/fixtures/vcr_cassettes/jobs/update/state.yml
172
+ - spec/integration/jobs_spec.rb
173
+ - spec/spec_helper.rb
174
+ - spec/unit/jobs_spec.rb
175
+ - spec/unit/scrapinghub_spec.rb
176
+ homepage: https://github.com/abevoelker/scrapinghub-client
177
+ licenses:
178
+ - MIT
179
+ metadata: {}
180
+ post_install_message:
181
+ rdoc_options: []
182
+ require_paths:
183
+ - lib
184
+ required_ruby_version: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ required_rubygems_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ requirements: []
195
+ rubyforge_project:
196
+ rubygems_version: 2.4.5
197
+ signing_key:
198
+ specification_version: 4
199
+ summary: Ruby client for Scrapinghub API
200
+ test_files: []