Dynamised 0.1.2 → 0.1.3

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: 92c09eaab0e73d11f5961faa906a83bf1029fc19
4
- data.tar.gz: c67b20e85a6e72ede471fb285ae91bfe444c6786
3
+ metadata.gz: 5ee5e3bc7ef224ead6f6389b3af2c21220b6d314
4
+ data.tar.gz: 3d19bdcc20e0742a96cdb1ebbe04b7a9dbebd566
5
5
  SHA512:
6
- metadata.gz: 5846634eb62634d1006d7a0dd61a0afbb8da0a3abb4d960a42358d245e14dfa110805662fdd51fbd1599286e7cc8f4b8d08a9999e9af0b1b9360f2c60941b352
7
- data.tar.gz: b7937da48069fefabd9ae5118b1e4032a3930e367e7280ea25c74e6506d69b804a13ed9cf3f11b7c4093629bbed1a7133dc4eb5cbcdca777f724be08d09a3647
6
+ metadata.gz: 6668cb3446ff25bbfbac1748c712111d621f838b823522ba7cc2d397b6429c7792d7d9225eed5f494db280b31ba8dff604de7f1dec00f05c0a4ca7f6b51f50aa
7
+ data.tar.gz: 8733963e5b9f7d5d320920fd96094f76f71c20dad0c61bbffea73115bc4cee8bbd4af1cf72f0b4a710a1bfefa97fe48801cd7de2bfe9cb6303e900be3566b04b
data/dynamised.gemspec CHANGED
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
19
  f.match(%r{^(test|spec|features)/})
20
20
  end
21
- spec.bindir = "exe"
22
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.bindir = "bin"
22
+ spec.executables = %w{ dynamised }
23
23
  spec.require_paths = ["lib"]
24
24
  # {tty-spinner nokogiri awesome_print
25
25
  spec.add_runtime_dependency "tty-spinner", "~> 0.4"
@@ -1,100 +1,161 @@
1
1
  require "curb"
2
-
3
- module Dynamised
4
- module Curb_DSL
5
-
6
- def self.included(base)
7
- base.extend Singleton
8
- base.instance_eval do
9
- attr_reader :curl, :headers,:payload, :username, :password, :auth_type, :uri, :ssl, :redirects, :type_converter
10
-
11
- [:get, :post, :put, :delete, :head, :options, :patch, :link, :unlink].each do |func_name|
12
- define_method func_name do |&block|
13
- make_request_of func_name.to_s.upcase, &block
14
- end
2
+ require 'cgi'
3
+
4
+ module Curb_DSL
5
+ Regex = {
6
+ cookie_header: /Set-Cookie: /
7
+ }
8
+ def self.included(base)
9
+ base.extend Singleton
10
+ base.instance_eval do
11
+ attr_reader :curl, :headers,:payload, :username, :password, :auth_type, :uri, :ssl, :redirects, :type_converter,:cookies, :form_field_name, :form_fields
12
+
13
+ [:get, :post, :put, :delete, :head, :options, :patch, :link, :unlink].each do |func_name|
14
+ define_method func_name do |&block|
15
+ make_request_of func_name.to_s.upcase, &block
15
16
  end
17
+ end
16
18
 
17
- [:password,:username,:payload, :auth_type, :uri, :ssl, :redirects,:type_converter].each do |func_name|
18
- define_method "set_#{func_name}" do |value|
19
- self.instance_variable_set :"@#{func_name}", value
20
- end
19
+ [:password,:username,:payload, :auth_type, :uri, :ssl, :redirects,:type_converter,:cookies,:form_field_name,:error_handler].each do |func_name|
20
+ define_method "set_#{func_name}" do |value|
21
+ self.instance_variable_set :"@#{func_name}", value
21
22
  end
22
23
  end
23
-
24
-
25
-
26
24
  end
27
25
 
28
- module Singleton
29
- def request(&block)
30
- puts block
31
- self.new(&block).body
32
- end
33
-
34
- def query_params(value)
35
- Curl::postalize(value)
26
+ def form_field name,value
27
+ @form_fields ||= []
28
+ if @form_field_name
29
+ @form_fields.push(Curl::PostField.content([("%[%]" % [@form_field_name,name]),value.to_s]))
30
+ else
31
+ @form_fields.push(Curl::PostField.content(name ,value.to_s))
36
32
  end
37
33
  end
38
34
 
39
35
 
40
36
 
41
- def initialize(&block)
42
- @headers = {}
43
- instance_eval(&block) if block
37
+ end
38
+
39
+ module Singleton
40
+ def request(&block)
41
+ self.new(&block).body
44
42
  end
45
43
 
46
- def header(name, content)
47
- @headers[name] = content
44
+ def query_params(value)
45
+ Curl::postalize(value)
48
46
  end
47
+ end
49
48
 
