tiny_grabber 0.1.0 → 0.2.0

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
  SHA1:
3
- metadata.gz: 9125f8132b04b1a08e64a47abf7ccb5085688b55
4
- data.tar.gz: 050aad4742cdeeba67cfc64dad8c6d9c0a02ec97
3
+ metadata.gz: 99211b6e18440ea58661cf5b5a5bdadec631f942
4
+ data.tar.gz: 1e78bd2089d65949431b519ae7a15b3f4bba202f
5
5
  SHA512:
6
- metadata.gz: d1ff3deb449bc1aedf86b2886156043decf28cf327ec25e30cd4725f07f5dc82faa01c803aa161bf573e3799f747a15673919fb470db75546810a932ee513093
7
- data.tar.gz: c977e50867454e3af09e00e6b9f69f5b8efc7b22aaa0127b3c54c8aee206692359322a0c4418b81ab23bbc4a54a562f197f9fc98088225d97a70d1d1699d83f2
6
+ metadata.gz: 3a4dc8a114ea9818dee2bd400ccc5e45c60ae40f2a9e7ce5002c51b214b9e471d1066f2d865e48ab0acbe91e80c51d55cb17ed43a7eed29e01283f82c61c09b8
7
+ data.tar.gz: 4ec0f357261f447f3cd34dda16a9376dd770a73a9c7fc30b22577f42de1b4a33bd557b5c8da85ce54a5d40d780af4e152ebbd93b0d50097fbf0c7081d134f30e
data/.gitignore CHANGED
@@ -5,6 +5,6 @@
5
5
  /coverage/
6
6
  /doc/
7
7
  /pkg/
8
- /spec/reports/
8
+ /spec/tiny_grabber_spec.rb
9
9
  /tmp/
10
10
  /log/
data/README.md CHANGED
@@ -27,44 +27,62 @@ Or install it yourself as:
27
27
 
28
28
  require 'tiny_grabber'
29
29
 
30
- # Link to remote site
31
- url = 'https://github.com/moroznoeytpo/tiny_grabber'
30
+ read_timeout = 300
31
+ user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36'
32
+ proxy = { ip: 'xx.xx.xx.xx', port: 'xxxx' }
33
+ headers1 = { 'Content-Type' => 'text/html; charset=utf-8' }
34
+ headers2 = { 'Content-Type' => 'text/html; charset=utf-8', 'Connection' => 'keep-alive' }
35
+ cookies = 'username=username&password=password'
36
+ params = { key: 'value' }
37
+
38
+ # Initialize TinyGrabber object
39
+ tg = TinyGrabber.new
40
+ # Set debug flag for view log information
41
+ tg.debug = true
42
+ # Set max time to execute request
43
+ tg.read_timeout = read_timeout
44
+ # Set web browser name
45
+ tg.user_agent = user_agent
46
+ # Set proxy configuration
47
+ tg.proxy = proxy
48
+ # Set basic authentification
49
+ tg.basic_auth('username', 'password')
50
+ # Set HTTP headers
51
+ tg.headers = headers1
52
+ # Set HTTP cookies
53
+ tg.cookies = cookies
54
+
55
+ # Make response with GET method
56
+ response = tg.get 'https://whoer.net/ru', headers
57
+ # Make response with POST method
58
+ response = tg.get 'https://whoer.net/ru', params, headers
59
+
60
+ # Make singleton response with GET method
61
+ response = TinyGrabber.get 'https://whoer.net/ru', headers, { debug = true, read_timeout = read_timeout ...}
62
+ # Make singleton response with POST method
63
+ response = TinyGrabber.post 'https://whoer.net/ru', params, headers, { debug = true, read_timeout = read_timeout ...}
64
+
65
+ # Get Nokogiri object from response HTML
66
+ ng = response.ng
67
+ # Get HTTP response code
68
+ response.code
69
+ # Get response cookies
70
+ response.cookies
71
+ # Get response headers
72
+ response.headers
32
73
 
