spidy 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
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