click_and_send 0.1.0 → 0.1.1
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.
- data/lib/click_and_send/request/manifest_items.rb +16 -0
- data/lib/click_and_send/request/print_manifest.rb +16 -0
- data/lib/click_and_send/request.rb +5 -2
- data/lib/click_and_send/version.rb +1 -1
- data/lib/click_and_send.rb +13 -1
- data/spec/acceptance_spec.rb +53 -8
- data/spec/click_and_send/request_spec.rb +3 -3
- data/spec/click_and_send/xml_spec.rb +1 -1
- data/spec/click_and_send_spec.rb +44 -7
- data/spec/support/factories.rb +0 -8
- metadata +6 -4
@@ -0,0 +1,16 @@
|
|
1
|
+
module ClickAndSend
|
2
|
+
module Request
|
3
|
+
class ManifestItems
|
4
|
+
include ClickAndSend::Request
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
def keys
|
9
|
+
{ :answer => :ws_manifest_items_answer,
|
10
|
+
:request => 'WSManifestItems',
|
11
|
+
:response => :ws_manifest_items_response,
|
12
|
+
:result => nil }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module ClickAndSend
|
2
|
+
module Request
|
3
|
+
class PrintManifest
|
4
|
+
include ClickAndSend::Request
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
def keys
|
9
|
+
{ :answer => :ws_print_manifest_answer,
|
10
|
+
:request => 'WSPrintManifest',
|
11
|
+
:response => :ws_print_manifest_response,
|
12
|
+
:result => nil }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -11,7 +11,11 @@ module ClickAndSend
|
|
11
11
|
|
12
12
|
def result
|
13
13
|
raise_on_error
|
14
|
-
|
14
|
+
if key(:result)
|
15
|
+
response.fetch(key(:result))
|
16
|
+
else
|
17
|
+
response
|
18
|
+
end
|
15
19
|
end
|
16
20
|
|
17
21
|
private
|
@@ -95,7 +99,6 @@ module ClickAndSend
|
|
95
99
|
result = Nori.parse(raw)
|
96
100
|
result.fetch(key(:answer))
|
97
101
|
rescue IndexError => e
|
98
|
-
# binding.pry
|
99
102
|
raise
|
100
103
|
end
|
101
104
|
end
|
data/lib/click_and_send.rb
CHANGED
@@ -8,7 +8,9 @@ require 'click_and_send/request/check_services'
|
|
8
8
|
require 'click_and_send/request/create_items'
|
9
9
|
require 'click_and_send/request/delete_items'
|
10
10
|
require 'click_and_send/request/item_summary'
|
11
|
+
require 'click_and_send/request/manifest_items'
|
11
12
|
require 'click_and_send/request/print_item'
|
13
|
+
require 'click_and_send/request/print_manifest'
|
12
14
|
require 'click_and_send/xml'
|
13
15
|
|
14
16
|
module ClickAndSend
|
@@ -84,6 +86,11 @@ module ClickAndSend
|
|
84
86
|
end
|
85
87
|
end
|
86
88
|
|
89
|
+
def manifest_items(options)
|
90
|
+
ensure_keys_present(options, %w(ManifestItems))
|
91
|
+
ClickAndSend::Request::ManifestItems.new(options).result
|
92
|
+
end
|
93
|
+
|
87
94
|
def pdf_url(ref)
|
88
95
|
ref = ref.to_s
|
89
96
|
tracking_numbers = find_tracking_numbers([ref])[ref] || {}
|
@@ -91,7 +98,7 @@ module ClickAndSend
|
|
91
98
|
when 0 then raise(Errors::APIError, "Not found: '#{ref}'")
|
92
99
|
when 1 then tracking_number = tracking_numbers.first
|
93
100
|
else
|
94
|
-
raise(Errors::APIError, "Expected 1 but found #{tracking_numbers.length} tracking numbers for '
|
101
|
+
raise(Errors::APIError, "Expected 1 but found #{tracking_numbers.length} tracking numbers for '#{ref}': #{tracking_numbers.join(', ')}")
|
95
102
|
end
|
96
103
|
hash = ActiveSupport::OrderedHash.new
|
97
104
|
hash['PrintFormat' ] = 'LINK'
|
@@ -100,6 +107,11 @@ module ClickAndSend
|
|
100
107
|
Request::PrintItem.new(hash).result
|
101
108
|
end
|
102
109
|
|
110
|
+
def print_manifest(options)
|
111
|
+
ensure_keys_present(options, %w(PrintFormat PrintDetails ManifestNumber))
|
112
|
+
ClickAndSend::Request::PrintManifest.new(options).result.fetch(:manifest_http_link)
|
113
|
+
end
|
114
|
+
|
103
115
|
private
|
104
116
|
|
105
117
|
def configured_logfile
|
data/spec/acceptance_spec.rb
CHANGED
@@ -32,20 +32,20 @@ describe ClickAndSend, :acceptance do
|
|
32
32
|
subject { ClickAndSend.find_tracking_numbers([ref]) }
|
33
33
|
specify do
|
34
34
|
should be_a(Hash)
|
35
|
-
subject.keys.should
|
35
|
+
subject.keys.should eq([ref.to_s])
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
39
|
describe '.pdf_url' do
|
40
40
|
subject { ClickAndSend.pdf_url(ref) }
|
41
|
-
|
41
|
+
it "returns URL for PDF" do
|
42
42
|
subject.should be_a(String)
|
43
|
-
open(subject).content_type.should
|
43
|
+
open(subject).content_type.should eq('application/pdf')
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
describe '.delete_items_by_ref' do
|
48
|
-
|
48
|
+
it "deletes item" do
|
49
49
|
expect do
|
50
50
|
ClickAndSend.delete_items_by_ref([ref])
|
51
51
|
end.to change { ClickAndSend.find_tracking_numbers([ref]).empty? }.to(true)
|
@@ -62,10 +62,12 @@ describe ClickAndSend, :acceptance do
|
|
62
62
|
describe '.delete_items' do
|
63
63
|
let(:items) do
|
64
64
|
tracking_numbers.collect do |tracking_number|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
{
|
66
|
+
'DeleteItem' => ActiveSupport::OrderedHash.new.tap do |hash|
|
67
|
+
hash['CustTransactionID'] = ref
|
68
|
+
hash['TrackingNumber' ] = tracking_number
|
69
|
+
end
|
70
|
+
}
|
69
71
|
end
|
70
72
|
end
|
71
73
|
let(:tracking_numbers) { ClickAndSend.find_tracking_numbers([ref]).fetch(ref.to_s) }
|
@@ -90,4 +92,47 @@ describe ClickAndSend, :acceptance do
|
|
90
92
|
subject { ClickAndSend.item_summary }
|
91
93
|
specify { should be_a(Array) }
|
92
94
|
end
|
95
|
+
|
96
|
+
context "manifest when item uploaded" do
|
97
|
+
let(:manifest) { ClickAndSend.manifest_items(manifest_items) }
|
98
|
+
let(:items_created) { ClickAndSend.create_items('Transactions' => attributes_for('Transaction')) }
|
99
|
+
let(:manifest_items) do
|
100
|
+
{
|
101
|
+
'ManifestItems' => [
|
102
|
+
{
|
103
|
+
'ManifestItem' => ActiveSupport::OrderedHash.new.tap do |hash|
|
104
|
+
hash['CustTransactionID'] = ref
|
105
|
+
hash['TrackingNumber' ] = tracking_number
|
106
|
+
end
|
107
|
+
}
|
108
|
+
]
|
109
|
+
}
|
110
|
+
end
|
111
|
+
let(:ref) { items_created.fetch(:cust_transaction_id) }
|
112
|
+
let(:tracking_number) { items_created.fetch(:tracking_number) }
|
113
|
+
|
114
|
+
describe '.manifest_items' do
|
115
|
+
it "returns manifest number and total charges/taxes" do
|
116
|
+
expect { manifest }.not_to raise_error
|
117
|
+
manifest.should be_a(Hash)
|
118
|
+
manifest.keys.should =~ [:manifest_number, :total_charge, :total_taxes]
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe '.print_manifest' do
|
123
|
+
let(:print_manifest) { ClickAndSend.print_manifest(options) }
|
124
|
+
let(:options) do
|
125
|
+
ActiveSupport::OrderedHash.new.tap do |hash|
|
126
|
+
hash['PrintFormat'] = 'LINK'
|
127
|
+
hash['PrintDetails'] = 'ALL'
|
128
|
+
hash['ManifestNumber'] = manifest[:manifest_number]
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
it "returns URL for PDF" do
|
133
|
+
print_manifest.should be_a(String)
|
134
|
+
open(print_manifest).content_type.should eq('application/pdf')
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
93
138
|
end
|
@@ -6,11 +6,11 @@ describe ClickAndSend::Request do
|
|
6
6
|
|
7
7
|
describe '.new' do
|
8
8
|
it "defaults data to an empty hash" do
|
9
|
-
subject.data.should
|
9
|
+
subject.data.should eq({})
|
10
10
|
end
|
11
11
|
|
12
12
|
it "sets data" do
|
13
|
-
klass.new('foo').data.should
|
13
|
+
klass.new('foo').data.should eq('foo')
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -67,7 +67,7 @@ describe ClickAndSend::Request do
|
|
67
67
|
request = stub.as_null_object
|
68
68
|
client.should_receive(:request) { request }
|
69
69
|
Nori.should_receive(:parse).with(request.to_hash[:ws_something_response][:ws_something_response])
|
70
|
-
subject.should
|
70
|
+
subject.should eq('the result')
|
71
71
|
end
|
72
72
|
|
73
73
|
context "when error key present in response" do
|
data/spec/click_and_send_spec.rb
CHANGED
@@ -13,7 +13,7 @@ describe ClickAndSend do
|
|
13
13
|
context "configured" do
|
14
14
|
before { ClickAndSend.configure {} }
|
15
15
|
it { should be_a(ClickAndSend::Configuration) }
|
16
|
-
its(:api_version) { should
|
16
|
+
its(:api_version) { should eq(10) }
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -84,7 +84,7 @@ describe ClickAndSend do
|
|
84
84
|
let(:options) { {'Sender' => stub, 'Receiver' => stub, 'ItemDetails' => stub} }
|
85
85
|
it "fetches :product_found from CheckServices result" do
|
86
86
|
ClickAndSend::Request::CheckServices.should_receive(:new) { stub(:result => {:product_found => 'services'}) }
|
87
|
-
subject.should
|
87
|
+
subject.should eq('services')
|
88
88
|
end
|
89
89
|
end
|
90
90
|
end
|
@@ -96,7 +96,7 @@ describe ClickAndSend do
|
|
96
96
|
it_behaves_like "data required"
|
97
97
|
it "fetches :item_created from CreateItems result" do
|
98
98
|
ClickAndSend::Request::CreateItems.should_receive(:new) { stub(:result => {:item_created => 'created'}) }
|
99
|
-
subject.should
|
99
|
+
subject.should eq('created')
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
@@ -120,7 +120,7 @@ describe ClickAndSend do
|
|
120
120
|
it "calls DeleteItems result" do
|
121
121
|
pending "Won't work this way until TODO completed for ClickAndSend#delete_items."
|
122
122
|
ClickAndSend::Request::DeleteItems.should_receive(:new).with(options) { stub(:result => 'deleted') }
|
123
|
-
subject.should
|
123
|
+
subject.should eq('deleted')
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
@@ -133,7 +133,7 @@ describe ClickAndSend do
|
|
133
133
|
end
|
134
134
|
before { ClickAndSend.stub(:item_summary) { item_summary } }
|
135
135
|
it { should be_a(Hash) }
|
136
|
-
its(:keys) { should
|
136
|
+
its(:keys) { should eq(['REF']) }
|
137
137
|
it "includes tracking numbers for REF" do
|
138
138
|
subject.values.first.should include('TRACK-REF-1')
|
139
139
|
subject.values.first.should include('TRACK-REF-2')
|
@@ -149,7 +149,23 @@ describe ClickAndSend do
|
|
149
149
|
ClickAndSend::Request::ItemSummary.should_receive(:new) do
|
150
150
|
stub(:result => {:item_summary_transaction => 'items'})
|
151
151
|
end
|
152
|
-
subject.should
|
152
|
+
subject.should eq('items')
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
describe '.manifest_items' do
|
157
|
+
subject { ClickAndSend.manifest_items(options) }
|
158
|
+
let(:required_inputs) { %w(ManifestItems) }
|
159
|
+
it_behaves_like "data required"
|
160
|
+
|
161
|
+
context "when input has valid keys" do
|
162
|
+
it "calls ManifestItems result" do
|
163
|
+
manifest_items = stub
|
164
|
+
options = {'ManifestItems' => stub}
|
165
|
+
ClickAndSend::Request::ManifestItems.should_receive(:new).with(options) { manifest_items }
|
166
|
+
manifest_items.should_receive(:result)
|
167
|
+
ClickAndSend.manifest_items(options)
|
168
|
+
end
|
153
169
|
end
|
154
170
|
end
|
155
171
|
|
@@ -175,7 +191,7 @@ describe ClickAndSend do
|
|
175
191
|
ClickAndSend::Request::PrintItem.should_receive(:new).with(options) do
|
176
192
|
stub(:result => pdf_url)
|
177
193
|
end
|
178
|
-
subject.should
|
194
|
+
subject.should eq(pdf_url)
|
179
195
|
end
|
180
196
|
end
|
181
197
|
|
@@ -193,5 +209,26 @@ describe ClickAndSend do
|
|
193
209
|
end
|
194
210
|
end
|
195
211
|
end
|
212
|
+
|
213
|
+
describe '.print_manifest' do
|
214
|
+
subject { ClickAndSend.print_manifest(options) }
|
215
|
+
let(:required_inputs) { %w(PrintFormat PrintDetails ManifestNumber) }
|
216
|
+
it_behaves_like "data required"
|
217
|
+
|
218
|
+
context "when input has valid keys" do
|
219
|
+
it "calls PrintManifest result" do
|
220
|
+
result = stub
|
221
|
+
print_manifest = stub(:result => result)
|
222
|
+
result.stub(:fetch).with(:manifest_http_link) { 'the link' }
|
223
|
+
options = ActiveSupport::OrderedHash.new.tap do |hash|
|
224
|
+
required_inputs.each do |required_input|
|
225
|
+
hash[required_input] = stub
|
226
|
+
end
|
227
|
+
end
|
228
|
+
ClickAndSend::Request::PrintManifest.should_receive(:new).with(options) { print_manifest }
|
229
|
+
ClickAndSend.print_manifest(options).should eq('the link')
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
196
233
|
end
|
197
234
|
end
|
data/spec/support/factories.rb
CHANGED
@@ -101,13 +101,6 @@ module ClickAndSend
|
|
101
101
|
Faker::Name.name
|
102
102
|
end
|
103
103
|
|
104
|
-
def payment_details_attributes
|
105
|
-
ActiveSupport::OrderedHash.new.tap do |hash|
|
106
|
-
hash['PaymentType'] = '01'
|
107
|
-
hash['PaymentData'] = ClickAndSend.configuration.account_number
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
104
|
def phone_number
|
112
105
|
Faker::PhoneNumber.phone_number.gsub(/[^\d]/, '')
|
113
106
|
end
|
@@ -123,7 +116,6 @@ module ClickAndSend
|
|
123
116
|
hash['Receiver' ] = us_address_attributes
|
124
117
|
hash['ItemDetails' ] = item_details_attributes
|
125
118
|
hash['ProductCode' ] = '1'
|
126
|
-
hash['PaymentDetails' ] = payment_details_attributes
|
127
119
|
end
|
128
120
|
end
|
129
121
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: click_and_send
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -148,7 +148,9 @@ files:
|
|
148
148
|
- lib/click_and_send/request/create_items.rb
|
149
149
|
- lib/click_and_send/request/delete_items.rb
|
150
150
|
- lib/click_and_send/request/item_summary.rb
|
151
|
+
- lib/click_and_send/request/manifest_items.rb
|
151
152
|
- lib/click_and_send/request/print_item.rb
|
153
|
+
- lib/click_and_send/request/print_manifest.rb
|
152
154
|
- lib/click_and_send/version.rb
|
153
155
|
- lib/click_and_send/xml.rb
|
154
156
|
- log/.gitkeep
|
@@ -176,7 +178,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
176
178
|
version: '0'
|
177
179
|
segments:
|
178
180
|
- 0
|
179
|
-
hash: -
|
181
|
+
hash: -2750192198691146344
|
180
182
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
183
|
none: false
|
182
184
|
requirements:
|
@@ -185,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
185
187
|
version: '0'
|
186
188
|
segments:
|
187
189
|
- 0
|
188
|
-
hash: -
|
190
|
+
hash: -2750192198691146344
|
189
191
|
requirements: []
|
190
192
|
rubyforge_project:
|
191
193
|
rubygems_version: 1.8.24
|