spidy 0.0.10 → 0.0.11
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/Gemfile.lock +6 -7
- data/lib/spidy/binder/json.rb +4 -4
- data/lib/spidy/binder/xml.rb +43 -0
- data/lib/spidy/binder.rb +1 -0
- data/lib/spidy/connector/json.rb +1 -1
- data/lib/spidy/connector/xml.rb +4 -22
- data/lib/spidy/connector.rb +1 -0
- data/lib/spidy/version.rb +1 -1
- data/lib/spidy.rb +0 -2
- data/spidy.gemspec +1 -2
- metadata +7 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 852dafe41733d275fc34bcfe31b9623bcf6f67ec92dfe898f7dd6db1455cc0c3
|
4
|
+
data.tar.gz: 14522d53123dfb645464e940fd9bed74d15db241c0342a6e01051a49440736a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8abcb886421775f5f66ed0da707085aa3363e2472c3bc94a66817a6a245d12efe5573c8287d73f5f086bd53b9b270aed1240ce9d3599482b9fe6ac8cc9400cf
|
7
|
+
data.tar.gz: a4c670bea4af22828edb815d1b48ed7292934fcf11eaeeeda3e4b4e594aae6f2e95be743544cac027c56c80b509ae86a85bc18286f0a3a6f580e3ab5f0aaa7e7
|
data/Gemfile.lock
CHANGED
@@ -1,22 +1,20 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
spidy (0.0.
|
5
|
-
|
6
|
-
activesupport (~> 5.2)
|
4
|
+
spidy (0.0.11)
|
5
|
+
activesupport
|
7
6
|
mechanize
|
8
7
|
pry
|
9
8
|
|
10
9
|
GEM
|
11
10
|
remote: https://rubygems.org/
|
12
11
|
specs:
|
13
|
-
|
14
|
-
activesupport (= 5.2.3)
|
15
|
-
activesupport (5.2.3)
|
12
|
+
activesupport (6.0.0)
|
16
13
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
14
|
i18n (>= 0.7, < 2)
|
18
15
|
minitest (~> 5.1)
|
19
16
|
tzinfo (~> 1.1)
|
17
|
+
zeitwerk (~> 2.1, >= 2.1.8)
|
20
18
|
coderay (1.1.2)
|
21
19
|
concurrent-ruby (1.1.5)
|
22
20
|
connection_pool (2.2.2)
|
@@ -41,7 +39,7 @@ GEM
|
|
41
39
|
mime-types-data (~> 3.2015)
|
42
40
|
mime-types-data (3.2019.0904)
|
43
41
|
mini_portile2 (2.4.0)
|
44
|
-
minitest (5.
|
42
|
+
minitest (5.12.0)
|
45
43
|
net-http-digest_auth (1.4.1)
|
46
44
|
net-http-persistent (3.1.0)
|
47
45
|
connection_pool (~> 2.2)
|
@@ -72,6 +70,7 @@ GEM
|
|
72
70
|
unf_ext
|
73
71
|
unf_ext (0.0.7.6)
|
74
72
|
webrobots (0.1.2)
|
73
|
+
zeitwerk (2.1.10)
|
75
74
|
|
76
75
|
PLATFORMS
|
77
76
|
ruby
|
data/lib/spidy/binder/json.rb
CHANGED
@@ -9,10 +9,10 @@ module Spidy::Binder::Json
|
|
9
9
|
#
|
10
10
|
class Resource
|
11
11
|
class_attribute :names, default: []
|
12
|
-
attr_reader :
|
12
|
+
attr_reader :json
|
13
13
|
|
14
|
-
def initialize(
|
15
|
-
@
|
14
|
+
def initialize(json)
|
15
|
+
@json = json
|
16
16
|
end
|
17
17
|
|
18
18
|
def to_s
|
@@ -26,7 +26,7 @@ module Spidy::Binder::Json
|
|
26
26
|
def self.let(name, *query, &block)
|
27
27
|
names << name
|
28
28
|
define_method(name) do
|
29
|
-
result =
|
29
|
+
result = json.dig(*query) if query.present?
|
30
30
|
return result if block.nil?
|
31
31
|
|
32
32
|
instance_exec(result, &block)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Bind xml and convert to object
|
5
|
+
#
|
6
|
+
module Spidy::Binder::Xml
|
7
|
+
#
|
8
|
+
# Describe the definition to get the necessary elements from the resource object
|
9
|
+
#
|
10
|
+
class Resource
|
11
|
+
class_attribute :names, default: []
|
12
|
+
attr_reader :xml
|
13
|
+
|
14
|
+
def initialize(xml)
|
15
|
+
@xml = xml
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
to_h.to_json
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_h
|
23
|
+
names.map { |name| [name, send(name)] }.to_h
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.let(name, query = nil, &block)
|
27
|
+
names << name
|
28
|
+
define_method(name) do
|
29
|
+
return xml.at(query)&.text if block.nil?
|
30
|
+
return instance_exec(&block) if query.blank?
|
31
|
+
|
32
|
+
instance_exec(xml.search(query), &block)
|
33
|
+
rescue NoMethodError => e
|
34
|
+
raise "#{xml} ##{name} => #{e.message}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.call(xml, define_block)
|
40
|
+
binder = Class.new(Resource) { instance_exec(&define_block) }
|
41
|
+
yield binder.new(xml)
|
42
|
+
end
|
43
|
+
end
|
data/lib/spidy/binder.rb
CHANGED
data/lib/spidy/connector/json.rb
CHANGED
data/lib/spidy/connector/xml.rb
CHANGED
@@ -3,29 +3,11 @@
|
|
3
3
|
#
|
4
4
|
# xml
|
5
5
|
#
|
6
|
-
|
7
|
-
|
8
|
-
return object.instance_exec(object.resource, &block) if query.nil?
|
9
|
-
|
10
|
-
node = object.resource.search(query)
|
11
|
-
return if optional && node.empty?
|
12
|
-
|
13
|
-
fail "Could not be located #{query}" if node.empty?
|
14
|
-
return node.first.text if block.nil?
|
15
|
-
|
16
|
-
object.instance_exec(node, &block)
|
17
|
-
})
|
18
|
-
|
19
|
-
def initialize(start_url: nil, encoding: nil)
|
20
|
-
@start_url = start_url
|
21
|
-
@encoding = encoding
|
22
|
-
end
|
23
|
-
|
24
|
-
def call(url = @start_url)
|
6
|
+
module Spidy::Connector::Xml
|
7
|
+
def self.call(url)
|
25
8
|
fail 'URL is undefined' if url.blank?
|
26
9
|
|
27
|
-
xml =
|
28
|
-
|
29
|
-
yield xml
|
10
|
+
xml = OpenURI.open_uri(url).read.gsub(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/, '')
|
11
|
+
yield Nokogiri::XML(xml, url)
|
30
12
|
end
|
31
13
|
end
|
data/lib/spidy/connector.rb
CHANGED
data/lib/spidy/version.rb
CHANGED
data/lib/spidy.rb
CHANGED
data/spidy.gemspec
CHANGED
@@ -29,8 +29,7 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_development_dependency 'rake', '~> 10.0'
|
30
30
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
31
31
|
|
32
|
-
spec.add_runtime_dependency '
|
33
|
-
spec.add_runtime_dependency 'activesupport', '~> 5.2'
|
32
|
+
spec.add_runtime_dependency 'activesupport'
|
34
33
|
spec.add_runtime_dependency 'mechanize'
|
35
34
|
spec.add_runtime_dependency 'pry'
|
36
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spidy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- aileron
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,34 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: activemodel
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '5.2'
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '5.2'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: activesupport
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
|
-
- - "
|
73
|
+
- - ">="
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
75
|
+
version: '0'
|
90
76
|
type: :runtime
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
|
-
- - "
|
80
|
+
- - ">="
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
82
|
+
version: '0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: mechanize
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,6 +136,7 @@ files:
|
|
150
136
|
- lib/spidy/binder.rb
|
151
137
|
- lib/spidy/binder/html.rb
|
152
138
|
- lib/spidy/binder/json.rb
|
139
|
+
- lib/spidy/binder/xml.rb
|
153
140
|
- lib/spidy/connector.rb
|
154
141
|
- lib/spidy/connector/html.rb
|
155
142
|
- lib/spidy/connector/json.rb
|