atech-billy 1.0.16 → 1.0.18

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5d1380ec90fdc320c57ae8d837e38900aa168cfc
4
+ data.tar.gz: 2a9f3d043758c9a0b93f7bc90fe2c2125bdd8ada
5
+ SHA512:
6
+ metadata.gz: 0d42af1d0b809a1351829040ba62da7e0f75953e1c33ae2b0b0e93e1f062411d5548416e04bbe526c75c4504872c4b5993a3c00d21abe771521be171e5394716
7
+ data.tar.gz: 1f063a4c6a50dca553716874fad25abf7d57127406294e4600d20ddf64703e465bc24d87c1a889dda5e3bc4dd61659b474f5e38a5ea01b0d03dccde5c9b30390
@@ -10,24 +10,28 @@ require 'billy/service'
10
10
  require 'billy/signup_token'
11
11
  require 'billy/invoice'
12
12
  require 'billy/product'
13
+ require 'billy/addon'
13
14
  require 'billy/package'
14
15
  require 'billy/version'
16
+ require 'billy/card'
17
+ require 'billy/coupon'
18
+ require 'billy/country'
15
19
 
16
20
  module Billy
17
-
21
+
18
22
  class << self
19
-
23
+
20
24
  ## Application name & key
21
25
  attr_accessor :product, :product_key
22
-
26
+
23
27
  ## Endpoint to send domains to
24
28
  attr_writer :host
25
-
29
+
26
30
  def host
27
31
  @host ||= 'https://billing.atechmedia.com'
28
32
  end
29
33
  end
30
-
34
+
31
35
  class Error < StandardError; end
32
36
  module Errors
33
37
  class ServiceUnavailable < Error; end
@@ -36,5 +40,5 @@ module Billy
36
40
  class CommunicationError < Error; end
37
41
  class ValidationError < Error; end
38
42
  end
39
-
43
+
40
44
  end
@@ -0,0 +1,10 @@
1
+ module Billy
2
+ class Addon < BaseModel
3
+
4
+ def self.find(permalink)
5
+ attributes = Billy::Request.request('product/addon', :permalink => permalink)
6
+ attributes.is_a?(Hash) ? self.new(attributes) : nil
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,24 @@
1
+ module Billy
2
+ class Card < BaseModel
3
+
4
+ ## Get a paginated list of all cards for a Billy service
5
+ def list
6
+ Billy::Request.request('cards/list', :service => @attributes['id'])
7
+ end
8
+
9
+ def self.add_stripe_card(service, stripe_token, ip_address, options = {})
10
+ params = {}
11
+ params[:service] = service
12
+ params[:token] = stripe_token
13
+ params[:ip_address] = ip_address
14
+ params[:invoice] = options[:invoice_to_pay] if options[:invoice_to_pay]
15
+ Billy::Request.request('cards/add_stripe_card', params)
16
+ end
17
+
18
+ def self.find(code)
19
+ attributes = Billy::Request.request('coupons/info', :code => code)
20
+ attributes.is_a?(Hash) ? self.new(attributes) : nil
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,8 @@
1
+ module Billy
2
+ class Country < BaseModel
3
+ ## Get a paginated list of all valid countries for a billy service
4
+ def self.list
5
+ Billy::Request.request('countries/list')
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,10 @@
1
+ module Billy
2
+ class Coupon < BaseModel
3
+
4
+ def self.find(code)
5
+ attributes = Billy::Request.request('coupons/info', :code => code)
6
+ attributes.is_a?(Hash) ? self.new(attributes) : nil
7
+ end
8
+
9
+ end
10
+ end
@@ -1,26 +1,26 @@
1
1
  module Billy
2
2
  class Invoice < BaseModel
3
-
3
+
4
4
  def self.find_for_identity(ati_key)
5
5
  Billy::Request.request('invoices/list_for_identity', :identity => ati_key).map { |p| self.new(p) }
6
6
  end
7
-
7
+
8
8
  def add_line(params)
9
9
  attributes = Billy::Request.request('invoices/add_line', :service => @attributes['service_id'], :invoice => @attributes['number'], :line => params)
10
10
  attributes.is_a?(Hash) ? @attributes = attributes : false
11
11
  end
12
-
12
+
13
13
  def delete_line(id)
14
14
  attributes = Billy::Request.request('invoices/delete_line', :service => @attributes['service_id'], :invoice => @attributes['number'], :line => id)
15
15
  attributes.is_a?(Hash) ? @attributes = attributes : false
16
16
  end
17
-
17
+
18
18
  def finalise!
19
19
  attributes = Billy::Request.request('invoices/finalise', :service => @attributes['service_id'], :invoice => @attributes['number'])
20
20
  @attributes = attributes
