tropo-provisioning 0.0.21 → 0.0.22
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +1 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +38 -0
- data/README.rdoc +10 -4
- data/Rakefile +20 -35
- data/examples/app_details.yml +3 -0
- data/examples/authenticate_account.rb +12 -0
- data/examples/config.yml +5 -0
- data/examples/create_invitation.rb +12 -0
- data/examples/delete_applications.rb +25 -0
- data/examples/get_balance.rb +11 -0
- data/examples/list_applications_with_addresses.rb +18 -0
- data/examples/list_features.rb +16 -0
- data/examples/list_invitations.rb +19 -0
- data/examples/list_partitions_platforms.rb +15 -0
- data/examples/list_payment_method.rb +11 -0
- data/examples/list_payment_methods.rb +11 -0
- data/examples/list_user.rb +15 -0
- data/examples/modify_user.rb +15 -0
- data/examples/update_invitation.rb +10 -0
- data/examples/users_search.rb +15 -0
- data/lib/tropo-provisioning.rb +2 -2
- data/lib/tropo-provisioning/tropo_client.rb +211 -0
- data/lib/tropo-provisioning/tropo_error.rb +12 -0
- data/lib/tropo-provisioning/tropo_provisioning.rb +930 -0
- data/lib/tropo-provisioning/version.rb +5 -0
- data/spec/live-tropo-provisioning_spec.rb +221 -26
- data/spec/spec_helper.rb +3 -7
- data/spec/tropo-provisioning_spec.rb +176 -162
- data/tropo-provisioning.gemspec +25 -60
- metadata +110 -33
- data/VERSION +0 -1
- data/lib/tropo-provisioning/error.rb +0 -7
- data/lib/tropo-provisioning/tropo-provisioning.rb +0 -864
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
tropo-provisioning (0.0.21)
|
5
|
+
activesupport
|
6
|
+
hashie (>= 0.2.1)
|
7
|
+
i18n
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: http://rubygems.org/
|
11
|
+
specs:
|
12
|
+
activesupport (3.1.0)
|
13
|
+
multi_json (~> 1.0)
|
14
|
+
diff-lcs (1.1.2)
|
15
|
+
fakeweb (1.3.0)
|
16
|
+
hashie (1.1.0)
|
17
|
+
i18n (0.6.0)
|
18
|
+
multi_json (1.0.3)
|
19
|
+
rdoc (3.9.4)
|
20
|
+
rspec (2.3.0)
|
21
|
+
rspec-core (~> 2.3.0)
|
22
|
+
rspec-expectations (~> 2.3.0)
|
23
|
+
rspec-mocks (~> 2.3.0)
|
24
|
+
rspec-core (2.3.1)
|
25
|
+
rspec-expectations (2.3.0)
|
26
|
+
diff-lcs (~> 1.1.2)
|
27
|
+
rspec-mocks (2.3.0)
|
28
|
+
yard (0.7.2)
|
29
|
+
|
30
|
+
PLATFORMS
|
31
|
+
ruby
|
32
|
+
|
33
|
+
DEPENDENCIES
|
34
|
+
fakeweb
|
35
|
+
rdoc
|
36
|
+
rspec
|
37
|
+
tropo-provisioning!
|
38
|
+
yard
|
data/README.rdoc
CHANGED
@@ -19,14 +19,17 @@ The Tropo Provisioning gem provides a library for convenient access to the Tropo
|
|
19
19
|
== Requirements
|
20
20
|
|
21
21
|
* Unit tests passed on: Ruby MRI v1.8.6/1.8.7, Ruby 1.9.2, JRuby 1.5.0 and MacRuby 0.6
|
22
|
-
|
22
|
+
|
23
|
+
* RubyGems: Check tropo-provisioning.gemspec
|
23
24
|
|
24
25
|
== Installation
|
25
26
|
|
26
|
-
|
27
|
+
$ gem install tropo-provisioning
|
27
28
|
|
28
29
|
== Usage
|
29
30
|
|
31
|
+
Any HTTP method can be accessed using the TropoProvisioning wrapper:
|
32
|
+
|
30
33
|
require 'rubygems'
|
31
34
|
require 'tropo-provisioning'
|
32
35
|
|
@@ -62,8 +65,11 @@ The Tropo Provisioning gem provides a library for convenient access to the Tropo
|
|
62
65
|
|
63
66
|
==== Tropo Provisioning API Documentation
|
64
67
|
|
65
|
-
|
66
|
-
|
68
|
+
git clone https://github.com/tropo/tropo-provisioning
|
69
|
+
cd tropo-provisioning
|
70
|
+
bundle install
|
71
|
+
rake rdoc
|
72
|
+
|
67
73
|
=== Local & Generating Documentation
|
68
74
|
|
69
75
|
==== Developer
|
data/Rakefile
CHANGED
@@ -1,46 +1,31 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "tropo-provisioning"
|
8
|
-
gem.summary = "Library for interacting with the Tropo Provisioning API"
|
9
|
-
gem.description = "Library for interacting with the Tropo Provisioning API"
|
10
|
-
gem.email = "jsgoecke@voxeo.com"
|
11
|
-
gem.homepage = "http://github.com/voxeo/tropo-provisioning"
|
12
|
-
gem.authors = ["Jason Goecke"]
|
13
|
-
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
|
-
gem.add_dependency "hashie", ">= 0.2.1"
|
15
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
16
|
-
end
|
17
|
-
Jeweler::GemcutterTasks.new
|
18
|
-
rescue LoadError
|
19
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
20
|
-
end
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
21
3
|
|
22
|
-
|
23
|
-
Spec::Rake::SpecTask.new(:spec) do |spec|
|
24
|
-
spec.libs << 'lib' << 'spec'
|
25
|
-
spec.spec_files = FileList['spec/**/*_spec.rb']
|
26
|
-
end
|
4
|
+
task :default => [:test]
|
27
5
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
require 'rake/rdoctask'
|
8
|
+
require 'tropo-provisioning/version'
|
9
|
+
|
10
|
+
|
11
|
+
RSpec::Core::RakeTask.new(:test) do |spec|
|
12
|
+
spec.skip_bundler = true
|
13
|
+
spec.pattern = ['spec/*_spec.rb']
|
14
|
+
spec.rspec_opts = '--color --format doc'
|
32
15
|
end
|
33
16
|
|
34
|
-
task :spec => :check_dependencies
|
35
17
|
|
36
|
-
|
18
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
19
|
+
spec.pattern = 'spec/*_spec.rb'
|
20
|
+
spec.rcov = true
|
21
|
+
end
|
37
22
|
|
38
|
-
|
39
|
-
Rake::RDocTask.new do |rdoc|
|
40
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
23
|
+
RDoc::Task.new do |rdoc|
|
41
24
|
|
42
25
|
rdoc.rdoc_dir = 'rdoc'
|
43
|
-
rdoc.title = "tropo-provisioning #{
|
26
|
+
rdoc.title = "tropo-provisioning #{TropoProvisioning::VERSION}"
|
27
|
+
rdoc.rdoc_files.include('LICENSE')
|
28
|
+
rdoc.options << '-c' << 'utf-8'
|
44
29
|
rdoc.rdoc_files.include('README*')
|
45
30
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
46
31
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yaml'
|
3
|
+
require 'lib/tropo-provisioning'
|
4
|
+
|
5
|
+
config = YAML.load(File.open('examples/config.yml'))
|
6
|
+
|
7
|
+
# Create a new provisioning object with your Tropo credentials
|
8
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'], config['tropo']['password'], :base_uri => 'http://172.16.10.125:8080/provisioning')
|
9
|
+
|
10
|
+
# Create an account
|
11
|
+
p provisioning.authenticate_account('jsgoecke', 'test123')
|
12
|
+
|
data/examples/config.yml
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'lib/tropo-provisioning'
|
3
|
+
|
4
|
+
config = YAML.load(File.open('examples/config.yml'))
|
5
|
+
app_details = YAML.load(File.open("examples/#{config['filename']}"))
|
6
|
+
|
7
|
+
# Create a new provisioning object with your Tropo credentials
|
8
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'], config['tropo']['password'], { :base_uri => 'http://api-smsified-eng.voxeo.net/v1'})
|
9
|
+
|
10
|
+
p provisioning.create_invitation({ :code => 'ABC457',
|
11
|
+
:count => 100,
|
12
|
+
:credit => 10 })
|
@@ -0,0 +1,25 @@
|
|
1
|
+
## WARNING ##
|
2
|
+
# IF YOU RUN THIS SCRIPT, IT WILL DELETE ALL OF YOUR APPLICATIONS #
|
3
|
+
## WARNING ##
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'lib/tropo-provisioning'
|
7
|
+
|
8
|
+
config = YAML.load(File.open('examples/config.yml'))
|
9
|
+
|
10
|
+
# Create a new provisioning object with your Tropo credentials
|
11
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'],
|
12
|
+
config['tropo']['password'],
|
13
|
+
:base_uri => 'http://api.tropo.com/provisioning')
|
14
|
+
|
15
|
+
applications = provisioning.applications
|
16
|
+
|
17
|
+
p applications
|
18
|
+
|
19
|
+
applications.each do |app|
|
20
|
+
provisioning.delete_application(app.application_id)
|
21
|
+
end
|
22
|
+
|
23
|
+
## WARNING ##
|
24
|
+
# IF YOU RUN THIS SCRIPT, IT WILL DELETE ALL OF YOUR APPLICATIONS #
|
25
|
+
## WARNING ##
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yaml'
|
3
|
+
require 'lib/tropo-provisioning'
|
4
|
+
|
5
|
+
config = YAML.load(File.open('examples/config.yml'))
|
6
|
+
|
7
|
+
# Create a new provisioning object with your Tropo credentials
|
8
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'], config['tropo']['password'], :base_uri => 'http://api-smsified-eng.voxeo.net/v1')
|
9
|
+
|
10
|
+
# Create an account
|
11
|
+
p provisioning.balance('54228')
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'lib/tropo-provisioning'
|
3
|
+
|
4
|
+
config = YAML.load(File.open('examples/config.yml'))
|
5
|
+
app_details = YAML.load(File.open("examples/#{config['filename']}"))
|
6
|
+
|
7
|
+
# Create a new provisioning object with your Tropo credentials
|
8
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'], config['tropo']['password'])
|
9
|
+
|
10
|
+
# Then you may iterate through all of your configured applications
|
11
|
+
provisioning.applications_with_addresses.each do |app|
|
12
|
+
p app
|
13
|
+
puts '*'*10
|
14
|
+
end
|
15
|
+
|
16
|
+
# Now list a single application
|
17
|
+
p '<===============>'
|
18
|
+
p provisioning.application_with_address('124780')
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yaml'
|
3
|
+
require 'lib/tropo-provisioning'
|
4
|
+
|
5
|
+
config = YAML.load(File.open('examples/config.yml'))
|
6
|
+
|
7
|
+
# Create a new provisioning object with your Tropo credentials
|
8
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'], config['tropo']['password'], :base_uri => 'http://api-smsified-eng.voxeo.net/v1')
|
9
|
+
|
10
|
+
# List availble features
|
11
|
+
p provisioning.features
|
12
|
+
|
13
|
+
# List features configured for a user
|
14
|
+
p provisioning.user_features('54228')
|
15
|
+
|
16
|
+
p provisioning.user_enable_feature('54228', 'http://api-smsified-eng.voxeo.net/v1/users/12345/features/8')
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'lib/tropo-provisioning'
|
3
|
+
|
4
|
+
config = YAML.load(File.open('examples/config.yml'))
|
5
|
+
app_details = YAML.load(File.open("examples/#{config['filename']}"))
|
6
|
+
|
7
|
+
# Create a new provisioning object with your Tropo credentials
|
8
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'], config['tropo']['password'], { :base_uri => 'http://api-smsified-eng.voxeo.net/v1'})
|
9
|
+
|
10
|
+
# Then you may iterate through all of your configured addresses
|
11
|
+
provisioning.invitations.each do |invitation|
|
12
|
+
p invitation
|
13
|
+
end
|
14
|
+
|
15
|
+
p provisioning.invitation('ABC456')
|
16
|
+
|
17
|
+
p provisioning.user_invitations '15909'
|
18
|
+
|
19
|
+
p provisioning.user_invitation '15909', 'ABC456'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yaml'
|
3
|
+
require 'lib/tropo-provisioning'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
config = YAML.load(File.open('examples/config.yml'))
|
7
|
+
|
8
|
+
# Create a new provisioning object with your Tropo credentials
|
9
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'], config['tropo']['password'], :base_uri => 'http://api-smsified-eng.voxeo.net/v1')
|
10
|
+
|
11
|
+
# Create an account
|
12
|
+
p provisioning.partitions
|
13
|
+
p provisioning.platforms('staging')
|
14
|
+
|
15
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yaml'
|
3
|
+
require 'lib/tropo-provisioning'
|
4
|
+
|
5
|
+
config = YAML.load(File.open('examples/config.yml'))
|
6
|
+
|
7
|
+
# Create a new provisioning object with your Tropo credentials
|
8
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'], config['tropo']['password'], :base_uri => 'http://api-smsified-eng.voxeo.net/v1')
|
9
|
+
|
10
|
+
# Create an account
|
11
|
+
p provisioning.user_payment_method('54240')
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yaml'
|
3
|
+
require 'lib/tropo-provisioning'
|
4
|
+
|
5
|
+
config = YAML.load(File.open('examples/config.yml'))
|
6
|
+
|
7
|
+
# Create a new provisioning object with your Tropo credentials
|
8
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'], config['tropo']['password'], :base_uri => 'http://api-smsified-eng.voxeo.net/v1')
|
9
|
+
|
10
|
+
# Create an account
|
11
|
+
p provisioning.available_payment_types
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yaml'
|
3
|
+
require 'lib/tropo-provisioning'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
config = YAML.load(File.open('examples/config.yml'))
|
7
|
+
|
8
|
+
# Create a new provisioning object with your Tropo credentials
|
9
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'], config['tropo']['password'], :base_uri => 'http://api-smsified-eng.voxeo.net/v1')
|
10
|
+
|
11
|
+
# Create an account
|
12
|
+
#p provisioning.user('54238')
|
13
|
+
p provisioning.user('mcervantes')
|
14
|
+
#p provisioning.search_users('username=foobar')
|
15
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yaml'
|
3
|
+
require 'lib/tropo-provisioning'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
config = YAML.load(File.open('examples/config.yml'))
|
7
|
+
|
8
|
+
# Create a new provisioning object with your Tropo credentials
|
9
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'], config['tropo']['password'], :base_uri => 'http://api-smsified-eng.voxeo.net/v1')
|
10
|
+
|
11
|
+
# Create an account
|
12
|
+
p provisioning.modify_user('54228', { :marketing_opt_in => false })
|
13
|
+
|
14
|
+
|
15
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'lib/tropo-provisioning'
|
3
|
+
|
4
|
+
config = YAML.load(File.open('examples/config.yml'))
|
5
|
+
app_details = YAML.load(File.open("examples/#{config['filename']}"))
|
6
|
+
|
7
|
+
# Create a new provisioning object with your Tropo credentials
|
8
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'], config['tropo']['password'], { :base_uri => 'http://api-smsified-eng.voxeo.net/v1'})
|
9
|
+
|
10
|
+
p provisioning.update_invitation('ABC456', :count => '200')
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yaml'
|
3
|
+
require 'lib/tropo-provisioning'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
config = YAML.load(File.open('examples/config.yml'))
|
7
|
+
|
8
|
+
# Create a new provisioning object with your Tropo credentials
|
9
|
+
provisioning = TropoProvisioning.new(config['tropo']['username'], config['tropo']['password'], :base_uri => 'http://api.smsified.com/v1')
|
10
|
+
|
11
|
+
# Create an account
|
12
|
+
p provisioning.search_users 'username=jsg'
|
13
|
+
|
14
|
+
p provisioning.username_exists? 'jsgoecke'
|
15
|
+
p provisioning.username_exists? 'fooeyfooy'
|
data/lib/tropo-provisioning.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
|
2
|
+
require 'tropo-provisioning/tropo_provisioning'
|
@@ -0,0 +1,211 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'active_support/json'
|
3
|
+
require 'hashie'
|
4
|
+
require 'net/http'
|
5
|
+
require 'net/https'
|
6
|
+
require 'uri'
|
7
|
+
|
8
|
+
# This class is in charge of handling HTTP requests to the Tropo HTTP endpoint
|
9
|
+
class TropoClient
|
10
|
+
|
11
|
+
autoload :TropoError, 'tropo-provisioning/tropo_error'
|
12
|
+
|
13
|
+
# required HTTP headers
|
14
|
+
attr_accessor :headers
|
15
|
+
# Tropo provisioning API endpoint
|
16
|
+
attr_reader :base_uri
|
17
|
+
# Valid Tropo username
|
18
|
+
attr_reader :username
|
19
|
+
# password associated to :username
|
20
|
+
attr_reader :password
|
21
|
+
|
22
|
+
##
|
23
|
+
# Creates a new TropoClient instance
|
24
|
+
#
|
25
|
+
# ==== Parameters
|
26
|
+
# * [required, String] *username* valid Tropo username
|
27
|
+
# * [required, String] *password* valid password
|
28
|
+
# * [optional, String] *base_uri* Tropo provisioning API endpoint
|
29
|
+
# * [optional, String] *headers* required HTTP headers
|
30
|
+
#
|
31
|
+
# ==== Return
|
32
|
+
# * new TropoClient instance
|
33
|
+
def initialize(username, password, base_uri = "http://api.tropo.com/v1", headers)
|
34
|
+
@base_uri = base_uri
|
35
|
+
@username = username
|
36
|
+
@password = password
|
37
|
+
@headers = headers.nil? ? {} : headers
|
38
|
+
end
|
39
|
+
|
40
|
+
##
|
41
|
+
# Send a HTTP Get
|
42
|
+
#
|
43
|
+
# ==== Parameters
|
44
|
+
# * [optional, String] path URI
|
45
|
+
# * [optional, Hash] Query parameters
|
46
|
+
#
|
47
|
+
# ==== Return
|
48
|
+
# JSON decoded object
|
49
|
+
def get(resource = "", params = {})
|
50
|
+
uri = "#{base_uri}#{resource}"
|
51
|
+
params.empty? or uri = uri.concat('?').concat(params.collect { |k, v| "#{k}=#{v.to_s}" }.join("&"))
|
52
|
+
request(Net::HTTP::Get.new(uri))
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# Send a HTTP Post
|
57
|
+
#
|
58
|
+
# ==== Parameters
|
59
|
+
# * [optional, String] resource path URI
|
60
|
+
# * [optional, Hash] params body to be JSON encoded
|
61
|
+
#
|
62
|
+
# ==== Return
|
63
|
+
# JSON decoded object
|
64
|
+
def post(resource = "", params = {})
|
65
|
+
uri = "#{base_uri}#{resource}"
|
66
|
+
request(Net::HTTP::Post.new(uri), params)
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# Send a HTTP Delete
|
71
|
+
#
|
72
|
+
# ==== Parameters
|
73
|
+
# * [optional, String] resource path URI
|
74
|
+
# * [optional, Hash] Query parameters
|
75
|
+
#
|
76
|
+
# ==== Return
|
77
|
+
# JSON decoded object
|
78
|
+
def delete(resource = "", params = {})
|
79
|
+
uri = "#{base_uri}#{resource}"
|
80
|
+
params.empty? or uri = uri.concat('?').concat(params.collect { |k, v| "#{k}=#{v.to_s}" }.join("&"))
|
81
|
+
request(Net::HTTP::Delete.new(uri))
|
82
|
+
end
|
83
|
+
|
84
|
+
##
|
85
|
+
# Send a HTTP Put
|
86
|
+
#
|
87
|
+
# ==== Parameters
|
88
|
+
# * [optional, String] resource path URI
|
89
|
+
# * [optional, Hash] params body to be JSON encoded
|
90
|
+
#
|
91
|
+
# ==== Return
|
92
|
+
# JSON decoded object
|
93
|
+
def put(resource = "", params = {})
|
94
|
+
uri = "#{base_uri}#{resource}"
|
95
|
+
request(Net::HTTP::Put.new(uri), params)
|
96
|
+
end
|
97
|
+
|
98
|
+
##
|
99
|
+
# Format the parameters
|
100
|
+
#
|
101
|
+
# ==== Parameters
|
102
|
+
# * [required, Hash] request parameters
|
103
|
+
# ==== Return
|
104
|
+
# * camelized params
|
105
|
+
def camelize_params(params)
|
106
|
+
camelized = {}
|
107
|
+
params.each { |k,v| camelized.merge!(k.to_s.camelize(:lower).to_sym => v) }
|
108
|
+
camelized
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
##
|
113
|
+
# Sets the HTTP REST type based on the method being called
|
114
|
+
#
|
115
|
+
# ==== Parameters
|
116
|
+
# * [required, ymbol] the HTTP method to use, may be :delete, :get, :post or :put
|
117
|
+
# * [Object] the uri object to create the request for
|
118
|
+
# * [Object] the request object to be used to operate on the resource
|
119
|
+
#
|
120
|
+
# ==== Return
|
121
|
+
# * Valid HTTP verb instance
|
122
|
+
def set_request_type(method, uri)
|
123
|
+
case method
|
124
|
+
when :delete
|
125
|
+
Net::HTTP::Delete.new(uri)
|
126
|
+
when :get
|
127
|
+
Net::HTTP::Get.new(uri)
|
128
|
+
when :post
|
129
|
+
Net::HTTP::Post.new(uri)
|
130
|
+
when :put
|
131
|
+
Net::HTTP::Put.new(uri)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
private
|
136
|
+
|
137
|
+
##
|
138
|
+
# Creates (one once) a HTTP client to the Tropo provisioning endpoint
|
139
|
+
#
|
140
|
+
# ==== Return
|
141
|
+
# * Net::HTTP instance
|
142
|
+
def http
|
143
|
+
@http ||= (
|
144
|
+
uri = URI.parse(base_uri)
|
145
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
146
|
+
http.use_ssl = true if uri.scheme == 'https'
|
147
|
+
http
|
148
|
+
)
|
149
|
+
end
|
150
|
+
|
151
|
+
##
|
152
|
+
# Send a request to the Tropo provisioning API
|
153
|
+
#
|
154
|
+
# ==== Parameters
|
155
|
+
# * [required, Symbol] http_request Net::HTTPRequest child
|
156
|
+
# * [required, Hash] params used to create the request
|
157
|
+
# * [String] :resource the resource to call on the base URL
|
158
|
+
# * [Hash] :body the details to use when posting, putting or deleting an object, converts into the appropriate JSON
|
159
|
+
#
|
160
|
+
# ==== Return
|
161
|
+
# * [Hash] the result of the request
|
162
|
+
# * [TropoError]
|
163
|
+
# if it can not connect to the API server or if the response.code is not 200
|
164
|
+
def request(http_request, params = {})
|
165
|
+
params[:body] and params[:body] = camelize_params(params[:body])
|
166
|
+
|
167
|
+
uri = params[:resource].nil? ? "" : params[:resource]
|
168
|
+
|
169
|
+
unless http_request.is_a?(Net::HTTPRequest)
|
170
|
+
raise TropoError.new("Invalid request type #{http_request}")
|
171
|
+
end
|
172
|
+
|
173
|
+
http_request.initialize_http_header(headers)
|
174
|
+
http_request.basic_auth username, password
|
175
|
+
http_request.body = ActiveSupport::JSON.encode params[:body] if params[:body]
|
176
|
+
|
177
|
+
begin
|
178
|
+
response = http.request(http_request)
|
179
|
+
rescue => e
|
180
|
+
raise TropoError.new, "Unable to connect to the Provisioning API server - #{e.to_s}"
|
181
|
+
end
|
182
|
+
|
183
|
+
response.code.eql?('200') or raise TropoError.new(response.code), "#{response.code}: #{response.message} - #{response.body}"
|
184
|
+
|
185
|
+
result = ActiveSupport::JSON.decode response.body
|
186
|
+
if result.instance_of? Array
|
187
|
+
self.class.hashie_array(result)
|
188
|
+
else
|
189
|
+
Hashie::Mash.new(result)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
class << self
|
194
|
+
##
|
195
|
+
# Converts the hashes inside the array to Hashie::Mash objects
|
196
|
+
#
|
197
|
+
# ==== Parameters
|
198
|
+
# * [required, Array] array to be Hashied
|
199
|
+
#
|
200
|
+
# ==== Return
|
201
|
+
# * [Array] array that is now Hashied
|
202
|
+
def hashie_array(array)
|
203
|
+
hashied_array = []
|
204
|
+
array.each do |ele|
|
205
|
+
hashied_array << Hashie::Mash.new(ele)
|
206
|
+
end
|
207
|
+
hashied_array
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
end
|