mudbug 0.4.6.6 → 0.4.6.7
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/README.md +3 -2
- data/VERSION +1 -1
- data/examples/accepts_and_methods.rb +1 -2
- data/lib/mudbug.rb +56 -15
- data/rakefile.rb +1 -0
- metadata +17 -1
data/README.md
CHANGED
@@ -19,7 +19,7 @@ Install the gem:
|
|
19
19
|
|
20
20
|
Or, if using bundler, add to your Gemfile:
|
21
21
|
|
22
|
-
gem '
|
22
|
+
gem 'mudbug', '~> 0'
|
23
23
|
|
24
24
|
Quick Start
|
25
25
|
-----------
|
@@ -40,6 +40,7 @@ Usage
|
|
40
40
|
-----
|
41
41
|
You can pass through persistent [options to rest-client](https://github.com/rest-client/rest-client/blob/master/lib/restclient/request.rb):
|
42
42
|
|
43
|
+
require 'mudbug'
|
43
44
|
mb = Mudbug.new 'google.com', max_redirects: 3
|
44
45
|
|
45
46
|
Declare what you accept: (optional, default shown)
|
@@ -74,7 +75,7 @@ Call Mudbug#resource directly for finer-grained response handling:
|
|
74
75
|
# process resp.body
|
75
76
|
# etc.
|
76
77
|
|
77
|
-
Here is the heart of the Mudbug's [response processing](https://github.com/rickhull/mudbug/blob/master/lib/mudbug.rb#
|
78
|
+
Here is the heart of the Mudbug's [response processing](https://github.com/rickhull/mudbug/blob/master/lib/mudbug.rb#L45):
|
78
79
|
|
79
80
|
# this structure declares what we support in the request Accept: header
|
80
81
|
# and defines automatic processing of the response based on the
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.6.
|
1
|
+
0.4.6.7
|
data/lib/mudbug.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'logger'
|
1
2
|
require 'rest-client'
|
2
3
|
require 'json'
|
3
4
|
|
@@ -28,6 +29,43 @@ class Mudbug
|
|
28
29
|
},
|
29
30
|
}
|
30
31
|
|
32
|
+
def self.log_to dest=nil
|
33
|
+
case dest
|
34
|
+
when nil, 'stderr', 'STDERR'
|
35
|
+
dest = $stderr
|
36
|
+
when 'stdout', 'STDOUT'
|
37
|
+
dest = $stdout
|
38
|
+
when IO
|
39
|
+
# do nothing
|
40
|
+
when String
|
41
|
+
# assume file path, do nothing
|
42
|
+
else
|
43
|
+
raise "unable to log_to #{dest} (#{dest.class})"
|
44
|
+
end
|
45
|
+
if defined?(@@log)
|
46
|
+
l = Logger.new dest
|
47
|
+
l.formatter = @@log.formatter
|
48
|
+
l.level = @@log.level
|
49
|
+
@@log = l
|
50
|
+
else
|
51
|
+
@@log = Logger.new dest
|
52
|
+
@@log.formatter = proc { |sev, time, progname, msg|
|
53
|
+
line = "[#{time.strftime('%Y-%m-%d %H:%M:%S')}] #{sev.to_s.upcase}: "
|
54
|
+
line << "(#{progname}) " if progname
|
55
|
+
line << msg << "\n"
|
56
|
+
}
|
57
|
+
@@log.level = Logger::WARN
|
58
|
+
end
|
59
|
+
@@log
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.log_level=(sym)
|
63
|
+
log_to unless defined?(@@log)
|
64
|
+
level = Logger.const_get(sym.to_s.upcase)
|
65
|
+
raise "unknown log level #{sym}" unless level
|
66
|
+
@@log.level = level
|
67
|
+
end
|
68
|
+
|
31
69
|
# map our internal symbols to HTTP content types
|
32
70
|
# assign q scores based on the parameter order
|
33
71
|
# construct the right side of the Accept: header
|
@@ -43,39 +81,45 @@ class Mudbug
|
|
43
81
|
# do stuff based on response's Content-type
|
44
82
|
#
|
45
83
|
def self.process(resp, accept = nil)
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
84
|
+
log_to unless defined?(@@log)
|
85
|
+
|
86
|
+
@@log.debug { "response code: #{resp.code}" }
|
87
|
+
@@log.debug { "response headers:\n" << resp.raw_headers.inspect }
|
88
|
+
|
89
|
+
unless (200..299).include?(resp.code)
|
90
|
+
@@log.warn { "processing with HTTP Status Code #{resp.code}" }
|
51
91
|
end
|
52
92
|
|
53
93
|
# do you even Content-type, bro?
|
54
94
|
ct = resp.headers[:content_type]
|
55
95
|
unless ct
|
56
|
-
warn "
|
96
|
+
@@log.warn { "abort processing -- no response Content-type" }
|
57
97
|
return resp.body
|
58
98
|
end
|
59
99
|
|
60
100
|
# warn if we got Content-type we didn't ask for
|
61
101
|
ct, charset = ct.split(';').map { |s| s.strip }
|
62
|
-
|
102
|
+
if accept and !accept.include?(ct)
|
103
|
+
@@log.warn { "Asked for #{accept} but got #{ct}" }
|
104
|
+
end
|
63
105
|
|
64
106
|
# process the response for known content types
|
65
107
|
CONTENT.each { |sym, hsh|
|
66
108
|
return hsh[:proc].call(resp.body) if ct == hsh[:type]
|
67
109
|
}
|
68
110
|
|
69
|
-
warn "
|
70
|
-
return
|
111
|
+
@@log.warn { "abort processing -- unrecognized Content-type: #{ct}" }
|
112
|
+
return resp.body
|
71
113
|
end
|
72
114
|
|
115
|
+
|
73
116
|
attr_reader :options
|
74
117
|
attr_accessor :host
|
75
118
|
|
76
|
-
def initialize(host, options =
|
119
|
+
def initialize(host, options = {})
|
120
|
+
self.class.log_to options.delete :log_to
|
77
121
|
@host = host
|
78
|
-
@options = options
|
122
|
+
@options = options
|
79
123
|
accept :json, :html, :text
|
80
124
|
end
|
81
125
|
|
@@ -98,10 +142,7 @@ class Mudbug
|
|
98
142
|
#
|
99
143
|
def resource(path, options = {})
|
100
144
|
path = "/#{path}" unless path[0,1] == '/'
|
101
|
-
|
102
|
-
options = @options.merge(options)
|
103
|
-
|
104
|
-
RestClient::Resource.new(url, options)
|
145
|
+
RestClient::Resource.new "http://#{@host}#{path}", @options.merge(options)
|
105
146
|
end
|
106
147
|
|
107
148
|
# no payload
|
data/rakefile.rb
CHANGED
@@ -39,6 +39,7 @@ task :build do
|
|
39
39
|
|
40
40
|
s.add_runtime_dependency "rest-client", ["~> 1"]
|
41
41
|
s.add_runtime_dependency "json", ["~> 1"]
|
42
|
+
s.add_runtime_dependency "lager", [">= 0"]
|
42
43
|
s.add_development_dependency "minitest", [">= 0"]
|
43
44
|
s.add_development_dependency "rake", [">= 0"]
|
44
45
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mudbug
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.6.
|
4
|
+
version: 0.4.6.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -43,6 +43,22 @@ dependencies:
|
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '1'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: lager
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
63
|
name: minitest
|
48
64
|
requirement: !ruby/object:Gem::Requirement
|