21
21
  true
22
22
  end
23
-
23
+
24
24
  def mark_as_paid(method, reference, verifier = nil)
25
25
  options = {:service => @attributes['service_id'], :invoice => @attributes['number'], :payment_method => method, :payment_reference => reference}
26
26
  options[:payment_verifier] = verifier if verifier
@@ -28,15 +28,27 @@ module Billy
28
28
  @attributes = attributes
29
29
  true
30
30
  end
31
-
31
+
32
32
  def delete
33
33
  Billy::Request.request('invoices/delete', :service => @attributes['service_id'], :invoice => @attributes['number'])
34
34
  end
35
-
35
+
36
36
  def update(properties)
37
37
  @attributes = Billy::Request.request('invoices/update', :service => @attributes['service_id'], :invoice => @attributes['number'], :properties => properties)
38
38
  true
39
39
  end
40
-
40
+
41
+ def pay_with_card(card_id)
42
+ if Billy::Request.request('cards/pay_invoice', :service => @attributes['service_id'], :invoice => @attributes['number'], :card => card_id)
43
+ true
44
+ else
45
+ false
46
+ end
47
+ end
48
+
49
+ def pdf
50
+ Billy::Request.request('invoices/pdf', :service => @attributes['service_id'], :invoice => @attributes['number'])
51
+ end
52
+
41
53
  end
42
54
  end
@@ -7,8 +7,12 @@ module Billy
7
7
  end
8
8
 
9
9
  def packages
10
- @packages ||= Billy::Request.request('product/packages').map {|package| Billy::Package.new(package) }
10
+ @packages ||= Billy::Request.request('product/packages').map { |package| Billy::Package.new(package) }
11
+ end
12
+
13
+ def addons
14
+ @addons ||= Billy::Request.request('product/addons').map { |addon| Billy::Addon.new(addon) }
11
15
  end
12
16
 
13
17
  end
14
- end
18
+ end
@@ -1,28 +1,28 @@
1
1
  module Billy
2
2
  class Request
3
-
3
+
4
4
  def self.request(path, data = {})
5
5
  req = self.new(path, :post)
6
6
  req.data = data
7
7
  req.make && req.success? ? req.output : false
8
8
  end
9
-
9
+
10
10
  attr_reader :path, :method, :client
11
11
  attr_accessor :data
12
-
12
+
13
13
  def initialize(path, method = :get)
14
14
  @path = path
15
15
  @method = method
16
16
  end
17
-
17
+
18
18
  def success?
19
19
  @success || false
20
20
  end
21
-
21
+
22
22
  def output
23
23
  @output || nil
24
24
  end
25
-
25
+
26
26
  def make
27
27
  uri = URI.parse([Billy.host, "api/v1", @path].join('/'))
28
28
  http_request = http_class.new(uri.request_uri)
@@ -30,14 +30,13 @@ module Billy
30
30
  http_request.add_field("X-Billy-Product", Billy.product)
31
31
  http_request.add_field("X-Billy-Key", Billy.product_key)
32
32
  http_request.content_type = 'application/json'
33
-
33
+
34
34
  http = Net::HTTP.new(uri.host, uri.port)
35
-
35
+
36
36
  if uri.scheme == 'https'
37
37
  http.use_ssl = true
38
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
39
38
  end
40
-
39
+
41
40
  http_result = http.request(http_request, @data.to_json)
42
41
  if http_result.body == 'true'
43
42
  @output = true
@@ -58,16 +57,16 @@ module Billy
58
57
  raise Billy::Errors::NotFound, json['error']
59
58
  when Net::HTTPClientError
60
59
  json = JSON.parse(http_result.body)
61
- raise Billy::Errors::ValidationError, json.to_s
60
+ raise Billy::Errors::ValidationError, JSON.dump(json)
62
61
  else
63
62
  raise Billy::Errors::CommunicationError, http_result.body
64
63
  end
65
64
  self
66
65
  end
67
-
66
+
68
67
  private
69
-
70
- def http_class
68
+
69
+ def http_class
71
70
  case @method
72
71
  when :post then Net::HTTP::Post
73
72
  when :put then Net::HTTP::Put
@@ -76,6 +75,6 @@ module Billy
76
75
  Net::HTTP::Get
77
76
  end
78
77
  end
79
-
78
+
80
79
  end
81
- end
80
+ end
@@ -1,8 +1,8 @@
1
1
  module Billy
2
2
  class Service < BaseModel
3
-
3
+
4
4
  ## Get a paginated list of all Billy services
5
- def list
5
+ def self.list
6
6
  Billy::Request.request('services/list')
7
7
  end
8
8
 
