crabfarm 0.0.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 (44) hide show
  1. checksums.yaml +7 -0
  2. data/bin/crabfarm +9 -0
  3. data/lib/crabfarm.rb +24 -0
  4. data/lib/crabfarm/adapters.rb +23 -0
  5. data/lib/crabfarm/adapters/capybara_adapter.rb +7 -0
  6. data/lib/crabfarm/adapters/surfer_adapter.rb +7 -0
  7. data/lib/crabfarm/adapters/watir_adapter.rb +7 -0
  8. data/lib/crabfarm/base_parser.rb +26 -0
  9. data/lib/crabfarm/base_state.rb +41 -0
  10. data/lib/crabfarm/cli.rb +79 -0
  11. data/lib/crabfarm/configuration.rb +83 -0
  12. data/lib/crabfarm/context.rb +32 -0
  13. data/lib/crabfarm/default_driver_factory.rb +37 -0
  14. data/lib/crabfarm/driver_bucket.rb +50 -0
  15. data/lib/crabfarm/driver_bucket_pool.rb +48 -0
  16. data/lib/crabfarm/dsl/surfer.rb +22 -0
  17. data/lib/crabfarm/dsl/surfer/search_context.rb +134 -0
  18. data/lib/crabfarm/dsl/surfer/surf_context.rb +58 -0
  19. data/lib/crabfarm/engines/safe_state_loop.rb +96 -0
  20. data/lib/crabfarm/errors.rb +50 -0
  21. data/lib/crabfarm/loader.rb +83 -0
  22. data/lib/crabfarm/modes/console.rb +86 -0
  23. data/lib/crabfarm/modes/generator.rb +120 -0
  24. data/lib/crabfarm/modes/server.rb +78 -0
  25. data/lib/crabfarm/module_helper.rb +35 -0
  26. data/lib/crabfarm/phantom_driver_factory.rb +33 -0
  27. data/lib/crabfarm/phantom_runner.rb +74 -0
  28. data/lib/crabfarm/rspec.rb +39 -0
  29. data/lib/crabfarm/state_store.rb +24 -0
  30. data/lib/crabfarm/support/custom_puma.rb +64 -0
  31. data/lib/crabfarm/templates/Crabfile.erb +3 -0
  32. data/lib/crabfarm/templates/Gemfile.erb +7 -0
  33. data/lib/crabfarm/templates/boot.rb.erb +13 -0
  34. data/lib/crabfarm/templates/crabfarm_bin.erb +3 -0
  35. data/lib/crabfarm/templates/dot_gitignore.erb +1 -0
  36. data/lib/crabfarm/templates/dot_gitkeep.erb +0 -0
  37. data/lib/crabfarm/templates/dot_rspec.erb +4 -0
  38. data/lib/crabfarm/templates/parser.rb.erb +8 -0
  39. data/lib/crabfarm/templates/parser_spec.rb.erb +7 -0
  40. data/lib/crabfarm/templates/spec_helper.rb.erb +22 -0
  41. data/lib/crabfarm/templates/state.rb.erb +8 -0
  42. data/lib/crabfarm/templates/state_spec.rb.erb +7 -0
  43. data/lib/crabfarm/version.rb +3 -0
  44. metadata +359 -0
