crabfarm 0.0.15 → 0.0.16
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/lib/crabfarm.rb +4 -0
- data/lib/crabfarm/adapters/browser/watir.rb +19 -0
- data/lib/crabfarm/adapters/parser/nokogiri.rb +9 -0
- data/lib/crabfarm/base_parser.rb +11 -11
- data/lib/crabfarm/configuration.rb +3 -1
- data/lib/crabfarm/driver_bucket.rb +0 -7
- data/lib/crabfarm/dsl/surfer/search_context.rb +8 -2
- data/lib/crabfarm/dsl/surfer/surf_context.rb +5 -1
- data/lib/crabfarm/parser_service.rb +12 -0
- data/lib/crabfarm/rspec.rb +5 -4
- data/lib/crabfarm/version.rb +1 -1
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01f53897c32d27e6253c74660a0842b9cb7c3c97
|
4
|
+
data.tar.gz: 7993ac4152d6128ce8b69950458e48dfe042089a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af73913311cb5404d95724470ce07bb37e3ed686abb02a39e20b6a85b0ad028a31ef4524c8ffd09381ce20157e107da7cbe20ddea22c08f3908997d81c1e37b1
|
7
|
+
data.tar.gz: 3345f29499e15089b3fd6feccf984f9121187500e9859a2016ccfaf14947d363ca335b0212025722b9eac273996171a6f133e2c37f9d0fa5f2bd649952333742
|
data/lib/crabfarm.rb
CHANGED
@@ -7,6 +7,7 @@ require "crabfarm/version"
|
|
7
7
|
require "crabfarm/errors"
|
8
8
|
require "crabfarm/configuration"
|
9
9
|
require "crabfarm/loader_service"
|
10
|
+
require "crabfarm/parser_service"
|
10
11
|
require "crabfarm/driver_bucket"
|
11
12
|
require "crabfarm/driver_bucket_pool"
|
12
13
|
require "crabfarm/default_driver_factory"
|
@@ -45,6 +46,9 @@ module Crabfarm
|
|
45
46
|
register :browser_dsl, :watir, 'Crabfarm::WatirBrowserDsl', 'crabfarm/adapters/browser/watir'
|
46
47
|
register :browser_dsl, :capybara, 'Crabfarm::CapybaraBrowserDsl', 'crabfarm/adapters/browser/capybara'
|
47
48
|
|
49
|
+
# bundled parsers dsl adapters
|
50
|
+
register :parser_dsl, :nokogiri, 'Crabfarm::NokogiriDsl', 'crabfarm/adapters/parser/nokogiri'
|
51
|
+
|
48
52
|
# bundled state output builders
|
49
53
|
register :output_builder, :hash, 'Crabfarm::HashOutputBuilder', 'crabfarm/adapters/output/hash'
|
50
54
|
register :output_builder, :ostruct, 'Crabfarm::OStructOutputBuilder', 'crabfarm/adapters/output/ostruct'
|
@@ -1,5 +1,24 @@
|
|
1
1
|
require 'watir-webdriver'
|
2
2
|
|
3
|
+
class Watir::Browser
|
4
|
+
def parse(_parser_class, _options={})
|
5
|
+
Crabfarm::ParserService.parse _parser_class, html, _options
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class Watir::Element
|
10
|
+
def parse(_parser_class, _options={})
|
11
|
+
Crabfarm::ParserService.parse _parser_class, html, _options
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Watir::ElementCollection
|
16
|
+
def parse(_parser_class, _options={})
|
17
|
+
full_html = self.map(&:html).join
|
18
|
+
Crabfarm::ParserService.parse _parser_class, full_html, _options
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
3
22
|
module Crabfarm
|
4
23
|
class WatirBrowserDsl
|
5
24
|
def self.wrap(_bucket)
|
data/lib/crabfarm/base_parser.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
module Crabfarm
|
2
2
|
class BaseParser < Delegator
|
3
3
|
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :params, :root
|
5
5
|
|
6
|
-
def self.
|
7
|
-
@
|
6
|
+
def self.parser_dsl(_dsl)
|
7
|
+
@parser_dsl = _dsl
|
8
8
|
end
|
9
9
|
|
10
|
-
def initialize(
|
11
|
-
dsl_class = Strategies.load(:
|
12
|
-
@
|
10
|
+
def initialize(_html, _params)
|
11
|
+
dsl_class = Strategies.load(:parser_dsl, class_parser_dsl || Crabfarm.config.parser_dsl)
|
12
|
+
@root = dsl_class.parse _html
|
13
13
|
@params = _params
|
14
14
|
|
15
|
-
super @
|
15
|
+
super @root
|
16
16
|
end
|
17
17
|
|
18
18
|
def parse
|
@@ -20,17 +20,17 @@ module Crabfarm
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def __getobj__
|
23
|
-
@
|
23
|
+
@root
|
24
24
|
end
|
25
25
|
|
26
26
|
def __setobj__(obj)
|
27
|
-
@
|
27
|
+
@root = obj
|
28
28
|
end
|
29
29
|
|
30
30
|
private
|
31
31
|
|
32
|
-
def
|
33
|
-
self.class.instance_variable_get :@
|
32
|
+
def class_parser_dsl
|
33
|
+
self.class.instance_variable_get :@parser_dsl
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -5,7 +5,8 @@ module Crabfarm
|
|
5
5
|
class Option < Struct.new(:name, :type, :text); end
|
6
6
|
|
7
7
|
OPTIONS = [
|
8
|
-
[:browser_dsl, :string, 'Default browser dsl used by
|
8
|
+
[:browser_dsl, :string, 'Default browser dsl used by states'],
|
9
|
+
[:parser_dsl, :string, 'Default parser dsl used by parsers'],
|
9
10
|
[:output_builder, :string, 'Default json output builder used by states'],
|
10
11
|
[:driver_factory, :mixed, 'Driver factory, disabled if phantom_mode is used'],
|
11
12
|
[:log_path, :string, 'Path where logs should be stored'],
|
@@ -50,6 +51,7 @@ module Crabfarm
|
|
50
51
|
def reset
|
51
52
|
@values = {
|
52
53
|
browser_dsl: :surfer,
|
54
|
+
parser_dsl: :nokogiri,
|
53
55
|
output_builder: :hash,
|
54
56
|
driver_factory: nil,
|
55
57
|
log_path: nil,
|
@@ -14,13 +14,6 @@ module Crabfarm
|
|
14
14
|
@factory = _factory
|
15
15
|
end
|
16
16
|
|
17
|
-
def parse(_parser_class, _options={})
|
18
|
-
_parser_class = LoaderService.load_parser(_parser_class) if _parser_class.is_a? String or _parser_class.is_a? Symbol
|
19
|
-
parser = _parser_class.new self, _options
|
20
|
-
parser.parse
|
21
|
-
return parser
|
22
|
-
end
|
23
|
-
|
24
17
|
def original
|
25
18
|
@driver ||= @factory.build_driver(@session_id)
|
26
19
|
end
|
@@ -49,7 +49,6 @@ module Crabfarm
|
|
49
49
|
wrap_errors { (element!['class'] || '').split(' ') }
|
50
50
|
end
|
51
51
|
|
52
|
-
# searches for elements that match a given selector
|
53
52
|
def search(_selector=nil, _options={})
|
54
53
|
_options[:css] = _selector if _selector
|
55
54
|
|
@@ -85,7 +84,6 @@ module Crabfarm
|
|
85
84
|
end
|
86
85
|
end
|
87
86
|
|
88
|
-
# clears and sends_keys to this context main element
|
89
87
|
def fill(_value)
|
90
88
|
wrap_errors do
|
91
89
|
element!.clear
|
@@ -93,6 +91,14 @@ module Crabfarm
|
|
93
91
|
end
|
94
92
|
end
|
95
93
|
|
94
|
+
def parse(_parser_class, _params={})
|
95
|
+
ParserService.parse _parser_class, to_html, _params
|
96
|
+
end
|
97
|
+
|
98
|
+
def to_html
|
99
|
+
elements.map { |e| e['outerHTML'] }.join
|
100
|
+
end
|
101
|
+
|
96
102
|
# Any methods missing are forwarded to the main element (first).
|
97
103
|
def method_missing(_method, *_args, &_block)
|
98
104
|
wrap_errors do
|
@@ -3,7 +3,7 @@ module Crabfarm
|
|
3
3
|
module Surfer
|
4
4
|
class SurfContext < SearchContext
|
5
5
|
|
6
|
-
def_delegators :@bucket, :
|
6
|
+
def_delegators :@bucket, :setup
|
7
7
|
def_delegators 'driver.navigate', :back, :forward, :refresh
|
8
8
|
|
9
9
|
def initialize(_bucket)
|
@@ -19,6 +19,10 @@ module Crabfarm
|
|
19
19
|
[driver]
|
20
20
|
end
|
21
21
|
|
22
|
+
def to_html
|
23
|
+
driver.page_source
|
24
|
+
end
|
25
|
+
|
22
26
|
def driver
|
23
27
|
@bucket.original
|
24
28
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Crabfarm
|
2
|
+
class ParserService
|
3
|
+
|
4
|
+
def self.parse(_parser_class, _html, _options={})
|
5
|
+
_parser_class = LoaderService.load_parser(_parser_class) if _parser_class.is_a? String or _parser_class.is_a? Symbol
|
6
|
+
parser = _parser_class.new _html, _options
|
7
|
+
parser.parse
|
8
|
+
parser
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
data/lib/crabfarm/rspec.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'crabfarm/crabtrap_context'
|
2
|
+
require 'net/http'
|
2
3
|
|
3
4
|
CF_TEST_CONTEXT = Crabfarm::CrabtrapContext::new
|
4
5
|
CF_TEST_CONTEXT.load
|
@@ -9,13 +10,13 @@ module Crabfarm
|
|
9
10
|
|
10
11
|
def parse(_snap_or_url, _options={})
|
11
12
|
fixture = Pathname.new(File.join(ENV['SNAPSHOT_DIR'], _snap_or_url))
|
12
|
-
if fixture.exist?
|
13
|
-
|
13
|
+
html = if fixture.exist?
|
14
|
+
File.read fixture.realpath
|
14
15
|
else
|
15
|
-
|
16
|
+
Net::HTTP.get(URI.parse _snap_or_url)
|
16
17
|
end
|
17
18
|
|
18
|
-
|
19
|
+
ParserService.parse described_class, html, _options
|
19
20
|
end
|
20
21
|
|
21
22
|
def crawl(_state=nil, _params={})
|
data/lib/crabfarm/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crabfarm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ignacio Baixas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jbuilder
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: nokogiri
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.6.6
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.6.6
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: activesupport
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -324,6 +338,7 @@ files:
|
|
324
338
|
- lib/crabfarm/adapters/output/hash.rb
|
325
339
|
- lib/crabfarm/adapters/output/jbuilder.rb
|
326
340
|
- lib/crabfarm/adapters/output/ostruct.rb
|
341
|
+
- lib/crabfarm/adapters/parser/nokogiri.rb
|
327
342
|
- lib/crabfarm/base_parser.rb
|
328
343
|
- lib/crabfarm/base_state.rb
|
329
344
|
- lib/crabfarm/cli.rb
|
@@ -347,6 +362,7 @@ files:
|
|
347
362
|
- lib/crabfarm/modes/publisher.rb
|
348
363
|
- lib/crabfarm/modes/recorder.rb
|
349
364
|
- lib/crabfarm/modes/server.rb
|
365
|
+
- lib/crabfarm/parser_service.rb
|
350
366
|
- lib/crabfarm/phantom_driver_factory.rb
|
351
367
|
- lib/crabfarm/phantom_runner.rb
|
352
368
|
- lib/crabfarm/rspec.rb
|