@@ -11,21 +11,21 @@ module Billy
11
11
  @attributes = Billy::Request.request('services/update', :service => @attributes['id'],:properties => properties)
12
12
  true
13
13
  end
14
-
14
+
15
15
  ## Create a new login session and return a URL which can be used to log the user
16
16
  ## into the billing application
17
17
  def create_session(start_path = nil, return_url = nil, auto_return_after_payment = false)
18
18
  session = Billy::Request.request('services/create_session', :id => @attributes['id'], :start_path => start_path, :return_url => return_url, :auto_return_after_payment => auto_return_after_payment)
19
19
  session ? [Billy.host, 'start', session['token']].join('/') : false
20
20
  end
21
-
21
+
22
22
  ## Create a new signup token for another application
23
23
  def create_signup_token(product, package)
24
24
  return false if product.nil? || package.nil?
25
25
  token = Billy::Request.request('services/create_signup_token', :id => @attributes['id'], :product => product, :package => package)
26
26
  token ? token['url'] : false
27
27
  end
28
-
28
+
29
29
  ## Change the user associated with this service to the given aTech identity key
30
30
  def change_user(atech_identity_key)
31
31
  request = Billy::Request.request('services/change_user', :id => @attributes['id'], :atech_identity_key => atech_identity_key)
@@ -36,7 +36,7 @@ module Billy
36
36
  return false
37
37
  end
38
38
  end
39
-
39
+
40
40
  ## Change the label associated with a service
41
41
  def change_label(new_label)
42
42
  request = Billy::Request.request('services/change_label', :id => @attributes['id'], :label => new_label)
@@ -47,38 +47,141 @@ module Billy
47
47
  return false
48
48
  end
49
49
  end
50
-
50
+
51
+ def change_package(new_package)
52
+ request = Billy::Request.request('services/change_package', :id => @attributes['id'], :package => new_package)
53
+ if request
54
+ @attributes = request['service']
55
+
56
+ return Billy::Invoice.new(request['invoice']) if request['invoice']
57
+ true
58
+ else
59
+ false
60
+ end
61
+ end
62
+
63
+ def change_addon(addon_permalink, quantity)
64
+ request = Billy::Request.request('services/change_addon', :id => @attributes['id'], :addon => addon_permalink, :quantity => quantity)
65
+
66
+ if request
67
+ @attributes = request['service']
68
+ true
69
+ else
70
+ false
71
+ end
72
+ end
73
+
74
+ def apply_coupon(code)
75
+ if Billy::Request.request('services/apply_coupon', :id => @attributes['id'], :code => code)
76
+ return true
77
+ else
78
+ return false
79
+ end
80
+ end
81
+
82
+ def cancel(cancellation_properties = {})
83
+ if Billy::Request.request('services/cancel', cancellation_properties.merge(:id => @attributes['id']))
84
+ true
85
+ else
86
+ false
87
+ end
88
+ end
89
+
90
+ def uncancel
91
+ if Billy::Request.request('services/uncancel', :id => @attributes['id'])
92
+ true
93
+ else
94
+ false
95
+ end
96
+ end
97
+
98
+ def auto_cancel(reason)
99
+ request = Billy::Request.request('services/auto_cancel', :id => @attributes['id'], :cancellation_reason => reason)
100
+ if request
101
+ @attributes = request['service']
102
+ true
103
+ else
104
+ false
105
+ end
106
+ end
107
+
51
108
  ## Create a new invoice for the service and return the new invoice object
52
109
  def create_invoice(options = {})
53
110
  attributes = Billy::Request.request('invoices/create', :service => @attributes['id'], :invoice => options)
54
111
  attributes.is_a?(Hash) ? Billy::Invoice.new(attributes) : nil
55
112
  end
56
-
113
+
114
+ ## Return all the invoices for this service
115
+ def invoices
116
+ list = Billy::Request.request('invoices/list', :service => @attributes['id'])
117
+ list.is_a?(Array) ? list.map { |i| Billy::Invoice.new(i) } : []
118
+ end
119
+
57
120
  ## Return the invoice for this service
58
121
  def invoice(number)
59
122
  attributes = Billy::Request.request('invoices/info', :invoice => number, :service => @attributes['id'])
60
123
  attributes.is_a?(Hash) ? Billy::Invoice.new(attributes) : nil
61
124
  end