50
- def make_request_of(request_method,&block)
51
- @curl = Curl::Easy.new(@uri) do |http|
52
- setup_request request_method, http
53
- end
54
- @curl.ssl_verify_peer = @ssl ||false
55
- # @curl.ignore_content_length = true
49
+
50
+
51
+ def initialize(&block)
52
+ @headers ||= {}
53
+ instance_eval(&block) if block_given?
54
+ end
55
+
56
+ def header(name, content)
57
+ @headers ||= {}
58
+ @headers[name] = content
59
+ end
60
+
61
+ def make_request_of(request_method,i_e =nil,&block)
62
+ i_e ||= @ignore_error
63
+ @resp_cookies = nil
64
+ @curl = Curl::Easy.new(@uri) do |http|
65
+ setup_request request_method, http
66
+ end
67
+ @curl.ssl_verify_peer = @ssl ||false
68
+ # @curl.ignore_content_length = true
69
+ if @form_fields
70
+ @curl.http_post(*@form_field)
71
+ else
56
72
  @curl.http request_method
57
- if @curl.response_code == 301
58
- @uri = @curl.redirect_url
59
- make_request_of request_method
73
+ end
74
+ if @curl.response_code == 301
75
+ @uri = @curl.redirect_url
76
+ make_request_of request_method, i_e
77
+ end
78
+ if @curl.response_code != 200
79
+ if @error_handler
80
+ puts @error_handler.call unless i_e
60
81
  end
61
82
  end
83
+ @ignore_error = false
84
+ end
62
85
 
63
- def status_code
64
- @curl.response_code
65
- end
86
+ def status_code
87
+ @curl.response_code
88
+ end
66
89
 
67
- def body
68
- @curl.body
69
- end
90
+ def decode_html(string)
91
+ CGI.unescapeHTML(string)
92
+ end
70
93
 
71
- def query_params(value)
72
- Curl::postalize(value)
73
- end
94
+ def encode_html(string)
95
+ CGI.escapeHTML(string)
96
+ end
74
97
 
98
+ def post_body
99
+ get_payload
100
+ end
75
101
 
76
- private
102
+ def ignore_error
103
+ @ignore_error = true
104
+ end
77
105
 
78
- def setup_request(method,http)
79
- http.headers['request-method'] = method.to_s
80
- http.headers.update(headers || {})
81
- http.max_redirects = @redirects || 3
82
- http.post_body = get_payload || nil
83
- http.http_auth_types = @auth_type || nil
84
- http.username = @username || nil
85
- http.password = @password || nil
86
- http.useragent = "curb"
87
- http
88
- end
106
+ def body
107
+ @curl.body
108
+ end
89
109
 
110
+ def response_code
111
+ @curl.response_code
112
+ end
90
113
 
91
- def get_payload
92
- if @type_converter
93
- @type_converter.call(@payload)
94
- else
95
- @payload
114
+ def response_cookies
115
+ @resp_cookies ||=
116
+ @curl.header_str.split("\r\n").each_with_object({}) do |header,headers|
117
+ if header =~ Regex[:cookie_header]
118
+ header.gsub(Regex[:cookie_header],'').split(';').each do |segment|
119
+ unless segment =~ /secure/
120
+ headers[$1.strip.downcase] = $2.gsub('"','') if segment =~ /(.*?)=(.*?)($|;|,(?! ))/
121
+ end
122
+ end
96
123
  end
97
124
  end
125
+ end
126
+
127
+ def query_params(value)
128
+ Curl::postalize(value)
129
+ end
130
+
131
+
132
+ private
133
+
134
+
135
+ def setup_request(method,http)
136
+ http.headers['request-method'] = method.to_s
137
+ http.headers.update(headers || {})
138
+ http.max_redirects = @redirects || 3
139
+ http.post_body = get_payload || nil
140
+ http.http_auth_types = @auth_type || nil
141
+ http.username = @username || nil
142
+ http.password = @password || nil
143
+ http.useragent = "curb"
144
+ http.multipart_form_post = @form_field_name ? true : false
145
+ if @cookies
146
+ http.enable_cookies = true
147
+ http.cookies = (@cookies.is_a? String) ? @cookies : @cookies.inject("") {|cookies,data| "%s%s=%s;" % data.unshift(cookies) }
148
+ end
149
+ http
150
+ end
98
151
 
152
+
153
+ def get_payload
154
+ if @type_converter
155
+ @type_converter.call(@payload)
156
+ else
157
+ @payload
158
+ end
99
159
  end
160
+
100
161
  end
@@ -1,6 +1,6 @@
1
1
  module Dynamised
2
2
  module META
3
- Version = "0.1.2"
3
+ Version = "0.1.3"
4
4
  Description = <<-DESC.gsub(/^\s*/, '')
5
5
  A tool that allows a user to build a web scraper that works by recursively crawling pages until
6
6
  it finds the requested infomation.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Dynamised
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Becker
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-08 00:00:00.000000000 Z
11
+ date: 2017-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tty-spinner
@@ -99,7 +99,8 @@ description: |
99
99
  it finds the requested infomation.
100
100
  email:
101
101
  - mbeckerwork@gmail.com
102
- executables: []
102
+ executables:
103
+ - dynamised
103
104
  extensions: []
104
105
  extra_rdoc_files: []
105
106
  files: