resthome 0.7.0 → 0.7.1
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.rdoc +4 -0
- data/VERSION +1 -1
- data/examples/amazon_product_web_service.rb +84 -0
- data/examples/twilio_web_service.rb +31 -0
- data/lib/resthome.rb +1 -1
- data/resthome.gemspec +6 -2
- metadata +8 -4
data/README.rdoc
CHANGED
@@ -83,6 +83,10 @@ How to use replace query parameters with function arguments.
|
|
83
83
|
service = LastFmWebService.new 'xxxxxxxxx'
|
84
84
|
service.track 'cher', 'believe'
|
85
85
|
|
86
|
+
== Twilio Example send SMS message
|
87
|
+
|
88
|
+
TwilioWebService.service.send_sms_message '5551112222', 'Verification Code: 2121'
|
89
|
+
|
86
90
|
== Contributing to RESTHome
|
87
91
|
|
88
92
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.1
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'resthome'
|
2
|
+
require 'digest/sha2'
|
3
|
+
require 'base64'
|
4
|
+
|
5
|
+
class AmazonProductWebService < RESTHome
|
6
|
+
base_uri 'http://ecs.amazonaws.com'
|
7
|
+
|
8
|
+
DEFAULT_VERSION = '2009-03-31'
|
9
|
+
|
10
|
+
@@digest256 = OpenSSL::Digest::Digest.new("sha256")
|
11
|
+
|
12
|
+
attr_accessor :version, :access_key, :secret, :associate_tag
|
13
|
+
|
14
|
+
namespace '/onca' do
|
15
|
+
route :item_search, '/xml', :query => {'Keywords' => :arg1, 'SearchIndex' => :arg2, 'Operation' => 'ItemSearch', 'Service' => 'AWSECommerceService'} do |res|
|
16
|
+
res['ItemSearchResponse']['Items']['Item']
|
17
|
+
end
|
18
|
+
|
19
|
+
route :item_lookup, '/xml', :query => {'ItemId' => :arg1, 'Operation' => 'ItemLookup', 'Service' => 'AWSECommerceService', 'ResponseGroup' => 'Small'} do |res|
|
20
|
+
res['ItemLookupResponse']['Items']['Item']
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(access_key, secret)
|
25
|
+
@access_key = access_key
|
26
|
+
@secret = secret
|
27
|
+
@version = DEFAULT_VERSION
|
28
|
+
@host = URI.parse(self.class.base_uri).host
|
29
|
+
end
|
30
|
+
|
31
|
+
def build_options!(options)
|
32
|
+
options[:query] ||= {}
|
33
|
+
options[:query]['AWSAccessKeyId'] = @access_key
|
34
|
+
options[:query]['Version'] = @version
|
35
|
+
options[:query]['Timestamp'] = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
|
36
|
+
options[:query]['AssociateTag'] = self.associate_tag if self.associate_tag
|
37
|
+
end
|
38
|
+
|
39
|
+
def sign_request(method, path, options)
|
40
|
+
signed_query = self.class.sign_request_v2(@secret, options[:query], method, @host, path)
|
41
|
+
options.delete :query
|
42
|
+
signed_query
|
43
|
+
end
|
44
|
+
|
45
|
+
def aws_request(method, path, options)
|
46
|
+
build_options! options
|
47
|
+
url = build_url(path)
|
48
|
+
signed_query = sign_request(method, path, options)
|
49
|
+
if method == :post
|
50
|
+
options[:body] = signed_query
|
51
|
+
else
|
52
|
+
url += "?#{signed_query}"
|
53
|
+
end
|
54
|
+
|
55
|
+
@request_method = method
|
56
|
+
@request_url = url
|
57
|
+
@request_options = options
|
58
|
+
|
59
|
+
@response = self.class.send(method, url, options)
|
60
|
+
end
|
61
|
+
|
62
|
+
alias_method :original_request, :request
|
63
|
+
alias_method :request, :aws_request
|
64
|
+
|
65
|
+
# copied from RightAws::AwsUtils
|
66
|
+
def self.amz_escape(param)
|
67
|
+
param.to_s.gsub(/([^a-zA-Z0-9._~-]+)/n) do
|
68
|
+
'%' + $1.unpack('H2' * $1.size).join('%').upcase
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# copied from RightAws::AwsUtils
|
73
|
+
def self.sign_request_v2(aws_secret_access_key, service_hash, http_verb, host, uri)
|
74
|
+
canonical_string = service_hash.keys.sort.map do |key|
|
75
|
+
"#{self.amz_escape(key)}=#{self.amz_escape(service_hash[key])}"
|
76
|
+
end.join('&')
|
77
|
+
|
78
|
+
string_to_sign = "#{http_verb.to_s.upcase}\n#{host.downcase}\n#{uri}\n#{canonical_string}"
|
79
|
+
|
80
|
+
signature = self.amz_escape(Base64.encode64(OpenSSL::HMAC.digest(@@digest256, aws_secret_access_key, string_to_sign)).strip)
|
81
|
+
|
82
|
+
"#{canonical_string}&Signature=#{signature}"
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'resthome'
|
2
|
+
|
3
|
+
class TwilioWebService < RESTHome
|
4
|
+
base_uri 'https://api.twilio.com'
|
5
|
+
|
6
|
+
namespace '/2010-04-01' do
|
7
|
+
route :accounts, '/Accounts'
|
8
|
+
|
9
|
+
namespace '/Accounts' do
|
10
|
+
route :create_sms_message, '/:sid/SMS/Messages', :expected_status => 201 do |res|
|
11
|
+
res['TwilioResponse']['SMSMessage']
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_accessor :number
|
17
|
+
|
18
|
+
def initialize(account_sid, auth_token, number)
|
19
|
+
@number = number
|
20
|
+
self.basic_auth = {:username => account_sid, :password => auth_token}
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.service
|
24
|
+
config = YAML.load_file("#{Rails.root}/config/twilio.yml")
|
25
|
+
TwilioWebService.new config['twilio']['sid'], config['twilio']['token'], config['twilio']['number']
|
26
|
+
end
|
27
|
+
|
28
|
+
def send_sms_message(cell_phone, message)
|
29
|
+
self.create_sms_message self.basic_auth[:username], {'From' => @number, 'To' => cell_phone, 'Body' => message}
|
30
|
+
end
|
31
|
+
end
|
data/lib/resthome.rb
CHANGED
data/resthome.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{resthome}
|
8
|
-
s.version = "0.7.
|
8
|
+
s.version = "0.7.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Doug Youch"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-02-21}
|
13
13
|
s.description = %q{Simple wrapper class generator for consuming RESTful web services}
|
14
14
|
s.email = %q{doug@cykod.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -24,8 +24,10 @@ Gem::Specification.new do |s|
|
|
24
24
|
"README.rdoc",
|
25
25
|
"Rakefile",
|
26
26
|
"VERSION",
|
27
|
+
"examples/amazon_product_web_service.rb",
|
27
28
|
"examples/chargify_web_service.rb",
|
28
29
|
"examples/last_fm_web_service.rb",
|
30
|
+
"examples/twilio_web_service.rb",
|
29
31
|
"examples/wordpress_web_service.rb",
|
30
32
|
"lib/resthome.rb",
|
31
33
|
"resthome.gemspec",
|
@@ -39,8 +41,10 @@ Gem::Specification.new do |s|
|
|
39
41
|
s.rubygems_version = %q{1.3.7}
|
40
42
|
s.summary = %q{RESTful web services consumer}
|
41
43
|
s.test_files = [
|
44
|
+
"examples/amazon_product_web_service.rb",
|
42
45
|
"examples/chargify_web_service.rb",
|
43
46
|
"examples/last_fm_web_service.rb",
|
47
|
+
"examples/twilio_web_service.rb",
|
44
48
|
"examples/wordpress_web_service.rb",
|
45
49
|
"spec/helper.rb",
|
46
50
|
"spec/lib/resthome_spec.rb"
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resthome
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 7
|
9
|
-
-
|
10
|
-
version: 0.7.
|
9
|
+
- 1
|
10
|
+
version: 0.7.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Doug Youch
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-02-21 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -137,8 +137,10 @@ files:
|
|
137
137
|
- README.rdoc
|
138
138
|
- Rakefile
|
139
139
|
- VERSION
|
140
|
+
- examples/amazon_product_web_service.rb
|
140
141
|
- examples/chargify_web_service.rb
|
141
142
|
- examples/last_fm_web_service.rb
|
143
|
+
- examples/twilio_web_service.rb
|
142
144
|
- examples/wordpress_web_service.rb
|
143
145
|
- lib/resthome.rb
|
144
146
|
- resthome.gemspec
|
@@ -180,8 +182,10 @@ signing_key:
|
|
180
182
|
specification_version: 3
|
181
183
|
summary: RESTful web services consumer
|
182
184
|
test_files:
|
185
|
+
- examples/amazon_product_web_service.rb
|
183
186
|
- examples/chargify_web_service.rb
|
184
187
|
- examples/last_fm_web_service.rb
|
188
|
+
- examples/twilio_web_service.rb
|
185
189
|
- examples/wordpress_web_service.rb
|
186
190
|
- spec/helper.rb
|
187
191
|
- spec/lib/resthome_spec.rb
|