blesta 0.0.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/.gitignore +8 -0
- data/.rspec +2 -0
- data/.travis.yml +12 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.md +100 -0
- data/Rakefile +12 -0
- data/blesta.gemspec +32 -0
- data/lib/blesta.rb +45 -0
- data/lib/blesta/credit.rb +13 -0
- data/lib/blesta/license.rb +116 -0
- data/lib/blesta/package.rb +13 -0
- data/lib/blesta/support/base.rb +74 -0
- data/lib/blesta/support/config.rb +46 -0
- data/lib/blesta/support/version.rb +3 -0
- data/spec/blesta/credit_spec.rb +45 -0
- data/spec/blesta/license_spec.rb +275 -0
- data/spec/blesta/package_spec.rb +45 -0
- data/spec/blesta/support/base_spec.rb +51 -0
- data/spec/blesta/support/config_spec.rb +42 -0
- data/spec/spec_helper.rb +90 -0
- metadata +222 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012 Site5.com <http://www.site5.com/>
|
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.md
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
Blesta [![Blesta Build Status][Build Icon]][Build Status]
|
2
|
+
=========================================================
|
3
|
+
A Ruby library for working with the [Blesta Reseller API][].
|
4
|
+
|
5
|
+
Blesta has been tested on MRI 1.8.7, MRI 1.9.2 and MRI 1.9.3.
|
6
|
+
|
7
|
+
[Build Status]: http://travis-ci.org/site5/blesta
|
8
|
+
[Build Icon]: https://secure.travis-ci.org/site5/blesta.png?branch=master
|
9
|
+
[Blesta Reseller API]: http://www.blesta.com/wp-content/uploads/2009/12/Blesta_Reseller_API_Documentation.pdf
|
10
|
+
|
11
|
+
Install
|
12
|
+
-------
|
13
|
+
|
14
|
+
gem install blesta
|
15
|
+
bundle install
|
16
|
+
|
17
|
+
Configuration
|
18
|
+
-------------
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
require 'blesta'
|
22
|
+
|
23
|
+
Blesta.config do |c|
|
24
|
+
c.base_uri 'https://blestaapi.com' # Root level URI for blesta API
|
25
|
+
c.uid 'uid' # Blesta reseller UID
|
26
|
+
c.password 'topsecret' # Blesta reseller password
|
27
|
+
end
|
28
|
+
```
|
29
|
+
|
30
|
+
Usage
|
31
|
+
-----
|
32
|
+
|
33
|
+
Get all licenses:
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
license = Blesta::License.new
|
37
|
+
license.all
|
38
|
+
```
|
39
|
+
|
40
|
+
Search for a specific license:
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
license.search "mydomain.com", :type => "domain"
|
44
|
+
license.search "1234567890AB", :type => "license"
|
45
|
+
```
|
46
|
+
|
47
|
+
Get the amount of credit in USD on the reseller account:
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
credit = Blesta::Credit.new
|
51
|
+
credit.get_amount
|
52
|
+
```
|
53
|
+
|
54
|
+
Get a list of all of the packages this reseller account may add:
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
packages = Blesta::Package.new
|
58
|
+
packages.all
|
59
|
+
```
|
60
|
+
|
61
|
+
Supported Methods
|
62
|
+
-----------------
|
63
|
+
|
64
|
+
This gem implements the blesta reseller's API v1.0.
|
65
|
+
|
66
|
+
It includes:
|
67
|
+
|
68
|
+
* *Get Credit.*
|
69
|
+
* *Get Licenses.*
|
70
|
+
* *Get Packages.*
|
71
|
+
* *Add License.*
|
72
|
+
* *Cancel License.*
|
73
|
+
* *Suspend License.*
|
74
|
+
* *Unsuspend License.*
|
75
|
+
* *Search Licenses.*
|
76
|
+
* *Update Domain.*
|
77
|
+
|
78
|
+
Tests
|
79
|
+
-----
|
80
|
+
|
81
|
+
Blesta uses rspec for tests. To run:
|
82
|
+
|
83
|
+
bundle exec rake
|
84
|
+
|
85
|
+
Note on Patches/Pull Requests
|
86
|
+
-----------------------------
|
87
|
+
|
88
|
+
* Fork the project.
|
89
|
+
* Make your feature addition or bug fix.
|
90
|
+
* Add tests for it. This is important so I don't break it in a
|
91
|
+
future version unintentionally.
|
92
|
+
* Commit, do not mess with rakefile, version, or history.
|
93
|
+
(if you want to have your own version, that is fine but bump version in a
|
94
|
+
commit by itself I can ignore when I pull)
|
95
|
+
* Send me a pull request. Bonus points for topic branches.
|
96
|
+
|
97
|
+
Copyright
|
98
|
+
---------
|
99
|
+
|
100
|
+
Copyright (c) 2012 Site5.com. See LICENSE for details.
|
data/Rakefile
ADDED
data/blesta.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "blesta/support/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "blesta"
|
7
|
+
s.version = Blesta::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Justin Mazzi"]
|
10
|
+
s.email = ["jmazzi@site5.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{A Ruby library for working with the Blesta Resellers API}
|
13
|
+
s.description = %q{A Ruby library for working with the Blesta Resellers API}
|
14
|
+
|
15
|
+
s.rubyforge_project = "blesta"
|
16
|
+
|
17
|
+
s.add_runtime_dependency 'faraday', '~> 0.8.4'
|
18
|
+
s.add_runtime_dependency 'faraday_middleware', '~> 0.9.0'
|
19
|
+
s.add_runtime_dependency 'json', '~> 1.7.3'
|
20
|
+
|
21
|
+
s.add_development_dependency 'rspec', '~> 2.10.0'
|
22
|
+
s.add_development_dependency 'awesome_print', '~> 1.0.2'
|
23
|
+
s.add_development_dependency 'rake', '~> 0.9.2.2'
|
24
|
+
s.add_development_dependency 'vcr', '~> 2.3.0'
|
25
|
+
s.add_development_dependency 'fakeweb', '~> 1.3'
|
26
|
+
s.add_development_dependency 'activesupport', "~> 3.2.9"
|
27
|
+
|
28
|
+
s.files = `git ls-files`.split("\n")
|
29
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
30
|
+
|
31
|
+
s.require_paths = ["lib"]
|
32
|
+
end
|
data/lib/blesta.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_middleware'
|
3
|
+
require 'blesta/support/version'
|
4
|
+
|
5
|
+
module Blesta
|
6
|
+
autoload :Config, 'blesta/support/config'
|
7
|
+
autoload :Base, 'blesta/support/base'
|
8
|
+
autoload :License, 'blesta/license'
|
9
|
+
autoload :Package, 'blesta/package'
|
10
|
+
autoload :Credit, 'blesta/credit'
|
11
|
+
|
12
|
+
# Config
|
13
|
+
extend self
|
14
|
+
attr_accessor :configuration
|
15
|
+
|
16
|
+
attr_accessor :configuration_file
|
17
|
+
|
18
|
+
self.configuration ||= Blesta::Config.new
|
19
|
+
|
20
|
+
# Public: Specificy the config via block
|
21
|
+
#
|
22
|
+
# base_uri - URL of your Blesta Resellers API`
|
23
|
+
# uid - API UID
|
24
|
+
# password - API Password
|
25
|
+
#
|
26
|
+
# Examples
|
27
|
+
#
|
28
|
+
# Blesta.config do |c|
|
29
|
+
# c.base_uri 'http://test.com/reseller'
|
30
|
+
# c.uid '1234'
|
31
|
+
# c.password 'mypass'
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# Returns a Hash
|
35
|
+
def config
|
36
|
+
yield self.configuration if block_given?
|
37
|
+
self.configuration.config
|
38
|
+
end
|
39
|
+
|
40
|
+
# Public: Reset the config (aka, clear it)
|
41
|
+
def reset_config
|
42
|
+
self.configuration = Blesta::Config.new
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Blesta
|
2
|
+
class Credit < Base
|
3
|
+
|
4
|
+
# Public: Fetch the amount of credit in USD on the reseller account
|
5
|
+
#
|
6
|
+
# Returns the amount of credit in USD
|
7
|
+
def get_amount
|
8
|
+
response = request(:get, '', {:query => {:action=> 'getcredit'}})
|
9
|
+
response_data_or_error response
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
module Blesta
|
2
|
+
class License < Base
|
3
|
+
TERM_OPTIONS = ["owned", "monthly", "yearly"]
|
4
|
+
TERM_OPTIONS_ERROR = "valid term options are owned, monthly, yearly"
|
5
|
+
|
6
|
+
# Public: Sets the test mode.
|
7
|
+
attr_writer :test_mode
|
8
|
+
|
9
|
+
# Public: Gets the test mode value. Default value is false.
|
10
|
+
def test_mode
|
11
|
+
@test_mode || false
|
12
|
+
end
|
13
|
+
|
14
|
+
# Public: Returns all licenses
|
15
|
+
#
|
16
|
+
# Returns a hash where the keys are the license IDs
|
17
|
+
def all
|
18
|
+
response = request(:get, '', {:query => {:action=> 'getlicenses'}})
|
19
|
+
response_data_or_error response
|
20
|
+
end
|
21
|
+
|
22
|
+
# Public: Adds a new license
|
23
|
+
#
|
24
|
+
# term - The term that should apply to this license. Options are:
|
25
|
+
# owned, monthly, yearly
|
26
|
+
# options - options hash. It should include a domain and prorate option
|
27
|
+
# is optional (defaul is false)
|
28
|
+
#
|
29
|
+
# Returns a Hash that contains the license and domain keys
|
30
|
+
def add(term, options={})
|
31
|
+
raise ArgumentError, TERM_OPTIONS_ERROR unless TERM_OPTIONS.include?(term)
|
32
|
+
|
33
|
+
license_params = { :term =>term, :action=>'addlicense',
|
34
|
+
:test_mode => test_mode }.merge(options)
|
35
|
+
response = request(:get, '', {:query => license_params})
|
36
|
+
response_data_or_error response do
|
37
|
+
response['data'].first
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Public: Permanently cancels the given license
|
42
|
+
#
|
43
|
+
# license_id - The license key for this license
|
44
|
+
#
|
45
|
+
# Returns nil. In case of error, it returns a hash that contains the
|
46
|
+
# error code and message
|
47
|
+
def cancel(license_id)
|
48
|
+
basic_request(license_id, "cancellicense")
|
49
|
+
end
|
50
|
+
|
51
|
+
# Public: Indefinitely suspend a license
|
52
|
+
#
|
53
|
+
# license_id - The license key for this license
|
54
|
+
#
|
55
|
+
# Returns nil. In case of error, it returns a hash that contains the
|
56
|
+
# error code and message
|
57
|
+
def suspend(license_id)
|
58
|
+
basic_request(license_id, "suspendlicense")
|
59
|
+
end
|
60
|
+
|
61
|
+
# Public: Unsuspend a previously suspended license
|
62
|
+
#
|
63
|
+
# license_id - The license key for this license
|
64
|
+
#
|
65
|
+
# Returns nil. In case of error, it returns a hash that contains the
|
66
|
+
# error code and message
|
67
|
+
def unsuspend(license_id)
|
68
|
+
basic_request license_id, "unsuspendlicense"
|
69
|
+
end
|
70
|
+
|
71
|
+
# Public: Updates the domain for this license
|
72
|
+
#
|
73
|
+
# license_id - The license you wish to update
|
74
|
+
# options - options hash. It should include a domain.
|
75
|
+
#
|
76
|
+
# Returns nil. In case of error, it returns a hash that contains the
|
77
|
+
# error code and message
|
78
|
+
def update_domain(license_id, options={})
|
79
|
+
update_params = { :action => "updatedomain",
|
80
|
+
:license => license_id }.merge(options)
|
81
|
+
response = request(:get, '', {:query => update_params})
|
82
|
+
response_data_or_error response
|
83
|
+
end
|
84
|
+
|
85
|
+
# Public: Search through all available licenses for a match
|
86
|
+
#
|
87
|
+
# term - either a domain or license, depending on the search type
|
88
|
+
# options - hash options (default: {}):
|
89
|
+
# :type - domain or license as string (required)
|
90
|
+
# :page - the page of results to return. Results are limited to
|
91
|
+
# 25 per page (optional)
|
92
|
+
#
|
93
|
+
# Returns a list of licenses that matched the criteria
|
94
|
+
def search(term, options={})
|
95
|
+
search_params = { :action => "searchlicenses",
|
96
|
+
:search => { options[:type] => term}}.merge(options)
|
97
|
+
response = request(:get, '', {:query => search_params})
|
98
|
+
response_data_or_error response
|
99
|
+
end
|
100
|
+
|
101
|
+
private
|
102
|
+
# Private: Makes a basic license request
|
103
|
+
#
|
104
|
+
# license_id: The license id
|
105
|
+
# action: The specific action that you want to perform
|
106
|
+
#
|
107
|
+
# Return the response data or, in case of error, it returns a hash that
|
108
|
+
# contains the error code and message
|
109
|
+
def basic_request(license_id, action)
|
110
|
+
params = { :action => action, :license => license_id,
|
111
|
+
:test_mode => test_mode.to_s }
|
112
|
+
response = request(:get, '', {:query => params})
|
113
|
+
response_data_or_error response
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Blesta
|
2
|
+
class Package < Base
|
3
|
+
|
4
|
+
# Public: Fetches a list of all of the packages this reseller account may
|
5
|
+
#
|
6
|
+
# Returns a list of all of the packages
|
7
|
+
def all
|
8
|
+
response = request(:get, '', {:query => {:action=> 'getpackages'}})
|
9
|
+
response_data_or_error response
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Blesta
|
2
|
+
class Base
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
@conn = Faraday.new(:url => Blesta.config[:base_uri]) do |c|
|
6
|
+
c.request :url_encoded
|
7
|
+
c.response :json
|
8
|
+
c.adapter :net_http
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# Public: Indicates whether the request was successful or not
|
13
|
+
#
|
14
|
+
# Returns boolean
|
15
|
+
def successful?
|
16
|
+
@success
|
17
|
+
end
|
18
|
+
|
19
|
+
# Public: authentication parameters
|
20
|
+
#
|
21
|
+
# Returns a hash
|
22
|
+
def authentication_params
|
23
|
+
{
|
24
|
+
:uid => Blesta.config[:uid],
|
25
|
+
:password => Blesta.config[:password]
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
# Public: Peforms an HTTP Request
|
30
|
+
#
|
31
|
+
# request_method - The HTTP request method for the #request.
|
32
|
+
# (:get/:post/:delete etc)
|
33
|
+
# path - URL path
|
34
|
+
# options - HTTP query params
|
35
|
+
#
|
36
|
+
# Examples
|
37
|
+
#
|
38
|
+
# request :get, '/something.json' # GET /seomthing.json
|
39
|
+
# request :put, '/something.json', :something => 1
|
40
|
+
# # PUT /something.json?something=1
|
41
|
+
#
|
42
|
+
# Returns the parsed json response
|
43
|
+
def request(request_method, path, options = {})
|
44
|
+
check_config!
|
45
|
+
|
46
|
+
params = (options[:query] || {}).merge authentication_params
|
47
|
+
response = @conn.send(request_method, path, params)
|
48
|
+
@success = (response.body['response_code'].to_s == '200')
|
49
|
+
|
50
|
+
response.body
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
# Private: Raises an error if a request is made without first calling
|
56
|
+
# Blesta.config
|
57
|
+
def check_config!
|
58
|
+
raise NoConfig, "Blesta.config must be specified" if Blesta.config.empty?
|
59
|
+
end
|
60
|
+
|
61
|
+
# Private: returns the response data if request was succesfull
|
62
|
+
# or a hash that contains the error code and message
|
63
|
+
#
|
64
|
+
# response - the blesta response
|
65
|
+
def response_data_or_error(response)
|
66
|
+
if successful?
|
67
|
+
block_given? ? yield : response['data']
|
68
|
+
else
|
69
|
+
{ :error_code => response["response_code"],
|
70
|
+
:message => response["response_text"] }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Blesta
|
2
|
+
# Holds the configuration for Blesta
|
3
|
+
class Config
|
4
|
+
attr_accessor :config
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@config = {}
|
8
|
+
end
|
9
|
+
|
10
|
+
# Public: get the configuration value
|
11
|
+
#
|
12
|
+
# configuration - the configuration key
|
13
|
+
#
|
14
|
+
# Returns the configuration value or nil if it has not been set
|
15
|
+
def [](configuration)
|
16
|
+
@config[configuration]
|
17
|
+
end
|
18
|
+
|
19
|
+
# Public: set the base uri for Blesta resellers API
|
20
|
+
#
|
21
|
+
# value - uri for Blesta resellers API
|
22
|
+
#
|
23
|
+
# Returns the given base uri
|
24
|
+
def base_uri(value)
|
25
|
+
@config[:base_uri] = value
|
26
|
+
end
|
27
|
+
|
28
|
+
# Public: set the Blesta reseller UID
|
29
|
+
#
|
30
|
+
# value - UID for Blesta resellers API
|
31
|
+
#
|
32
|
+
# Returns the given UID
|
33
|
+
def uid(value)
|
34
|
+
@config[:uid] = value
|
35
|
+
end
|
36
|
+
|
37
|
+
# Public: set the Blesta reseller password
|
38
|
+
#
|
39
|
+
# value - password for Blesta resellers API
|
40
|
+
#
|
41
|
+
# Returns the given password
|
42
|
+
def password(value)
|
43
|
+
@config[:password] = value
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Blesta::Credit do
|
4
|
+
let(:faraday_request_stub) { Faraday::Adapter::Test::Stubs.new }
|
5
|
+
let(:credit) { Blesta::Credit.new }
|
6
|
+
|
7
|
+
before do
|
8
|
+
credit.instance_variable_get(:@conn).builder.
|
9
|
+
swap Faraday::Adapter::NetHttp,
|
10
|
+
Faraday::Adapter::Test, faraday_request_stub
|
11
|
+
end
|
12
|
+
|
13
|
+
def stub_faraday_request(params, response)
|
14
|
+
query_param = build_query_params params
|
15
|
+
faraday_request_stub.get(query_param) { [200, {}, response] }
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#get_amount' do
|
19
|
+
let (:params) { {:action => "getcredit"} }
|
20
|
+
|
21
|
+
context 'on success' do
|
22
|
+
it 'should return the amount of credit in USD' do
|
23
|
+
response = blesta_successful_response "10.00"
|
24
|
+
stub_faraday_request(params, response)
|
25
|
+
|
26
|
+
response = credit.get_amount
|
27
|
+
faraday_request_stub.verify_stubbed_calls
|
28
|
+
response.should == "10.00"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'on error' do
|
33
|
+
it 'returns a hash that contains the error code and message' do
|
34
|
+
params = {"action" => "getcredit" }
|
35
|
+
response = blesta_unsuccessful_response "100","Authentication failed"
|
36
|
+
stub_faraday_request(params, response)
|
37
|
+
|
38
|
+
response = credit.get_amount
|
39
|
+
credit.should_not be_successful
|
40
|
+
response[:error_code].should == "100"
|
41
|
+
response[:message].should == "Authentication failed"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,275 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Blesta::License do
|
4
|
+
let(:faraday_request_stub) { Faraday::Adapter::Test::Stubs.new }
|
5
|
+
let(:license) { Blesta::License.new }
|
6
|
+
before do
|
7
|
+
license.instance_variable_get(:@conn).builder.
|
8
|
+
swap Faraday::Adapter::NetHttp,
|
9
|
+
Faraday::Adapter::Test, faraday_request_stub
|
10
|
+
end
|
11
|
+
|
12
|
+
def stub_faraday_request(params, response)
|
13
|
+
query_param = build_query_params params
|
14
|
+
faraday_request_stub.get(query_param) { [200, {}, response] }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#all' do
|
18
|
+
let (:params) { {:action => "getlicenses"} }
|
19
|
+
|
20
|
+
context "on success" do
|
21
|
+
before :each do
|
22
|
+
stub_faraday_request(params, getlicenses_response)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should fetch all licenses' do
|
26
|
+
licenses = license.all
|
27
|
+
faraday_request_stub.verify_stubbed_calls
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'returns a Hash where the keys are the license IDs' do
|
31
|
+
licenses = license.all()
|
32
|
+
licenses.should be_a Hash
|
33
|
+
licenses.keys.should == ["ABCDEFGH12345678"]
|
34
|
+
faraday_request_stub.verify_stubbed_calls
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'on error' do
|
39
|
+
it 'returns a hash that contains the error code and message' do
|
40
|
+
response = blesta_unsuccessful_response "100", "Authentication failed"
|
41
|
+
stub_faraday_request(params, response)
|
42
|
+
|
43
|
+
response = license.all()
|
44
|
+
license.should_not be_successful
|
45
|
+
response[:error_code].should == "100"
|
46
|
+
response[:message].should == "Authentication failed"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#add' do
|
52
|
+
let (:domain) { 'mydomain.com' }
|
53
|
+
let (:params) { {:action=>"addlicense", :term=>"monthly",
|
54
|
+
:domain=>"mydomain.com", :test_mode => "false"} }
|
55
|
+
|
56
|
+
context "on success" do
|
57
|
+
before do
|
58
|
+
response = blesta_successful_response [{"license"=>"ABCDEFGH12345678",
|
59
|
+
"domain"=>"mydomain.com"}]
|
60
|
+
stub_faraday_request(params, response)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'requires a term that is owned, monthly or yearly' do
|
64
|
+
Blesta::License::TERM_OPTIONS.each do |t|
|
65
|
+
expect { license.add(t, domain) }.to_not raise_error(ArgumentError)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'raises an error when the term is not valid' do
|
70
|
+
error_message = "valid term options are owned, monthly, yearly"
|
71
|
+
expect{ license.add('invalid_term', domain) }.
|
72
|
+
to raise_error(ArgumentError, error_message)
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'adds a new license' do
|
76
|
+
license.add("monthly", :domain => domain )
|
77
|
+
faraday_request_stub.verify_stubbed_calls
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'returns a Hash that contains the license id and domain' do
|
81
|
+
response = license.add("monthly", :domain => domain)
|
82
|
+
response['license'].should == "ABCDEFGH12345678"
|
83
|
+
response['domain'].should == "mydomain.com"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'on error' do
|
88
|
+
it 'returns a hash that contains the error code and message' do
|
89
|
+
response = blesta_unsuccessful_response "103",
|
90
|
+
"License already exists for that domain"
|
91
|
+
stub_faraday_request(params, response)
|
92
|
+
|
93
|
+
response = license.add("monthly", :domain => domain)
|
94
|
+
license.should_not be_successful
|
95
|
+
response[:error_code].should == "103"
|
96
|
+
response[:message].should == "License already exists for that domain"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'on test mode' do
|
101
|
+
it 'sends the test mode parameter' do
|
102
|
+
test_mode_params = params.merge({:test_mode => "true"})
|
103
|
+
response = blesta_successful_response []
|
104
|
+
stub_faraday_request(test_mode_params, response)
|
105
|
+
|
106
|
+
license.test_mode = true
|
107
|
+
license.add("monthly", :domain => domain)
|
108
|
+
faraday_request_stub.verify_stubbed_calls
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe '#cancel' do
|
114
|
+
let (:params) { {:action=>"cancellicense", :license => "ABCDEFGH12345678",
|
115
|
+
:test_mode => "false"} }
|
116
|
+
|
117
|
+
context 'on success' do
|
118
|
+
it 'cancels the license' do
|
119
|
+
response = blesta_successful_response nil
|
120
|
+
stub_faraday_request(params, response)
|
121
|
+
|
122
|
+
license.cancel 'ABCDEFGH12345678'
|
123
|
+
faraday_request_stub.verify_stubbed_calls
|
124
|
+
end
|
125
|
+
|
126
|
+
context 'on test mode' do
|
127
|
+
it 'sends the test mode parameter' do
|
128
|
+
test_mode_params = params.merge({:test_mode => "true"})
|
129
|
+
response = blesta_successful_response nil
|
130
|
+
stub_faraday_request(test_mode_params, response)
|
131
|
+
|
132
|
+
license.test_mode = true
|
133
|
+
license.cancel 'ABCDEFGH12345678'
|
134
|
+
faraday_request_stub.verify_stubbed_calls
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
context 'on error' do
|
140
|
+
it 'returns a hash that contains the error code and message' do
|
141
|
+
response = blesta_unsuccessful_response "102", "License does not exist"
|
142
|
+
stub_faraday_request(params, response)
|
143
|
+
|
144
|
+
response = license.cancel 'ABCDEFGH12345678'
|
145
|
+
license.should_not be_successful
|
146
|
+
response[:error_code].should == "102"
|
147
|
+
response[:message].should == "License does not exist"
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
describe '#suspend' do
|
154
|
+
let (:params) { {:action=>"suspendlicense", :license => "ABCDEFGH12345678",
|
155
|
+
:test_mode => "false"} }
|
156
|
+
|
157
|
+
context 'on success' do
|
158
|
+
it 'suspends the license' do
|
159
|
+
response = blesta_successful_response nil
|
160
|
+
stub_faraday_request(params, response)
|
161
|
+
|
162
|
+
license.suspend 'ABCDEFGH12345678'
|
163
|
+
faraday_request_stub.verify_stubbed_calls
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
context 'on error' do
|
168
|
+
it 'returns a hash that contains the error code and message' do
|
169
|
+
response = blesta_unsuccessful_response "102", "License does not exist"
|
170
|
+
stub_faraday_request(params, response)
|
171
|
+
|
172
|
+
response = license.suspend 'ABCDEFGH12345678'
|
173
|
+
license.should_not be_successful
|
174
|
+
response[:error_code].should == "102"
|
175
|
+
response[:message].should == "License does not exist"
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
describe '#unsuspend' do
|
181
|
+
let(:params) { {:action=>"unsuspendlicense", :license => "ABCDEFGH12345678",
|
182
|
+
:test_mode => "false"} }
|
183
|
+
|
184
|
+
context 'on success' do
|
185
|
+
it 'unsuspends the license' do
|
186
|
+
response = blesta_successful_response nil
|
187
|
+
stub_faraday_request(params, response)
|
188
|
+
|
189
|
+
license.unsuspend 'ABCDEFGH12345678'
|
190
|
+
faraday_request_stub.verify_stubbed_calls
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
context 'on error' do
|
195
|
+
it 'returns a hash that contains the error code and message' do
|
196
|
+
response = blesta_unsuccessful_response "102", "License does not exist"
|
197
|
+
stub_faraday_request(params, response)
|
198
|
+
|
199
|
+
response = license.unsuspend 'ABCDEFGH12345678'
|
200
|
+
license.should_not be_successful
|
201
|
+
response[:error_code].should == "102"
|
202
|
+
response[:message].should == "License does not exist"
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
|
208
|
+
describe '#update_domain' do
|
209
|
+
let (:params) { {:action=>"updatedomain", :license => 'ABCDEFGH12345678',
|
210
|
+
:domain => 'newdomain.com' } }
|
211
|
+
|
212
|
+
context 'on success' do
|
213
|
+
it 'updates the domain for a given license' do
|
214
|
+
response = blesta_successful_response nil
|
215
|
+
stub_faraday_request(params, response)
|
216
|
+
|
217
|
+
license.update_domain('ABCDEFGH12345678', :domain => 'newdomain.com')
|
218
|
+
faraday_request_stub.verify_stubbed_calls
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
context 'on error' do
|
223
|
+
it 'returns a hash that contains the error code and message' do
|
224
|
+
response = blesta_unsuccessful_response "103",
|
225
|
+
"License already exists for that domain"
|
226
|
+
stub_faraday_request(params, response)
|
227
|
+
|
228
|
+
response = license.update_domain('ABCDEFGH12345678',
|
229
|
+
:domain => 'newdomain.com')
|
230
|
+
license.should_not be_successful
|
231
|
+
response[:error_code].should == "103"
|
232
|
+
response[:message].should == "License already exists for that domain"
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
describe "#search" do
|
238
|
+
context 'on success' do
|
239
|
+
it 'returns a list of licenses that match the given domains' do
|
240
|
+
params = {"action" => "searchlicenses", "search" =>
|
241
|
+
{ "domain" => "mydomain.com" }}
|
242
|
+
stub_faraday_request(params, getlicenses_search_response)
|
243
|
+
|
244
|
+
response = license.search "mydomain.com", :type => 'domain'
|
245
|
+
faraday_request_stub.verify_stubbed_calls
|
246
|
+
license.should be_successful
|
247
|
+
response.should have(2).items
|
248
|
+
end
|
249
|
+
|
250
|
+
it 'returns a list of licenses that match the given licenses id' do
|
251
|
+
params = {"action" => "searchlicenses", "search" =>
|
252
|
+
{ "license" => "ABCDEFGH12345678" }}
|
253
|
+
stub_faraday_request(params, getlicenses_search_response)
|
254
|
+
|
255
|
+
response = license.search "ABCDEFGH12345678", :type => 'license'
|
256
|
+
faraday_request_stub.verify_stubbed_calls
|
257
|
+
license.should be_successful
|
258
|
+
response.should have(2).items
|
259
|
+
end
|
260
|
+
end
|
261
|
+
context 'on error' do
|
262
|
+
it 'returns a hash that contains the error code and message' do
|
263
|
+
params = {"action" => "searchlicenses", "search" =>
|
264
|
+
{ "license" => "ABCDEFGH12345678" }}
|
265
|
+
response = blesta_unsuccessful_response "100","Authentication failed"
|
266
|
+
stub_faraday_request(params, response)
|
267
|
+
|
268
|
+
response = license.search "ABCDEFGH12345678", :type => 'license'
|
269
|
+
license.should_not be_successful
|
270
|
+
response[:error_code].should == "100"
|
271
|
+
response[:message].should == "Authentication failed"
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Blesta::Package do
|
4
|
+
let(:faraday_request_stub) { Faraday::Adapter::Test::Stubs.new }
|
5
|
+
let(:package) { Blesta::Package.new }
|
6
|
+
|
7
|
+
before do
|
8
|
+
package.instance_variable_get(:@conn).builder.
|
9
|
+
swap Faraday::Adapter::NetHttp,
|
10
|
+
Faraday::Adapter::Test, faraday_request_stub
|
11
|
+
end
|
12
|
+
|
13
|
+
def stub_faraday_request(params, response)
|
14
|
+
query_param = build_query_params params
|
15
|
+
faraday_request_stub.get(query_param) { [200, {}, response] }
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#all' do
|
19
|
+
let (:params) { {:action => "getpackages"} }
|
20
|
+
|
21
|
+
context 'on success' do
|
22
|
+
it 'should return a list of all the packages' do
|
23
|
+
response = blesta_successful_response [{"name" => "Blesta Monthly",
|
24
|
+
"type" => "license","term" => "monthly","price" => "15.95"}]
|
25
|
+
stub_faraday_request(params, response)
|
26
|
+
|
27
|
+
response = package.all
|
28
|
+
faraday_request_stub.verify_stubbed_calls
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'on error' do
|
33
|
+
it 'returns a hash that contains the error code and message' do
|
34
|
+
params = {"action" => "getpackages" }
|
35
|
+
response = blesta_unsuccessful_response "100","Authentication failed"
|
36
|
+
stub_faraday_request(params, response)
|
37
|
+
|
38
|
+
response = package.all
|
39
|
+
package.should_not be_successful
|
40
|
+
response[:error_code].should == "100"
|
41
|
+
response[:message].should == "Authentication failed"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Blesta::Base do
|
4
|
+
let(:base) { Blesta::Base.new }
|
5
|
+
let(:successful_response) { JSON.generate({ :response_text => "OK",
|
6
|
+
:response_code => "200" }) }
|
7
|
+
let(:bad_response) { JSON.generate({:response_code => "100" }) }
|
8
|
+
|
9
|
+
describe "#request" do
|
10
|
+
it 'includes the blesta UID and password in the params' do
|
11
|
+
mock_blesta_request successful_response
|
12
|
+
base.request(:get, '/api')['response_text'].should == 'OK'
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'merges any other request parameter' do
|
16
|
+
query_param = { :merge => 'true' }
|
17
|
+
mock_blesta_request successful_response, query_param
|
18
|
+
base.request(:get, '/api', :query => query_param )['response_text'].
|
19
|
+
should == 'OK'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#successful?" do
|
24
|
+
context 'response_code is 200' do
|
25
|
+
it 'is true' do
|
26
|
+
mock_blesta_request successful_response
|
27
|
+
base.request(:get, '/api')
|
28
|
+
base.should be_successful
|
29
|
+
end
|
30
|
+
end
|
31
|
+
context 'response_code is different than 200' do
|
32
|
+
it 'is false' do
|
33
|
+
FakeWeb.clean_registry
|
34
|
+
mock_blesta_request bad_response
|
35
|
+
base.request(:get, '/api')
|
36
|
+
base.should_not be_successful
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "#authentication parameters" do
|
42
|
+
it "returns the authentication parameters given the Blesta configuration" do
|
43
|
+
parameters = {
|
44
|
+
:uid => Blesta.config[:uid],
|
45
|
+
:password => Blesta.config[:password]
|
46
|
+
}
|
47
|
+
base.authentication_params.should == parameters
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Blesta::Config do
|
4
|
+
let(:config) { Blesta::Config.new }
|
5
|
+
|
6
|
+
describe '#new' do
|
7
|
+
it 'sets up the @config hash' do
|
8
|
+
config.config.should == {}
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#[]" do
|
13
|
+
it "behaves like an array" do
|
14
|
+
config.config[:something] = 1
|
15
|
+
config[:something].should == 1
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#base_uri" do
|
20
|
+
it "sets the base_uri" do
|
21
|
+
config.config[:base_uri].should be_nil
|
22
|
+
config.base_uri 'url'
|
23
|
+
config.config[:base_uri].should == 'url'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#uid" do
|
28
|
+
it "sets the uid" do
|
29
|
+
config.config[:uid].should be_nil
|
30
|
+
config.uid '1234'
|
31
|
+
config.config[:uid].should == '1234'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#password" do
|
36
|
+
it "sets the password" do
|
37
|
+
config.config[:password].should be_nil
|
38
|
+
config.password 'pass'
|
39
|
+
config.config[:password].should == 'pass'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'blesta'
|
2
|
+
require 'vcr'
|
3
|
+
require 'fakeweb'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
def mock_request(meth, path, options = {})
|
7
|
+
uri = URI.parse(Blesta.config[:base_uri])
|
8
|
+
url = "#{uri.scheme}://#{uri.host}:#{uri.port}#{path}"
|
9
|
+
FakeWeb.register_uri(meth, url, {:content_type => 'application/json'}.
|
10
|
+
merge(options))
|
11
|
+
end
|
12
|
+
|
13
|
+
RSpec.configure do |c|
|
14
|
+
c.before(:each) do
|
15
|
+
configure_for_tests
|
16
|
+
end
|
17
|
+
c.after(:each) do
|
18
|
+
Blesta.reset_config
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def configure_for_tests
|
23
|
+
Blesta.config do |c|
|
24
|
+
c.uid "12345"
|
25
|
+
c.password "test"
|
26
|
+
c.base_uri "http://example.com"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def blesta_successful_response(data)
|
31
|
+
successful_response = {
|
32
|
+
"response_code" => 200,
|
33
|
+
"response_text" => "OK",
|
34
|
+
"data" => data
|
35
|
+
}
|
36
|
+
JSON.generate(successful_response)
|
37
|
+
end
|
38
|
+
|
39
|
+
def blesta_unsuccessful_response(code, message="error")
|
40
|
+
successful_response = {
|
41
|
+
"response_code" => code,
|
42
|
+
"response_text" => message,
|
43
|
+
"data" => nil
|
44
|
+
}
|
45
|
+
JSON.generate(successful_response)
|
46
|
+
end
|
47
|
+
|
48
|
+
def getlicenses_response
|
49
|
+
license_response = {
|
50
|
+
"ABCDEFGH12345678" => [{
|
51
|
+
"type" => "license",
|
52
|
+
"license" => "ABCDEFGH12345678",
|
53
|
+
"domain" => "domain.com",
|
54
|
+
"term" => "monthly",
|
55
|
+
"date_added" => "2009-07- 24",
|
56
|
+
"date_suspended" => "0000-00-00",
|
57
|
+
"date_renews" => "2009-10- 01",
|
58
|
+
}]
|
59
|
+
}
|
60
|
+
blesta_successful_response license_response
|
61
|
+
end
|
62
|
+
|
63
|
+
def getlicenses_search_response
|
64
|
+
search_response = [{
|
65
|
+
"id" => "616",
|
66
|
+
"domain" => "mydomain.com",
|
67
|
+
"license" => "ABCDEFGH01234567",
|
68
|
+
"last_callback" => "",
|
69
|
+
"term" => "0"
|
70
|
+
},{
|
71
|
+
"id" => "617",
|
72
|
+
"domain" => "test.com",
|
73
|
+
"license" => "ABCDEFGH01234568",
|
74
|
+
"last_callback" => "",
|
75
|
+
"term" => "0"
|
76
|
+
}]
|
77
|
+
blesta_successful_response search_response
|
78
|
+
end
|
79
|
+
|
80
|
+
def build_query_params(params={})
|
81
|
+
base = Blesta::Base.new
|
82
|
+
params = params.merge base.authentication_params
|
83
|
+
require 'active_support/core_ext'
|
84
|
+
"?#{params.to_query}"
|
85
|
+
end
|
86
|
+
|
87
|
+
def mock_blesta_request(body, params = {})
|
88
|
+
mock_request(:get, "/api" + build_query_params(params),
|
89
|
+
:status => [200, "OK"], :body => body)
|
90
|
+
end
|
metadata
ADDED
@@ -0,0 +1,222 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: blesta
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Justin Mazzi
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: faraday
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.8.4
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.8.4
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: faraday_middleware
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.9.0
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.9.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: json
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.7.3
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.7.3
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 2.10.0
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 2.10.0
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: awesome_print
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 1.0.2
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 1.0.2
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rake
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 0.9.2.2
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.9.2.2
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: vcr
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 2.3.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 2.3.0
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: fakeweb
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ~>
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '1.3'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '1.3'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: activesupport
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ~>
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 3.2.9
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 3.2.9
|
158
|
+
description: A Ruby library for working with the Blesta Resellers API
|
159
|
+
email:
|
160
|
+
- jmazzi@site5.com
|
161
|
+
executables: []
|
162
|
+
extensions: []
|
163
|
+
extra_rdoc_files: []
|
164
|
+
files:
|
165
|
+
- .gitignore
|
166
|
+
- .rspec
|
167
|
+
- .travis.yml
|
168
|
+
- Gemfile
|
169
|
+
- LICENSE
|
170
|
+
- README.md
|
171
|
+
- Rakefile
|
172
|
+
- blesta.gemspec
|
173
|
+
- lib/blesta.rb
|
174
|
+
- lib/blesta/credit.rb
|
175
|
+
- lib/blesta/license.rb
|
176
|
+
- lib/blesta/package.rb
|
177
|
+
- lib/blesta/support/base.rb
|
178
|
+
- lib/blesta/support/config.rb
|
179
|
+
- lib/blesta/support/version.rb
|
180
|
+
- spec/blesta/credit_spec.rb
|
181
|
+
- spec/blesta/license_spec.rb
|
182
|
+
- spec/blesta/package_spec.rb
|
183
|
+
- spec/blesta/support/base_spec.rb
|
184
|
+
- spec/blesta/support/config_spec.rb
|
185
|
+
- spec/spec_helper.rb
|
186
|
+
homepage: ''
|
187
|
+
licenses: []
|
188
|
+
post_install_message:
|
189
|
+
rdoc_options: []
|
190
|
+
require_paths:
|
191
|
+
- lib
|
192
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ! '>='
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0'
|
198
|
+
segments:
|
199
|
+
- 0
|
200
|
+
hash: 1985824838570944957
|
201
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
202
|
+
none: false
|
203
|
+
requirements:
|
204
|
+
- - ! '>='
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
207
|
+
segments:
|
208
|
+
- 0
|
209
|
+
hash: 1985824838570944957
|
210
|
+
requirements: []
|
211
|
+
rubyforge_project: blesta
|
212
|
+
rubygems_version: 1.8.24
|
213
|
+
signing_key:
|
214
|
+
specification_version: 3
|
215
|
+
summary: A Ruby library for working with the Blesta Resellers API
|
216
|
+
test_files:
|
217
|
+
- spec/blesta/credit_spec.rb
|
218
|
+
- spec/blesta/license_spec.rb
|
219
|
+
- spec/blesta/package_spec.rb
|
220
|
+
- spec/blesta/support/base_spec.rb
|
221
|
+
- spec/blesta/support/config_spec.rb
|
222
|
+
- spec/spec_helper.rb
|