lob 1.0.2
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/.gitignore +19 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +315 -0
- data/Rakefile +27 -0
- data/lib/lob/lob_error.rb +4 -0
- data/lib/lob/v1/address.rb +42 -0
- data/lib/lob/v1/job.rb +40 -0
- data/lib/lob/v1/object.rb +34 -0
- data/lib/lob/v1/packaging.rb +21 -0
- data/lib/lob/v1/postcard.rb +39 -0
- data/lib/lob/v1/resource.rb +63 -0
- data/lib/lob/v1/service.rb +21 -0
- data/lib/lob/v1/setting.rb +25 -0
- data/lib/lob/version.rb +3 -0
- data/lib/lob.rb +68 -0
- data/lob.gemspec +27 -0
- data/spec/lob/v1/address_spec.rb +79 -0
- data/spec/lob/v1/job_spec.rb +117 -0
- data/spec/lob/v1/object_spec.rb +93 -0
- data/spec/lob/v1/packaging_spec.rb +16 -0
- data/spec/lob/v1/postcard_spec.rb +128 -0
- data/spec/lob/v1/resource_spec.rb +50 -0
- data/spec/lob/v1/service_spec.rb +16 -0
- data/spec/lob/v1/setting_spec.rb +29 -0
- data/spec/lob_spec.rb +34 -0
- data/spec/spec_helper.rb +16 -0
- metadata +151 -0
data/lib/lob.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
require "rest-client"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
require "lob/lob_error"
|
5
|
+
require "lob/v1/resource"
|
6
|
+
require "lob/v1/address"
|
7
|
+
require "lob/v1/job"
|
8
|
+
require "lob/v1/object"
|
9
|
+
require "lob/v1/packaging"
|
10
|
+
require "lob/v1/postcard"
|
11
|
+
require "lob/v1/service"
|
12
|
+
require "lob/v1/setting"
|
13
|
+
|
14
|
+
|
15
|
+
module Lob
|
16
|
+
|
17
|
+
class << self
|
18
|
+
attr_accessor :api_key,
|
19
|
+
:api_version,
|
20
|
+
:protocol,
|
21
|
+
:api_host
|
22
|
+
|
23
|
+
def configure
|
24
|
+
yield self
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
alias :config :configure
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def self.require_options(options, *keys)
|
33
|
+
keys.each do |key|
|
34
|
+
raise ArgumentError.new(":#{key} is required") unless options.key?(key)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
def self.submit(method, url, parameters={})
|
40
|
+
parameters = {:params => parameters} if method == :get
|
41
|
+
JSON(RestClient.send(method, url, parameters))
|
42
|
+
rescue => e
|
43
|
+
error_message = nil
|
44
|
+
raise e unless e.respond_to? :http_body
|
45
|
+
begin
|
46
|
+
error_message = JSON(e.http_body)["errors"].first.values.first
|
47
|
+
rescue
|
48
|
+
raise e
|
49
|
+
end
|
50
|
+
raise Lob::Error.new(error_message)
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
def Lob(options={})
|
57
|
+
options[:api_host] ||= Lob.api_host || "api.lob.com"
|
58
|
+
options[:protocol] ||= Lob.protocol || "https"
|
59
|
+
options[:api_version] ||= Lob.api_version || "v1"
|
60
|
+
options[:api_key] ||= Lob.api_key
|
61
|
+
|
62
|
+
unless options[:api_key]
|
63
|
+
raise ArgumentError.new(":api_key is a required argument to initialize Lob")
|
64
|
+
end
|
65
|
+
|
66
|
+
#TODO check if the version exists first
|
67
|
+
Lob.const_get("#{options[:api_version].capitalize}::Resource").new(options)
|
68
|
+
end
|
data/lob.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "lob"
|
8
|
+
spec.version = "1.0.2"
|
9
|
+
spec.authors = ["Akash Manohar J"]
|
10
|
+
spec.email = ["akash@akash.im"]
|
11
|
+
spec.description = %q{Lob API Ruby wrapper}
|
12
|
+
spec.summary = %q{Ruby wrapper for Lob.com API with ActiveRecord-style syntax}
|
13
|
+
spec.homepage = "https://github.com/lob/lob-ruby"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "rest-client", ">= 0"
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
24
|
+
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "vcr"
|
26
|
+
spec.add_development_dependency "webmock"
|
27
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lob::V1::Address do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@sample_params = {
|
7
|
+
name: "Test",
|
8
|
+
email: "test@test.com",
|
9
|
+
address_line1: "220 WILLIAM T MORRISSEY BLVD",
|
10
|
+
city: "Boston",
|
11
|
+
state: "MA",
|
12
|
+
country: "USA",
|
13
|
+
zip: 02125
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
subject { Lob(api_key: ENV["LOB_API_KEY"], api_version: "v1") }
|
18
|
+
|
19
|
+
describe "verify" do
|
20
|
+
it "should verify an address" do
|
21
|
+
VCR.use_cassette('verify_address') do
|
22
|
+
result = subject.addresses.verify(
|
23
|
+
address_line1: @sample_params[:address_line1],
|
24
|
+
city: @sample_params[:city],
|
25
|
+
state: @sample_params[:state],
|
26
|
+
zip: @sample_params[:zip]
|
27
|
+
)
|
28
|
+
|
29
|
+
result["address"]["address_country"].must_equal("USA")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
describe "list" do
|
36
|
+
it "should list addresses" do
|
37
|
+
VCR.use_cassette('list_addresses') do
|
38
|
+
new_address = subject.addresses.create @sample_params
|
39
|
+
|
40
|
+
list_result = subject.addresses.list
|
41
|
+
assert /#{new_address["name"]}/ =~ list_result.to_s
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
describe "create" do
|
48
|
+
it "should create an address" do
|
49
|
+
VCR.use_cassette('create_address') do
|
50
|
+
result = subject.addresses.create @sample_params
|
51
|
+
result["name"].must_equal(@sample_params[:name])
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
describe "find" do
|
58
|
+
it "should find an address" do
|
59
|
+
VCR.use_cassette('find_address') do
|
60
|
+
new_address = subject.addresses.create @sample_params
|
61
|
+
|
62
|
+
find_result = subject.addresses.find(new_address["id"])
|
63
|
+
find_result["name"].must_equal(@sample_params[:name])
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
describe "destroy" do
|
70
|
+
it "should delete an address" do
|
71
|
+
VCR.use_cassette('delete_address') do
|
72
|
+
new_address = subject.addresses.create @sample_params
|
73
|
+
|
74
|
+
delete_result = subject.addresses.destroy(new_address["id"])
|
75
|
+
assert /has been deleted/ =~ delete_result["message"]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lob::V1::Job do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@sample_address_params = {
|
7
|
+
name: "TestAddress",
|
8
|
+
email: "test@test.com",
|
9
|
+
address_line1: "123 Test Street",
|
10
|
+
address_line2: "Unit 199",
|
11
|
+
city: "Mountain View",
|
12
|
+
state: "CA",
|
13
|
+
country: "USA",
|
14
|
+
zip: 94085
|
15
|
+
}
|
16
|
+
|
17
|
+
@sample_job_params = { name: "TestJob" }
|
18
|
+
@sample_object_params = { name: "TestObject" }
|
19
|
+
end
|
20
|
+
|
21
|
+
subject { Lob(api_key: ENV["LOB_API_KEY"], api_version: "v1") }
|
22
|
+
|
23
|
+
|
24
|
+
describe "list" do
|
25
|
+
it "should list jobs" do
|
26
|
+
VCR.use_cassette('list_jobs') do
|
27
|
+
new_address = subject.addresses.create @sample_address_params
|
28
|
+
settings_list = subject.settings.list
|
29
|
+
new_object = subject.objects.create(
|
30
|
+
@sample_object_params[:name],
|
31
|
+
"https://www.lob.com/goblue.pdf",
|
32
|
+
settings_list.first["id"]
|
33
|
+
)
|
34
|
+
|
35
|
+
new_job = subject.jobs.create(
|
36
|
+
@sample_job_params[:name],
|
37
|
+
new_address["id"],
|
38
|
+
new_object["id"]
|
39
|
+
)
|
40
|
+
|
41
|
+
list_result = subject.jobs.list
|
42
|
+
assert /#{new_job["name"]}/ =~ list_result.to_s
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
describe "create" do
|
49
|
+
it "should create a job with address_id" do
|
50
|
+
VCR.use_cassette('create_job_with_address_id') do
|
51
|
+
new_address = subject.addresses.create @sample_address_params
|
52
|
+
|
53
|
+
settings_list = subject.settings.list
|
54
|
+
new_object = subject.objects.create(
|
55
|
+
@sample_object_params[:name],
|
56
|
+
"https://www.lob.com/goblue.pdf",
|
57
|
+
settings_list.first["id"]
|
58
|
+
)
|
59
|
+
|
60
|
+
result = subject.jobs.create(@sample_job_params[:name], new_address["id"], new_object["id"])
|
61
|
+
result["name"].must_equal(@sample_job_params[:name])
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should create a job with address params" do
|
66
|
+
VCR.use_cassette('create_job_with_address_params') do
|
67
|
+
settings_list = subject.settings.list
|
68
|
+
new_object = subject.objects.create(
|
69
|
+
@sample_object_params[:name],
|
70
|
+
"https://www.lob.com/goblue.pdf",
|
71
|
+
settings_list.first["id"]
|
72
|
+
)
|
73
|
+
|
74
|
+
result = subject.jobs.create(@sample_job_params[:name], @sample_address_params, new_object["id"])
|
75
|
+
result["name"].must_equal(@sample_job_params[:name])
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
it "should create a job with object params" do
|
81
|
+
VCR.use_cassette('create_job_with_object_params') do
|
82
|
+
new_address = subject.addresses.create @sample_address_params
|
83
|
+
settings_list = subject.settings.list
|
84
|
+
new_object_params = {
|
85
|
+
name: @sample_object_params[:name],
|
86
|
+
file: "https://www.lob.com/goblue.pdf",
|
87
|
+
setting_id: settings_list.first["id"]
|
88
|
+
}
|
89
|
+
|
90
|
+
result = subject.jobs.create(@sample_job_params[:name], new_address["id"], new_object_params)
|
91
|
+
result["name"].must_equal(@sample_job_params[:name])
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
describe "find" do
|
98
|
+
it "should find a job" do
|
99
|
+
VCR.use_cassette('find_job') do
|
100
|
+
new_address = subject.addresses.create @sample_address_params
|
101
|
+
|
102
|
+
settings_list = subject.settings.list
|
103
|
+
new_object = subject.objects.create(
|
104
|
+
@sample_object_params[:name],
|
105
|
+
"https://www.lob.com/goblue.pdf",
|
106
|
+
settings_list.first["id"]
|
107
|
+
)
|
108
|
+
|
109
|
+
new_job = subject.jobs.create(@sample_job_params[:name], new_address["id"], new_object["id"])
|
110
|
+
|
111
|
+
result = subject.jobs.find(new_job["id"])
|
112
|
+
result["name"].must_equal(@sample_job_params[:name])
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lob::V1::Object do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@sample_params = {
|
7
|
+
name: "TestObject",
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { Lob(api_key: ENV["LOB_API_KEY"], api_version: "v1") }
|
12
|
+
|
13
|
+
|
14
|
+
describe "list" do
|
15
|
+
it "should list objects" do
|
16
|
+
VCR.use_cassette('list_objects') do
|
17
|
+
settings_list = subject.settings.list
|
18
|
+
new_object = subject.objects.create(
|
19
|
+
@sample_params[:name],
|
20
|
+
"https://www.lob.com/goblue.pdf",
|
21
|
+
settings_list.first["id"]
|
22
|
+
)
|
23
|
+
|
24
|
+
list_result = subject.objects.list
|
25
|
+
assert /#{new_object["name"]}/ =~ list_result.to_s
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
describe "create" do
|
32
|
+
it "should create an object with file url" do
|
33
|
+
VCR.use_cassette('create_object_with_url') do
|
34
|
+
settings_list = subject.settings.list
|
35
|
+
result = subject.objects.create(
|
36
|
+
@sample_params[:name],
|
37
|
+
"https://www.lob.com/goblue.pdf",
|
38
|
+
settings_list.first["id"]
|
39
|
+
)
|
40
|
+
|
41
|
+
result["name"].must_equal(@sample_params[:name])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should create an object with file" do
|
46
|
+
VCR.use_cassette('create_object_with_file') do
|
47
|
+
settings_list = subject.settings.list
|
48
|
+
result = subject.objects.create(
|
49
|
+
@sample_params[:name],
|
50
|
+
File.new(File.expand_path("../../../samples/goblue.pdf", __FILE__), "rb"),
|
51
|
+
settings_list.first["id"]
|
52
|
+
)
|
53
|
+
|
54
|
+
result["name"].must_equal(@sample_params[:name])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
describe "find" do
|
61
|
+
it "should find an object" do
|
62
|
+
VCR.use_cassette('find_object') do
|
63
|
+
settings_list = subject.settings.list
|
64
|
+
new_object = subject.objects.create(
|
65
|
+
@sample_params[:name],
|
66
|
+
"https://www.lob.com/goblue.pdf",
|
67
|
+
settings_list.first["id"]
|
68
|
+
)
|
69
|
+
|
70
|
+
find_result = subject.objects.find(new_object["id"])
|
71
|
+
find_result["name"].must_equal(@sample_params[:name])
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
describe "destroy" do
|
78
|
+
it "should delete an object" do
|
79
|
+
VCR.use_cassette('delete_object') do
|
80
|
+
settings_list = subject.settings.list
|
81
|
+
new_object = subject.objects.create(
|
82
|
+
@sample_params[:name],
|
83
|
+
"https://www.lob.com/goblue.pdf",
|
84
|
+
settings_list.first["id"]
|
85
|
+
)
|
86
|
+
|
87
|
+
delete_result = subject.objects.destroy(new_object["id"])
|
88
|
+
assert /has been deleted/ =~ delete_result["message"]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lob::V1::Packaging do
|
4
|
+
|
5
|
+
subject { Lob(api_key: ENV["LOB_API_KEY"], api_version: "v1") }
|
6
|
+
|
7
|
+
describe "list" do
|
8
|
+
it "should list packagings" do
|
9
|
+
VCR.use_cassette('list_packagings') do
|
10
|
+
result = subject.packagings.list
|
11
|
+
result.length.must_be :>, 0
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lob::V1::Postcard do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@sample_address_params = {
|
7
|
+
name: "TestAddress",
|
8
|
+
email: "test@test.com",
|
9
|
+
address_line1: "123 Test Street",
|
10
|
+
address_line2: "Unit 199",
|
11
|
+
city: "Mountain View",
|
12
|
+
state: "CA",
|
13
|
+
country: "USA",
|
14
|
+
zip: 94085
|
15
|
+
}
|
16
|
+
|
17
|
+
@sample_postcard_params = {
|
18
|
+
name: "TestPostcard",
|
19
|
+
message: "Sample postcard message"
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
subject { Lob(api_key: ENV["LOB_API_KEY"], api_version: "v1") }
|
24
|
+
|
25
|
+
describe "list" do
|
26
|
+
it "should list postcards" do
|
27
|
+
VCR.use_cassette('list_postcards') do
|
28
|
+
new_address = subject.addresses.create @sample_address_params
|
29
|
+
|
30
|
+
new_postcard = subject.postcards.create(
|
31
|
+
@sample_postcard_params[:name],
|
32
|
+
new_address["id"],
|
33
|
+
front: File.new(File.expand_path("../../../samples/postcardfront.pdf", __FILE__), "rb"),
|
34
|
+
back: File.new(File.expand_path("../../../samples/postcardback.pdf", __FILE__), "rb")
|
35
|
+
)
|
36
|
+
|
37
|
+
list_result = subject.postcards.list
|
38
|
+
assert /#{new_postcard["name"]}/ =~ list_result.to_s
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
describe "create" do
|
45
|
+
it "should create a postcard with address_id" do
|
46
|
+
VCR.use_cassette('create_postcard_with_address_id_and_message') do
|
47
|
+
new_address = subject.addresses.create @sample_address_params
|
48
|
+
|
49
|
+
result = subject.postcards.create(
|
50
|
+
@sample_postcard_params[:name],
|
51
|
+
new_address["id"],
|
52
|
+
message: @sample_postcard_params[:message],
|
53
|
+
front: "https://www.lob.com/postcardfront.pdf",
|
54
|
+
)
|
55
|
+
|
56
|
+
result["name"].must_equal(@sample_postcard_params[:name])
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
it "should create a postcard with address params" do
|
62
|
+
VCR.use_cassette('create_postcard_with_address_params') do
|
63
|
+
|
64
|
+
result = subject.postcards.create(
|
65
|
+
@sample_postcard_params[:name],
|
66
|
+
@sample_address_params,
|
67
|
+
message: @sample_postcard_params[:message],
|
68
|
+
front: "https://www.lob.com/postcardfront.pdf"
|
69
|
+
)
|
70
|
+
|
71
|
+
result["name"].must_equal(@sample_postcard_params[:name])
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
it "should create a postcard with front and back as urls" do
|
77
|
+
VCR.use_cassette('create_postcard_with_front_and_back_urls') do
|
78
|
+
new_address = subject.addresses.create @sample_address_params
|
79
|
+
|
80
|
+
result = subject.postcards.create(
|
81
|
+
@sample_postcard_params[:name],
|
82
|
+
new_address["id"],
|
83
|
+
front: "https://www.lob.com/postcardfront.pdf",
|
84
|
+
back: "https://www.lob.com/postcardback.pdf"
|
85
|
+
)
|
86
|
+
|
87
|
+
result["name"].must_equal(@sample_postcard_params[:name])
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
it "should create a postcard with front and back as PDFs" do
|
93
|
+
VCR.use_cassette('create_postcard_with_front_and_back_pdfs') do
|
94
|
+
new_address = subject.addresses.create @sample_address_params
|
95
|
+
|
96
|
+
result = subject.postcards.create(
|
97
|
+
@sample_postcard_params[:name],
|
98
|
+
new_address["id"],
|
99
|
+
front: File.new(File.expand_path("../../../samples/postcardfront.pdf", __FILE__), "rb"),
|
100
|
+
back: File.new(File.expand_path("../../../samples/postcardback.pdf", __FILE__), "rb")
|
101
|
+
)
|
102
|
+
|
103
|
+
result["name"].must_equal(@sample_postcard_params[:name])
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
describe "find" do
|
111
|
+
it "should find a postcard" do
|
112
|
+
VCR.use_cassette('find_postcard') do
|
113
|
+
new_address = subject.addresses.create @sample_address_params
|
114
|
+
|
115
|
+
new_postcard = subject.postcards.create(
|
116
|
+
@sample_postcard_params[:name],
|
117
|
+
new_address["id"],
|
118
|
+
front: File.new(File.expand_path("../../../samples/postcardfront.pdf", __FILE__), "rb"),
|
119
|
+
back: File.new(File.expand_path("../../../samples/postcardback.pdf", __FILE__), "rb")
|
120
|
+
)
|
121
|
+
|
122
|
+
result = subject.postcards.find(new_postcard["id"])
|
123
|
+
result["name"].must_equal(@sample_postcard_params[:name])
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lob::V1::Resource do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@api_key = "test"
|
7
|
+
end
|
8
|
+
|
9
|
+
subject { Lob(api_key: @api_key) }
|
10
|
+
|
11
|
+
describe "when Lob is initialized" do
|
12
|
+
it "should receive and contain default options when Lob is initialized" do
|
13
|
+
subject.options[:protocol].must_equal "https"
|
14
|
+
subject.options[:api_host].must_equal "api.lob.com"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should have API key in options" do
|
18
|
+
subject.options[:api_key].must_equal @api_key
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
it "should return addresses resource" do
|
24
|
+
subject.addresses.must_be_kind_of(Lob::V1::Address)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return jobs resource" do
|
28
|
+
subject.jobs.must_be_kind_of(Lob::V1::Job)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should return objects resource" do
|
32
|
+
subject.objects.must_be_kind_of(Lob::V1::Object)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should return packagings resource" do
|
36
|
+
subject.packagings.must_be_kind_of(Lob::V1::Packaging)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return postcards resource" do
|
40
|
+
subject.postcards.must_be_kind_of(Lob::V1::Postcard)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should return services resource" do
|
44
|
+
subject.services.must_be_kind_of(Lob::V1::Service)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should return settings resource" do
|
48
|
+
subject.settings.must_be_kind_of(Lob::V1::Setting)
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lob::V1::Service do
|
4
|
+
|
5
|
+
subject { Lob(api_key: ENV["LOB_API_KEY"], api_version: "v1") }
|
6
|
+
|
7
|
+
describe "list" do
|
8
|
+
it "should list services" do
|
9
|
+
VCR.use_cassette('list_services') do
|
10
|
+
result = subject.services.list
|
11
|
+
result.length.must_be :>, 0
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lob::V1::Setting do
|
4
|
+
|
5
|
+
subject { Lob(api_key: ENV["LOB_API_KEY"], api_version: "v1") }
|
6
|
+
|
7
|
+
describe "list" do
|
8
|
+
it "should list settings" do
|
9
|
+
VCR.use_cassette('list_settings') do
|
10
|
+
result = subject.settings.list
|
11
|
+
result.length.must_be :>, 0
|
12
|
+
/Document/ =~ result.to_s
|
13
|
+
/Poster/ =~ result.to_s
|
14
|
+
/Card/ =~ result.to_s
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
describe "find" do
|
21
|
+
it "should find a setting" do
|
22
|
+
VCR.use_cassette('find_setting') do
|
23
|
+
list_result = subject.settings.list
|
24
|
+
result = subject.settings.find(list_result.first["id"])
|
25
|
+
result["description"].must_equal(list_result.first["description"])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/lob_spec.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Lob
|
4
|
+
module Test
|
5
|
+
class Resource
|
6
|
+
attr_accessor :options
|
7
|
+
def initialize(options)
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
describe Lob do
|
16
|
+
|
17
|
+
it "should return the resource object for the specified version" do
|
18
|
+
Lob(api_key: "test", api_version: "test").must_be_kind_of(Lob::Test::Resource)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should raise an error if API key is not passed as an option or set on module" do
|
22
|
+
Lob.api_key = nil # make sure API key is nil
|
23
|
+
->{ Lob() }.must_raise(ArgumentError)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should *not* raise an error if API key has been on module and not passed as option" do
|
27
|
+
Lob.api_key = "test"
|
28
|
+
Lob().wont_be_nil
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should pass the API key to the resource for the version" do
|
32
|
+
Lob(api_key: "test").options[:api_key].must_equal "test"
|
33
|
+
end
|
34
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
$:.unshift File.expand_path("../lib", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
require "lob"
|
4
|
+
require "minitest/spec"
|
5
|
+
require "minitest/pride"
|
6
|
+
require "minitest/autorun"
|
7
|
+
require "vcr"
|
8
|
+
|
9
|
+
VCR.configure do |config|
|
10
|
+
config.cassette_library_dir = "spec/vcr_cassettes"
|
11
|
+
config.hook_into :webmock
|
12
|
+
end
|
13
|
+
|
14
|
+
VCR.use_cassette("example") do
|
15
|
+
RestClient.get 'https://raw.github.com/gist/3887508/b84579e450e2fb483b9b0475d938b7acd8861d15/README.md'
|
16
|
+
end
|