@@ -0,0 +1,24 @@
1
+ require 'active_support'
2
+
3
+ module Crabfarm
4
+ class StateStore
5
+
6
+ def initialize(_module)
7
+ reset
8
+ end
9
+
10
+ def fetch(key, &block)
11
+ @data.fetch(key.to_sym, &block)
12
+ end
13
+
14
+ def set(key, value)
15
+ @data[key.to_sym] = value
16
+ end
17
+
18
+ def reset
19
+ @data = Hash.new
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,64 @@
1
+ require 'rack/handler'
2
+ require 'puma'
3
+
4
+ module Crabfarm
5
+ module Support
6
+ module CustomPuma
7
+
8
+ DEFAULT_OPTIONS = {
9
+ :Host => '0.0.0.0',
10
+ :Port => 3100,
11
+ :Threads => '0:16',
12
+ :Verbose => false
13
+ }
14
+
15
+ def self.run(_app, _options = {})
16
+
17
+ _options = DEFAULT_OPTIONS.merge(_options)
18
+
19
+ _app = Rack::CommonLogger.new(_app, STDOUT) if _options[:Verbose]
20
+
21
+ ENV['RACK_ENV'] = _options[:environment].to_s if _options[:environment]
22
+
23
+ server = Puma::Server.new(_app)
24
+ min, max = _options[:Threads].split(':', 2)
25
+
26
+ puts "Puma #{::Puma::Const::PUMA_VERSION} starting..."
27
+ puts "* Min threads: #{min}, max threads: #{max}"
28
+ puts "* Environment: #{ENV['RACK_ENV']}"
29
+
30
+ if _options[:Host].start_with? 'unix://'
31
+ puts "* Listening on #{_options[:Host]}"
32
+ server.add_unix_listener _options[:Host][7..-1]
33
+ else
34
+ puts "* Listening on tcp://#{_options[:Host]}:#{_options[:Port]}"
35
+ server.add_tcp_listener _options[:Host], _options[:Port]
36
+ end
37
+
38
+ server.min_threads = min
39
+ server.max_threads = max
40
+
41
+ begin
42
+ server.run.join
43
+ rescue Interrupt
44
+ puts "* Gracefully stopping, waiting for requests to finish"
45
+ server.stop(true)
46
+ puts "* Goodbye!"
47
+ end
48
+
49
+ end
50
+
51
+ def self.valid_options
52
+ {
53
+ "Host=HOST" => "Hostname to listen on (default: localhost), also supports unix sockets if prefixed with unix://",
54
+ "Port=PORT" => "Port to listen on (default: 8080)",
55
+ "Threads=MIN:MAX" => "min:max threads to use (default 0:16)",
56
+ "Quiet" => "Don't report each request"
57
+ }
58
+ end
59
+ end
60
+
61
+ Rack::Handler.register :crabfarm_puma, CustomPuma
62
+ end
63
+ end
64
+
@@ -0,0 +1,3 @@
1
+ self.default_dsl = :surfer
2
+ self.driver_name = :firefox
3
+ # self.phantom_enabled = true
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem "crabfarm", '<%= version %>'
4
+
5
+ group :test do
6
+ gem "rspec-nc"
7
+ end
@@ -0,0 +1,13 @@
1
+ # Load gems listed in the Gemfile.
2
+
3
+ require 'bundler'
4
+
5
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __FILE__)
6
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
7
+
8
+ Bundler.require
9
+
10
+ # Run code loader
11
+
12
+ CF_PATH = File.expand_path('../', __FILE__)
13
+ CF_LOADER = Crabfarm::Loader.new CF_PATH, ENV['CF_NAMESPACE']
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../boot'
3
+ require 'crabfarm/cli'
@@ -0,0 +1 @@
1
+ Gemfile.lock
File without changes
@@ -0,0 +1,4 @@
1
+ --color
2
+ --require spec_helper
3
+ --format=doc
4
+ --format=Nc
@@ -0,0 +1,8 @@
1
+ class <%= parser_class %> < Crabfarm::BaseParser
2
+
3
+ def parse
4
+ # Do some damage!
5
+ end
6
+
7
+ end
8
+
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe <%= parser_class %> do
4
+
5
+ pending "should extract values from snapshot"
6
+
7
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path("../../boot", __FILE__)
2
+ Bundler.require :test
3
+
4
+ ENV['SNAPSHOT_DIR'] ||= File.expand_path("../snapshots", __FILE__)
5
+
6
+ require "crabfarm/rspec"
7
+
8
+ RSpec.configure do |config|
9
+ # ## Mock Framework
10
+ #
11
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
12
+ #
13
+ # config.mock_with :mocha
14
+ # config.mock_with :flexmock
15
+ # config.mock_with :rr
16
+
17
+ # Run specs in random order to surface order dependencies. If you find an
18
+ # order dependency and want to debug it, you can fix the order by providing
19
+ # the seed, which is printed after each run.
20
+ # --seed 1234
21
+ config.order = "random"
22
+ end
@@ -0,0 +1,8 @@
1
+ class <%= state_class %> < Crabfarm::BaseState
2
+
3
+ def crawl
4
+ # Do some damage!
5
+ end
6
+
7
+ end
8
+
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe <%= state_class %> do
4
+
5
+ pending "should ensure output has the right structure"
6
+
7
+ end
@@ -0,0 +1,3 @@
1
+ module Crabfarm
2
+ VERSION = "0.0.2"
3
+ end
metadata ADDED
@@ -0,0 +1,359 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: crabfarm
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Ignacio Baixas
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jbuilder
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 2.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 2.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: selenium-webdriver
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '2.33'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '2.33'
41
+ - !ruby/object:Gem::Dependency
42
+ name: capybara
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: watir-webdriver
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
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: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.0
76
+ - - <
77
+ - !ruby/object:Gem::Version
78
+ version: '5'
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - '>='
84
+ - !ruby/object:Gem::Version
85
+ version: 3.0.0
86
+ - - <
87
+ - !ruby/object:Gem::Version
88
+ version: '5'
89
+ - !ruby/object:Gem::Dependency
90
+ name: gli
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ~>
94
+ - !ruby/object:Gem::Version
95
+ version: 2.12.0
96
+ type: :runtime
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ~>
101
+ - !ruby/object:Gem::Version
102
+ version: 2.12.0
103
+ - !ruby/object:Gem::Dependency
104
+ name: rainbow
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 2.0.0
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ~>
115
+ - !ruby/object:Gem::Version
116
+ version: 2.0.0
117
+ - !ruby/object:Gem::Dependency
118
+ name: grape
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ~>
122
+ - !ruby/object:Gem::Version
123
+ version: 0.10.0
124
+ type: :runtime
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ~>
129
+ - !ruby/object:Gem::Version
130
+ version: 0.10.0
131
+ - !ruby/object:Gem::Dependency
132
+ name: puma
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ~>
136
+ - !ruby/object:Gem::Version
137
+ version: 2.10.2
138
+ type: :runtime
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ~>
143
+ - !ruby/object:Gem::Version
144
+ version: 2.10.2
145
+ - !ruby/object:Gem::Dependency
146
+ name: bundler
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ~>
150
+ - !ruby/object:Gem::Version
151
+ version: '1.6'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ~>
157
+ - !ruby/object:Gem::Version
158
+ version: '1.6'
159
+ - !ruby/object:Gem::Dependency
160
+ name: rake
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - '>='
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ - !ruby/object:Gem::Dependency
174
+ name: rspec
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - '>='
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - '>='
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ - !ruby/object:Gem::Dependency
188
+ name: rspec-nc
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - '>='
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - '>='
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ - !ruby/object:Gem::Dependency
202
+ name: guard
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - '>='
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - '>='
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ - !ruby/object:Gem::Dependency
216
+ name: guard-rspec
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - '>='
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ type: :development
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - '>='
227
+ - !ruby/object:Gem::Version
228
+ version: '0'
229
+ - !ruby/object:Gem::Dependency
230
+ name: terminal-notifier-guard
231
+ requirement: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ~>
234
+ - !ruby/object:Gem::Version
235
+ version: 1.6.1
236
+ type: :development
237
+ prerelease: false
238
+ version_requirements: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - ~>
241
+ - !ruby/object:Gem::Version
242
+ version: 1.6.1
243
+ - !ruby/object:Gem::Dependency
244
+ name: pry
245
+ requirement: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - '>='
248
+ - !ruby/object:Gem::Version
249
+ version: '0'
250
+ type: :development
251
+ prerelease: false
252
+ version_requirements: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - '>='
255
+ - !ruby/object:Gem::Version
256
+ version: '0'
257
+ - !ruby/object:Gem::Dependency
258
+ name: pry-remote
259
+ requirement: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - '>='
262
+ - !ruby/object:Gem::Version
263
+ version: '0'
264
+ type: :development
265
+ prerelease: false
266
+ version_requirements: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - '>='
269
+ - !ruby/object:Gem::Version
270
+ version: '0'
271
+ - !ruby/object:Gem::Dependency
272
+ name: pry-nav
273
+ requirement: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - '>='
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
278
+ type: :development
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - '>='
283
+ - !ruby/object:Gem::Version
284
+ version: '0'
285
+ description:
286
+ email:
287
+ - ignacio@platan.us
288
+ executables:
289
+ - crabfarm
290
+ extensions: []
291
+ extra_rdoc_files: []
292
+ files:
293
+ - lib/crabfarm/adapters/capybara_adapter.rb
294
+ - lib/crabfarm/adapters/surfer_adapter.rb
295
+ - lib/crabfarm/adapters/watir_adapter.rb
296
+ - lib/crabfarm/adapters.rb
297
+ - lib/crabfarm/base_parser.rb
298
+ - lib/crabfarm/base_state.rb
299
+ - lib/crabfarm/cli.rb
300
+ - lib/crabfarm/configuration.rb
301
+ - lib/crabfarm/context.rb
302
+ - lib/crabfarm/default_driver_factory.rb
303
+ - lib/crabfarm/driver_bucket.rb
304
+ - lib/crabfarm/driver_bucket_pool.rb
305
+ - lib/crabfarm/dsl/surfer/search_context.rb
306
+ - lib/crabfarm/dsl/surfer/surf_context.rb
307
+ - lib/crabfarm/dsl/surfer.rb
308
+ - lib/crabfarm/engines/safe_state_loop.rb
309
+ - lib/crabfarm/errors.rb
310
+ - lib/crabfarm/loader.rb
311
+ - lib/crabfarm/modes/console.rb
312
+ - lib/crabfarm/modes/generator.rb
313
+ - lib/crabfarm/modes/server.rb
314
+ - lib/crabfarm/module_helper.rb
315
+ - lib/crabfarm/phantom_driver_factory.rb
316
+ - lib/crabfarm/phantom_runner.rb
317
+ - lib/crabfarm/rspec.rb
318
+ - lib/crabfarm/state_store.rb
319
+ - lib/crabfarm/support/custom_puma.rb
320
+ - lib/crabfarm/templates/boot.rb.erb
321
+ - lib/crabfarm/templates/crabfarm_bin.erb
322
+ - lib/crabfarm/templates/Crabfile.erb
323
+ - lib/crabfarm/templates/dot_gitignore.erb
324
+ - lib/crabfarm/templates/dot_gitkeep.erb
325
+ - lib/crabfarm/templates/dot_rspec.erb
326
+ - lib/crabfarm/templates/Gemfile.erb
327
+ - lib/crabfarm/templates/parser.rb.erb
328
+ - lib/crabfarm/templates/parser_spec.rb.erb
329
+ - lib/crabfarm/templates/spec_helper.rb.erb
330
+ - lib/crabfarm/templates/state.rb.erb
331
+ - lib/crabfarm/templates/state_spec.rb.erb
332
+ - lib/crabfarm/version.rb
333
+ - lib/crabfarm.rb
334
+ - bin/crabfarm
335
+ homepage: https://github.com/platanus/crabfarm-gem
336
+ licenses:
337
+ - MIT
338
+ metadata: {}
339
+ post_install_message:
340
+ rdoc_options: []
341
+ require_paths:
342
+ - lib
343
+ required_ruby_version: !ruby/object:Gem::Requirement
344
+ requirements:
345
+ - - '>='
346
+ - !ruby/object:Gem::Version
347
+ version: '0'
348
+ required_rubygems_version: !ruby/object:Gem::Requirement
349
+ requirements:
350
+ - - '>='
351
+ - !ruby/object:Gem::Version
352
+ version: '0'
353
+ requirements: []
354
+ rubyforge_project:
355
+ rubygems_version: 2.0.14
356
+ signing_key:
357
+ specification_version: 4
358
+ summary: Crabfarm crawler creation framework
359
+ test_files: []