fetcher 0.3.0 → 0.4.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.
@@ -7,9 +7,6 @@
7
7
  * forum :: [groups.google.com/group/webslideshow](https://groups.google.com/group/webslideshow)
8
8
 
9
9
 
10
- ## Description
11
-
12
-
13
10
  ## Usage
14
11
 
15
12
  ### Copy (to File)
@@ -31,6 +28,45 @@ or
31
28
  worker = Fetcher::Worker.new
32
29
  txt = worker.read( 'https://raw.github.com/openfootball/at-austria/master/2013_14/bl.txt' )
33
30
 
31
+ Note: The method `read` will return a string.
32
+
33
+
34
+ ### Get (HTTP Response)
35
+
36
+ response = Fetcher.get( 'https://raw.github.com/openfootball/at-austria/master/2013_14/bl.txt' )
37
+
38
+ or
39
+
40
+ worker = Fetcher::Worker.new
41
+ response = worker.get( 'https://raw.github.com/openfootball/at-austria/master/2013_14/bl.txt' )
42
+
43
+ Note: The method `get` will return a `Net::HTTPResponse` object
44
+ (lets you use code, headers, body, etc.).
45
+
46
+ puts response.code # => '404'
47
+ # Note: Returned (status) code is a string e.g. '404'
48
+ puts response.message # => 'Not Found'
49
+ puts response.body
50
+ puts response.content_type # => 'text/html; charset=UTF-8'
51
+ puts response['content-type'] # => 'text/html; charset=UTF-8'
52
+ # Note: Headers are always downcased
53
+ # e.g. use 'content-type' not 'Content-Type'
54
+
55
+
56
+ ## Command Line
57
+
58
+ ~~~
59
+ fetch version 0.7.0 - Lets you fetch text documents or binary blobs via HTTP, HTTPS.
60
+
61
+ Usage: fetch [options] URI
62
+ -o, --output PATH Output Path (default is '.')
63
+ -v, --verbose Show debug trace
64
+
65
+
66
+ Examples:
67
+ fetch https://raw.github.com/openfootball/at-austria/master/2013_14/bl.txt
68
+ fetch -o downloads https://raw.github.com/openfootball/at-austria/master/2013_14/bl.txt
69
+ ~~~
34
70
 
35
71
 
36
72
  ## Install
@@ -51,6 +87,9 @@ The [`sportdb`](https://github.com/geraldb/sport.db.ruby) gem that lets you read
51
87
  and more in plain text
52
88
  ships with the `fetcher` gem.
53
89
 
90
+ The [`pluto`](https://github.com/geraldb/pluto) gem that lets you build web pages
91
+ from published web feeds
92
+ ships with the `fetcher` gem.
54
93
 
55
94
 
56
95
  ## License
data/bin/fetch CHANGED
File without changes
@@ -54,7 +54,7 @@ module Fetcher
54
54
  end
55
55
 
56
56
  # convenience shortcuts
57
-
57
+
58
58
  def self.copy( src, dest )
59
59
  Worker.new.copy( src, dest )
60
60
  end
@@ -63,6 +63,10 @@ module Fetcher
63
63
  Worker.new.read( src )
64
64
  end
65
65
 
66
+ def self.get( src )
67
+ Worker.new.get( src )
68
+ end
69
+
66
70
  end # module Fetcher
67
71
 
68
72
 
@@ -2,17 +2,13 @@
2
2
  module Fetcher
3
3
 
4
4
  class Opts
5
-
6
- def initialize
7
- @output_path = ''
8
- end
9
5
 
10
6
  def output_path=( value )
11
7
  @output_path = value
12
- end
13
-
8
+ end
9
+
14
10
  def output_path
15
- @output_path
11
+ @output_path || '.'
16
12
  end
17
13
 
18
14
  end # class Opts
@@ -25,15 +25,13 @@ module Fetcher
25
25
  def run( args )
26
26
  opt=OptionParser.new do |cmd|
27
27
 
28
- cmd.banner = "Usage: fetch [options] uri"
28
+ cmd.banner = "Usage: fetch [options] URI"
29
29
 
30
30
  cmd.on( '-o', '--output PATH', "Output Path (default is '#{opts.output_path}')" ) { |s| opts.output_path = s }
31
31
 
32
32
  # todo: find different letter for debug trace switch (use v for version?)
33
33
  cmd.on( '-v', '--verbose', 'Show debug trace' ) do
34
- # todo/fix: use/change to logutils settings for level
35
- # logger.datetime_format = "%H:%H:%S"
36
- # logger.level = Logger::DEBUG
34
+ LogUtils::Logger.root.level = :debug
37
35
  end
38
36
 
39
37
  usage =<<EOS
@@ -50,7 +48,8 @@ Further information:
50
48
  https://github.com/geraldb/fetcher
51
49
 
52
50
  EOS
53
-
51
+
52
+ ## todo: also add -? if possible as alternative
54
53
  cmd.on_tail( '-h', '--help', 'Show this message' ) do
55
54
  puts usage
56
55
  exit
@@ -69,13 +68,11 @@ EOS
69
68
  logger.debug "uri.host=<#{uri.host}>, uri.path=<#{uri.path}>"
70
69
 
71
70
  if uri.path == '/' || uri.path == ''
72
- dest = "#{uri.host}"
71
+ dest = "#{opts.output_path}/#{uri.host}"
73
72
  else
74
- dest = "#{uri.host}@#{uri.path.gsub( /[ \-]/, '_').gsub( /[\/\\]/, '-')}"
73
+ dest = "#{opts.output_path}/#{uri.host}@#{uri.path.gsub( /[ \-]/, '_').gsub( /[\/\\]/, '-')}"
75
74
  end
76
-
77
- ## todo: use output path option
78
-
75
+
79
76
  Worker.new.copy( src, dest )
80
77
 
81
78
  end # each arg
@@ -1,7 +1,7 @@
1
1
 
2
2
  module Fetcher
3
3
 
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
 
6
6
  end # module Fetcher
7
7
 
@@ -17,14 +17,22 @@ module Fetcher
17
17
  end
18
18
 
19
19
 
20
+ def get( src )
21
+ # return HTTPResponse (code,message,body,etc.)
22
+ logger.debug "fetch - get(_response) src: #{src}"
23
+
24
+ get_response( src )
25
+ end
26
+
27
+
20
28
  def read( src )
21
29
  # return contents (response body) a string
22
30
  logger.debug "fetch - copy src: #{src} into string"
23
31
 
24
32
  response = get_response( src )
25
33
 
26
- # on error return empty string - check: better return nil- why? why not??
27
- return '' if response.nil?
34
+ # on error return empty string; - check: better return nil- why? why not??
35
+ return '' if response.code != '200'
28
36
 
29
37
  response.body.dup # return string copy
30
38
  end
@@ -34,9 +42,9 @@ module Fetcher
34
42
  logger.debug "fetch - copy src: #{src} to dest: #{dest}"
35
43
 
36
44
  response = get_response( src )
37
-
45
+
38
46
  # on error return; do NOT copy file; sorry
39
- return if response.nil?
47
+ return if response.code != '200'
40
48
 
41
49
  # check for content type; use 'wb' for images
42
50
  if response.content_type =~ /image/
@@ -97,7 +105,8 @@ module Fetcher
97
105
 
98
106
  if response.code == '200'
99
107
  logger.debug "#{response.code} #{response.message}"
100
- break
108
+ logger.debug " content_type: #{response.content_type}, content_length: #{response.content_length}"
109
+ break # will return response
101
110
  elsif (response.code == '301' || response.code == '302' || response.code == '303' || response.code == '307' )
102
111
  # 301 = moved permanently
103
112
  # 302 = found
@@ -111,15 +120,12 @@ module Fetcher
111
120
  end
112
121
  uri = newuri
113
122
  else
114
- msg = "#{response.code} #{response.message}"
115
- puts "*** error: #{msg}"
116
- return nil # todo: throw StandardException?
123
+ puts "*** error - fetch HTTP - #{response.code} #{response.message}"
124
+ break # will return response
117
125
  end
118
126
  end
119
127
 
120
- logger.debug " content_type: #{response.content_type}, content_length: #{response.content_length}"
121
-
122
- response # return respone or nil if error
128
+ response
123
129
  end # method copy
124
130
 
125
131
  end # class Worker
metadata CHANGED
@@ -1,57 +1,49 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fetcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Gerald Bauer
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-08-27 00:00:00.000000000 Z
12
+ date: 2013-09-14 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: logutils
15
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &75519830 !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: '0.6'
20
22
  type: :runtime
21
23
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ! '>='
25
- - !ruby/object:Gem::Version
26
- version: '0.6'
24
+ version_requirements: *75519830
27
25
  - !ruby/object:Gem::Dependency
28
26
  name: rdoc
29
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &75537890 !ruby/object:Gem::Requirement
28
+ none: false
30
29
  requirements:
31
30
  - - ~>
32
31
  - !ruby/object:Gem::Version
33
- version: '4.0'
32
+ version: '3.10'
34
33
  type: :development
35
34
  prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ~>
39
- - !ruby/object:Gem::Version
40
- version: '4.0'
35
+ version_requirements: *75537890
41
36
  - !ruby/object:Gem::Dependency
42
37
  name: hoe
43
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &75536950 !ruby/object:Gem::Requirement
39
+ none: false
44
40
  requirements:
45
41
  - - ~>
46
42
  - !ruby/object:Gem::Version
47
- version: '3.6'
43
+ version: '3.3'
48
44
  type: :development
49
45
  prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ~>
53
- - !ruby/object:Gem::Version
54
- version: '3.6'
46
+ version_requirements: *75536950
55
47
  description: fetcher - Fetch Text Documents or Binary Blobs via HTTP, HTTPS
56
48
  email: webslideshow@googlegroups.com
57
49
  executables:
@@ -73,7 +65,6 @@ files:
73
65
  homepage: https://github.com/geraldb/fetcher
74
66
  licenses:
75
67
  - Public Domain
76
- metadata: {}
77
68
  post_install_message:
78
69
  rdoc_options:
79
70
  - --main
@@ -81,19 +72,21 @@ rdoc_options:
81
72
  require_paths:
82
73
  - lib
83
74
  required_ruby_version: !ruby/object:Gem::Requirement
75
+ none: false
84
76
  requirements:
85
77
  - - ! '>='
86
78
  - !ruby/object:Gem::Version
87
79
  version: 1.9.2
88
80
  required_rubygems_version: !ruby/object:Gem::Requirement
81
+ none: false
89
82
  requirements:
90
83
  - - ! '>='
91
84
  - !ruby/object:Gem::Version
92
85
  version: '0'
93
86
  requirements: []
94
87
  rubyforge_project: fetcher
95
- rubygems_version: 2.0.6
88
+ rubygems_version: 1.8.17
96
89
  signing_key:
97
- specification_version: 4
90
+ specification_version: 3
98
91
  summary: fetcher - Fetch Text Documents or Binary Blobs via HTTP, HTTPS
99
92
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: ef1b964e3b4a79b13b008147f894244610851bb9
4
- data.tar.gz: 84815891771fe636ecf09891451dca80bb4fd83f
5
- SHA512:
6
- metadata.gz: 01df88051ef004d00c25e9dcbdb1fb363737f1862106af02c4f74ad6712894960eb47c152853be0a29689c41aa47db7ebb57b00ef9154ff8564e92dafb4d213e
7
- data.tar.gz: 13a9c6a495483b07a0fc4b693cec8cc205aa7de48333f95884535d4ac2ab61cd3e4d5e85b4b24c41f477fcee3a971d125381bae36d872b319d12a18dfb240d3c