lob 1.7 → 1.8
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/CHANGELOG.md +11 -0
- data/README.md +4 -6
- data/lib/lob.rb +30 -40
- data/lib/lob/errors/invalid_request_error.rb +4 -0
- data/lib/lob/errors/lob_error.rb +17 -0
- data/lib/lob/version.rb +3 -0
- data/lob.gemspec +3 -3
- data/spec/lob/errors/lob_error_spec.rb +17 -0
- data/spec/lob/v1/address_spec.rb +1 -1
- data/spec/lob/v1/area_spec.rb +2 -13
- data/spec/lob/v1/bank_account_spec.rb +1 -1
- data/spec/lob/v1/check_spec.rb +1 -1
- data/spec/lob/v1/country_spec.rb +1 -1
- data/spec/lob/v1/job_spec.rb +1 -1
- data/spec/lob/v1/object_spec.rb +15 -5
- data/spec/lob/v1/packaging_spec.rb +1 -1
- data/spec/lob/v1/postcard_spec.rb +1 -1
- data/spec/lob/v1/route_spec.rb +1 -1
- data/spec/lob/v1/service_spec.rb +1 -1
- data/spec/lob/v1/setting_spec.rb +1 -1
- data/spec/lob/v1/state_spec.rb +1 -1
- data/spec/lob_spec.rb +20 -16
- metadata +9 -4
- data/lib/lob/lob_error.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d111537d5990b2be463c22fe1f24b5f707c6b7e
|
4
|
+
data.tar.gz: 4605b327af3dcafcb45b0d092576000a65faf074
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de7f9937d1a207eb86c14d99fd71ffe59efdc0f3c4a91e4356b1b14950ca658efb26f69ebe59c77852096446f02e4fa8de75b2449dc36c4d81d3099b1982d82c
|
7
|
+
data.tar.gz: cbd24374e3d79375530826112701f91f9b2e4ec41dbd3e0da04bdf37c89b35cfcf1445f18b434c16845416b22a886243f711abb2027bf1479b3ab32db610aa2d
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
## [**1.8**](https://github.com/lob/lob-ruby/releases/tag/v1.8)
|
2
|
+
- [**#69**] (https://github.com/lob/lob-ruby/pull/69) fixed spelling in documentation
|
3
|
+
- [**#71**] (https://github.com/lob/lob-ruby/pull/71) fixed syntax in documentation
|
4
|
+
- [**#73**] (https://github.com/lob/lob-ruby/pull/73) fixed failing tests
|
5
|
+
- [**#74**] (https://github.com/lob/lob-ruby/pull/74) added support for setting api_version
|
6
|
+
- [**#75**] (https://github.com/lob/lob-ruby/pull/75) added version module
|
7
|
+
- [**#76**] (https://github.com/lob/lob-ruby/pull/76) better error handling
|
8
|
+
|
9
|
+
|
10
|
+
## [**1.7**](https://github.com/lob/lob-ruby/releases/tag/v1.7)
|
11
|
+
- [**#64**] (https://github.com/lob/lob-ruby/pull/64) changed asset URLs to use lob-assets bucket
|
data/README.md
CHANGED
@@ -73,10 +73,8 @@ Lob.api_key = "your-api-key"
|
|
73
73
|
|
74
74
|
```ruby
|
75
75
|
Lob.configure do |config|
|
76
|
-
config.api_key = "your-api-key"
|
77
|
-
config.api_version = "
|
78
|
-
config.protocol = "https" # default protocol
|
79
|
-
config.api_host = "api.lob.com" # ofcourse it's Lob
|
76
|
+
config.api_key = "your-api-key" # get your own at http://lob.com :)
|
77
|
+
config.api_version = "2014-12-18" # override the API version
|
80
78
|
end
|
81
79
|
```
|
82
80
|
|
@@ -564,7 +562,7 @@ You'll have to specify front, back, and either zip_codes or routes
|
|
564
562
|
back: "https://s3-us-west-2.amazonaws.com/lob-assets/areaback.pdf",
|
565
563
|
routes: ["94158-C001", "94107-C031"],
|
566
564
|
target_type: "all",
|
567
|
-
|
565
|
+
full_bleed: "1"
|
568
566
|
)
|
569
567
|
|
570
568
|
# create an area request with zip_codes
|
@@ -574,7 +572,7 @@ You'll have to specify front, back, and either zip_codes or routes
|
|
574
572
|
back: "https://s3-us-west-2.amazonaws.com/lob-assets/areaback.pdf",
|
575
573
|
zip_codes: ["95678", "94158"],
|
576
574
|
target_type: "all",
|
577
|
-
|
575
|
+
full_bleed: "1"
|
578
576
|
)
|
579
577
|
```
|
580
578
|
|
data/lib/lob.rb
CHANGED
@@ -1,22 +1,20 @@
|
|
1
1
|
require "rest-client"
|
2
2
|
require "json"
|
3
|
-
require "lob/
|
3
|
+
require "lob/version"
|
4
|
+
require "lob/errors/lob_error"
|
5
|
+
require "lob/errors/invalid_request_error"
|
4
6
|
|
5
7
|
# Dynamically require files
|
6
8
|
Dir[File.join(File.dirname(__FILE__), 'lob', 'v*', '*.rb')].each {|file| require file }
|
7
9
|
|
8
10
|
module Lob
|
9
11
|
class << self
|
10
|
-
attr_accessor :api_key,
|
11
|
-
:api_version,
|
12
|
-
:protocol,
|
13
|
-
:api_host
|
12
|
+
attr_accessor :api_key, :api_version, :protocol, :api_host
|
14
13
|
|
15
14
|
def configure
|
16
15
|
yield self
|
17
16
|
true
|
18
17
|
end
|
19
|
-
|
20
18
|
alias :config :configure
|
21
19
|
end
|
22
20
|
|
@@ -26,61 +24,53 @@ module Lob
|
|
26
24
|
end
|
27
25
|
end
|
28
26
|
|
29
|
-
|
30
27
|
def self.submit(method, url, parameters={})
|
31
|
-
clientVersion =
|
28
|
+
clientVersion = Lob::VERSION
|
32
29
|
|
33
|
-
if method == :get || method == :delete
|
34
|
-
JSON(RestClient.send(method, url, {
|
35
|
-
user_agent: 'Lob/v1 RubyBindings/' + clientVersion,
|
36
|
-
params: parameters
|
37
|
-
}))
|
38
|
-
else
|
39
|
-
JSON(RestClient.send(method, url, parameters, {
|
40
|
-
user_agent: 'Lob/v1 RubyBindings/' + clientVersion
|
41
|
-
}))
|
42
|
-
end
|
43
|
-
# :nocov:
|
44
|
-
rescue => e
|
45
30
|
begin
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
error_message = json["message"]
|
31
|
+
if method == :get || method == :delete
|
32
|
+
JSON.parse(RestClient.send(method, url, {
|
33
|
+
user_agent: 'Lob/v1 RubyBindings/' + clientVersion,
|
34
|
+
params: parameters,
|
35
|
+
"Lob-Version" => self.api_version
|
36
|
+
}))
|
53
37
|
else
|
54
|
-
|
38
|
+
JSON.parse(RestClient.send(method, url, parameters, {
|
39
|
+
user_agent: 'Lob/v1 RubyBindings/' + clientVersion,
|
40
|
+
"Lob-Version" => self.api_version
|
41
|
+
}))
|
55
42
|
end
|
56
43
|
|
57
|
-
|
58
|
-
|
59
|
-
# If error parsing failed re-raise the original error
|
60
|
-
raise e
|
44
|
+
rescue RestClient::ExceptionWithResponse => e
|
45
|
+
handle_api_error(e)
|
61
46
|
end
|
62
|
-
# :nocov:
|
63
47
|
end
|
64
48
|
|
65
49
|
def self.load(options={})
|
66
50
|
Lob(options)
|
67
51
|
end
|
68
|
-
end
|
69
52
|
|
53
|
+
def self.handle_api_error(error)
|
54
|
+
begin
|
55
|
+
response = JSON.parse(error.http_body)
|
56
|
+
error_obj = response["errors"].first
|
57
|
+
message = error_obj["message"]
|
58
|
+
raise InvalidRequestError.new(message, error.http_code, error.http_body, error.response)
|
59
|
+
rescue JSON::ParserError
|
60
|
+
raise LobError.new("Invalid response object: #{}", error.http_code, error.http_body)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
70
64
|
|
71
65
|
def Lob(options={})
|
72
66
|
options[:api_host] ||= Lob.api_host || "api.lob.com"
|
73
67
|
options[:protocol] ||= Lob.protocol || "https"
|
74
|
-
options[:api_version] ||= Lob.api_version
|
68
|
+
options[:api_version] ||= Lob.api_version
|
75
69
|
options[:api_key] ||= Lob.api_key
|
76
70
|
|
77
71
|
if options[:api_key].nil?
|
78
72
|
raise ArgumentError.new(":api_key is a required argument to initialize Lob")
|
79
73
|
end
|
80
74
|
|
81
|
-
|
82
|
-
raise Lob::VersionInvalidError.new("api version #{options[:api_version]} doesn't exist")
|
83
|
-
end
|
84
|
-
|
85
|
-
Lob.const_get(options[:api_version].capitalize).const_get("Resource").new(options)
|
75
|
+
Lob::V1::Resource.new(options)
|
86
76
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Lob
|
2
|
+
class LobError < StandardError
|
3
|
+
attr_reader :message, :http_status, :http_body, :json_body
|
4
|
+
|
5
|
+
def initialize(message=nil, http_status=nil, http_body=nil, json_body=nil)
|
6
|
+
@message = message
|
7
|
+
@http_status = http_status
|
8
|
+
@http_body = http_body
|
9
|
+
@json_body = json_body
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_s
|
13
|
+
status_string = @http_status.nil? ? "" : "(Status #{@http_status}) "
|
14
|
+
"#{status_string}#{@message}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/lob/version.rb
ADDED
data/lob.gemspec
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), 'lib'))
|
4
3
|
|
4
|
+
require "lob/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "lob"
|
8
|
-
spec.version =
|
8
|
+
spec.version = Lob::VERSION
|
9
9
|
spec.authors = ["Lob"]
|
10
10
|
spec.email = ["support@lob.com"]
|
11
11
|
spec.description = %q{Lob API Ruby wrapper}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Lob::LobError do
|
4
|
+
|
5
|
+
describe "#to_s" do
|
6
|
+
it "should return a string with the status code and message" do
|
7
|
+
error = Lob::LobError.new("hello", 404)
|
8
|
+
error.to_s.must_equal("(Status 404) hello")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should returna a message without the status code if not provided" do
|
12
|
+
error = Lob::LobError.new("hello")
|
13
|
+
error.to_s.must_equal("hello")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/spec/lob/v1/address_spec.rb
CHANGED
data/spec/lob/v1/area_spec.rb
CHANGED
@@ -9,7 +9,7 @@ describe Lob::V1::Area do
|
|
9
9
|
}
|
10
10
|
end
|
11
11
|
|
12
|
-
subject { Lob(api_key: ENV["LOB_API_KEY"]
|
12
|
+
subject { Lob(api_key: ENV["LOB_API_KEY"]) }
|
13
13
|
|
14
14
|
describe "list" do
|
15
15
|
it "should list areas" do
|
@@ -59,18 +59,7 @@ describe Lob::V1::Area do
|
|
59
59
|
|
60
60
|
it "should create an area object with zip_codes" do
|
61
61
|
VCR.use_cassette('create_area_object_with_zip') do
|
62
|
-
@sample_area_params
|
63
|
-
@sample_area_params[:zip_codes] = "94158"
|
64
|
-
result = subject.areas.create @sample_area_params
|
65
|
-
|
66
|
-
result["object"].must_equal("area")
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should error without routes required params" do
|
71
|
-
VCR.use_cassette('create_area_object_with_zip') do
|
72
|
-
@sample_area_params.delete("routes")
|
73
|
-
@sample_area_params[:zip_codes] = "94158"
|
62
|
+
@sample_area_params[:routes] = ["94158"];
|
74
63
|
result = subject.areas.create @sample_area_params
|
75
64
|
|
76
65
|
result["object"].must_equal("area")
|
data/spec/lob/v1/check_spec.rb
CHANGED
data/spec/lob/v1/country_spec.rb
CHANGED
data/spec/lob/v1/job_spec.rb
CHANGED
data/spec/lob/v1/object_spec.rb
CHANGED
@@ -9,8 +9,7 @@ describe Lob::V1::Object do
|
|
9
9
|
@test_setting_id = 201
|
10
10
|
end
|
11
11
|
|
12
|
-
subject { Lob(api_key: ENV["LOB_API_KEY"]
|
13
|
-
|
12
|
+
subject { Lob(api_key: ENV["LOB_API_KEY"]) }
|
14
13
|
|
15
14
|
describe "list" do
|
16
15
|
it "should list objects" do
|
@@ -28,7 +27,6 @@ describe Lob::V1::Object do
|
|
28
27
|
end
|
29
28
|
end
|
30
29
|
|
31
|
-
|
32
30
|
describe "create" do
|
33
31
|
it "should create an object with file url" do
|
34
32
|
VCR.use_cassette('create_object_with_url') do
|
@@ -55,8 +53,21 @@ describe Lob::V1::Object do
|
|
55
53
|
result["name"].must_equal(@sample_params[:name])
|
56
54
|
end
|
57
55
|
end
|
58
|
-
end
|
59
56
|
|
57
|
+
it "should create an object with a new api version" do
|
58
|
+
Lob.api_version = "2014-12-18"
|
59
|
+
VCR.use_cassette("create_object_with_new_version") do
|
60
|
+
result = subject.objects.create(
|
61
|
+
name: @sample_params[:name],
|
62
|
+
file: "https://s3-us-west-2.amazonaws.com/lob-assets/test.pdf",
|
63
|
+
setting: @test_setting_id
|
64
|
+
)
|
65
|
+
|
66
|
+
result["name"].must_equal(@sample_params[:name])
|
67
|
+
end
|
68
|
+
Lob.api_version = "2014-11-24"
|
69
|
+
end
|
70
|
+
end
|
60
71
|
|
61
72
|
describe "find" do
|
62
73
|
it "should find an object" do
|
@@ -74,7 +85,6 @@ describe Lob::V1::Object do
|
|
74
85
|
end
|
75
86
|
end
|
76
87
|
|
77
|
-
|
78
88
|
describe "destroy" do
|
79
89
|
it "should delete an object" do
|
80
90
|
VCR.use_cassette('delete_object') do
|
data/spec/lob/v1/route_spec.rb
CHANGED
data/spec/lob/v1/service_spec.rb
CHANGED
data/spec/lob/v1/setting_spec.rb
CHANGED
data/spec/lob/v1/state_spec.rb
CHANGED
data/spec/lob_spec.rb
CHANGED
@@ -2,16 +2,7 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Lob do
|
4
4
|
it "should return the resource object for the valid version" do
|
5
|
-
Lob(api_key: "test", api_version: "
|
6
|
-
end
|
7
|
-
|
8
|
-
it "should raise an error if the version doesn't exist" do
|
9
|
-
->{Lob(api_key: "test", api_version: "test")}.must_raise(Lob::VersionInvalidError)
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should raise an error if API key is not passed as an option or set on module" do
|
13
|
-
Lob.api_key = nil # make sure API key is nil
|
14
|
-
->{ Lob() }.must_raise(ArgumentError)
|
5
|
+
Lob(api_key: "test", api_version: "2014-11-25").must_be_kind_of(Lob::V1::Resource)
|
15
6
|
end
|
16
7
|
|
17
8
|
it "should *not* raise an error if API key has been on module and not passed as option" do
|
@@ -26,13 +17,13 @@ describe Lob do
|
|
26
17
|
it "should allow detailed configuration" do
|
27
18
|
Lob.configure do |config|
|
28
19
|
config.api_key = "test"
|
29
|
-
config.api_version = "
|
20
|
+
config.api_version = "2014-11-24"
|
30
21
|
config.protocol = "https"
|
31
22
|
config.api_host = "api.lob.com"
|
32
23
|
end
|
33
24
|
|
34
25
|
Lob.api_key.must_equal "test"
|
35
|
-
Lob.api_version.must_equal "
|
26
|
+
Lob.api_version.must_equal "2014-11-24"
|
36
27
|
Lob.protocol.must_equal "https"
|
37
28
|
Lob.api_host.must_equal "api.lob.com"
|
38
29
|
end
|
@@ -43,11 +34,24 @@ describe Lob do
|
|
43
34
|
Lob.api_key = "test"
|
44
35
|
Lob.load.wont_be_nil
|
45
36
|
|
46
|
-
Lob.api_key
|
47
|
-
|
37
|
+
Lob.load(api_key: "test", api_version: "2014-11-24").must_be_kind_of(Lob::V1::Resource)
|
38
|
+
end
|
48
39
|
|
49
|
-
|
40
|
+
it "should handle API errors gracefully" do
|
41
|
+
lob = Lob.load(api_key: ENV["LOB_API_KEY"])
|
42
|
+
assert_raises Lob::InvalidRequestError do
|
43
|
+
VCR.use_cassette('bad_request') do
|
44
|
+
lob.objects.create(name: "Test", file: "https://lob.com/test.pdf", bad_param: "bad_value")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
50
48
|
|
51
|
-
|
49
|
+
it "should work when no api_version is provided" do
|
50
|
+
lob = Lob.load(api_key: ENV["LOB_API_KEY"])
|
51
|
+
Lob.api_version = nil
|
52
|
+
VCR.use_cassette('no_api_version') do
|
53
|
+
lob.addresses.list
|
54
|
+
end
|
55
|
+
Lob.api_version = "2014-11-24"
|
52
56
|
end
|
53
57
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lob
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.8'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -159,6 +159,7 @@ extra_rdoc_files: []
|
|
159
159
|
files:
|
160
160
|
- .gitignore
|
161
161
|
- .travis.yml
|
162
|
+
- CHANGELOG.md
|
162
163
|
- Gemfile
|
163
164
|
- LICENSE.txt
|
164
165
|
- README.md
|
@@ -168,7 +169,8 @@ files:
|
|
168
169
|
- examples/jobs.rb
|
169
170
|
- examples/postcards.rb
|
170
171
|
- lib/lob.rb
|
171
|
-
- lib/lob/
|
172
|
+
- lib/lob/errors/invalid_request_error.rb
|
173
|
+
- lib/lob/errors/lob_error.rb
|
172
174
|
- lib/lob/v1/address.rb
|
173
175
|
- lib/lob/v1/area.rb
|
174
176
|
- lib/lob/v1/bank_account.rb
|
@@ -183,7 +185,9 @@ files:
|
|
183
185
|
- lib/lob/v1/service.rb
|
184
186
|
- lib/lob/v1/setting.rb
|
185
187
|
- lib/lob/v1/state.rb
|
188
|
+
- lib/lob/version.rb
|
186
189
|
- lob.gemspec
|
190
|
+
- spec/lob/errors/lob_error_spec.rb
|
187
191
|
- spec/lob/v1/address_spec.rb
|
188
192
|
- spec/lob/v1/area_spec.rb
|
189
193
|
- spec/lob/v1/bank_account_spec.rb
|
@@ -220,11 +224,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
220
224
|
version: '0'
|
221
225
|
requirements: []
|
222
226
|
rubyforge_project:
|
223
|
-
rubygems_version: 2.
|
227
|
+
rubygems_version: 2.0.14
|
224
228
|
signing_key:
|
225
229
|
specification_version: 4
|
226
230
|
summary: Ruby wrapper for Lob.com API with ActiveRecord-style syntax
|
227
231
|
test_files:
|
232
|
+
- spec/lob/errors/lob_error_spec.rb
|
228
233
|
- spec/lob/v1/address_spec.rb
|
229
234
|
- spec/lob/v1/area_spec.rb
|
230
235
|
- spec/lob/v1/bank_account_spec.rb
|