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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5ec3edbf4c149d0864909d8fc60422b692a445eaaf7f7339a31b023c33a637bb
4
- data.tar.gz: 7490a91a9dcd0a92372ad7076af1b4469e66dc5cc67c33f57b74d4897e4b9432
3
+ metadata.gz: 852dafe41733d275fc34bcfe31b9623bcf6f67ec92dfe898f7dd6db1455cc0c3
4
+ data.tar.gz: 14522d53123dfb645464e940fd9bed74d15db241c0342a6e01051a49440736a8
5
5
  SHA512:
6
- metadata.gz: fbc181d7d029bfe9b2d883b85f5fd098ab8b59a9f4bd9b01610ededfd53f7b3708aa9b1f81f1a993e90a960dc47511b2239655b3dee15fc2df50b6de527cebc3
7
- data.tar.gz: 2ac8b46aded198558d9122a4a8e2f647c431a15e2b85254bebb9ccfd3b7eb21c209ae12d8549dd1c2e7e3def317e07bc4d9b718db902f65ae7fce5182fd26537
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.8)
5
- activemodel (~> 5.2)
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
- activemodel (5.2.3)
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.11.3)
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
@@ -9,10 +9,10 @@ module Spidy::Binder::Json
9
9
  #
10
10
  class Resource
11
11
  class_attribute :names, default: []
12
- attr_reader :resource
12
+ attr_reader :json
13
13
 
14
- def initialize(resource)
15
- @resource = resource
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 = resource.dig(*query) if query.present?
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
@@ -7,6 +7,7 @@ module Spidy::Binder
7
7
  extend ActiveSupport::Autoload
8
8
  autoload :Json
9
9
  autoload :Html
10
+ autoload :Xml
10
11
 
11
12
  def self.get(value)
12
13
  return const_get(value.to_s.classify) if name.is_a?(String) || name.is_a?(Symbol)
@@ -5,6 +5,6 @@
5
5
  #
6
6
  module Spidy::Connector::Json
7
7
  def self.call(url, &yielder)
8
- OpenURI.open_uri(url) { |body| yielder.call(JSON.parse(body.read)) }
8
+ OpenURI.open_uri(url) { |body| yielder.call(JSON.parse(body.read, symbolize_names: true)) }
9
9
  end
10
10
  end
@@ -3,29 +3,11 @@
3
3
  #
4
4
  # xml
5
5
  #
6
- class Spidy::Connector::Xml
7
- class_attribute :field, default: (lambda { |object, query, optional: false, &block|
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
- Nokogiri::XML(OpenURI.open_uri(url).read.gsub(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/, ''))
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
@@ -7,6 +7,7 @@ module Spidy::Connector
7
7
  extend ActiveSupport::Autoload
8
8
  autoload :Html
9
9
  autoload :Json
10
+ autoload :Xml
10
11
 
11
12
  def self.get(value)
12
13
  return const_get(value.to_s.classify) if value.is_a?(String) || value.is_a?(Symbol)
data/lib/spidy/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spidy
4
- VERSION = '0.0.10'
4
+ VERSION = '0.0.11'
5
5
  end
data/lib/spidy.rb CHANGED
@@ -2,9 +2,7 @@
2
2
 
3
3
  require 'spidy/version'
4
4
  require 'active_support/all'
5
- require 'active_model'
6
5
  require 'mechanize'
7
- require 'csv'
8
6
  require 'open-uri'
9
7
 
10
8
  #
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 'activemodel', '~> 5.2'
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.10
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 00:00:00.000000000 Z
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: '5.2'
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: '5.2'
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