licencetobill 0.1.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.
- checksums.yaml +7 -0
- data/Gemfile +2 -0
- data/README.md +151 -0
- data/lib/licencetobill/api.rb +89 -0
- data/lib/licencetobill/concerns.rb +19 -0
- data/lib/licencetobill/configuration.rb +8 -0
- data/lib/licencetobill/deal.rb +5 -0
- data/lib/licencetobill/feature.rb +5 -0
- data/lib/licencetobill/helpers.rb +5 -0
- data/lib/licencetobill/manager.rb +13 -0
- data/lib/licencetobill/offer.rb +9 -0
- data/lib/licencetobill/stage.rb +9 -0
- data/lib/licencetobill/user.rb +5 -0
- data/lib/licencetobill/user_address.rb +5 -0
- data/lib/licencetobill.rb +21 -0
- data/spec/api_spec.rb +87 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/utilities.rb +3 -0
- metadata +131 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a6837ba8d900d617642764c5cee1bd3d61df1500
|
4
|
+
data.tar.gz: b14f89bfbdda1fe429d0a4db97159bf06b51c332
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2d819bf718982a5efc27b32b5963c4920e3dc936c26f9c0e0a7a9de9160da8bd0114d6d8bd2ae48ed67b362aa0590dfa42271e5f5cb270ed73b95208522ae5c0
|
7
|
+
data.tar.gz: a649be735af8c2bb3575a763b1c9cbbf07384aa35aa76fa8e74e22ad9192d6b329992bd967d78d6b89492dfdfdff3c9b88aa5ba724eb20aa2aa2106a72c7ff76
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
# LicenceToBill
|
2
|
+
|
3
|
+
A simple Ruby wrapper to easily interact with the [LicenceToBill API](https://api.licencetobill.com/?lcid=12).
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
gem 'licencetobill'
|
9
|
+
```
|
10
|
+
or
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
gem install licencetobill
|
14
|
+
```
|
15
|
+
|
16
|
+
To install the latest dev version
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
gem 'licencetobill', git: "git://github.com/gtroppee/licencetobill.git"
|
20
|
+
```
|
21
|
+
|
22
|
+
## Setup
|
23
|
+
The only thing you need to provide is you LicenceToBill credentials. In the context of a Rails app, the best way to do so is to simply create a initializer for it:
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
# config/initializers/licencetobill.rb
|
27
|
+
LicenceToBill.configure do |config|
|
28
|
+
config.business_key = 'your_business_key'
|
29
|
+
config.agent_key = 'your_agent_key'
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
## Use cases
|
34
|
+
To start using the gem, just proceed like so:
|
35
|
+
|
36
|
+
* Provided your credentials are loaded
|
37
|
+
```ruby
|
38
|
+
@api = LicenceToBill::API.new
|
39
|
+
```
|
40
|
+
|
41
|
+
* Or if you want to load your credentials upon instantiation
|
42
|
+
```ruby
|
43
|
+
# config/initializers/licencetobill.rb
|
44
|
+
@api = LicenceToBill::API.new('your_business_key', 'your_agent_key')
|
45
|
+
```
|
46
|
+
|
47
|
+
Then, simply use the object to interact with the platform:
|
48
|
+
```ruby
|
49
|
+
@offers = @api.get_offers
|
50
|
+
```
|
51
|
+
|
52
|
+
Here is a quick inventory of the methods at your disposal (per resource):
|
53
|
+
|
54
|
+
#### USERS
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
get_users
|
58
|
+
#=> Get all the registered users
|
59
|
+
|
60
|
+
get_user(key_user)
|
61
|
+
#=> Get a single registered user
|
62
|
+
|
63
|
+
get_users_for(key_feature)
|
64
|
+
#=> Get the registered user that have access to a specific feature
|
65
|
+
|
66
|
+
get_billing_address_for(key_user)
|
67
|
+
#=> Get the registered address for a specific user
|
68
|
+
|
69
|
+
register_user(key_user, name_user)
|
70
|
+
#=> Register the user to LicenceToBill.
|
71
|
+
# Note: . LicenceToBill gives you the liberty to give any key you want when you register the user. Just make sure this is and will remain unique for each user.
|
72
|
+
```
|
73
|
+
|
74
|
+
#### OFFERS
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
get_offers(lcid = nil)
|
78
|
+
#=> Get all the offers (language optional)
|
79
|
+
|
80
|
+
get_offers_for(key_user)
|
81
|
+
#=> Get all the offers for a specific user (with a redirection url if you choose to host the offers page directly in your app)
|
82
|
+
|
83
|
+
get_stages
|
84
|
+
#=> Get all the stages for a specific offer (of course you'll need to send this message to an offer object = @offer.get_stages)
|
85
|
+
```
|
86
|
+
|
87
|
+
#### FEATURES
|
88
|
+
```ruby
|
89
|
+
get_features(lcid = nil)
|
90
|
+
#=> Get all the features
|
91
|
+
|
92
|
+
get_features_for(key_user)
|
93
|
+
#=> Get the features a specific user has access to
|
94
|
+
|
95
|
+
get_features_details_for(key_feature, key_user)
|
96
|
+
#=> Get details of a specific feature for a specific user
|
97
|
+
```
|
98
|
+
#### DEALS
|
99
|
+
```ruby
|
100
|
+
get_deals_for(key_user)
|
101
|
+
#=> Get the deals of a specific user
|
102
|
+
|
103
|
+
add_trial_for(key_user)
|
104
|
+
#=> Create a trial offer for a specific user
|
105
|
+
```
|
106
|
+
|
107
|
+
#### STAGES
|
108
|
+
```ruby
|
109
|
+
get_features
|
110
|
+
#=> Get the features of a specific stage (of course you'll need to send this message to a stage object = @stage.get_features)
|
111
|
+
```
|
112
|
+
**Note that if there is not resource returned, the gem will return an empty array []**
|
113
|
+
|
114
|
+
Of course, you'll find all the information you need [here](https://api.licencetobill.com/?lcid=12).
|
115
|
+
|
116
|
+
## Customisation
|
117
|
+
This gem is only aiming at making it easier to read and write data from and to LicenceToBill, but if you want more flexibility/logic to it, you can easily add extra behaviour, like so:
|
118
|
+
|
119
|
+
```ruby
|
120
|
+
require 'licencetobill'
|
121
|
+
|
122
|
+
LicenceToBill::Deal.class_eval do
|
123
|
+
|
124
|
+
# Make the end date independent from the fact that the deal can be renewed or not
|
125
|
+
def end_date
|
126
|
+
if respond_to?(:date_renewal)
|
127
|
+
date_renewal
|
128
|
+
elsif respond_to?(:date_end)
|
129
|
+
date_end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def price
|
134
|
+
self.amount.to_i / 100
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
```
|
139
|
+
All LicenceToBill resources have their own corresponding classes so you can basically add any behaviour you want for your app. Just FYI, the current resources are:
|
140
|
+
|
141
|
+
* Users
|
142
|
+
* Offers
|
143
|
+
* Features
|
144
|
+
* Stages
|
145
|
+
* Deals
|
146
|
+
* UserAddress (this one is not a resource per say, but being able to customise it as well might come in handy)
|
147
|
+
|
148
|
+
|
149
|
+
## Contribution
|
150
|
+
Contribution are more than welcome, be sure to add relevant unit tests and pass them all before submitting any code.
|
151
|
+
|
@@ -0,0 +1,89 @@
|
|
1
|
+
module LicenceToBill
|
2
|
+
class << self
|
3
|
+
attr_accessor :configuration
|
4
|
+
end
|
5
|
+
|
6
|
+
class API
|
7
|
+
include LicenceToBill::Helpers
|
8
|
+
attr_accessor :token, :base_uri
|
9
|
+
|
10
|
+
def initialize(business_key = LicenceToBill.configuration.business_key, agent_key = LicenceToBill.configuration.agent_key)
|
11
|
+
@business_key = business_key
|
12
|
+
@agent_key = agent_key
|
13
|
+
@token = set_token
|
14
|
+
|
15
|
+
# DEFAULTS
|
16
|
+
@base_uri = 'https://api.licencetobill.com/v2'
|
17
|
+
end
|
18
|
+
|
19
|
+
# USERS
|
20
|
+
def get_users
|
21
|
+
get_collection(LicenceToBill::User, call_to("/users"))
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_user(key_user)
|
25
|
+
get_collection(LicenceToBill::User, call_to("/users/#{key_user}"))
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_users_for(key_feature)
|
29
|
+
get_collection(LicenceToBill::User, call_to("/users/features/#{key_feature}"))
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_billing_address_for(key_user)
|
33
|
+
get_collection(LicenceToBill::UserAddress, call_to("/address/users/#{key_user}"))
|
34
|
+
end
|
35
|
+
|
36
|
+
def register_user(key_user, name_user)
|
37
|
+
call_to("/users/#{key_user}", :post, { key_user: "#{key_user}", name_user: "#{name_user}" })
|
38
|
+
end
|
39
|
+
|
40
|
+
# FEATURES
|
41
|
+
def get_features(lcid = nil)
|
42
|
+
get_collection(LicenceToBill::Feature, call_to("/features/#{lcid}"))
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_features_for(key_user)
|
46
|
+
get_collection(LicenceToBill::Feature, call_to("/features/users/#{key_user}"))
|
47
|
+
end
|
48
|
+
|
49
|
+
def get_features_details_for(key_feature, key_user)
|
50
|
+
get_collection(LicenceToBill::Feature, call_to("/features/#{key_feature}/users/#{key_user}"))
|
51
|
+
end
|
52
|
+
|
53
|
+
# OFFERS
|
54
|
+
def get_offers(lcid = nil)
|
55
|
+
get_collection(LicenceToBill::Offer, call_to("/offers/#{lcid}"))
|
56
|
+
end
|
57
|
+
|
58
|
+
def get_offers_for(key_user)
|
59
|
+
get_collection(LicenceToBill::Offer, call_to("/offers/users/#{key_user}"))
|
60
|
+
end
|
61
|
+
|
62
|
+
# DEALS
|
63
|
+
def get_deals_for(key_user)
|
64
|
+
get_collection(LicenceToBill::Deal, call_to("/deals/users/#{key_user}"))
|
65
|
+
end
|
66
|
+
|
67
|
+
def add_trial_for(key_user)
|
68
|
+
call_to("/trial/#{key_user}", :post)
|
69
|
+
end
|
70
|
+
|
71
|
+
protected
|
72
|
+
def set_token
|
73
|
+
token = Base64.encode64("#{@business_key}:#{@agent_key}").delete!("\n")
|
74
|
+
"Basic #{token}"
|
75
|
+
end
|
76
|
+
|
77
|
+
def call_to(endpoint, method = :get, params = {})
|
78
|
+
HTTParty.send(method,
|
79
|
+
"#{@base_uri}#{endpoint}",
|
80
|
+
headers: { "Authorization" => @token, 'Content-Type' => "application/json" },
|
81
|
+
body: params.to_json)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.configure
|
86
|
+
self.configuration ||= Configuration.new
|
87
|
+
yield(configuration)
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module LicenceToBill
|
2
|
+
module Concerns
|
3
|
+
|
4
|
+
include LicenceToBill::Helpers
|
5
|
+
|
6
|
+
def initialize(data_source)
|
7
|
+
@data_source = data_source
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing(method_name)
|
11
|
+
super unless @data_source.has_key?("#{method_name}")
|
12
|
+
@data_source["#{method_name}"]
|
13
|
+
end
|
14
|
+
|
15
|
+
def respond_to_missing?(method_name, include_private = false)
|
16
|
+
@data_source.has_key?("#{method_name}") || super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module LicenceToBill
|
2
|
+
class Manager
|
3
|
+
def self.return_collection(klass, params)
|
4
|
+
if params.kind_of?(Array)
|
5
|
+
params.map { |hash| klass.new(hash) }
|
6
|
+
else
|
7
|
+
return [] if params.parsed_response['Status'] === 404
|
8
|
+
params = JSON.parse(params.body)
|
9
|
+
[klass.new(params)]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module LicenceToBill
|
2
|
+
def self.root
|
3
|
+
File.dirname __dir__
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'json'
|
8
|
+
require 'httparty'
|
9
|
+
require 'vcr'
|
10
|
+
|
11
|
+
require_relative 'licencetobill/configuration'
|
12
|
+
require_relative 'licencetobill/helpers'
|
13
|
+
require_relative 'licencetobill/api'
|
14
|
+
require_relative 'licencetobill/concerns'
|
15
|
+
require_relative 'licencetobill/deal'
|
16
|
+
require_relative 'licencetobill/feature'
|
17
|
+
require_relative 'licencetobill/manager'
|
18
|
+
require_relative 'licencetobill/offer'
|
19
|
+
require_relative 'licencetobill/stage'
|
20
|
+
require_relative 'licencetobill/user'
|
21
|
+
require_relative 'licencetobill/user_address'
|
data/spec/api_spec.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LicenceToBill::API do
|
4
|
+
|
5
|
+
before { @api = LicenceToBill::API.new }
|
6
|
+
|
7
|
+
describe 'Users' do
|
8
|
+
it '#get_users', :vcr do
|
9
|
+
users = @api.get_users
|
10
|
+
user = users.first
|
11
|
+
expect(users).to be_a(Array)
|
12
|
+
expect(user).to be_a(LicenceToBill::User) if user
|
13
|
+
end
|
14
|
+
|
15
|
+
it '#get_user', :vcr do
|
16
|
+
user = @api.get_user(1)
|
17
|
+
expect(user).to be_a(LicenceToBill::User) if user
|
18
|
+
end
|
19
|
+
|
20
|
+
it '#get_user_for', :vcr do
|
21
|
+
key_feature = @api.get_features.first.key_feature
|
22
|
+
users = @api.get_users_for(key_feature)
|
23
|
+
user = users.first
|
24
|
+
expect(users).to be_a(Array)
|
25
|
+
expect(user).to be_a(LicenceToBill::User) if user
|
26
|
+
end
|
27
|
+
|
28
|
+
it '#get_billing_address_for', :vcr do
|
29
|
+
user = @api.get_users.select{|u| u.key_user == '1'}.first
|
30
|
+
address = @api.get_billing_address_for(user.key_user)
|
31
|
+
expect(address).to be_a(LicenceToBill::UserAddress) if address
|
32
|
+
expect(user.name_user).to eq(address.fullname) if address
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe 'Features' do
|
37
|
+
it '#get_features', :vcr do
|
38
|
+
features = @api.get_features
|
39
|
+
feature = features.first
|
40
|
+
expect(features).to be_a(Array)
|
41
|
+
expect(feature).to be_a(LicenceToBill::Feature) if feature
|
42
|
+
end
|
43
|
+
|
44
|
+
it '#get_features_for', :vcr do
|
45
|
+
user = @api.get_user(1)
|
46
|
+
features = @api.get_features_for(user.key_user)
|
47
|
+
feature = features.first
|
48
|
+
expect(features).to be_a(Array)
|
49
|
+
expect(feature).to be_a(LicenceToBill::Feature) if feature
|
50
|
+
end
|
51
|
+
|
52
|
+
it '#get_features_details_for', :vcr do
|
53
|
+
user = @api.get_user(1)
|
54
|
+
features = @api.get_features
|
55
|
+
feature = features.first
|
56
|
+
restriction = @api.get_features_details_for(feature.key_feature, user.key_user)
|
57
|
+
expect(features).to be_a(Array)
|
58
|
+
expect(feature).to be_a(LicenceToBill::Feature) if feature
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe 'Offers' do
|
63
|
+
it '#get_offers', :vcr do
|
64
|
+
offers = @api.get_offers
|
65
|
+
offer = offers.first
|
66
|
+
expect(offers).to be_a(Array)
|
67
|
+
expect(offer).to be_a(LicenceToBill::Offer) if offer
|
68
|
+
end
|
69
|
+
|
70
|
+
it '#get_offers_for', :vcr do
|
71
|
+
user = @api.get_user(1)
|
72
|
+
offers = @api.get_offers_for(user.key_user)
|
73
|
+
offer = offers.first
|
74
|
+
expect(offers).to be_a(Array)
|
75
|
+
expect(offer).to be_a(LicenceToBill::Offer) if offer
|
76
|
+
end
|
77
|
+
|
78
|
+
it '#features', :vcr do
|
79
|
+
user = @api.get_user(1)
|
80
|
+
offers = @api.get_offers_for(user.key_user)
|
81
|
+
offer = offers[1]
|
82
|
+
expect(offer.features).to be_a(Array)
|
83
|
+
expect(offer.features.first).to be_a(LicenceToBill::Feature) if offer
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'utilities'
|
3
|
+
require 'webmock/rspec'
|
4
|
+
require 'licencetobill' # and any other gems you need
|
5
|
+
Bundler.setup
|
6
|
+
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.around(:each, :vcr) do |example|
|
9
|
+
name = example.metadata[:full_description].split(/\s+/)[-1]
|
10
|
+
VCR.use_cassette(name) { example.call }
|
11
|
+
end
|
12
|
+
end
|
data/spec/utilities.rb
ADDED
metadata
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: licencetobill
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Guillaume Troppée
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: httparty
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: vcr
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
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: addressable
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: webmock
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description:
|
84
|
+
email: gtroppee@gmail.com
|
85
|
+
executables: []
|
86
|
+
extensions: []
|
87
|
+
extra_rdoc_files: []
|
88
|
+
files:
|
89
|
+
- README.md
|
90
|
+
- Gemfile
|
91
|
+
- spec/api_spec.rb
|
92
|
+
- spec/spec_helper.rb
|
93
|
+
- spec/utilities.rb
|
94
|
+
- lib/licencetobill/api.rb
|
95
|
+
- lib/licencetobill/concerns.rb
|
96
|
+
- lib/licencetobill/configuration.rb
|
97
|
+
- lib/licencetobill/deal.rb
|
98
|
+
- lib/licencetobill/feature.rb
|
99
|
+
- lib/licencetobill/helpers.rb
|
100
|
+
- lib/licencetobill/manager.rb
|
101
|
+
- lib/licencetobill/offer.rb
|
102
|
+
- lib/licencetobill/stage.rb
|
103
|
+
- lib/licencetobill/user.rb
|
104
|
+
- lib/licencetobill/user_address.rb
|
105
|
+
- lib/licencetobill.rb
|
106
|
+
homepage: http://rubygems.org/gems/licencetobill
|
107
|
+
licenses:
|
108
|
+
- MIT
|
109
|
+
metadata: {}
|
110
|
+
post_install_message:
|
111
|
+
rdoc_options: []
|
112
|
+
require_paths:
|
113
|
+
- lib
|
114
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
requirements: []
|
125
|
+
rubyforge_project:
|
126
|
+
rubygems_version: 2.1.11
|
127
|
+
signing_key:
|
128
|
+
specification_version: 4
|
129
|
+
summary: A simple ruby wrapper for the LicenceToBill API
|
130
|
+
test_files: []
|
131
|
+
has_rdoc:
|