mechanize-progressbar 0.1.0 → 0.2.0
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.
- data/CHANGELOG +11 -0
- data/Gemfile +5 -4
- data/LICENSE.txt +18 -340
- data/README.rdoc +28 -32
- data/README.rdoc.ja +155 -0
- data/Rakefile +8 -2
- data/VERSION +1 -1
- data/lib/mechanize/progressbar.rb +9 -1
- data/lib/mechanize/progressbar/api.rb +50 -0
- data/lib/mechanize/progressbar/mechanize_1_0.rb +39 -0
- data/lib/mechanize/progressbar/mechanize_2_0.rb +44 -0
- data/lib/mechanize/progressbar/mechanize_progressbar.rb +89 -0
- data/spec/mechanize/progressbar/mech_progressbar_spec.rb +128 -67
- metadata +94 -124
- data/.document +0 -5
- data/.rspec +0 -1
- data/lib/mechanize/progressbar/mech_progressbar.rb +0 -149
metadata
CHANGED
@@ -1,186 +1,156 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: mechanize-progressbar
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 0
|
10
|
-
version: 0.1.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- kitamomonga
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
prerelease: false
|
12
|
+
date: 2011-07-13 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
23
15
|
name: mechanize
|
24
|
-
|
16
|
+
requirement: &82111910 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 23
|
30
|
-
segments:
|
31
|
-
- 1
|
32
|
-
- 0
|
33
|
-
- 0
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
34
21
|
version: 1.0.0
|
35
|
-
requirement: *id001
|
36
22
|
type: :runtime
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
23
|
prerelease: false
|
24
|
+
version_requirements: *82111910
|
25
|
+
- !ruby/object:Gem::Dependency
|
39
26
|
name: progressbar
|
40
|
-
|
27
|
+
requirement: &82111630 !ruby/object:Gem::Requirement
|
41
28
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
hash: 59
|
46
|
-
segments:
|
47
|
-
- 0
|
48
|
-
- 9
|
49
|
-
- 0
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
50
32
|
version: 0.9.0
|
51
|
-
requirement: *id002
|
52
33
|
type: :runtime
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
34
|
prerelease: false
|
35
|
+
version_requirements: *82111630
|
36
|
+
- !ruby/object:Gem::Dependency
|
55
37
|
name: rspec
|
56
|
-
|
38
|
+
requirement: &82111390 !ruby/object:Gem::Requirement
|
57
39
|
none: false
|
58
|
-
requirements:
|
59
|
-
- -
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
hash: 3
|
62
|
-
segments:
|
63
|
-
- 2
|
64
|
-
- 3
|
65
|
-
- 0
|
40
|
+
requirements:
|
41
|
+
- - ! '>'
|
42
|
+
- !ruby/object:Gem::Version
|
66
43
|
version: 2.3.0
|
67
|
-
requirement: *id003
|
68
44
|
type: :development
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
45
|
prerelease: false
|
46
|
+
version_requirements: *82111390
|
47
|
+
- !ruby/object:Gem::Dependency
|
71
48
|
name: bundler
|
72
|
-
|
49
|
+
requirement: &82111150 !ruby/object:Gem::Requirement
|
73
50
|
none: false
|
74
|
-
requirements:
|
75
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
hash: 23
|
78
|
-
segments:
|
79
|
-
- 1
|
80
|
-
- 0
|
81
|
-
- 0
|
51
|
+
requirements:
|
52
|
+
- - ! '>'
|
53
|
+
- !ruby/object:Gem::Version
|
82
54
|
version: 1.0.0
|
83
|
-
requirement: *id004
|
84
55
|
type: :development
|
85
|
-
- !ruby/object:Gem::Dependency
|
86
56
|
prerelease: false
|
57
|
+
version_requirements: *82111150
|
58
|
+
- !ruby/object:Gem::Dependency
|
87
59
|
name: jeweler
|
88
|
-
|
60
|
+
requirement: &82110890 !ruby/object:Gem::Requirement
|
89
61
|
none: false
|
90
|
-
requirements:
|
91
|
-
- -
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
hash: 7
|
94
|
-
segments:
|
95
|
-
- 1
|
96
|
-
- 5
|
97
|
-
- 2
|
62
|
+
requirements:
|
63
|
+
- - ! '>'
|
64
|
+
- !ruby/object:Gem::Version
|
98
65
|
version: 1.5.2
|
99
|
-
requirement: *id005
|
100
66
|
type: :development
|
101
|
-
- !ruby/object:Gem::Dependency
|
102
67
|
prerelease: false
|
68
|
+
version_requirements: *82110890
|
69
|
+
- !ruby/object:Gem::Dependency
|
103
70
|
name: rcov
|
104
|
-
|
71
|
+
requirement: &82110650 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *82110650
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: rdoc
|
82
|
+
requirement: &82110400 !ruby/object:Gem::Requirement
|
105
83
|
none: false
|
106
|
-
requirements:
|
107
|
-
- -
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
|
110
|
-
segments:
|
111
|
-
- 0
|
112
|
-
version: "0"
|
113
|
-
requirement: *id006
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 2.4.2
|
114
88
|
type: :development
|
115
|
-
- !ruby/object:Gem::Dependency
|
116
89
|
prerelease: false
|
90
|
+
version_requirements: *82110400
|
91
|
+
- !ruby/object:Gem::Dependency
|
117
92
|
name: webmock
|
118
|
-
|
93
|
+
requirement: &82110150 !ruby/object:Gem::Requirement
|
119
94
|
none: false
|
120
|
-
requirements:
|
121
|
-
- -
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
|
124
|
-
segments:
|
125
|
-
- 0
|
126
|
-
version: "0"
|
127
|
-
requirement: *id007
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 1.6.1
|
128
99
|
type: :development
|
129
|
-
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *82110150
|
102
|
+
description: Mechanize-Progressbar shows ProgressBar when HTTP GET access of Mechanize(Mechanize#get,
|
103
|
+
Page::Link#click, response of Form#submit). It requires 'progressbar' gem. HTTP
|
104
|
+
POST is not supported.
|
130
105
|
email: kitamomonga@gmail.com
|
131
106
|
executables: []
|
132
|
-
|
133
107
|
extensions: []
|
134
|
-
|
135
|
-
extra_rdoc_files:
|
108
|
+
extra_rdoc_files:
|
136
109
|
- LICENSE.txt
|
137
110
|
- README.rdoc
|
138
|
-
|
139
|
-
|
140
|
-
-
|
111
|
+
- README.rdoc.ja
|
112
|
+
files:
|
113
|
+
- CHANGELOG
|
141
114
|
- Gemfile
|
142
115
|
- LICENSE.txt
|
143
116
|
- README.rdoc
|
117
|
+
- README.rdoc.ja
|
144
118
|
- Rakefile
|
145
119
|
- VERSION
|
146
120
|
- lib/mechanize/progressbar.rb
|
147
|
-
- lib/mechanize/progressbar/
|
121
|
+
- lib/mechanize/progressbar/api.rb
|
122
|
+
- lib/mechanize/progressbar/mechanize_1_0.rb
|
123
|
+
- lib/mechanize/progressbar/mechanize_2_0.rb
|
124
|
+
- lib/mechanize/progressbar/mechanize_progressbar.rb
|
148
125
|
- spec/mechanize/progressbar/mech_progressbar_spec.rb
|
149
126
|
- spec/spec_helper.rb
|
150
|
-
has_rdoc: true
|
151
127
|
homepage: http://github.com/kitamomonga/mechanize-progressbar
|
152
|
-
licenses:
|
153
|
-
-
|
128
|
+
licenses:
|
129
|
+
- MIT
|
154
130
|
post_install_message:
|
155
131
|
rdoc_options: []
|
156
|
-
|
157
|
-
require_paths:
|
132
|
+
require_paths:
|
158
133
|
- lib
|
159
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
134
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
160
135
|
none: false
|
161
|
-
requirements:
|
162
|
-
- -
|
163
|
-
- !ruby/object:Gem::Version
|
164
|
-
|
165
|
-
segments:
|
136
|
+
requirements:
|
137
|
+
- - ! '>='
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
segments:
|
166
141
|
- 0
|
167
|
-
|
168
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
|
+
hash: 783892257
|
143
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
144
|
none: false
|
170
|
-
requirements:
|
171
|
-
- -
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
|
174
|
-
segments:
|
175
|
-
- 0
|
176
|
-
version: "0"
|
145
|
+
requirements:
|
146
|
+
- - ! '>='
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
177
149
|
requirements: []
|
178
|
-
|
179
150
|
rubyforge_project:
|
180
|
-
rubygems_version: 1.3
|
151
|
+
rubygems_version: 1.8.3
|
181
152
|
signing_key:
|
182
153
|
specification_version: 3
|
183
|
-
summary: Mechanize-Progressbar provides ProgressBar for Mechanize#get and Link#click.
|
184
|
-
|
185
|
-
|
186
|
-
- spec/spec_helper.rb
|
154
|
+
summary: Mechanize-Progressbar provides ProgressBar for Mechanize#get and Link#click.
|
155
|
+
requires 'progressbar' gem.
|
156
|
+
test_files: []
|
data/.document
DELETED
data/.rspec
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--color
|
@@ -1,149 +0,0 @@
|
|
1
|
-
module MechanizeProgressBarAPI
|
2
|
-
### Usage:
|
3
|
-
### require 'mechanize'
|
4
|
-
### require 'mechanize/progressbar'
|
5
|
-
### agent = Mechanize.new
|
6
|
-
### agent.progressbar{ agent.get(large_file) }
|
7
|
-
### agent.get(some_page)
|
8
|
-
### agent.progressbar{ agent.page.link_with(:text => 'download here').click }
|
9
|
-
###
|
10
|
-
### If you want to set parameters to ProgressBar object,
|
11
|
-
### agent.progressbar(:title => 'large_file', :format_arguments => @fmt) do
|
12
|
-
### agent.get(large_file)
|
13
|
-
### end
|
14
|
-
### ProgressBar is gem lib. Please install with 'gem install progressbar'.
|
15
|
-
###
|
16
|
-
### options:
|
17
|
-
### [:single] enables single line mode, original ProgressBar gem behavior. default is false
|
18
|
-
### [:title] ProgressBar.new(*title*, total, out), default is empty
|
19
|
-
### [:total] ProgressBar.new(title, *total*, out), default is 'Content-Length' response header
|
20
|
-
### [:out] ProgressBar.new(title, total, *out*), default is $stderr
|
21
|
-
### [:format] ProgressBar.new(*args).format=*format*, default is nil
|
22
|
-
### [:format_arguments] ProgressBar.new(*args).format_arguments=*format_arguments*, default is nil
|
23
|
-
### [:reversed] ReversedProgressBar.new(*args), default is false
|
24
|
-
### [:file_transfer_mode] enables ProgressBar#file_transfer_mode, default is true
|
25
|
-
### [:suppress_logger] makes Logger's output and Progressbar's output independent
|
26
|
-
def progressbar(agent_or_pbar_opts = self, pbar_opts = {})
|
27
|
-
if agent_or_pbar_opts.kind_of?(Hash) then
|
28
|
-
agent, pbar_opts = self, agent_or_pbar_opts
|
29
|
-
else
|
30
|
-
agent = agent_or_pbar_opts
|
31
|
-
end
|
32
|
-
MechanizeProgressBar.register(agent, pbar_opts)
|
33
|
-
if block_given?
|
34
|
-
begin
|
35
|
-
yield agent
|
36
|
-
rescue Exception, Mechanize::ResponseCodeError
|
37
|
-
MechanizeProgressBar.unregister(agent)
|
38
|
-
raise
|
39
|
-
end
|
40
|
-
MechanizeProgressBar.unregister(agent)
|
41
|
-
else
|
42
|
-
MechanizeProgressBar.reserve_pseudo_unregisteration(agent)
|
43
|
-
end
|
44
|
-
agent
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
module MechanizeProgressBar
|
49
|
-
def self.pbar_hooks ; @pbar_hooks ||= []; end
|
50
|
-
def self.default_out ; @default_out ||= $stderr; end
|
51
|
-
def self.default_out=(out); @default_out = out; end
|
52
|
-
|
53
|
-
def self.build(chain_params)
|
54
|
-
pbar_opts = chain_params[:progressbar]
|
55
|
-
|
56
|
-
out = pbar_opts[:out] || pbar_opts[:output] || self.default_out
|
57
|
-
if pbar_opts[:single] then
|
58
|
-
title = pbar_opts[:title] || chain_params[:uri].host
|
59
|
-
format = pbar_opts[:format]
|
60
|
-
format_arguments = pbar_opts[:format_arguments]
|
61
|
-
else
|
62
|
-
title = pbar_opts[:title] || ""
|
63
|
-
format = pbar_opts[:format] || "%3d%% %s %s"
|
64
|
-
format_arguments = pbar_opts[:format_arguments] || [:percentage, :bar, :stat_for_file_transfer]
|
65
|
-
out.print "#{pbar_opts[:title]||chain_params[:uri]}\n"
|
66
|
-
end
|
67
|
-
total = pbar_opts[:total] || filesize(chain_params)
|
68
|
-
pbar_class = pbar_opts[:reversed] ? ReversedProgressBar : ProgressBar
|
69
|
-
|
70
|
-
progressbar = pbar_class.new(title, total, out)
|
71
|
-
progressbar.file_transfer_mode unless pbar_opts[:file_transfer_mode]
|
72
|
-
progressbar.format = format if format
|
73
|
-
progressbar.format_arguments = format_arguments if format_arguments
|
74
|
-
return progressbar
|
75
|
-
end
|
76
|
-
|
77
|
-
def self.filesize(chain_params)
|
78
|
-
content_length = chain_params[:response]['content-length']
|
79
|
-
content_length ? content_length.to_i : 0
|
80
|
-
end
|
81
|
-
|
82
|
-
def self.register(agent, pbar_opts)
|
83
|
-
pre_hook = lambda{|options| options[:progressbar] = pbar_opts}
|
84
|
-
self.pbar_hooks << pre_hook
|
85
|
-
agent.pre_connect_hooks << pre_hook
|
86
|
-
end
|
87
|
-
|
88
|
-
def self.unregister(agent)
|
89
|
-
agent.pre_connect_hooks.each do |pr|
|
90
|
-
agent.pre_connect_hooks.delete_if{ self.pbar_hooks.delete(pr)}
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
def self.reserve_pseudo_unregisteration(agent)
|
95
|
-
agent.post_connect_hooks << lambda{|options|
|
96
|
-
MechanizeProgressBar.unregister(agent) if options[:agent] && options[:progressbar]
|
97
|
-
}
|
98
|
-
end
|
99
|
-
|
100
|
-
def self.http_ok?(params)
|
101
|
-
params[:progressbar] && params[:response].code == '200'
|
102
|
-
end
|
103
|
-
|
104
|
-
def self.suppress_logger?(params)
|
105
|
-
params[:progressbar] && params[:progressbar][:suppress_logger]
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
class Mechanize # has 6 added/modified lines
|
112
|
-
include MechanizeProgressBarAPI # (1of6)a
|
113
|
-
class Chain
|
114
|
-
class ResponseReader
|
115
|
-
def handle(ctx, params)
|
116
|
-
params[:response] = @response
|
117
|
-
body = StringIO.new
|
118
|
-
total = 0
|
119
|
-
pbar = MechanizeProgressBar.build(params) if MechanizeProgressBar.http_ok?(params) # (2of6)a
|
120
|
-
@response.read_body { |part|
|
121
|
-
total += part.length
|
122
|
-
body.write(part)
|
123
|
-
# Mechanize.log.debug("Read #{total} bytes") if Mechanize.log
|
124
|
-
Mechanize.log.debug("Read #{total} bytes") if Mechanize.log && !MechanizeProgressBar.suppress_logger?(params) # (3of6)m
|
125
|
-
pbar.inc(part.length) if MechanizeProgressBar.http_ok?(params) # (4of6)a
|
126
|
-
}
|
127
|
-
body.rewind
|
128
|
-
pbar.finish if MechanizeProgressBar.http_ok?(params) # (5of6)a
|
129
|
-
Mechanize.log.debug("Read #{total} bytes") if Mechanize.log && MechanizeProgressBar.suppress_logger?(params) # (6of6)a
|
130
|
-
|
131
|
-
res_klass = Net::HTTPResponse::CODE_TO_OBJ[@response.code.to_s]
|
132
|
-
raise ResponseCodeError.new(@response) unless res_klass
|
133
|
-
|
134
|
-
# Net::HTTP ignores EOFError if Content-length is given, so we emulate it here.
|
135
|
-
unless res_klass <= Net::HTTPRedirection
|
136
|
-
raise EOFError if (!params[:request].is_a?(Net::HTTP::Head)) && @response.content_length() && @response.content_length() != total
|
137
|
-
end
|
138
|
-
|
139
|
-
@response.each_header { |k,v|
|
140
|
-
Mechanize.log.debug("response-header: #{ k } => #{ v }")
|
141
|
-
} if Mechanize.log
|
142
|
-
|
143
|
-
params[:response_body] = body
|
144
|
-
params[:res_klass] = res_klass
|
145
|
-
super
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|