onsip 0.0.3

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2be0daf7d54e528171e05247afc13bc8292ca16b
4
+ data.tar.gz: 0979fce2489bb830de163c04e7c4e4cccd6cccef
5
+ SHA512:
6
+ metadata.gz: 41981783d3fa9e92086df4f402db4c2132d9a8866e59fe40e7e47b5c13acb46c87e73248e95ba44a13da5eeb0c65f4820dccc2747a1221141ee8084b62ed026e
7
+ data.tar.gz: 36f7be133fca3b439db169c05d4df46728a05f7f19b7293e866ff62e820731b66037630b5d5e08a8c3eb1c9822661a38c46d00220f9be11d814c384e1fe92971
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in onsip.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Keith Larrimore
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # OnSIP
2
+
3
+ A Ruby Gem that can be used for integration with the OnSIP platform.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'onsip'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install onsip
20
+
21
+ ## Usage
22
+
23
+ ```ruby
24
+
25
+ OnSIP.connect('https://api.onsip.com/api')
26
+ OnSIP.auth!(<username>, <password>)
27
+
28
+ account = OnSIP.session.account # Find the account associated with this session
29
+ users = account.users # Find the Users associated with that account
30
+ pp
31
+ ```
32
+
33
+ ## Contributing
34
+
35
+ 1. Fork it ( https://github.com/icehook/onsip/fork )
36
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
37
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
38
+ 4. Push to the branch (`git push origin my-new-feature`)
39
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/bin/onsip ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'pry'
5
+
6
+ require File.expand_path('../../lib/onsip', __FILE__)
7
+
8
+ opts = Trollop::options do
9
+ opt :uri, "OnSIP URI", :type => :string
10
+ opt :username, "OnSIP Username", :type => :string
11
+ opt :password, "OnSIP Password", :type => :string
12
+ end
13
+
14
+ uri = opts.delete :uri
15
+ username = opts.delete :username
16
+ password = opts.delete :password
17
+
18
+ begin
19
+ OnSIP.connect(uri, opts)
20
+ OnSIP.auth!(username, password)
21
+ rescue StandardError => e
22
+ OnSIP.logger.debug e.message
23
+ OnSIP.logger.debug e.backtrace.join("\n")
24
+ end
25
+
26
+ pry.binding
@@ -0,0 +1,76 @@
1
+ module OnSIP
2
+ class Connection
3
+
4
+ USER_AGENT = "onsip-client v#{OnSIP::VERSION}"
5
+
6
+ attr_accessor :options, :faraday
7
+
8
+ def initialize(options = {})
9
+ @options = options
10
+ @faraday = self.create_faraday(options[:uri])
11
+ end
12
+
13
+ def create_faraday(uri)
14
+ @faraday = Faraday.new uri do |c|
15
+ c.headers['User-Agent'] = USER_AGENT
16
+
17
+ c.request :multipart
18
+ c.request :url_encoded
19
+
20
+ c.response :json, :content_type => /\bjson$/
21
+ c.response :mashify
22
+ c.response :logger, OnSIP.logger
23
+
24
+ c.use :instrumentation
25
+ c.adapter Faraday.default_adapter
26
+ end
27
+ end
28
+
29
+ def request(method, path, params, options, &callback)
30
+ sent_at = nil
31
+
32
+ response = @faraday.send(method) { |request|
33
+ sent_at = Time.now
34
+ request = config_request(request, method, path, params, options)
35
+ }.on_complete { |env|
36
+ env[:total_time] = Time.now.utc.to_f - sent_at.utc.to_f if sent_at
37
+ env[:request_params] = params
38
+ env[:request_options] = options
39
+ callback.call(env) if callback
40
+ }
41
+
42
+ response
43
+ end
44
+
45
+ def config_request(request, method, path, params, options)
46
+ request.headers['Content-Type'] = 'application/json'
47
+
48
+ case method.to_sym
49
+ when :delete, :get
50
+ request.url(path, params)
51
+ when :post, :put
52
+ request.path = path
53
+ request.body = MultiJson.dump(params) unless params.empty?
54
+ end
55
+
56
+ request
57
+ end
58
+
59
+ def get(path, params={}, options={}, &callback)
60
+ request(:get, path, params, options, &callback)
61
+ end
62
+
63
+ def delete(path, params={}, options={}, &callback)
64
+ request(:delete, path, params, options, &callback)
65
+ end
66
+
67
+ def post(path, params={}, options={}, &callback)
68
+ request(:post, path, params, options, &callback)
69
+ end
70
+
71
+ def put(path, params={}, options={}, &callback)
72
+ request(:put, path, params, options, &callback)
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,17 @@
1
+ module OnSIP
2
+ class OnSIPException < StandardError
3
+ attr_accessor :options, :exception
4
+
5
+ def initialize(options = {})
6
+ @options = options
7
+ @message = @options[:message]
8
+ @exception = @options[:exception]
9
+ end
10
+ end
11
+
12
+ class OnSIPRequestException < OnSIPException
13
+ def response
14
+ @options[:response]
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module OnSIP
2
+ module Model
3
+
4
+ attr_accessor :attributes, :session
5
+
6
+ def initialize(attributes = {})
7
+ @attributes = Hashie::Mash.new attributes
8
+ end
9
+
10
+ module ClassMethods
11
+
12
+ end
13
+
14
+ extend ClassMethods
15
+
16
+ end
17
+ end
@@ -0,0 +1,67 @@
1
+ module OnSIP
2
+ class Account
3
+ include Model
4
+
5
+ def id
6
+ @attributes.AccountId
7
+ end
8
+
9
+ def organization_id
10
+ @attributes.OrganizationId
11
+ end
12
+
13
+ def organizations
14
+ Organization.browse self.id
15
+ end
16
+
17
+ def users(session = nil)
18
+ User.browse self.id
19
+ end
20
+
21
+ module ClassMethods
22
+ def read(account_id)
23
+ response = OnSIP.connection.get('/api', {'Action' => 'AccountRead', 'AccountId' => account_id, 'SessionId' => OnSIP.session.id, 'Output' => 'json'}, {})
24
+ process_read_account_response response
25
+ end
26
+
27
+ def process_read_account_response(response)
28
+ account = nil
29
+
30
+ key_path = %w(Response Result AccountRead Account)
31
+ a = ResponseParser.parse_response response, key_path
32
+ account = (a.map { |h| new h }).first if a
33
+
34
+ account
35
+ end
36
+
37
+ // TODO
38
+ def edit_contact(*args)
39
+ raise NotImplementedError
40
+ end
41
+
42
+ // TODO
43
+ def edit_add_credit(*args)
44
+ raise NotImplementedError
45
+ end
46
+
47
+ // TODO
48
+ def edit_recharge(*args)
49
+ raise NotImplementedError
50
+ end
51
+
52
+ // TODO
53
+ def invoice_read(*args)
54
+ raise NotImplementedError
55
+ end
56
+
57
+ // TODO
58
+ def invoice_browse(*args)
59
+ raise NotImplementedError
60
+ end
61
+
62
+ end
63
+
64
+ extend ClassMethods
65
+
66
+ end
67
+ end
@@ -0,0 +1,73 @@
1
+ module OnSIP
2
+ class Address
3
+ include Model
4
+
5
+ DEFAULT_CALL_TIMEOUT = 60
6
+
7
+ def id
8
+ @attributes.AddressId
9
+ end
10
+
11
+ module ClassMethods
12
+ def browse(args)
13
+ params = args.merge({'Action' => 'UserAddressBrowse', 'SessionId' => OnSIP.session.id, 'Output' => 'json'})
14
+ response = OnSIP.connection.get('/api', params, {})
15
+ process_browse_address_response response
16
+ end
17
+
18
+ def process_browse_address_response(response)
19
+ addresses = []
20
+
21
+ key_path = %w(Response Result UserAddressBrowse UserAddresses UserAddress)
22
+ a = ResponseParser.parse_response response, key_path
23
+ addresses = a.map { |h| new h } if a
24
+
25
+ addresses
26
+ end
27
+
28
+ def add(user, attrs = {})
29
+ params = { 'Username' => user.attributes.Username,
30
+ 'Domain' => user.attributes.Domain,
31
+ 'Timeout' => DEFAULT_CALL_TIMEOUT }.merge(attrs)
32
+
33
+ params = params.merge({ 'Action' => 'UserAddressAdd',
34
+ 'SessionId' => OnSIP.session.id,
35
+ 'OrganizationId' => user.organization_id,
36
+ 'UserId' => user.id,
37
+ 'Output' => 'json' })
38
+
39
+ response = OnSIP.connection.get('/api', params, {})
40
+ process_add_address_response response
41
+ end
42
+
43
+ def process_add_address_response(response)
44
+ address = nil
45
+
46
+ key_path = %w(Response Result UserAddressAdd UserAddress)
47
+ a = ResponseParser.parse_response response, key_path
48
+ address = (a.map { |h| new h }).first if a
49
+
50
+ address
51
+ end
52
+
53
+ // TODO
54
+ def read(*args)
55
+ raise NotImplementedError
56
+ end
57
+
58
+ // TODO
59
+ def edit(*args)
60
+ raise NotImplementedError
61
+ end
62
+
63
+ // TODO
64
+ def delete(*args)
65
+ raise NotImplementedError
66
+ end
67
+
68
+ end
69
+
70
+ extend ClassMethods
71
+
72
+ end
73
+ end
@@ -0,0 +1,30 @@
1
+ module OnSIP
2
+ class CDR
3
+ include Model
4
+
5
+ def id
6
+ @attributes.CdrId
7
+ end
8
+
9
+ module ClassMethods
10
+ def browse(args = {})
11
+ params = args.merge({'Action' => 'CdrBrowse', 'SessionId' => OnSIP.session.id, 'Output' => 'json'})
12
+ response = OnSIP.connection.get('/api', params, {})
13
+ process_browse_cdrs_response response
14
+ end
15
+
16
+ def process_browse_cdrs_response(response)
17
+ cdrs = []
18
+
19
+ key_path = %w(Response Result CdrBrowse Cdrs Cdr)
20
+ a = ResponseParser.parse_response response, key_path
21
+ cdrs = a.map { |h| new h } if a
22
+
23
+ cdrs
24
+ end
25
+ end
26
+
27
+ extend ClassMethods
28
+
29
+ end
30
+ end
@@ -0,0 +1,50 @@
1
+ module OnSIP
2
+ class Organization
3
+ include Model
4
+
5
+ def id
6
+ @attributes.OrganizationId
7
+ end
8
+
9
+ def add_user(attrs = {})
10
+ User.add self, attrs
11
+ end
12
+
13
+ module ClassMethods
14
+ def browse(account_id)
15
+ params = {'Action' => 'OrganizationBrowse', 'AccountId' => account_id, 'SessionId' => OnSIP.session.id, 'Output' => 'json'}
16
+ response = OnSIP.connection.get('/api', params, {})
17
+ process_browse_organization_response response
18
+ end
19
+
20
+ def process_browse_organization_response(response)
21
+ organizations = []
22
+
23
+ key_path = %w(Response Result OrganizationBrowse Organizations Organization)
24
+ a = ResponseParser.parse_response response, key_path
25
+ organizations = a.map { |h| new h } if a
26
+
27
+ organizations
28
+ end
29
+
30
+ def read(organization_id)
31
+ params = {'Action' => 'OrganizationRead', 'OrganizationId' => organization_id, 'SessionId' => OnSIP.session.id, 'Output' => 'json'}
32
+ response = OnSIP.connection.get('/api', params, {})
33
+ process_read_organization_response response
34
+ end
35
+
36
+ def process_read_organization_response(response)
37
+ organization = nil
38
+
39
+ key_path = %w(Response Result OrganizationRead Organization)
40
+ a = ResponseParser.parse_response response, key_path
41
+ organization = (a.map { |h| new h }).first if a
42
+
43
+ organization
44
+ end
45
+ end
46
+
47
+ extend ClassMethods
48
+
49
+ end
50
+ end
@@ -0,0 +1,126 @@
1
+ module OnSIP
2
+ class User
3
+ include Model
4
+
5
+ def id
6
+ @attributes.UserId
7
+ end
8
+
9
+ def account_id
10
+ @attributes.AccountId
11
+ end
12
+
13
+ def organization_id
14
+ @attributes.OrganizationId
15
+ end
16
+
17
+ def account
18
+ Account.read self.account_id
19
+ end
20
+
21
+ def add(organization = nil)
22
+ self.class.add organization, @attributes
23
+ end
24
+
25
+ def delete!
26
+ self.class.delete! self.id
27
+ end
28
+
29
+ def organization
30
+ @organization ||= Organization.read(self.organization_id)
31
+ end
32
+
33
+ def addresses
34
+ Address.browse({'UserId' => self.id})
35
+ end
36
+
37
+ module ClassMethods
38
+ def browse(account_id)
39
+ params = {'Action' => 'UserBrowse', 'AccountId' => account_id, 'SessionId' => OnSIP.session.id, 'Output' => 'json'}
40
+ response = OnSIP.connection.get('/api', params, {})
41
+ process_browse_user_response response
42
+ end
43
+
44
+ def process_browse_user_response(response)
45
+ users = []
46
+
47
+ key_path = %w(Response Result UserBrowse Users User)
48
+ a = ResponseParser.parse_response response, key_path
49
+ users = a.map { |h| new h } if a
50
+
51
+ users
52
+ end
53
+
54
+ def delete!(user_id)
55
+ params = {'Action' => 'UserDelete', 'SessionId' => OnSIP.session.id, 'UserId' => user_id, 'Output' => 'json'}
56
+ response = OnSIP.connection.get('/api', params, {})
57
+ process_delete_user_response response
58
+ end
59
+
60
+ def process_delete_user_response(response)
61
+ r = response.env.body['Response']
62
+
63
+ if r && r['Context'] && r['Context']['Action'] && r['Context']['Action']
64
+ return true
65
+ else
66
+ raise OnSIPRequestException, 'Problem with user request'
67
+ end
68
+ end
69
+
70
+ def edit_status(user_id, attrs = {})
71
+ params = attrs.merge({'Action' => 'UserEditStatus', 'SessionId' => OnSIP.session.id, 'UserId' => user_id, 'Output' => 'json'})
72
+ response = OnSIP.connection.get('/api', params, {})
73
+ process_edit_user_status_response response
74
+ end
75
+
76
+ def process_edit_user_status_response(response)
77
+ user = nil
78
+ r = response.env.body['Response']
79
+
80
+ key_path = %w(Response Result UserEditStatus User)
81
+ a = ResponseParser.parse_response response, key_path
82
+ user = (a.map { |h| new h }).first if a
83
+
84
+ user
85
+ end
86
+
87
+ def add(organization, attrs = {})
88
+ params = attrs.merge({'Action' => 'UserAdd',
89
+ 'SessionId' => OnSIP.session.id,
90
+ 'OrganizationId' => organization.id,
91
+ 'Domain' => organization.attributes.Domain,
92
+ 'Output' => 'json'})
93
+ response = OnSIP.connection.get('/api', params, {})
94
+ process_add_user_response response
95
+ end
96
+
97
+ def process_add_user_response(response)
98
+ user = nil
99
+
100
+ key_path = %w(Response Result UserAdd User)
101
+ a = ResponseParser.parse_response response, key_path
102
+ user = (a.map { |h| new h }).first if a
103
+
104
+ user
105
+ end
106
+
107
+ def read(user_id)
108
+ response = OnSIP.connection.get('/api', {'Action' => 'UserRead', 'UserId' => user_id, 'SessionId' => OnSIP.session.id, 'Output' => 'json'}, {})
109
+ process_read_user_response response
110
+ end
111
+
112
+ def process_read_user_response(response)
113
+ user = nil
114
+
115
+ key_path = %w(Response Result UserRead User)
116
+ a = ResponseParser.parse_response response, key_path
117
+ user = (a.map { |h| new h }).first if a
118
+
119
+ user
120
+ end
121
+ end
122
+
123
+ extend ClassMethods
124
+
125
+ end
126
+ end
@@ -0,0 +1,38 @@
1
+ module OnSIP
2
+ module ResponseParser
3
+
4
+ module ClassMethods
5
+ def parse_response(response, key_path = [], ignore_result_keys = [])
6
+ result = []
7
+
8
+ return result unless response && !response.env.body.blank?
9
+
10
+ r = response.env.body
11
+
12
+ key_path.each_with_index do |key, i|
13
+ if i < (key_path.length - 1) && r[key]
14
+ r = r[key]
15
+ elsif i == (key_path.length - 1) && r[key] && r[key].kind_of?(Array)
16
+ a = r[key]
17
+ result = a.flatten.map { |h| h.delete_if { |k| ignore_result_keys.include?(k) }; h }
18
+ elsif i == (key_path.length - 1) && r[key] && r[key].kind_of?(Hash)
19
+ h = r[key]
20
+ h.delete_if { |k| ignore_result_keys.include?(k) }
21
+ result = [h]
22
+ else
23
+ break
24
+ end
25
+ end
26
+
27
+ result
28
+ rescue StandardError => e
29
+ raise OnSIPRequestException.new(:message => 'Problem with parsing response',
30
+ :exception => e,
31
+ :response => response)
32
+ end
33
+ end
34
+
35
+ extend ClassMethods
36
+
37
+ end
38
+ end
@@ -0,0 +1,49 @@
1
+ module OnSIP
2
+ class Session
3
+
4
+ attr_accessor :attributes
5
+
6
+ def initialize(attributes = {})
7
+ @attributes = Hashie::Mash.new attributes
8
+ end
9
+
10
+ def id
11
+ @attributes.SessionId
12
+ end
13
+
14
+ def user_id
15
+ @attributes.UserId
16
+ end
17
+
18
+ def user
19
+ @user ||= User.read(self.user_id)
20
+ end
21
+
22
+ def account
23
+ @account ||= self.user.account
24
+ end
25
+
26
+ module ClassMethods
27
+ def create(username, password)
28
+ response = OnSIP.connection.get('/api', {'Action' => 'SessionCreate', 'Username' => username, 'Password' => password, 'Output' => 'json'}, {})
29
+ process_create_session_response response
30
+ end
31
+
32
+ def process_create_session_response(response)
33
+ session = nil
34
+ r = response.env.body['Response']['Context']
35
+
36
+ if r['Request'] && (r['Request']['IsValid'] == 'true') && r['Session']
37
+ h = r['Session'].delete_if { |key| %w().include?(key) }
38
+ session = new h
39
+ else
40
+ raise OnSIPRequestException, 'Problem with session request'
41
+ end
42
+
43
+ session
44
+ end
45
+ end
46
+
47
+ extend ClassMethods
48
+ end
49
+ end
@@ -0,0 +1,3 @@
1
+ module OnSIP
2
+ VERSION = '0.0.3'
3
+ end
data/lib/onsip.rb ADDED
@@ -0,0 +1,57 @@
1
+ require 'logger'
2
+ require 'trollop'
3
+ require 'multi_json'
4
+ require 'awesome_print'
5
+ require 'active_support/core_ext'
6
+ require 'hashie'
7
+ require 'faraday'
8
+ require 'faraday_middleware'
9
+ require 'onsip/exceptions'
10
+ require 'onsip/version'
11
+
12
+ module OnSIP
13
+ autoload :Connection, 'onsip/connection'
14
+ autoload :Session, 'onsip/session'
15
+ autoload :ResponseParser, 'onsip/response_parser'
16
+ autoload :Model, 'onsip/model'
17
+ autoload :Account, 'onsip/models/account'
18
+ autoload :User, 'onsip/models/user'
19
+ autoload :Organization, 'onsip/models/organization'
20
+ autoload :Address, 'onsip/models/address'
21
+ autoload :CDR, 'onsip/models/cdr'
22
+
23
+ module ClassMethods
24
+ attr_accessor :session
25
+ attr_writer :logger
26
+
27
+ def logger
28
+ @logger ||= init_logger
29
+ end
30
+
31
+ def init_logger
32
+ @logger = Logger.new(STDOUT)
33
+ @logger.level = Logger::DEBUG
34
+
35
+ @logger
36
+ end
37
+
38
+ def connect(uri, options = {})
39
+ @options = Hashie::Mash.new options
40
+ @connection = Connection.new(:uri => uri)
41
+ end
42
+
43
+ def connection
44
+ @connection
45
+ end
46
+
47
+ def options
48
+ @options
49
+ end
50
+
51
+ def auth!(username, password)
52
+ @session = Session.create(username, password)
53
+ end
54
+ end
55
+
56
+ extend ClassMethods
57
+ end
data/onsip.gemspec ADDED
@@ -0,0 +1,39 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'onsip/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "onsip"
8
+ spec.version = OnSIP::VERSION
9
+ spec.authors = ["Keith Larrimore"]
10
+ spec.email = ["klarrimore@icehook.com"]
11
+ spec.summary = %q{Onsip Ruby client.}
12
+ spec.description = %q{Onsip Ruby client.}
13
+ spec.homepage = "http://icehook.com"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.7'
22
+ spec.add_development_dependency 'rake', '~> 10.0'
23
+ spec.add_development_dependency 'pry'
24
+ spec.add_development_dependency 'ffaker', '~> 1.15.0'
25
+ spec.add_development_dependency 'machinist', '~> 2.0'
26
+ spec.add_development_dependency 'webmock', '~> 1.17.4'
27
+ spec.add_development_dependency 'guard-rspec', '~> 4.2.8'
28
+ spec.add_development_dependency 'rb-fsevent', '~> 0.9.3'
29
+ spec.add_development_dependency 'simplecov', '~> 0.8.2'
30
+ spec.add_runtime_dependency 'activesupport', '>= 3.0.0'
31
+ spec.add_runtime_dependency 'trollop', '~> 2.0'
32
+ spec.add_runtime_dependency 'multi_json', '~> 1.10.1'
33
+ spec.add_runtime_dependency 'nokogiri', '~> 1.6.1'
34
+ spec.add_runtime_dependency 'faraday', '~> 0.9.0'
35
+ spec.add_runtime_dependency 'faraday_middleware', '~> 0.9.1'
36
+ spec.add_runtime_dependency 'awesome_print', '~> 1.2.0'
37
+ spec.add_runtime_dependency 'builder', '~> 3.2.2'
38
+ spec.add_runtime_dependency 'hashie', '~> 3.3.1'
39
+ end
metadata ADDED
@@ -0,0 +1,316 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: onsip
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Keith Larrimore
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: ffaker
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.15.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.15.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: machinist
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.17.4
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.17.4
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard-rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 4.2.8
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 4.2.8
111
+ - !ruby/object:Gem::Dependency
112
+ name: rb-fsevent
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.9.3
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.9.3
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.8.2
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.8.2
139
+ - !ruby/object:Gem::Dependency
140
+ name: activesupport
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: 3.0.0
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 3.0.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: trollop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '2.0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '2.0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: multi_json
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 1.10.1
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 1.10.1
181
+ - !ruby/object:Gem::Dependency
182
+ name: nokogiri
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 1.6.1
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 1.6.1
195
+ - !ruby/object:Gem::Dependency
196
+ name: faraday
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: 0.9.0
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: 0.9.0
209
+ - !ruby/object:Gem::Dependency
210
+ name: faraday_middleware
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: 0.9.1
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: 0.9.1
223
+ - !ruby/object:Gem::Dependency
224
+ name: awesome_print
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: 1.2.0
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: 1.2.0
237
+ - !ruby/object:Gem::Dependency
238
+ name: builder
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - "~>"
242
+ - !ruby/object:Gem::Version
243
+ version: 3.2.2
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - "~>"
249
+ - !ruby/object:Gem::Version
250
+ version: 3.2.2
251
+ - !ruby/object:Gem::Dependency
252
+ name: hashie
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "~>"
256
+ - !ruby/object:Gem::Version
257
+ version: 3.3.1
258
+ type: :runtime
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "~>"
263
+ - !ruby/object:Gem::Version
264
+ version: 3.3.1
265
+ description: Onsip Ruby client.
266
+ email:
267
+ - klarrimore@icehook.com
268
+ executables:
269
+ - onsip
270
+ extensions: []
271
+ extra_rdoc_files: []
272
+ files:
273
+ - ".gitignore"
274
+ - Gemfile
275
+ - LICENSE.txt
276
+ - README.md
277
+ - Rakefile
278
+ - bin/onsip
279
+ - lib/onsip.rb
280
+ - lib/onsip/connection.rb
281
+ - lib/onsip/exceptions.rb
282
+ - lib/onsip/model.rb
283
+ - lib/onsip/models/account.rb
284
+ - lib/onsip/models/address.rb
285
+ - lib/onsip/models/cdr.rb
286
+ - lib/onsip/models/organization.rb
287
+ - lib/onsip/models/user.rb
288
+ - lib/onsip/response_parser.rb
289
+ - lib/onsip/session.rb
290
+ - lib/onsip/version.rb
291
+ - onsip.gemspec
292
+ homepage: http://icehook.com
293
+ licenses:
294
+ - MIT
295
+ metadata: {}
296
+ post_install_message:
297
+ rdoc_options: []
298
+ require_paths:
299
+ - lib
300
+ required_ruby_version: !ruby/object:Gem::Requirement
301
+ requirements:
302
+ - - ">="
303
+ - !ruby/object:Gem::Version
304
+ version: '0'
305
+ required_rubygems_version: !ruby/object:Gem::Requirement
306
+ requirements:
307
+ - - ">="
308
+ - !ruby/object:Gem::Version
309
+ version: '0'
310
+ requirements: []
311
+ rubyforge_project:
312
+ rubygems_version: 2.2.0
313
+ signing_key:
314
+ specification_version: 4
315
+ summary: Onsip Ruby client.
316
+ test_files: []