62
-
125
+
126
+ def pay_invoice(invoice, card)
127
+ if Billy::Request.request('cards/pay_invoice', :service => @attributes['id'], :invoice => invoice, :card => card)
128
+ return true
129
+ else
130
+ return false
131
+ end
132
+ end
133
+
134
+ def cards
135
+ @cards ||= Billy::Request.request('cards/list', :service => @attributes['id'])
136
+ end
137
+
138
+ def default_card
139
+ cards.select { |c| c['default'] == true }.first
140
+ end
141
+
142
+ def add_stripe_card(*args)
143
+ Billy::Card.add_stripe_card(@attributes['id'], *args)
144
+ end
145
+
146
+ def begin_subscription
147
+ req = Billy::Request.request('services/begin_subscription', :id => @attributes['id'])
148
+ req.is_a?(Hash) ? Billy::Invoice.new(req) : nil
149
+ end
150
+
151
+ def reactivate_subscription
152
+ req = Billy::Request.request('services/reactivate_subscription', :id => @attributes['id'])
153
+ req.is_a?(Hash) ? Billy::Invoice.new(req) : nil
154
+ end
155
+
156
+ def immediate_payment(quantity)
157
+ req = Billy::Request.request('services/immediate_payment', :id => @attributes['id'], :quantity => quantity)
158
+ req.is_a?(Hash) ? Billy::Invoice.new(req) : nil
159
+ end
160
+
63
161
  def address?
64
162
  return false if self.address.first.nil? || self.address.last.nil?
65
163
  return true
66
164
  end
67
-
165
+
166
+ def add_newsletter_subscriber(email_address, first_name, consent_type)
167
+ req = Billy::Request.request('services/add_newsletter_subscriber', :id => @attributes['id'], :email_address => email_address, :first_name => first_name, :consent_type => consent_type)
168
+ req ? true : false
169
+ end
170
+
68
171
  def self.find(field, data)
69
172
  attributes = Billy::Request.request('services/info', :field => field, :data => data)
70
173
  attributes.is_a?(Hash) ? self.new(attributes) : nil
71
174
  end
72
-
175
+
73
176
  def self.find_for_identity(ati_key)
74
177
  Billy::Request.request('services/list_for_identity', :atech_identity_key => ati_key).map { |p| self.new(p) }
75
178
  end
76
-
179
+
77
180
  def self.create(atech_identity, service)
78
181
  attributes = Billy::Request.request('services/create', :service => service, :atech_identity_key => atech_identity)
79
182
  attributes.is_a?(Hash) ? self.new(attributes) : nil
80
183
  end
81
-
184
+
82
185
  def self.validate_label(label)
83
186
  result = Billy::Request.request('services/validate_label', :label => label)
84
187
  if result.is_a?(Hash)
@@ -87,6 +190,9 @@ module Billy
87
190
  false
88
191
  end
89
192
  end
90
-
193
+
194
+ def add_log_entry(message)
195
+ Billy::Request.request('services/add_log_entry', :id => @attributes['id'], :message => message)
196
+ end
91
197
  end
92
198
  end
@@ -1,3 +1,3 @@
1
1
  module Billy
2
- VERSION = '1.0.16'
2
+ VERSION = '1.0.18'
3
3
  end
metadata CHANGED
@@ -1,30 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atech-billy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.16
5
- prerelease:
4
+ version: 1.0.18
6
5
  platform: ruby
7
6
  authors:
8
7
  - Adam Cooke
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-05-07 00:00:00.000000000 Z
11
+ date: 2018-05-21 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: basic_ssl
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  description:
@@ -34,7 +31,11 @@ extensions: []
34
31
  extra_rdoc_files: []
35
32
  files:
36
33
  - lib/billy.rb
34
+ - lib/billy/addon.rb
37
35
  - lib/billy/base_model.rb
36
+ - lib/billy/card.rb
37
+ - lib/billy/country.rb
38
+ - lib/billy/coupon.rb
38
39
  - lib/billy/invoice.rb
39
40
  - lib/billy/package.rb
40
41
  - lib/billy/product.rb
@@ -44,27 +45,25 @@ files:
44
45
  - lib/billy/version.rb
45
46
  homepage: http://atechmedia.com
46
47
  licenses: []
48
+ metadata: {}
47
49
  post_install_message:
48
50
  rdoc_options: []
49
51
  require_paths:
50
52
  - lib
51
53
  required_ruby_version: !ruby/object:Gem::Requirement
52
- none: false
53
54
  requirements:
54
- - - ! '>='
55
+ - - ">="
55
56
  - !ruby/object:Gem::Version
56
57
  version: '0'
57
58
  required_rubygems_version: !ruby/object:Gem::Requirement
58
- none: false
59
59
  requirements:
60
- - - ! '>='
60
+ - - ">="
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0'
63
63
  requirements: []
64
64
  rubyforge_project:
65
- rubygems_version: 1.8.23.2
65
+ rubygems_version: 2.5.2.1
66
66
  signing_key:
67
- specification_version: 3
67
+ specification_version: 4
68
68
  summary: Easy to use client library for Billy
69
69
  test_files: []
70
- has_rdoc: false