lob 1.3.1 → 1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +70 -4
- data/lib/lob.rb +12 -16
- data/lib/lob/lob_error.rb +2 -0
- data/lib/lob/v1/area.rb +27 -0
- data/lib/lob/v1/object.rb +1 -1
- data/lib/lob/v1/resource.rb +8 -0
- data/lib/lob/v1/route.rb +19 -0
- data/lob.gemspec +1 -1
- data/spec/lob/v1/area_spec.rb +92 -0
- data/spec/lob/v1/route_spec.rb +17 -0
- data/spec/lob_spec.rb +19 -12
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73c25870f258cf39d0d433b254712629a7ca7e91
|
4
|
+
data.tar.gz: 6c7b1d259b1e8d8ee8f48398ac03290608d567a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 08df0587f62aa357c84323426dbc3cb81906be0c56a888fd5c283222ef29734373ac775e27722911525669554476545bd028ede36fa313c1dfee2c5258522151
|
7
|
+
data.tar.gz: 97597db31774db70091e0dc49f2a6e71ab1a9ce28545e4c34a715094b4aa97dfed4252b9f91721ca7ae92ac95777b117f1085cb594f994c1e8871387b1f56e2f
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# lob-ruby
|
2
2
|
|
3
|
-
[![Build Status](https://travis-ci.org/lob/lob-ruby.svg?branch=master)](https://travis-ci.org/lob/lob-ruby) [![Gem Version](https://badge.fury.io/rb/lob.svg)](http://badge.fury.io/rb/lob) [![Dependency Status](https://gemnasium.com/lob/lob-ruby.svg)](https://gemnasium.com/lob/lob-ruby)
|
4
|
-
|
5
|
-
[![Coverage Status](https://img.shields.io/coveralls/lob/lob-ruby.svg)](https://coveralls.io/r/lob/lob-ruby?branch=master)
|
3
|
+
[![Build Status](https://travis-ci.org/lob/lob-ruby.svg?branch=master)](https://travis-ci.org/lob/lob-ruby) [![Gem Version](https://badge.fury.io/rb/lob.svg)](http://badge.fury.io/rb/lob) [![Dependency Status](https://gemnasium.com/lob/lob-ruby.svg)](https://gemnasium.com/lob/lob-ruby) [![Coverage Status](https://img.shields.io/coveralls/lob/lob-ruby.svg)](https://coveralls.io/r/lob/lob-ruby?branch=master) ![](http://ruby-gem-downloads-badge.herokuapp.com/lob?color=green)
|
6
4
|
|
7
5
|
Ruby wrapper for the [Lob.com](http://lob.com) API. This gem gives you an ActiveRecord-style syntax to use the Lob.com API.
|
8
6
|
|
@@ -41,12 +39,22 @@ The Ruby interpreter assumes it's not of base-10 and tries to convert it to base
|
|
41
39
|
# To initialize a Lob object
|
42
40
|
@lob = Lob(api_key: "your-api-key")
|
43
41
|
|
44
|
-
|
45
42
|
# Alternatively, to set the API key for all calls in the future
|
46
43
|
Lob.api_key = "your-api-key"
|
47
44
|
@lob = Lob() # don't forget the paranthesis!
|
48
45
|
```
|
49
46
|
|
47
|
+
### Alternatively, you can use initialize and configure like this
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
# To initialize a Lob object
|
51
|
+
@lob = Lob.load(api_key: "your-api-key")
|
52
|
+
|
53
|
+
# Alternatively, to set the API key for all calls in the future
|
54
|
+
Lob.api_key = "your-api-key"
|
55
|
+
@lob = Lob.load
|
56
|
+
```
|
57
|
+
|
50
58
|
#### Or if you want some detailed configuration
|
51
59
|
|
52
60
|
```ruby
|
@@ -369,6 +377,64 @@ You'll have to specify either the `message` option or the `back` option.
|
|
369
377
|
@lob.postcards.find("post-card-id")
|
370
378
|
```
|
371
379
|
|
380
|
+
### Simple Area Mail
|
381
|
+
|
382
|
+
#### Create areas
|
383
|
+
|
384
|
+
You'll have to specify front, back, and either zip_codes or routes
|
385
|
+
|
386
|
+
```ruby
|
387
|
+
# create an area request with routes
|
388
|
+
@lob.area.create(
|
389
|
+
name: "My Area",
|
390
|
+
front: "https://www.lob.com/areafront.pdf",
|
391
|
+
back: "https://www.lob.com/areaback.pdf",
|
392
|
+
routes: ["94158-C001", "94107-C031"],
|
393
|
+
target_type: "all",
|
394
|
+
full_blled = "1"
|
395
|
+
)
|
396
|
+
|
397
|
+
# create an area request with zip_codes
|
398
|
+
@lob.area.create(
|
399
|
+
name: "My Area",
|
400
|
+
front: "https://www.lob.com/areafront.pdf",
|
401
|
+
back: "https://www.lob.com/areaback.pdf",
|
402
|
+
zip_codes: ["95678", "94158"],
|
403
|
+
target_type: "all",
|
404
|
+
full_blled = "1"
|
405
|
+
)
|
406
|
+
```
|
407
|
+
|
408
|
+
zip_codes and routes can be a string or an array of strings
|
409
|
+
|
410
|
+
#### List areas
|
411
|
+
```ruby
|
412
|
+
@lob.areas.list
|
413
|
+
|
414
|
+
# you can also pass count and offset
|
415
|
+
@lob.areas.list(count: 10, offset: 3)
|
416
|
+
```
|
417
|
+
|
418
|
+
|
419
|
+
#### Find an area
|
420
|
+
```ruby
|
421
|
+
@lob.areas.find("area_id")
|
422
|
+
```
|
423
|
+
|
424
|
+
### Routes
|
425
|
+
|
426
|
+
You'll have to specify zip_codes
|
427
|
+
|
428
|
+
#### Find routes
|
429
|
+
|
430
|
+
```ruby
|
431
|
+
@lob.routes.find(
|
432
|
+
zip_codes: ["95678, 94158"]
|
433
|
+
)
|
434
|
+
```
|
435
|
+
|
436
|
+
zip_codes can be a string or an array of strings
|
437
|
+
|
372
438
|
### Services
|
373
439
|
|
374
440
|
#### List services
|
data/lib/lob.rb
CHANGED
@@ -1,18 +1,9 @@
|
|
1
1
|
require "rest-client"
|
2
2
|
require "json"
|
3
|
-
|
4
3
|
require "lob/lob_error"
|
5
|
-
|
6
|
-
require
|
7
|
-
require
|
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
|
-
require "lob/v1/country"
|
14
|
-
require "lob/v1/check"
|
15
|
-
require "lob/v1/bank_account"
|
4
|
+
|
5
|
+
# Dynamically require files
|
6
|
+
Dir[File.join(File.dirname(__FILE__), 'lob', 'v*', '*.rb')].each {|file| require file }
|
16
7
|
|
17
8
|
module Lob
|
18
9
|
|
@@ -30,7 +21,6 @@ module Lob
|
|
30
21
|
alias :config :configure
|
31
22
|
end
|
32
23
|
|
33
|
-
|
34
24
|
def self.require_options(options, *keys)
|
35
25
|
keys.each do |key|
|
36
26
|
raise ArgumentError.new(":#{key} is required") unless options.key?(key)
|
@@ -63,6 +53,9 @@ module Lob
|
|
63
53
|
# :nocov:
|
64
54
|
end
|
65
55
|
|
56
|
+
def self.load(options={})
|
57
|
+
Lob(options)
|
58
|
+
end
|
66
59
|
end
|
67
60
|
|
68
61
|
|
@@ -72,10 +65,13 @@ def Lob(options={})
|
|
72
65
|
options[:api_version] ||= Lob.api_version || "v1"
|
73
66
|
options[:api_key] ||= Lob.api_key
|
74
67
|
|
75
|
-
|
68
|
+
if options[:api_key].nil?
|
76
69
|
raise ArgumentError.new(":api_key is a required argument to initialize Lob")
|
77
70
|
end
|
78
71
|
|
79
|
-
|
80
|
-
|
72
|
+
if Dir[File.join(File.dirname(__FILE__), 'lob', options[:api_version])].empty?
|
73
|
+
raise Lob::VersionInvalidError.new("api version #{options[:api_version]} doesn't exist")
|
74
|
+
end
|
75
|
+
|
76
|
+
Lob.const_get(options[:api_version].capitalize).const_get("Resource").new(options)
|
81
77
|
end
|
data/lib/lob/lob_error.rb
CHANGED
data/lib/lob/v1/area.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Lob
|
2
|
+
module V1
|
3
|
+
class Area
|
4
|
+
def initialize(resource)
|
5
|
+
@resource = resource
|
6
|
+
end
|
7
|
+
|
8
|
+
def list(options = {})
|
9
|
+
Lob.submit(:get, area_url, options)["data"] || []
|
10
|
+
end
|
11
|
+
|
12
|
+
def find(lob_object_id)
|
13
|
+
Lob.submit :get, area_url(lob_object_id)
|
14
|
+
end
|
15
|
+
|
16
|
+
def create(options = {})
|
17
|
+
Lob.submit :post, area_url, options
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def area_url(area_id = nil)
|
23
|
+
@resource.construct_url("areas", area_id)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/lob/v1/object.rb
CHANGED
data/lib/lob/v1/resource.rb
CHANGED
@@ -8,6 +8,10 @@ module Lob
|
|
8
8
|
@options = options
|
9
9
|
end
|
10
10
|
|
11
|
+
def areas
|
12
|
+
Lob::V1::Area.new(self)
|
13
|
+
end
|
14
|
+
|
11
15
|
def addresses
|
12
16
|
Lob::V1::Address.new(self)
|
13
17
|
end
|
@@ -28,6 +32,10 @@ module Lob
|
|
28
32
|
Lob::V1::Postcard.new(self)
|
29
33
|
end
|
30
34
|
|
35
|
+
def routes
|
36
|
+
Lob::V1::Route.new(self)
|
37
|
+
end
|
38
|
+
|
31
39
|
def services
|
32
40
|
Lob::V1::Service.new(self)
|
33
41
|
end
|
data/lib/lob/v1/route.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
module Lob
|
2
|
+
module V1
|
3
|
+
class Route
|
4
|
+
def initialize(resource)
|
5
|
+
@resource = resource
|
6
|
+
end
|
7
|
+
|
8
|
+
def list(options = {})
|
9
|
+
Lob.submit(:get, route_url, options)["data"] || []
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def route_url(route_id = nil)
|
15
|
+
@resource.construct_url("routes", route_id)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lob.gemspec
CHANGED
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "lob"
|
8
|
-
spec.version = "1.
|
8
|
+
spec.version = "1.4"
|
9
9
|
spec.authors = ["Lob"]
|
10
10
|
spec.email = ["support@lob.com"]
|
11
11
|
spec.description = %q{Lob API Ruby wrapper}
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lob::V1::Area do
|
4
|
+
before :each do
|
5
|
+
@sample_area_params = {
|
6
|
+
front: "https://www.lob.com/areafront.pdf",
|
7
|
+
back: "https://www.lob.com/areaback.pdf",
|
8
|
+
routes: ["94158-C001", "94107-C031"],
|
9
|
+
}
|
10
|
+
end
|
11
|
+
|
12
|
+
subject { Lob(api_key: ENV["LOB_API_KEY"], api_version: "v1") }
|
13
|
+
|
14
|
+
describe "list" do
|
15
|
+
it "should list areas" do
|
16
|
+
VCR.use_cassette('list_areas') do
|
17
|
+
@sample_area_params[:name] = "Test Area"
|
18
|
+
new_area = subject.areas.create @sample_area_params
|
19
|
+
|
20
|
+
list_result = subject.areas.list
|
21
|
+
|
22
|
+
assert /#{new_area["name"]}/ =~ list_result.to_s
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "create" do
|
28
|
+
it "should create an area object" do
|
29
|
+
VCR.use_cassette('create_area_object') do
|
30
|
+
result = subject.areas.create @sample_area_params
|
31
|
+
|
32
|
+
result["object"].must_equal("area")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should create an area object with optionals params" do
|
37
|
+
VCR.use_cassette('create_area_object_with_optional_params') do
|
38
|
+
@sample_area_params[:name] = "123456789"
|
39
|
+
@sample_area_params[:target_type] = "all"
|
40
|
+
@sample_area_params[:full_bleed] = "1"
|
41
|
+
|
42
|
+
result = subject.areas.create @sample_area_params
|
43
|
+
|
44
|
+
result["name"].must_equal @sample_area_params[:name]
|
45
|
+
result["target_type"].must_equal @sample_area_params[:target_type]
|
46
|
+
# TODO this should be added when Lob API is updated
|
47
|
+
# result["full_bleed"].must_equal(@sample_area_params[:full_bleed])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should create an area object with a single route" do
|
52
|
+
VCR.use_cassette('create_area_object_with_single_route') do
|
53
|
+
@sample_area_params[:routes] = "94158-C001"
|
54
|
+
result = subject.areas.create @sample_area_params
|
55
|
+
|
56
|
+
result["object"].must_equal("area")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should create an area object with zip_codes" do
|
61
|
+
VCR.use_cassette('create_area_object_with_zip') do
|
62
|
+
@sample_area_params.delete("routes")
|
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"
|
74
|
+
result = subject.areas.create @sample_area_params
|
75
|
+
|
76
|
+
result["object"].must_equal("area")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "find" do
|
82
|
+
it "should find an area" do
|
83
|
+
VCR.use_cassette('find_area') do
|
84
|
+
@sample_area_params[:name] = "Test Area"
|
85
|
+
new_area = subject.areas.create @sample_area_params
|
86
|
+
|
87
|
+
result = subject.areas.find new_area["id"]
|
88
|
+
result["name"].must_equal @sample_area_params[:name]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Lob::V1::Route do
|
4
|
+
subject { Lob(api_key: ENV["LOB_API_KEY"], api_version: "v1") }
|
5
|
+
|
6
|
+
describe "list" do
|
7
|
+
it "should list routes" do
|
8
|
+
VCR.use_cassette("list_routes") do
|
9
|
+
routes = subject.routes.list(
|
10
|
+
zip_codes: "94158"
|
11
|
+
)
|
12
|
+
|
13
|
+
routes[0]["zip_code"].must_equal("94158")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/spec/lob_spec.rb
CHANGED
@@ -1,19 +1,12 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
attr_accessor :options
|
7
|
-
def initialize(options)
|
8
|
-
@options = options
|
9
|
-
end
|
10
|
-
end
|
3
|
+
describe Lob do
|
4
|
+
it "should return the resource object for the valid version" do
|
5
|
+
Lob(api_key: "test", api_version: "v1").must_be_kind_of(Lob::V1::Resource)
|
11
6
|
end
|
12
|
-
end
|
13
7
|
|
14
|
-
|
15
|
-
|
16
|
-
Lob(api_key: "test", api_version: "test").must_be_kind_of(Lob::Test::Resource)
|
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)
|
17
10
|
end
|
18
11
|
|
19
12
|
it "should raise an error if API key is not passed as an option or set on module" do
|
@@ -43,4 +36,18 @@ describe Lob do
|
|
43
36
|
Lob.protocol.must_equal "https"
|
44
37
|
Lob.api_host.must_equal "api.lob.com"
|
45
38
|
end
|
39
|
+
|
40
|
+
it "should work with Lob.load" do
|
41
|
+
Lob.load(api_key: "test").options[:api_key].must_equal "test"
|
42
|
+
|
43
|
+
Lob.api_key = "test"
|
44
|
+
Lob.load.wont_be_nil
|
45
|
+
|
46
|
+
Lob.api_key = nil # make sure API key is nil
|
47
|
+
->{ Lob.load }.must_raise(ArgumentError)
|
48
|
+
|
49
|
+
->{Lob.load(api_key: "test", api_version: "test")}.must_raise(Lob::VersionInvalidError)
|
50
|
+
|
51
|
+
Lob.load(api_key: "test", api_version: "v1").must_be_kind_of(Lob::V1::Resource)
|
52
|
+
end
|
46
53
|
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.4'
|
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-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -152,6 +152,7 @@ files:
|
|
152
152
|
- lib/lob.rb
|
153
153
|
- lib/lob/lob_error.rb
|
154
154
|
- lib/lob/v1/address.rb
|
155
|
+
- lib/lob/v1/area.rb
|
155
156
|
- lib/lob/v1/bank_account.rb
|
156
157
|
- lib/lob/v1/check.rb
|
157
158
|
- lib/lob/v1/country.rb
|
@@ -160,10 +161,12 @@ files:
|
|
160
161
|
- lib/lob/v1/packaging.rb
|
161
162
|
- lib/lob/v1/postcard.rb
|
162
163
|
- lib/lob/v1/resource.rb
|
164
|
+
- lib/lob/v1/route.rb
|
163
165
|
- lib/lob/v1/service.rb
|
164
166
|
- lib/lob/v1/setting.rb
|
165
167
|
- lob.gemspec
|
166
168
|
- spec/lob/v1/address_spec.rb
|
169
|
+
- spec/lob/v1/area_spec.rb
|
167
170
|
- spec/lob/v1/bank_account_spec.rb
|
168
171
|
- spec/lob/v1/check_spec.rb
|
169
172
|
- spec/lob/v1/country_spec.rb
|
@@ -172,6 +175,7 @@ files:
|
|
172
175
|
- spec/lob/v1/packaging_spec.rb
|
173
176
|
- spec/lob/v1/postcard_spec.rb
|
174
177
|
- spec/lob/v1/resource_spec.rb
|
178
|
+
- spec/lob/v1/route_spec.rb
|
175
179
|
- spec/lob/v1/service_spec.rb
|
176
180
|
- spec/lob/v1/setting_spec.rb
|
177
181
|
- spec/lob_spec.rb
|
@@ -202,6 +206,7 @@ specification_version: 4
|
|
202
206
|
summary: Ruby wrapper for Lob.com API with ActiveRecord-style syntax
|
203
207
|
test_files:
|
204
208
|
- spec/lob/v1/address_spec.rb
|
209
|
+
- spec/lob/v1/area_spec.rb
|
205
210
|
- spec/lob/v1/bank_account_spec.rb
|
206
211
|
- spec/lob/v1/check_spec.rb
|
207
212
|
- spec/lob/v1/country_spec.rb
|
@@ -210,6 +215,7 @@ test_files:
|
|
210
215
|
- spec/lob/v1/packaging_spec.rb
|
211
216
|
- spec/lob/v1/postcard_spec.rb
|
212
217
|
- spec/lob/v1/resource_spec.rb
|
218
|
+
- spec/lob/v1/route_spec.rb
|
213
219
|
- spec/lob/v1/service_spec.rb
|
214
220
|
- spec/lob/v1/setting_spec.rb
|
215
221
|
- spec/lob_spec.rb
|