tam 1.0.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 ADDED
@@ -0,0 +1,3 @@
1
+ pkg
2
+ Gemfile.lock
3
+
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Nokia Siemens Networks
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.mkd ADDED
@@ -0,0 +1,58 @@
1
+ The telco asset marketplace Ruby gem
2
+ ====================================
3
+ A Ruby wrapper for the Telco Asset Marketplace REST APIs
4
+
5
+ Installation
6
+ ------------
7
+ gem install tam
8
+
9
+ Documentation
10
+ -------------
11
+ <https://code.telcoassetmarketplace.com>
12
+
13
+ How to Use
14
+ ----------
15
+ If you are using rails then:
16
+
17
+ 1. Add the tam gem to your Gemfile
18
+
19
+ ```ruby
20
+ gem 'tam'
21
+ ```
22
+
23
+ 2. Create a tam.yml file in config with following contents:
24
+
25
+ ```yaml
26
+ development: &defaults
27
+ consumer_key: # the consumer key generated in telcoassetmarketplace.com for you application
28
+ consumer_secret: # the consumer secret generated in telcoassetmarketplace.com for you application
29
+ consumer_handler: # the of the class that implements the telcoassetmarketplace handler logic
30
+ test:
31
+ <<: *defaults
32
+ production:
33
+ <<: *defaults
34
+ ```
35
+
36
+ 3. Add following route to your routes.rb
37
+
38
+ ```ruby
39
+ match '/tamapi/(:string)' => TAM::API # you can replace 'tamapi' with any other namespace
40
+ ```
41
+
42
+ 4. Implement the telcoassetmarketplace handler logic (e.g.: tam_handler.rb in helpers)
43
+
44
+ ```ruby
45
+ class TamHandler
46
+ def authorized(user, session)
47
+ # should return the URL to which telcoassermarketplace should redirect
48
+ end
49
+
50
+ def denied(session)
51
+ # should return the URL to which telcoassermarketplace should redirect
52
+ end
53
+
54
+ def receive_sms(from_user, to_app, body)
55
+ end
56
+
57
+ end
58
+ ```
data/Rakefile ADDED
@@ -0,0 +1,31 @@
1
+ begin
2
+ require "bundler"
3
+ Bundler.setup
4
+ rescue LoadError
5
+ $stderr.puts "You need to have Bundler installed to be able build this gem."
6
+ end
7
+
8
+ gemspec = eval(File.read(Dir["*.gemspec"].first))
9
+
10
+
11
+ desc "Validate the gemspec"
12
+ task :gemspec do
13
+ gemspec.validate
14
+ end
15
+
16
+ desc "Build gem locally"
17
+ task :build => :gemspec do
18
+ system "gem build #{gemspec.name}.gemspec"
19
+ FileUtils.mkdir_p "pkg"
20
+ FileUtils.mv "#{gemspec.name}-#{gemspec.version}.gem", "pkg"
21
+ end
22
+
23
+ desc "Install gem locally"
24
+ task :install => :build do
25
+ system "gem install pkg/#{gemspec.name}-#{gemspec.version}"
26
+ end
27
+
28
+ desc "Clean automatically generated files"
29
+ task :clean do
30
+ FileUtils.rm_rf "pkg"
31
+ end
@@ -0,0 +1,26 @@
1
+ require 'json'
2
+ require 'tam/user'
3
+ require 'tam/error'
4
+
5
+ # SMS part of the telco asset marketplace REST API
6
+ module TAM
7
+ class API
8
+ # Find the location (coordinates) of a user
9
+ #
10
+ # @return [Hash]
11
+ # {"body"=>
12
+ # {"latitude"=>51.618,
13
+ # "timestamp"=>1302185772456,
14
+ # "accuracy"=>100,
15
+ # "longitude"=>23.9063},
16
+ # "status"=>{"code"=>0, "message"=>"Request was handled succesfully"}}
17
+ def self.getcoord(user)
18
+ begin
19
+ response = dispatch_to_tam(:get, '/api/1/location/getcoord', user)
20
+ JSON.parse response
21
+ rescue TAM::ServiceUnavailable
22
+ raise TAM::ServiceUnavailable.new 'The location service is not available. If you are using the service on a persona, i.e.: through the sandbox, then remember to set the location of the persona'
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,55 @@
1
+ require 'sinatra'
2
+ require 'oauth'
3
+ require 'tam/error'
4
+ require 'tam/user'
5
+
6
+ # OAUTH part of the telco asset marketplace REST API
7
+ module TAM
8
+ class API
9
+ enable :sessions
10
+
11
+ # Authorizes a user of telco asset marketplace to use your application
12
+ # After the OAUTH flow is finished then the configured consumer_handler.authorized(user, session)
13
+ # or consumer_handler.denied(session) are invoked
14
+ get '/*/authorize' do
15
+ consumer = TAM::API.create_oauth_consumer
16
+ request_token = consumer.get_request_token
17
+ session[:request_token] = request_token
18
+
19
+ oauth_callback_url = url('/' + TAM.callback_path + '/oauth_callback')
20
+ redirect request_token.authorize_url(:oauth_callback => oauth_callback_url)
21
+ end
22
+
23
+ # OAUTH callback for telco asset marketplace
24
+ # @private
25
+ get '/*/oauth_callback' do
26
+ if params[:denied].nil?
27
+ consumer = TAM::API.create_oauth_consumer
28
+ request_token = session[:request_token]
29
+ verifier = params[:oauth_verifier]
30
+ access_token = request_token.get_access_token(:oauth_verifier => verifier)
31
+ user = User.new(access_token.token, access_token.secret)
32
+ redirect dispatch_to_handler('authorized', user, session)
33
+ else
34
+ redirect dispatch_to_handler('denied', session)
35
+ end
36
+ end
37
+
38
+ private
39
+ def self.create_oauth_consumer
40
+ if TAM.consumer_key.nil? or TAM.consumer_secret.nil?
41
+ raise OAuthConsumerAttributesMissing.new
42
+ end
43
+
44
+ OAuth::Consumer.new(TAM.consumer_key, TAM.consumer_secret,
45
+ {
46
+ :site => TAM.site,
47
+ :request_token_path => TAM.request_token_path,
48
+ :access_token_path => TAM.access_token_path,
49
+ :authorize_path => TAM.authorize_path,
50
+ :scheme => TAM.oauth_scheme,
51
+ :http_method => TAM.oauth_http_method
52
+ })
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,41 @@
1
+ require 'sinatra'
2
+ require 'oauth'
3
+ require 'json'
4
+ require 'tam/user'
5
+
6
+ # SMS part of the telco asset marketplace REST API
7
+ module TAM
8
+ class API
9
+ # URL handler for receiving SMS
10
+ # After receiving an SMS, the configured
11
+ # consumer_handler.receive_sms(from_user, to_app, body)
12
+ # is invoked
13
+ #
14
+ # @private
15
+ post "/*/receive_sms" do
16
+ request.body.rewind # in case someone already read it
17
+
18
+ data = JSON.parse request.body.read
19
+
20
+ access_token = data["access_token"]
21
+ token_secret = data["token_secret"]
22
+ from_user = User.new(access_token, token_secret)
23
+ to_app = data["to"]
24
+ body = data["body"]
25
+ begin
26
+ dispatch_to_handler('receive_sms', from_user, to_app, body)
27
+ response.status = 200
28
+ return ''
29
+ rescue Error => error
30
+ response.status = 500
31
+ return error.message
32
+ end
33
+ end
34
+
35
+ # Sends an SMS
36
+ def self.send_sms(from_app, to_user, body)
37
+ payload = JSON.generate({'body' => body, 'from' => from_app})
38
+ dispatch_to_tam(:post, '/api/1/sms/send', to_user, payload)
39
+ end
40
+ end
41
+ end
data/lib/tam/api.rb ADDED
@@ -0,0 +1,73 @@
1
+ require 'sinatra'
2
+ require 'oauth'
3
+ require 'tam/error'
4
+ require 'tam/user'
5
+
6
+ module TAM
7
+ # Wrapper for the telco asset marketplace REST API
8
+ #
9
+ # @note All methods have been separated into modules and follow the same grouping used in {https://code.telcoassetmarketplace.com the telco asset marketplace API Documentation}.
10
+ # @see http://code.telcoassetmarketplace.com
11
+ class API < Sinatra::Base
12
+ # Require api method modules after initializing the API class in
13
+ # order to avoid a superclass mismatch error, allowing those modules to be
14
+ # API-namespaced.
15
+ require 'tam/api/oauth'
16
+ require 'tam/api/sms'
17
+ require 'tam/api/location'
18
+
19
+ # Dispatches the request to the telco asset marketplace handler configured by
20
+ # this gem client
21
+ def dispatch_to_handler(method, *args)
22
+ if TAM.consumer_handler.nil?
23
+ LOGGER.error 'Application has not configured the telco asset marketplace consumer_handler'
24
+ raise InvalidConsumerHandler.new 'Application has not configured the telco asset marketplace consumer_handler'
25
+ end
26
+
27
+ if TAM.consumer_handler.respond_to?(method)
28
+ begin
29
+ return TAM.consumer_handler.send(method, *args)
30
+ rescue TAM::Error => error
31
+ LOGGER.error 'Application has suffered an internal error: ' + error.message + ', ' + error.body
32
+ raise error
33
+ end
34
+ end
35
+
36
+ end
37
+
38
+ # Dispatches the request to the telco asset marketplace REST API
39
+ def self.dispatch_to_tam(http_method, endpoint, user, payload='')
40
+ consumer = create_oauth_consumer
41
+ access_token = OAuth::AccessToken.new(consumer, user.access_token, user.token_secret)
42
+
43
+ if (http_method == :get)
44
+ response = access_token.send(http_method, endpoint, {'Content-Type' => 'application/json'})
45
+ else
46
+ response = access_token.send(http_method, endpoint, payload, {'Content-Type' => 'application/json'})
47
+ end
48
+
49
+ if response.class == Net::HTTPOK
50
+ return response.body
51
+ elsif response.class == Net::HTTPUnauthorized
52
+ LOGGER.error 'Request not authorized ' + response.message + ', ' + response.body
53
+ raise RequestNotAuthorized.new(response.message, response.body)
54
+ elsif response.class == Net::HTTPBadRequest
55
+ if response.body.include? 'consumer_key_unknown'
56
+ LOGGER.error 'Configured telco asset marketplace consumer_key is not valid: ' + response.message + ', ' + response.body
57
+ raise InvalidConsumerKey.new(response.message, response.body)
58
+ elsif response.body.include? 'signature_invalid'
59
+ LOGGER.error 'Configured telco asset marketplace consumer_secret is not valid: ' + response.message + ', ' + response.body
60
+ raise InvalidConsumerSecret.new(response.message, response.body)
61
+ else
62
+ raise UnexpectedError.new(response.message, response.body)
63
+ end
64
+ elsif response.class == Net::HTTPServiceUnavailable
65
+ LOGGER.error 'telco asset marketplace service ' + endpoint + ' not available'
66
+ raise ServiceUnavailable.new(response.message, response.body)
67
+ else
68
+ raise UnexpectedError.new(response.message, response.body)
69
+ end
70
+ end
71
+
72
+ end
73
+ end
@@ -0,0 +1,83 @@
1
+ module TAM
2
+ # Defines constants and methods related to configuration
3
+ module Configuration
4
+ # An array of valid keys in the options hash when configuring a {TAM::API}
5
+ VALID_OPTIONS_KEYS = [
6
+ :consumer_key,
7
+ :consumer_secret,
8
+ :consumer_handler,
9
+ :site,
10
+ :request_token_path,
11
+ :access_token_path,
12
+ :authorize_path,
13
+ :oauth_scheme,
14
+ :oauth_http_method,
15
+ :callback_path].freeze
16
+
17
+ # @private
18
+ attr_accessor *VALID_OPTIONS_KEYS
19
+
20
+ def consumer_handler=(consumer_handler)
21
+ if consumer_handler.class == String
22
+ begin
23
+ @consumer_handler = Object.const_get(consumer_handler).new
24
+ rescue NameError => error
25
+ LOGGER.error 'Application has provided an invalid telco asset marketplace consumer_handler: ' + TAM.consumer_handler
26
+ raise InvalidConsumerHandler.new 'Application has provided an invalid telco asset marketplace consumer_handler: ' + TAM.consumer_handler
27
+ end
28
+ else
29
+ @consumer_handler = consumer_handler
30
+ end
31
+ end
32
+
33
+ def consumer_handler
34
+ @consumer_handler
35
+ end
36
+
37
+ # When this module is extended, set all configuration options to their default values
38
+ def self.extended(base)
39
+ base.reset
40
+ end
41
+
42
+ # Convenience method to allow configuration options to be set in a block
43
+ def configure
44
+ yield self
45
+ end
46
+
47
+ def configure(config)
48
+ unless config.empty?
49
+ self.consumer_key = config['consumer_key'] if config['consumer_key']
50
+ self.consumer_secret = config['consumer_secret'] if config['consumer_secret']
51
+ self.consumer_handler = config['consumer_handler'] if config['consumer_handler']
52
+ self.site = config['site'] if config['site']
53
+ self.request_token_path = config['request_token_path'] if config['request_token_path']
54
+ self.access_token_path = config['access_token_path'] if config['access_token_path']
55
+ self.authorize_path = config['authorize_path'] if config['authorize_path']
56
+ self.oauth_scheme = config['oauth_scheme'] if config['oauth_scheme']
57
+ self.oauth_http_method = config['oauth_http_method'] if config['oauth_http_method']
58
+ self.callback_path = config['callback_path'] if config['callback_path']
59
+ end
60
+ end
61
+
62
+ # Create a hash of options and their values
63
+ def options
64
+ Hash[VALID_OPTIONS_KEYS.map {|key| [key, send(key)] }]
65
+ end
66
+
67
+ # Reset all configuration options to defaults
68
+ def reset
69
+ self.consumer_key = nil
70
+ self.consumer_secret = nil
71
+ self.consumer_handler = nil
72
+ self.site = 'https://telcoassetmarketplace.com'
73
+ self.request_token_path = '/api/1/oauth/request_token'
74
+ self.access_token_path = '/api/1/oauth/access_token'
75
+ self.authorize_path = '/web/authorize'
76
+ self.oauth_scheme = :query_string
77
+ self.oauth_http_method = :get
78
+ self.callback_path = 'tamapi'
79
+ self
80
+ end
81
+ end
82
+ end
83
+
data/lib/tam/error.rb ADDED
@@ -0,0 +1,40 @@
1
+ module TAM
2
+ # Custom error class for rescuing from all telco asset marketplace errors
3
+ class Error < StandardError
4
+ attr_reader :body
5
+
6
+ def initialize(message, body = '')
7
+ @body = body
8
+ super message
9
+ end
10
+ end
11
+
12
+ # Raised when client tries to use any of the API methods that require OAUTH
13
+ # without configuring the consumer_key or consumer_secret
14
+ class OAuthConsumerAttributesMissing < Error
15
+ def initialize
16
+ super 'consumer_key or consumer_secret not configured'
17
+ end
18
+ end
19
+
20
+ # Raised when client tries to use any of the API methods without user authorization
21
+ class RequestNotAuthorized < Error; end
22
+
23
+ # Raised when client performs a wrong OAUTH interaction (this is a super-class)
24
+ class OAuthError < Error; end
25
+
26
+ # Raised when client is using an invalid consumer_key
27
+ class InvalidConsumerKey < OAuthError; end
28
+
29
+ # Raised when client is using an invalid consumer_secret
30
+ class InvalidConsumerSecret < OAuthError; end
31
+
32
+ # Raised when client is using an invalid consumer_handler
33
+ class InvalidConsumerHandler < Error; end
34
+
35
+ class UnexpectedError < Error; end
36
+
37
+ # Raised when one of the telco asset marketplace services is not available
38
+ class ServiceUnavailable < Error; end
39
+ end
40
+
@@ -0,0 +1,30 @@
1
+ require 'rails'
2
+
3
+ module TAM
4
+ class TamRailtie < Rails::Railtie
5
+ initializer "tam.boot" do
6
+ configure_with_yaml
7
+ end
8
+
9
+ private
10
+
11
+ # Attempts to load the telco asset marketplace configuration from config/tam.yml
12
+ # in a rails 3 application.
13
+ # Besides using a tam.yml, developers can also configure directly TAM settings, e.g.:
14
+ # TAM.consumer_key = 'h42woy35tl08o44l'
15
+ def configure_with_yaml
16
+ cfg = load_config(File.join(Rails.root, 'config', 'tam.yml')).freeze
17
+ TAM.configure(cfg)
18
+ end
19
+
20
+ def load_config(yaml_file)
21
+ return {} unless File.exist?(yaml_file)
22
+ cfg = YAML::load(File.open(yaml_file))
23
+ if defined? Rails
24
+ cfg = cfg[Rails.env]
25
+ end
26
+ cfg
27
+ end
28
+
29
+ end
30
+ end
data/lib/tam/user.rb ADDED
@@ -0,0 +1,12 @@
1
+ module TAM
2
+ # Represents an end-user of telco asset marketplace (a subscriber)
3
+ class User
4
+ attr_accessor :access_token
5
+ attr_accessor :token_secret
6
+
7
+ def initialize(access_token, token_secret)
8
+ @access_token = access_token
9
+ @token_secret = token_secret
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,4 @@
1
+ module TAM
2
+ # The version of the gem
3
+ VERSION = '1.0.0'.freeze unless defined?(::TAM::VERSION)
4
+ end
data/lib/tam.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'tam/railtie' if defined? ::Rails::Railtie
2
+ require 'tam/configuration'
3
+ require 'tam/api'
4
+
5
+ module TAM
6
+ extend Configuration
7
+
8
+ # If in rails environment then we use the rails default logger
9
+ # otherwise we create one that points to the standard output
10
+ LOGGER =
11
+ if defined? Rails
12
+ RAILS_DEFAULT_LOGGER
13
+ else
14
+ Logger.new(STDOUT)
15
+ end
16
+
17
+ end
data/tam.gemspec ADDED
@@ -0,0 +1,38 @@
1
+ # coding: UTF-8
2
+ require File.expand_path('../lib/tam/version', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.add_runtime_dependency('sinatra', '~> 1.2.1')
6
+ s.add_runtime_dependency('json', '~> 1.5')
7
+ s.add_runtime_dependency('oauth', '~> 0.4.3')
8
+
9
+ s.name = "tam"
10
+ s.version = TAM::VERSION.dup
11
+ s.platform = Gem::Platform::RUBY
12
+ s.authors = ["Carlos Manzanares"]
13
+ s.email = ["developers@telcoassetmarketplace.com"]
14
+ s.homepage = "https://github.com/tamdeveloper/telco-asset-marketplace-gem"
15
+ s.description = %q{The Ruby gem for the telco asset marketplace REST APIs}
16
+ s.summary = "telco asset marketplace Ruby gem"
17
+ s.rubyforge_project = s.name
18
+
19
+ s.required_rubygems_version = Gem::Requirement.new('>= 1.3.6') if s.respond_to? :required_rubygems_version=
20
+
21
+ s.require_path = 'lib'
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.files = `git ls-files`.split("\n")
24
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
25
+
26
+ s.post_install_message =<<eos
27
+ ********************************************************************************
28
+
29
+ Visit our community pages for up-to-date information on
30
+ telco asset marketplace:
31
+ https://code.telcoassetmarketplace.com/
32
+ Notice that in order to use this gem you will also need to register as a
33
+ developer in telco asset marketplace:
34
+ https://telcoassetmarketplace.com
35
+
36
+ ********************************************************************************
37
+ eos
38
+ end
metadata ADDED
@@ -0,0 +1,142 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tam
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
11
+ platform: ruby
12
+ authors:
13
+ - Carlos Manzanares
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-06-06 00:00:00 +03:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: sinatra
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ hash: 29
31
+ segments:
32
+ - 1
33
+ - 2
34
+ - 1
35
+ version: 1.2.1
36
+ requirement: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: json
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ hash: 5
47
+ segments:
48
+ - 1
49
+ - 5
50
+ version: "1.5"
51
+ requirement: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: oauth
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ hash: 9
62
+ segments:
63
+ - 0
64
+ - 4
65
+ - 3
66
+ version: 0.4.3
67
+ requirement: *id003
68
+ description: The Ruby gem for the telco asset marketplace REST APIs
69
+ email:
70
+ - developers@telcoassetmarketplace.com
71
+ executables: []
72
+
73
+ extensions: []
74
+
75
+ extra_rdoc_files: []
76
+
77
+ files:
78
+ - .gitignore
79
+ - Gemfile
80
+ - LICENSE
81
+ - README.mkd
82
+ - Rakefile
83
+ - lib/tam.rb
84
+ - lib/tam/api.rb
85
+ - lib/tam/api/location.rb
86
+ - lib/tam/api/oauth.rb
87
+ - lib/tam/api/sms.rb
88
+ - lib/tam/configuration.rb
89
+ - lib/tam/error.rb
90
+ - lib/tam/railtie.rb
91
+ - lib/tam/user.rb
92
+ - lib/tam/version.rb
93
+ - tam.gemspec
94
+ has_rdoc: true
95
+ homepage: https://github.com/tamdeveloper/telco-asset-marketplace-gem
96
+ licenses: []
97
+
98
+ post_install_message: |
99
+ ********************************************************************************
100
+
101
+ Visit our community pages for up-to-date information on
102
+ telco asset marketplace:
103
+ https://code.telcoassetmarketplace.com/
104
+ Notice that in order to use this gem you will also need to register as a
105
+ developer in telco asset marketplace:
106
+ https://telcoassetmarketplace.com
107
+
108
+ ********************************************************************************
109
+
110
+ rdoc_options: []
111
+
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ hash: 3
120
+ segments:
121
+ - 0
122
+ version: "0"
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ hash: 23
129
+ segments:
130
+ - 1
131
+ - 3
132
+ - 6
133
+ version: 1.3.6
134
+ requirements: []
135
+
136
+ rubyforge_project: tam
137
+ rubygems_version: 1.3.7
138
+ signing_key:
139
+ specification_version: 3
140
+ summary: telco asset marketplace Ruby gem
141
+ test_files: []
142
+