invoiced 0.12.0 → 0.13.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 +4 -4
- data/.travis.yml +2 -0
- data/Gemfile +7 -2
- data/README.md +1 -1
- data/invoiced.gemspec +1 -7
- data/lib/invoiced/attachment.rb +1 -0
- data/lib/invoiced/catalog_item.rb +2 -0
- data/lib/invoiced/contact.rb +2 -0
- data/lib/invoiced/credit_note.rb +2 -0
- data/lib/invoiced/customer.rb +2 -0
- data/lib/invoiced/email.rb +1 -0
- data/lib/invoiced/estimate.rb +2 -0
- data/lib/invoiced/event.rb +2 -0
- data/lib/invoiced/file.rb +2 -0
- data/lib/invoiced/invoice.rb +2 -0
- data/lib/invoiced/line_item.rb +2 -0
- data/lib/invoiced/object.rb +9 -3
- data/lib/invoiced/payment_plan.rb +2 -0
- data/lib/invoiced/plan.rb +2 -0
- data/lib/invoiced/subscription.rb +2 -0
- data/lib/invoiced/transaction.rb +2 -0
- data/lib/invoiced/version.rb +1 -1
- data/lib/invoiced.rb +20 -3
- data/test/invoiced/invoiced_test.rb +27 -0
- metadata +5 -75
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af3c9c33d3ab2a41846eec239e659b6a83567f1e
|
4
|
+
data.tar.gz: c27763abfd2ac362595eb44c9ff4afd067485346
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df10f784d4468a435fab99638180f213c30325cc0f40a695809b306bf3ebad5846804eb5a47d1f9a865ddc77ececf0694f634c28ff6fea45b1d102425a8aed7e
|
7
|
+
data.tar.gz: 5a0e7161ac5632520f9cf7c39e4f91ab2a2d39f47a4e240c8144e314fc22dc8a81839864da14a2bcc8e3b8f28d1b48101fe3e959de35eeec79673d0e19c95267
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
gemspec
|
3
3
|
|
4
|
-
gem 'json', '~> 1.8.3'
|
5
4
|
gem 'rest-client', '~> 2.0.0'
|
6
|
-
gem '
|
5
|
+
gem 'jwt', '~> 2.0.0'
|
6
|
+
|
7
|
+
gem 'mocha', '~> 0.13.2', :require => false, :group => :test
|
8
|
+
gem 'shoulda', '~> 3.4.0', :require => false, :group => :test
|
9
|
+
gem 'test-unit', :require => false, :group => :test
|
10
|
+
gem 'rake', :require => false, :group => :test
|
11
|
+
gem 'activesupport', '~> 4.2.9', :require => false, :group => :test
|
7
12
|
gem 'coveralls', :require => false, :group => :test
|
8
13
|
gem 'simplecov', '~> 0.10.0', :require => false, :group => :test
|
9
14
|
gem 'simplecov-console', '~> 0.3.1', :require => false, :group => :test
|
data/README.md
CHANGED
data/invoiced.gemspec
CHANGED
@@ -15,13 +15,7 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.required_ruby_version = '>= 2.0.0'
|
16
16
|
|
17
17
|
s.add_dependency('rest-client', '~> 2.0.0')
|
18
|
-
s.add_dependency('
|
19
|
-
s.add_dependency('activesupport', '~> 4.2.3')
|
20
|
-
|
21
|
-
s.add_development_dependency('mocha', '~> 0.13.2')
|
22
|
-
s.add_development_dependency('shoulda', '~> 3.4.0')
|
23
|
-
s.add_development_dependency('test-unit')
|
24
|
-
s.add_development_dependency('rake')
|
18
|
+
s.add_dependency('jwt', '~> 2.0.0')
|
25
19
|
|
26
20
|
s.files = `git ls-files`.split("\n")
|
27
21
|
s.test_files = `git ls-files -- test/*`.split("\n")
|
data/lib/invoiced/attachment.rb
CHANGED
data/lib/invoiced/contact.rb
CHANGED
data/lib/invoiced/credit_note.rb
CHANGED
data/lib/invoiced/customer.rb
CHANGED
data/lib/invoiced/email.rb
CHANGED
data/lib/invoiced/estimate.rb
CHANGED
data/lib/invoiced/event.rb
CHANGED
data/lib/invoiced/file.rb
CHANGED
data/lib/invoiced/invoice.rb
CHANGED
data/lib/invoiced/line_item.rb
CHANGED
data/lib/invoiced/object.rb
CHANGED
@@ -8,10 +8,8 @@ module Invoiced
|
|
8
8
|
|
9
9
|
def initialize(client, id=nil, values={})
|
10
10
|
@client = client
|
11
|
-
class_name = self.class.name.split('::').last
|
12
11
|
@endpoint_base = ''
|
13
|
-
@endpoint =
|
14
|
-
|
12
|
+
@endpoint = build_endpoint
|
15
13
|
@id = id
|
16
14
|
@values = {}
|
17
15
|
|
@@ -35,6 +33,14 @@ module Invoiced
|
|
35
33
|
@endpoint_base + @endpoint
|
36
34
|
end
|
37
35
|
|
36
|
+
def build_endpoint
|
37
|
+
if self.class.const_defined? "OBJECT_NAME"
|
38
|
+
'/' + self.class::OBJECT_NAME + 's'
|
39
|
+
else
|
40
|
+
'/objects'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
38
44
|
def retrieve(id, params={})
|
39
45
|
if !id
|
40
46
|
raise ArgumentError.new("Missing ID.")
|
data/lib/invoiced/plan.rb
CHANGED
data/lib/invoiced/transaction.rb
CHANGED
data/lib/invoiced/version.rb
CHANGED
data/lib/invoiced.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'rest-client'
|
2
2
|
require 'json'
|
3
3
|
require 'base64'
|
4
|
-
require 'active_support/inflector'
|
5
4
|
|
6
5
|
require 'invoiced/version'
|
7
6
|
require 'invoiced/util'
|
@@ -42,13 +41,14 @@ module Invoiced
|
|
42
41
|
OpenTimeout = 30
|
43
42
|
ReadTimeout = 80
|
44
43
|
|
45
|
-
attr_reader :api_key, :api_url, :sandbox
|
44
|
+
attr_reader :api_key, :api_url, :sandbox, :sso_key
|
46
45
|
attr_reader :CatalogItem, :CreditNote, :Customer, :Estimate, :Event, :File, :Invoice, :Plan, :Subscription, :Transaction
|
47
46
|
|
48
|
-
def initialize(api_key, sandbox=false)
|
47
|
+
def initialize(api_key, sandbox=false, sso_key=false)
|
49
48
|
@api_key = api_key
|
50
49
|
@sandbox = sandbox
|
51
50
|
@api_url = sandbox ? ApiBaseSandbox : ApiBase
|
51
|
+
@sso_key = sso_key
|
52
52
|
|
53
53
|
# Object endpoints
|
54
54
|
@CatalogItem = Invoiced::CatalogItem.new(self)
|
@@ -97,6 +97,23 @@ module Invoiced
|
|
97
97
|
parse(response)
|
98
98
|
end
|
99
99
|
|
100
|
+
def generate_sign_in_token(customerId, ttl)
|
101
|
+
if !@sso_key
|
102
|
+
raise "Please provide a single sign-on key! You can find this value in Settings > Developers > Single Sign-On of the Invoiced application."
|
103
|
+
end
|
104
|
+
|
105
|
+
expires = Time.now + ttl # TTL should be in seconds
|
106
|
+
|
107
|
+
payload = {
|
108
|
+
:sub => customerId,
|
109
|
+
:iss => "Invoiced Ruby/#{Invoiced::VERSION}",
|
110
|
+
:iat => Time.now.to_i,
|
111
|
+
:exp => expires.to_i
|
112
|
+
}
|
113
|
+
|
114
|
+
JWT.encode payload, @sso_key, 'HS256'
|
115
|
+
end
|
116
|
+
|
100
117
|
private
|
101
118
|
|
102
119
|
def buildHeaders(opts)
|
@@ -2,6 +2,7 @@ require 'invoiced'
|
|
2
2
|
require 'test/unit'
|
3
3
|
require 'mocha/setup'
|
4
4
|
require 'shoulda'
|
5
|
+
require 'jwt'
|
5
6
|
|
6
7
|
module Invoiced
|
7
8
|
class InvoicedTest < Test::Unit::TestCase
|
@@ -261,5 +262,31 @@ module Invoiced
|
|
261
262
|
client.request("POST", "/invoices")
|
262
263
|
end
|
263
264
|
end
|
265
|
+
|
266
|
+
should "generate a single sign-on token" do
|
267
|
+
ssoKey = '8baa4dbc338a54bbf7696eef3ee4aa2daadd61bba85fcfe8df96c7cfa227c43'
|
268
|
+
client = Invoiced::Client.new('API_KEY', false, ssoKey)
|
269
|
+
t = Time.now
|
270
|
+
|
271
|
+
token = client.generate_sign_in_token(1234, 3600)
|
272
|
+
|
273
|
+
decrypted = JWT.decode token, ssoKey, true, { :algorithm => 'HS256' }
|
274
|
+
assert_operator decrypted[0]['exp'] - t.to_i - 3600, :<, 3 # this accounts for slow running tests
|
275
|
+
decrypted[0].delete('exp')
|
276
|
+
|
277
|
+
expected = {
|
278
|
+
'iat' => t.to_i,
|
279
|
+
'sub' => 1234,
|
280
|
+
'iss' => 'Invoiced Ruby/'+Invoiced::VERSION
|
281
|
+
}
|
282
|
+
assert_equal(expected, decrypted[0])
|
283
|
+
end
|
284
|
+
|
285
|
+
should "raise an error when generating a single sign-on token with no key" do
|
286
|
+
client = Invoiced::Client.new('test')
|
287
|
+
assert_raise do
|
288
|
+
client.generate_sign_in_token(1234, 3600)
|
289
|
+
end
|
290
|
+
end
|
264
291
|
end
|
265
292
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: invoiced
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jared King
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -25,89 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 2.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: jwt
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 1.8.3
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: activesupport
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 4.2.3
|
33
|
+
version: 2.0.0
|
48
34
|
type: :runtime
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - "~>"
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: mocha
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 0.13.2
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 0.13.2
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: shoulda
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 3.4.0
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 3.4.0
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: test-unit
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rake
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
40
|
+
version: 2.0.0
|
111
41
|
description: Invoiced makes invoicing and recurring billing dead simple
|
112
42
|
email: support@invoiced.com
|
113
43
|
executables: []
|