33
- # Set headers
34
- headers = { 'Content-Type' => 'application/json' }
35
-
36
- # Set http(s)/socks4(5) proxy
37
- # Proxy type by default is http. You can change it to socks, with setting params proxy_type equal socks
38
- proxy = { ip: 'xx.xx.xx.xx', port: xx, proxy_type: :socks }
39
-
40
- # Set Basic Authentication
41
- auth = { username: '', password: '' }
42
-
43
- # Set POST data
44
- # Request HTTP type by default is GET. You can send POST request with setting post params. Also you cat send empty POST request.
45
- post = { some_data: '' }
46
-
47
- # HTTP GET request
48
- response = TinyGrabber.get url, headers: headers, proxy: proxy, auth: auth
49
-
50
- # HTTP GET request
51
- response = TinyGrabber.post url, post, headers: headers, proxy: proxy, auth: auth
52
-
53
- # HTTP answer code
54
- p response.code
55
-
56
- # HTTP content
57
- p response.body
58
-
59
- # Nokogiri object
60
- p response.ng
61
-
62
- # Response cookies
63
- p response.cookies
64
74
  ```
65
75
 
66
76
  ## Changelog
67
77
 
78
+ * *v 0.2.0*
79
+ * Now there is an opportunity to create object TinyGrabber
80
+ * Change order of parameters for singleton request
81
+ * Add response cookies and headers
82
+ * Add debug flag for detilazition log and save result HTML to /log/*.html file
83
+
84
+ * *v 0.1.1*
85
+ * Save cookie in Redis
68
86
  * *v 0.1.0*
69
87
  * Add TinyGrabber.post method for HTTP POST request
70
88
  * *v 0.0.7*
@@ -0,0 +1,245 @@
1
+ # Net::HTTP agent for TinyGrabber
2
+ # Initialize connect with Resource
3
+ # Setting connect attributes
4
+ #
5
+ class TinyGrabber::Agent
6
+ # Debug flag for detilazition log and save result HTML to /log/*.html file
7
+ attr_accessor :debug
8
+ # Max time to execute request
9
+ attr_accessor :read_timeout
10
+ # Web browser name
11
+ attr_accessor :user_agent
12
+ # Remote proxy configuration
13
+ attr_accessor :proxy
14
+ # Basic authentification configuration
15
+ attr_accessor :basic_auth
16
+ # Headers
17
+ attr_accessor :headers
18
+ # Headers
19
+ attr_accessor :cookies
20
+
21
+ # Initialization object
22
+ #
23
+ def initialize
24
+ @debug = false
25
+
26
+ # Initialize variables agent attributes
27
+ @user_agent = nil
28
+ @proxy = []
29
+ @basic_auth = {}
30
+ @headers = {}
31
+ @cookies = nil
32
+ @read_timeout = 10
33
+ # Initialize variable for URI object
34
+ @uri = nil
35
+ # Initialize variable for Net::HTTP request object
36
+ @http = Net::HTTP
37
+ # Initialize variable for Net::HTTP response object
38
+ @response = nil
39
+ end
40
+
41
+
42
+ # Set READ_TIMEOUT agent attribute
43
+ #
44
+ # @param read_timeout Waiting time to reading
45
+ #
46
+ def read_timeout= read_timeout
47
+ fail 'attribute read_timeout must be Integer' unless read_timeout.is_a?(Integer)
48
+ @read_timeout = read_timeout
49
+ end
50
+
51
+
52
+ # Set USER_AGENT agent attribute
53
+ #
54
+ # @param user_agent Web browser name
55
+ #
56
+ def user_agent= user_agent
57
+ fail 'attribute user_agent must be String' unless user_agent.is_a?(String)
58
+ @user_agent = user_agent
59
+ end
60
+
61
+
62
+ # Initialize Net::HTTP connection through proxy provider
63
+ # TYPE attribute distribute proxy type on SOCKS4(5) and HTTP(s)
64
+ #
65
+ # @param proxy Proxy configuration
66
+ #
67
+ def proxy= proxy
68
+ if proxy.is_a?(String)
69
+ ip, port = proxy.split(':')
70
+ fail 'attribute proxy must be in format ip:port' unless ip and port
71
+ proxy = { ip: ip, port: port }
72
+ end
73
+ fail 'attribute proxy must be Hash' unless proxy.is_a?(Hash)
74
+ fail 'attribute proxy must contain :ip and :port keys' unless proxy[:ip] and proxy[:port]
75
+
76
+ @proxy = proxy
77
+ if ['socks', :socks].include?(proxy[:type])
78
+ @http = Net::HTTP.SOCKSProxy(proxy[:ip], proxy[:port])
79
+ else
80
+ @http = Net::HTTP::Proxy(proxy[:ip], proxy[:port])
81
+ end
82
+ end
83
+
84
+
85
+ # Set BASIC_AUTH agent attribute
86
+ #
87
+ # @param basic_auth Authentification configuration
88
+ #
89
+ def basic_auth= basic_auth
90
+ fail 'attribute basic_auth must be Hash' unless basic_auth.is_a?(Hash)
91
+ fail 'attribute basic_auth must contain :username and :password keys' unless basic_auth[:username] and basic_auth[:password]
92
+ @basic_auth = basic_auth
93
+ end
94
+
95
+
96
+ # Set HEADERS agent attribute
97
+ #
98
+ # @param headers Request headers
99
+ #
100
+ def headers= headers
101
+ fail 'attribute headers must be Hash' unless headers.is_a?(Hash)
102
+ @headers = headers
103
+ end
104
+
105
+
106
+ # Set COOKIES agent attribute
107
+ #
108
+ # @param cookies Request cookies
109
+ #
110
+ def cookies= cookies
111
+ fail 'attribute cookies must be String' unless cookies.is_a?(String)
112
+ @cookies = cookies
113
+ end
114
+
115
+
116
+ # Fetch request for GET and POST HTTP methods
117
+ # Setting USER_AGENT, BASIC_AUTH, HEADERS, COOKIES request attribute
118
+ # Make response and save COOKIES for next requests
119
+ #
120
+ # @param url Resource link
121
+ # @param method Request method
122
+ # @param headers Request header
123
+ # @param params Request additional params
124
+ #
125
+ def fetch url, method = :get, headers = {}, params = {}
126
+ if @debug
127
+ p "#{debug_initial_word} =============================="
128
+ p "#{debug_initial_word} #{method.upcase} #{url}"
129
+ p "#{debug_initial_word} #{params}"
130
+ p "#{debug_initial_word} ------------------------------"
131
+ end
132
+ set_uri url
133
+ case method
134
+ when :get
135
+ @request = Net::HTTP::Get.new(@uri.request_uri)
136
+ when :post
137
+ @request = Net::HTTP::Post.new(@uri.request_uri)
138
+ @request.set_form_data(params)
139
+ end
140
+ set_user_agent if @user_agent
141
+ set_basic_auth unless @basic_auth.empty?
142
+ @headers = headers unless headers.empty?
143
+ set_headers unless @headers.empty?
144
+ set_cookies if @cookies
145
+ @response = send_request
146
+ case @response
147
+ # HTTP response code 1xx
148
+ when Net::HTTPInformation
149
+ # HTTP response code 2xx
150
+ when Net::HTTPSuccess
151
+ save_headers if @response.header
152
+ save_cookies if @response.cookies
153
+ # HTTP response code 3xx
154
+ when Net::HTTPRedirection
155
+ # HTTP response code 4xx
156
+ when Net::HTTPClientError
157
+ # HTTP response code 5xx
158
+ when Net::HTTPServerError
159
+ end
160
+ if @debug
161
+ debug_filename = "log/#{method.upcase}_#{@uri.to_s.gsub(/[\/:]/, '_').gsub(/_+/, '_')}"
162
+ File.open(debug_filename, 'wb') { |f| f << @response.body } if @debug
163
+ p "#{debug_initial_word} HTML > #{debug_filename}"
164
+ end
165
+ @response
166
+ end
167
+
168
+
169
+ # Initialize URI object from request url
170
+ #
171
+ # @param url Request link
172
+ #
173
+ def set_uri url
174
+ # It's magic work with escaped url
175
+ @uri = URI(URI.escape(URI.unescape(url)))
176
+ p "#{debug_initial_word} URI = #{@uri}" if @debug
177
+ end
178
+
179
+
180
+ # Set USER_AGENT request attribute
181
+ #
182
+ def set_user_agent
183
+ @headers['User-Agent'] = @user_agent
184
+ p "#{debug_initial_word} user_agent = #{@user_agent}" if @debug
185
+ end
186
+
187
+
188
+ # Set BASIC_AUTH request authentification
189
+ #
190
+ def set_basic_auth
191
+ @request.basic_auth @basic_auth[:username], @basic_auth[:password]
192
+ p "#{debug_initial_word} basic_auth = #{@basic_auth}" if @debug
193
+ end
194
+
195
+
196
+ # Set request HEADERS
197
+ #
198
+ def set_headers
199
+ @headers.each { |k, v| @request.add_field(String(k), v) }
200
+ p "#{debug_initial_word} headers = #{@headers}" if @debug
201
+ end
202
+
203
+
204
+ # Set request COOKIES
205
+ #
206
+ def set_cookies
207
+ @request['Cookie'] = @cookies
208
+ p "#{debug_initial_word} cookies = #{@cookies}" if @debug
209
+ end
210
+
211
+
212
+ # Send request and get response
213
+ # Use SSL connect for HTTPS link scheme
214
+ #
215
+ def send_request
216
+ @http.start(@uri.host, @uri.port, use_ssl: @uri.scheme == 'https') do |http|
217
+ http.read_timeout = @read_timeout
218
+ p "#{debug_initial_word} read_timeout = #{@read_timeout}" if @debug
219
+ http.request(@request)
220
+ end
221
+ end
222
+
223
+
224
+ # Save response headers in agent attribute
225
+ #
226
+ def save_headers
227
+ @headers = @response.headers
228
+ p "#{debug_initial_word} save_headers = #{@headers}" if @debug
229
+ end
230
+
231
+
232
+ # Save response cookies in agent attribute
233
+ #
234
+ def save_cookies
235
+ @cookies = @response.cookies
236
+ p "#{debug_initial_word} save_cookies = #{@cookies}" if @debug
237
+ end
238
+
239
+
240
+ # Tiny grabber initial word for debug
241
+ #
242
+ def debug_initial_word
243
+ "TG | #{Time.now.strftime('%Y%m%d-%H%M%S')} |"
244
+ end
245
+ end
@@ -14,7 +14,19 @@ module Net
14
14
  # Response Cookies
15
15
  #
16
16
  def cookies
17
- self.get_fields('set-cookie')
17
+ cookies = self.get_fields('set-cookie')
18
+ if cookies
19
+ cookies.map { |cookie| cookie.gsub(/\A([^;]+).*\Z/, '\1') }.join('&')
20
+ else
21
+ nil
22
+ end
23
+ end
24
+
25
+
26
+ # Response Headers
27
+ #
28
+ def headers
29
+ self.header.to_hash.inject({}) { |headers, (header_key, header_value)| headers[header_key] = header_value.first; headers }
18
30
  end
19
31
  end
20
32
  end
@@ -1,4 +1,4 @@
1
1
  class TinyGrabber
2
2
  # Version number
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
data/lib/tiny_grabber.rb CHANGED
@@ -1,147 +1,179 @@
1
- require "tiny_grabber/version"
1
+ require 'tiny_grabber/version'
2
+ require 'tiny_grabber/agent'
2
3
 
3
4
  require 'uri'
4
5
  require 'net/http'
5
6
  require 'socksify/http'
6
7
  require 'tiny_grabber/http'
8
+ require 'redis'
7
9
 
8
10
  # Main class for TinyGrabber
11
+ #
9
12
  class TinyGrabber
10
13
 
11
- @uri
12
- @params
13
- @http
14
- @request
14
+ # Initialize a new TinyGrabber user agent.
15
+ #
16
+ def initialize
17
+ @agent = TinyGrabber::Agent.new
18
+ end
19
+
20
+
21
+ # Singleton > Initialize a new TinyGrabber user agent.
22
+ #
23
+ def self.initialize config = {}
24
+ @agent = TinyGrabber::Agent.new
25
+
26
+ @agent.debug = config[:debug] if config[:debug]
27
+ @agent.read_timeout = config[:read_timeout] if config[:read_timeout]
28
+ @agent.user_agent = config[:user_agent] if config[:user_agent]
29
+ @agent.proxy = config[:proxy] if config[:proxy]
30
+ @agent.basic_auth = config[:basic_auth] if config[:basic_auth]
31
+ @agent.headers = config[:headers] if config[:headers]
32
+ @agent.cookies = config[:cookies] if config[:cookies]
33
+ end
34
+
15
35
 
16
- ##
17
- # Get Net::HTTP object for content from remote single page
18
- # [url (string)] Link to resource
19
- # [params (hash)] Request params
20
- # * [proxy (hash)] Configuration of remote proxy server
21
- # * *ip* address of remote proxy server
22
- # * *port* of remote proxy server
23
- # * *proxy_type* of remote proxy server
24
- # * *http* for http(s) proxy servers (by default)
25
- # * *socks* for socks4/5 proxy servers
26
- # * [headers (hash)] Headers
27
- # * [auth (hash)] Basic Authentication
28
- # * *username* Authenticate username
29
- # * *password* Authenticate password
36
+ # HTTP::GET request
37
+ #
38
+ # @param url Resource link
39
+ # @param headers Request header
30
40
  #
31
- # = Example
32
- # TinyGrabber.get url, headers: { 'Content-Type' => 'application/json' }, proxy: { ip: 'xx.xx.xx.xx', port: xx, proxy_type: :socks }
41
+ def get url, headers = {}
42
+ @agent.fetch url, :get, headers
43
+ end
44
+
45
+ # Singleton > HTTP::GET request
33
46
  #
34
- # @param url Link to resource
35
- # @param params Request params
47
+ # @param url Resource link
48
+ # @param headers Request header
36
49
  #
37
- def self.get url, params = {}
38
- @uri = set_url url
39
- @params = convert_params_to_sym params
40
- @http = set_http_connect
41
- @request = Net::HTTP::Get.new(@uri.request_uri)
42
- set_basic_auth
43
- set_headers
44
- get_request
50
+ def self.get url, headers = {}, config = {}
51
+ initialize config
52
+ @agent.fetch url, :get, headers
45
53
  end
46
54
 
47
55
 
48
- ##
49
- # Get Net::HTTP object for content from remote single page
50
- # [url (string)] Link to resource
51
- # [data (hash)] Post data
52
- # [params (hash)] Request params
53
- # * [proxy (hash)] Configuration of remote proxy server
54
- # * *ip* address of remote proxy server
55
- # * *port* of remote proxy server
56
- # * *proxy_type* of remote proxy server
57
- # * *http* for http(s) proxy servers (by default)
58
- # * *socks* for socks4/5 proxy servers
59
- # * [headers (hash)] Headers
60
- # * [auth (hash)] Basic Authentication
61
- # * *username* Authenticate username
62
- # * *password* Authenticate password
56
+ # HTTP::POST request
63
57
  #
64
- # = Example
65
- # TinyGrabber.post url, data, headers: { 'Content-Type' => 'application/json' }, proxy: { ip: 'xx.xx.xx.xx', port: xx, proxy_type: :socks }
58
+ # @param url Resource link
59
+ # @param params Request post data
60
+ # @param headers Request header
66
61
  #
67
- # @param url Link to resource
68
- # @param params Request params
62
+ def post url, params = {}, headers = {}, config = {}
63
+ @agent.fetch url, :post, headers, params
64
+ end
65
+
66
+
67
+ # Singleton > HTTP::GET request
68
+ #
69
+ # @param url Resource link
70
+ # @param headers Request header
69
71
  #
70
- def self.post url, data, params = {}
71
- @uri = set_url url
72
- data = convert_params_to_sym data
73
- @params = convert_params_to_sym params
74
- @http = set_http_connect
75
- @request = Net::HTTP::Post.new(@uri.request_uri)
76
- @request.set_form_data(data)
77
- set_basic_auth
78
- set_headers
79
- get_request
72
+ def self.post url, params = {}, headers = {}, config = {}
73
+ initialize config
74
+ @agent.fetch url, :post, headers, params
80
75
  end
81
76
 
82
- private
83
77
 
84
- # Convert all params key to symbols
78
+ # Set DEBUG flag
85
79
  #
86
- # @param params Request params
80
+ # @param debug Flag to start debug
87
81
  #
88
- def self.convert_params_to_sym params
89
- params.is_a?(Hash) ? params.inject({}) { |h, (k, v)| h[k.to_sym] = convert_params_to_sym v; h } : params
82
+ def debug= debug
83
+ @agent.debug = debug
90
84
  end
91
85
 
92
- # Convert URL to URI
86
+
87
+ # Read READ_TIMEOUT agent attribute
93
88
  #
94
- # @param url Link to resource
89
+ def read_timeout
90
+ @agent.read_timeout
91
+ end
92
+
93
+
94
+ # Set READ_TIMEOUT agent attribute
95
+ #
96
+ # @param read_timeout Waiting time to reading
95
97
  #
96
- def self.set_url url
97
- URI(URI.escape(url))
98
+ def read_timeout= read_timeout
99
+ @agent.read_timeout = read_timeout
98
100
  end
99
101
 
100
102
 
101
- # Use proxy for request
103
+ # Read USER_AGENT agent attribute
102
104
  #
103
- def self.set_http_connect
104
- if @params[:proxy]
105
- if ['socks', :socks].include?(@params[:proxy][:proxy_type])
106
- Net::HTTP.SOCKSProxy(@params[:proxy][:ip], @params[:proxy][:port])
107
- else
108
- Net::HTTP::Proxy(@params[:proxy][:ip], @params[:proxy][:port])
109
- end
110
- else
111
- Net::HTTP
112
- end
105
+ def user_agent
106
+ @agent.user_agent
113
107
  end
114
108
 
115
109
 
116
- # Set Basic Auth
110
+ # Set USER_AGENT agent attribute
117
111
  #
118
- # @param request Request object
119
- # @param params Request params
112
+ # @param user_agent Web browser name
120
113
  #
121
- def self.set_basic_auth
122
- if @params[:auth]
123
- @request.basic_auth @params[:auth][:username], @params[:auth][:password]
124
- end
114
+ def user_agent= user_agent
115
+ @agent.user_agent = user_agent
125
116
  end
126
117
 
127
118
 
128
- # Headers
119
+ # Read PROXY agent attribute
129
120
  #
130
- # @param request Request object
131
- # @param params Request params
121
+ def proxy
122
+ @agent.proxy
123
+ end
124
+
125
+
126
+ # Set PROXY agent attribute
132
127
  #
133
- def self.set_headers
134
- @params[:headers].each { |k, v| @request.add_field(String(k), v) } if @params[:headers]
128
+ # @param proxy Proxy configuration
129
+ #
130
+ def proxy= proxy
131
+ @agent.proxy = proxy
132
+ end
133
+
134
+
135
+ # Set BASIC_AUTH agent attribute
136
+ #
137
+ # @param username Authentification username
138
+ # @param password Authentification password
139
+ #
140
+ def basic_auth username, password
141
+ @agent.basic_auth = { username: username, password: password }
142
+ end
143
+
144
+
145
+ # Read HEADERS agent attribute
146
+ #
147
+ def headers
148
+ @agent.headers
149
+ end
150
+
151
+
152
+ # Set HEADERS agent attribute
153
+ #
154
+ # @param headers Request headers
155
+ #
156
+ def headers= headers
157
+ @agent.headers = headers
135
158
  end
136
159
 
137
160
 
138
- # Make request to remote resource
161
+ # Read COOKIES agent attribute
139
162
  #
140
- # @param uri URI object
141
- # @param http
163
+ def cookies
164
+ @agent.cookies
165
+ end
166
+
167
+
168
+ # Set COOKIES agent attribute
169
+ #
170
+ # @param cookies Request cookies
142
171
  #
143
- def self.get_request
144
- @http.start(@uri.host, @uri.port, use_ssl: @uri.scheme == 'https') { |http| http.request(@request) }
172
+ def cookies= cookies
173
+ @agent.cookies = cookies
145
174
  end
146
175
 
176
+
177
+
178
+
147
179
  end
data/tiny_grabber.gemspec CHANGED
@@ -20,10 +20,11 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.required_ruby_version = '~> 2.3.0'
22
22
 
23
- spec.add_dependency 'socksify', '~> 1.7'
24
- spec.add_dependency 'nokogiri', '~> 1.6'
23
+ spec.add_runtime_dependency 'socksify', '~> 1.7'
24
+ spec.add_runtime_dependency 'nokogiri', '~> 1.6'
25
+ spec.add_runtime_dependency 'redis', '~> 3.3'
25
26
 
26
- spec.add_development_dependency 'bundler', '~> 1.11'
27
27
  spec.add_development_dependency 'rake', '~> 10.0'
28
+ spec.add_development_dependency 'bundler', '~> 1.11'
28
29
  spec.add_development_dependency 'rspec', '~> 3.0'
29
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tiny_grabber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleksandr Chernyshev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-24 00:00:00.000000000 Z
11
+ date: 2016-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: socksify
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.6'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bundler
42
+ name: redis
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.11'
48
- type: :development
47
+ version: '3.3'
48
+ type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.11'
54
+ version: '3.3'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.11'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.11'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rspec
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -98,9 +112,9 @@ files:
98
112
  - bin/console
99
113
  - bin/setup
100
114
  - lib/tiny_grabber.rb
115
+ - lib/tiny_grabber/agent.rb
101
116
  - lib/tiny_grabber/http.rb
102
117
  - lib/tiny_grabber/version.rb
103
- - tiny_grabber-0.0.2.gem
104
118
  - tiny_grabber.gemspec
105
119
  homepage: https://github.com/moroznoeytpo/tiny_grabber
106
120
  licenses:
Binary file