tam 1.1.1 → 1.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/.gitignore +1 -0
- data/README.mkd +8 -0
- data/Rakefile +10 -1
- data/lib/tam/api/sms.rb +10 -4
- data/lib/tam/user.rb +4 -0
- data/lib/tam/version.rb +1 -1
- data/spec/fixtures/tam_getcoord_success.json +11 -0
- data/spec/fixtures/tam_send_sms_success.json +6 -0
- data/spec/location_get_spec.rb +46 -0
- data/spec/sms_receive_spec.rb +68 -0
- data/spec/sms_send_spec.rb +71 -0
- data/spec/spec_helper.rb +14 -0
- data/tam.gemspec +7 -0
- metadata +114 -7
data/.gitignore
CHANGED
data/README.mkd
CHANGED
@@ -56,3 +56,11 @@ If you are using rails then:
|
|
56
56
|
|
57
57
|
end
|
58
58
|
```
|
59
|
+
|
60
|
+
5. The routes exposed by the gem in your rails application are:
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
/tamapi/authorize
|
64
|
+
/tamapi/receive_sms # use this one (complement to form absolute path) as SMS URL when registering your application in telcoassetmarketplace.com
|
65
|
+
/tamapi/oauth_callback # use this one (complement to form absolute path) as OAUTH callback URL when registering your application in telcoassetmarketplace.com
|
66
|
+
```
|
data/Rakefile
CHANGED
@@ -28,4 +28,13 @@ end
|
|
28
28
|
desc "Clean automatically generated files"
|
29
29
|
task :clean do
|
30
30
|
FileUtils.rm_rf "pkg"
|
31
|
-
end
|
31
|
+
end
|
32
|
+
|
33
|
+
require 'spec/rake/spectask'
|
34
|
+
|
35
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
36
|
+
t.spec_files = Dir.glob('spec/**/*_spec.rb')
|
37
|
+
end
|
38
|
+
|
39
|
+
desc "Run tests"
|
40
|
+
task :default => :spec
|
data/lib/tam/api/sms.rb
CHANGED
@@ -22,8 +22,10 @@ module TAM
|
|
22
22
|
from_user = User.new(access_token, token_secret)
|
23
23
|
to_app = data["to"]
|
24
24
|
body = data["body"]
|
25
|
+
transaction_id = data["transaction_id"]
|
26
|
+
|
25
27
|
begin
|
26
|
-
dispatch_to_handler('receive_sms', from_user, to_app, body)
|
28
|
+
dispatch_to_handler('receive_sms', from_user, to_app, body, transaction_id)
|
27
29
|
response.status = 200
|
28
30
|
return ''
|
29
31
|
rescue Error => error
|
@@ -33,9 +35,13 @@ module TAM
|
|
33
35
|
end
|
34
36
|
|
35
37
|
# Sends an SMS
|
36
|
-
def self.send_sms(from_app, to_user, body)
|
37
|
-
payload =
|
38
|
-
|
38
|
+
def self.send_sms(from_app, to_user, body, transaction_id = nil)
|
39
|
+
payload = {'body' => body, 'from' => from_app}
|
40
|
+
if transaction_id
|
41
|
+
payload["transaction_id"] = transaction_id
|
42
|
+
end
|
43
|
+
response = dispatch_to_tam(:post, '/api/1/sms/send', to_user, JSON.generate(payload))
|
44
|
+
JSON.parse response
|
39
45
|
end
|
40
46
|
end
|
41
47
|
end
|
data/lib/tam/user.rb
CHANGED
data/lib/tam/version.rb
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'tam/api'
|
3
|
+
require 'tam/user'
|
4
|
+
require 'rack/test'
|
5
|
+
require 'json'
|
6
|
+
require 'webmock/rspec'
|
7
|
+
|
8
|
+
describe TAM::API, "#getcoord" do
|
9
|
+
include WebMock::API
|
10
|
+
include OAuthSettings
|
11
|
+
|
12
|
+
it "sends location request to platform" do
|
13
|
+
#given
|
14
|
+
TAM.expects(:consumer_key).twice().returns(ConsumerKey)
|
15
|
+
TAM.expects(:consumer_secret).twice().returns(ConsumerSecret)
|
16
|
+
TAM.expects(:site).returns(Site)
|
17
|
+
TAM.expects(:request_token_path).returns('/api/1/oauth/request_token')
|
18
|
+
TAM.expects(:access_token_path).returns('/api/1/oauth/access_token')
|
19
|
+
TAM.expects(:authorize_path).returns('/web/authorize')
|
20
|
+
TAM.expects(:oauth_scheme).returns(:query_string)
|
21
|
+
TAM.expects(:oauth_http_method).returns(:get)
|
22
|
+
http_stub = stub_request(:get, /.*\/api\/1\/location\/getcoord.*/).with { |request| assert_query(request.uri, OAuthParams) }.to_return(:body => load_fixture("tam_getcoord_success.json"))
|
23
|
+
|
24
|
+
#when
|
25
|
+
body = TAM::API.getcoord(TAM::User.new(AccessToken, AccessSecret))
|
26
|
+
|
27
|
+
#then
|
28
|
+
http_stub.should have_been_requested.times(1)
|
29
|
+
body["status"]["code"].should == 0
|
30
|
+
body["status"]["message"].should == "Message sent successfully"
|
31
|
+
end
|
32
|
+
|
33
|
+
def load_fixture(fixture)
|
34
|
+
IO.read("spec/fixtures/#{fixture}")
|
35
|
+
end
|
36
|
+
|
37
|
+
def assert_query(uri, params)
|
38
|
+
uri_params = uri.query_values
|
39
|
+
params.each do |key, value|
|
40
|
+
if not value.match(uri_params[key])
|
41
|
+
return false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
return true
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'tam/api'
|
3
|
+
require 'tam/user'
|
4
|
+
require 'rack/test'
|
5
|
+
require 'mocha'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
describe TAM::API, "when receiving sms" do
|
9
|
+
include Rack::Test::Methods
|
10
|
+
|
11
|
+
def app
|
12
|
+
TAM::API
|
13
|
+
end
|
14
|
+
|
15
|
+
before(:all) do
|
16
|
+
logger = stub('logger')
|
17
|
+
logger.stubs(:error)
|
18
|
+
TAM.const_set(:LOGGER, logger)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should pass request to tam sms handler and render success" do
|
22
|
+
#given
|
23
|
+
handler = stub('consumer_handler')
|
24
|
+
handler.expects(:respond_to?).with('receive_sms').returns(true)
|
25
|
+
handler.expects(:send).with('receive_sms', TAM::User.new('token', 'secret'), 'to_app', 'message', nil)
|
26
|
+
TAM.expects(:consumer_handler).times(3).returns(handler)
|
27
|
+
#when
|
28
|
+
post '/tamapi/receive_sms', JSON.generate({ 'body' => 'message', 'to' => 'to_app', 'from' => 'from_user' ,'access_token' => 'token', 'token_secret' => 'secret'})
|
29
|
+
#then
|
30
|
+
last_response.should be_ok
|
31
|
+
end
|
32
|
+
|
33
|
+
it "shpuld pass request with transaction to tam sms handler and render success" do
|
34
|
+
#given
|
35
|
+
handler = stub('consumer_handler')
|
36
|
+
handler.expects(:respond_to?).with('receive_sms').returns(true)
|
37
|
+
handler.expects(:send).with('receive_sms', TAM::User.new('token', 'secret'), 'to_app', 'message', 'tran_id')
|
38
|
+
TAM.expects(:consumer_handler).times(3).returns(handler)
|
39
|
+
#when
|
40
|
+
post '/tamapi/receive_sms', JSON.generate({ 'body' => 'message', 'to' => 'to_app', 'from' => 'from_user','transaction_id' => 'tran_id','access_token' => 'token', 'token_secret' => 'secret'})
|
41
|
+
#then
|
42
|
+
last_response.should be_ok
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should pass request to tam sms handler and render error on unexpected error" do
|
46
|
+
#given
|
47
|
+
handler = stub('consumer_handler')
|
48
|
+
handler.expects(:respond_to?).with('receive_sms').returns(true)
|
49
|
+
handler.stubs(:send).raises(TAM::UnexpectedError.new("Cannot handle"))
|
50
|
+
TAM.expects(:consumer_handler).times(3).returns(handler)
|
51
|
+
#when
|
52
|
+
post '/tamapi/receive_sms', JSON.generate({ 'body' => 'message', 'to' => 'to_app', 'from' => 'from_user','transaction_id' => 'tran_id','access_token' => 'token', 'token_secret' => 'secret'})
|
53
|
+
#then
|
54
|
+
last_response.should be_server_error
|
55
|
+
last_response.body.should == "Cannot handle"
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should pass request to tam sms handler and render error on missing consumer_handler" do
|
59
|
+
#given
|
60
|
+
handler = stub('consumer_handler')
|
61
|
+
TAM.expects(:consumer_handler).times(1).returns(nil)
|
62
|
+
#when
|
63
|
+
post '/tamapi/receive_sms', JSON.generate({ 'body' => 'message', 'to' => 'to_app', 'from' => 'from_user','transaction_id' => 'tran_id','access_token' => 'token', 'token_secret' => 'secret'})
|
64
|
+
#then
|
65
|
+
last_response.should be_server_error
|
66
|
+
last_response.body.should == "Application has not configured the telco asset marketplace consumer_handler"
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'tam/api'
|
3
|
+
require 'tam/user'
|
4
|
+
require 'rack/test'
|
5
|
+
require 'json'
|
6
|
+
require 'webmock/rspec'
|
7
|
+
|
8
|
+
describe TAM::API, "when sending sms" do
|
9
|
+
include WebMock::API
|
10
|
+
include OAuthSettings
|
11
|
+
|
12
|
+
it "should succelfully send the request to platform" do
|
13
|
+
#given
|
14
|
+
TAM.expects(:consumer_key).twice().returns(ConsumerKey)
|
15
|
+
TAM.expects(:consumer_secret).twice().returns(ConsumerSecret)
|
16
|
+
TAM.expects(:site).returns(Site)
|
17
|
+
TAM.expects(:request_token_path).returns('/api/1/oauth/request_token')
|
18
|
+
TAM.expects(:access_token_path).returns('/api/1/oauth/access_token')
|
19
|
+
TAM.expects(:authorize_path).returns('/web/authorize')
|
20
|
+
TAM.expects(:oauth_scheme).returns(:query_string)
|
21
|
+
TAM.expects(:oauth_http_method).returns(:get)
|
22
|
+
http_stub = stub_request(:post, /.*\/api\/1\/sms\/send.*/).with { |request| assert_request(request, { :query => OAuthParams, :body => "{\"body\":\"test message\",\"from\":\"to_app\"}"})}.to_return(:body => load_fixture("tam_send_sms_success.json"))
|
23
|
+
|
24
|
+
#when
|
25
|
+
body = TAM::API.send_sms("to_app", TAM::User.new(AccessToken, AccessSecret), 'test message')
|
26
|
+
|
27
|
+
#then
|
28
|
+
http_stub.should have_been_requested.times(1)
|
29
|
+
body["status"]["code"].should == 0
|
30
|
+
body["status"]["message"].should == "Message sent successfully"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "sends sms request with transaction id to platform" do
|
34
|
+
#given
|
35
|
+
TAM.expects(:consumer_key).twice().returns(ConsumerKey)
|
36
|
+
TAM.expects(:consumer_secret).twice().returns(ConsumerSecret)
|
37
|
+
TAM.expects(:site).returns(Site)
|
38
|
+
TAM.expects(:request_token_path).returns('/api/1/oauth/request_token')
|
39
|
+
TAM.expects(:access_token_path).returns('/api/1/oauth/access_token')
|
40
|
+
TAM.expects(:authorize_path).returns('/web/authorize')
|
41
|
+
TAM.expects(:oauth_scheme).returns(:query_string)
|
42
|
+
TAM.expects(:oauth_http_method).returns(:get)
|
43
|
+
http_stub = stub_request(:post, /.*\/api\/1\/sms\/send.*/).with { |request| assert_request(request, { :query => OAuthParams, :body => "{\"body\":\"test message\",\"from\":\"to_app\",\"transaction_id\":\"tran_id\"}"})}.to_return(:body => load_fixture("tam_send_sms_success.json"))
|
44
|
+
|
45
|
+
#when
|
46
|
+
body = TAM::API.send_sms("to_app", TAM::User.new(AccessToken, AccessSecret), 'test message', 'tran_id')
|
47
|
+
|
48
|
+
#then
|
49
|
+
http_stub.should have_been_requested.times(1)
|
50
|
+
body["status"]["code"].should == 0
|
51
|
+
body["status"]["message"].should == "Message sent successfully"
|
52
|
+
end
|
53
|
+
|
54
|
+
def load_fixture(fixture)
|
55
|
+
IO.read("spec/fixtures/#{fixture}")
|
56
|
+
end
|
57
|
+
|
58
|
+
def assert_request(req, matchers)
|
59
|
+
return (assert_query(req.uri, matchers[:query]) and req.body == matchers[:body])
|
60
|
+
end
|
61
|
+
|
62
|
+
def assert_query(uri, params)
|
63
|
+
uri_params = uri.query_values
|
64
|
+
params.each do |key, value|
|
65
|
+
if not value.match(uri_params[key])
|
66
|
+
return false
|
67
|
+
end
|
68
|
+
end
|
69
|
+
return true
|
70
|
+
end
|
71
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
SimpleCov.start do
|
3
|
+
add_filter "/spec/"
|
4
|
+
end
|
5
|
+
|
6
|
+
module OAuthSettings
|
7
|
+
AccessToken = "token"
|
8
|
+
AccessSecret = "secret"
|
9
|
+
ConsumerKey = "consumer_key"
|
10
|
+
ConsumerSecret = "consumer_secret"
|
11
|
+
Site = "https://telcoassetmarketplace.com"
|
12
|
+
|
13
|
+
OAuthParams = {"oauth_consumer_key" => /^#{ConsumerKey}$/, "oauth_signature_method" => /^HMAC-SHA1$/, "oauth_nonce" => /.+/, "oauth_signature" => /.+/, "oauth_timestamp" => /^[0-9]+$/, "oauth_version" => /^1.0$/, "oauth_token" => /^#{AccessToken}$/}
|
14
|
+
end
|
data/tam.gemspec
CHANGED
@@ -6,6 +6,13 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.add_runtime_dependency('json', '~> 1.5')
|
7
7
|
s.add_runtime_dependency('oauth', '~> 0.4.3')
|
8
8
|
|
9
|
+
s.add_development_dependency('rake', '= 0.9.2')
|
10
|
+
s.add_development_dependency('rspec', '= 1.3.2')
|
11
|
+
s.add_development_dependency('rack-test', "~> 0.6.1")
|
12
|
+
s.add_development_dependency('mocha', '~> 0.9.0')
|
13
|
+
s.add_development_dependency('webmock', '~> 1.7.0')
|
14
|
+
s.add_development_dependency('simplecov', '~> 0.5.0')
|
15
|
+
|
9
16
|
s.name = "tam"
|
10
17
|
s.version = TAM::VERSION.dup
|
11
18
|
s.platform = Gem::Platform::RUBY
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tam
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 1.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Carlos Manzanares
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-10-19 00:00:00 +03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -65,6 +65,102 @@ dependencies:
|
|
65
65
|
- 3
|
66
66
|
version: 0.4.3
|
67
67
|
requirement: *id003
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: rake
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - "="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 63
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
- 9
|
81
|
+
- 2
|
82
|
+
version: 0.9.2
|
83
|
+
requirement: *id004
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rspec
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - "="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
hash: 31
|
94
|
+
segments:
|
95
|
+
- 1
|
96
|
+
- 3
|
97
|
+
- 2
|
98
|
+
version: 1.3.2
|
99
|
+
requirement: *id005
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
name: rack-test
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
hash: 5
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
- 6
|
113
|
+
- 1
|
114
|
+
version: 0.6.1
|
115
|
+
requirement: *id006
|
116
|
+
- !ruby/object:Gem::Dependency
|
117
|
+
name: mocha
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
hash: 59
|
126
|
+
segments:
|
127
|
+
- 0
|
128
|
+
- 9
|
129
|
+
- 0
|
130
|
+
version: 0.9.0
|
131
|
+
requirement: *id007
|
132
|
+
- !ruby/object:Gem::Dependency
|
133
|
+
name: webmock
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
hash: 11
|
142
|
+
segments:
|
143
|
+
- 1
|
144
|
+
- 7
|
145
|
+
- 0
|
146
|
+
version: 1.7.0
|
147
|
+
requirement: *id008
|
148
|
+
- !ruby/object:Gem::Dependency
|
149
|
+
name: simplecov
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
hash: 11
|
158
|
+
segments:
|
159
|
+
- 0
|
160
|
+
- 5
|
161
|
+
- 0
|
162
|
+
version: 0.5.0
|
163
|
+
requirement: *id009
|
68
164
|
description: The Ruby gem for the telco asset marketplace REST APIs
|
69
165
|
email:
|
70
166
|
- developers@telcoassetmarketplace.com
|
@@ -91,6 +187,12 @@ files:
|
|
91
187
|
- lib/tam/railtie.rb
|
92
188
|
- lib/tam/user.rb
|
93
189
|
- lib/tam/version.rb
|
190
|
+
- spec/fixtures/tam_getcoord_success.json
|
191
|
+
- spec/fixtures/tam_send_sms_success.json
|
192
|
+
- spec/location_get_spec.rb
|
193
|
+
- spec/sms_receive_spec.rb
|
194
|
+
- spec/sms_send_spec.rb
|
195
|
+
- spec/spec_helper.rb
|
94
196
|
- tam.gemspec
|
95
197
|
has_rdoc: true
|
96
198
|
homepage: https://github.com/tamdeveloper/telco-asset-marketplace-gem
|
@@ -139,5 +241,10 @@ rubygems_version: 1.3.7
|
|
139
241
|
signing_key:
|
140
242
|
specification_version: 3
|
141
243
|
summary: telco asset marketplace Ruby gem
|
142
|
-
test_files:
|
143
|
-
|
244
|
+
test_files:
|
245
|
+
- spec/fixtures/tam_getcoord_success.json
|
246
|
+
- spec/fixtures/tam_send_sms_success.json
|
247
|
+
- spec/location_get_spec.rb
|
248
|
+
- spec/sms_receive_spec.rb
|
249
|
+
- spec/sms_send_spec.rb
|
250
|
+
- spec/spec_helper.rb
|