Dynamised 0.1.2 → 0.1.3

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
  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: