stamps 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/lib/stamps/configuration.rb +7 -7
- data/lib/stamps/errors.rb +4 -0
- data/lib/stamps/mapping.rb +12 -7
- data/lib/stamps/request.rb +19 -13
- data/lib/stamps/response.rb +5 -4
- data/lib/stamps/types.rb +12 -6
- data/lib/stamps/version.rb +1 -1
- data/stamps.gemspec +5 -3
- data/test/client/rate_test.rb +1 -1
- data/test/fixtures/GetRate.xml +79 -79
- data/test/fixtures/failed_auth.xml +10 -0
- data/test/helper.rb +2 -5
- data/test/request_test.rb +18 -0
- metadata +49 -15
- data/.rvmrc +0 -1
- data/Gemfile.lock +0 -53
data/.gitignore
CHANGED
data/lib/stamps/configuration.rb
CHANGED
@@ -16,10 +16,10 @@ module Stamps
|
|
16
16
|
:endpoint].freeze
|
17
17
|
|
18
18
|
# The endpoint that will be used to connect if none is set
|
19
|
-
DEFAULT_ENDPOINT = 'https://swsim.stamps.com/swsim/
|
20
|
-
|
19
|
+
DEFAULT_ENDPOINT = 'https://swsim.stamps.com/swsim/swsimv29.asmx'.freeze
|
20
|
+
|
21
21
|
# The default namespace used on Stamps.com wsdl
|
22
|
-
DEFAULT_NAMESPACE = 'http://stamps.com/xml/namespace/2010/11/swsim/
|
22
|
+
DEFAULT_NAMESPACE = 'http://stamps.com/xml/namespace/2010/11/swsim/swsimv29'
|
23
23
|
|
24
24
|
# @note JSON is preferred over XML because it is more concise and faster to parse.
|
25
25
|
DEFAULT_FORMAT = :hash
|
@@ -46,10 +46,10 @@ module Stamps
|
|
46
46
|
yield self
|
47
47
|
|
48
48
|
HTTPI.log = false
|
49
|
-
Savon.configure do |config|
|
50
|
-
|
51
|
-
|
52
|
-
end
|
49
|
+
# Savon.configure do |config|
|
50
|
+
# config.log = self.log_messages
|
51
|
+
# config.raise_errors = self.raise_errors
|
52
|
+
# end
|
53
53
|
end
|
54
54
|
|
55
55
|
# Create a hash of options and their values
|
data/lib/stamps/errors.rb
CHANGED
@@ -31,4 +31,8 @@ module Stamps
|
|
31
31
|
# Raised when Stamps.com returns the HTTP status code 503
|
32
32
|
class ServiceUnavailable < Error; end
|
33
33
|
|
34
|
+
# Raised when the get_authenticator_token returns errors
|
35
|
+
# See https://github.com/mattsears/stamps/issues/7
|
36
|
+
class InvalidIntegrationID < Error; end
|
37
|
+
|
34
38
|
end
|
data/lib/stamps/mapping.rb
CHANGED
@@ -73,21 +73,26 @@ module Stamps
|
|
73
73
|
|
74
74
|
# Maps :rate to AddOns map
|
75
75
|
def add_ons=(addons)
|
76
|
-
self[:AddOns] = AddOnsArray.new(:
|
76
|
+
self[:AddOns] = AddOnsArray.new(:add_on_v4 => addons[:add_on_v4])
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
80
|
class AddOnsArray < Hashie::Trash
|
81
|
-
property :
|
82
|
-
def
|
81
|
+
property :AddOnV4, :from => :add_on_v4
|
82
|
+
def add_on_v4=(vals)
|
83
83
|
return unless vals
|
84
|
-
self[:
|
84
|
+
self[:AddOnV4] = vals.map{ |value| AddOnV4.new(value).to_hash }
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
|
-
class
|
88
|
+
class AddOnV4 < Hashie::Trash
|
89
89
|
property :Amount, :from => :amount
|
90
|
-
property :AddOnType, :from => :
|
90
|
+
property :AddOnType, :from => :add_on_type
|
91
|
+
property :ProhibitedWithAnyOf, :from => :prohibited_with
|
92
|
+
property :MissingData, :from => :missing_data
|
93
|
+
def prohibited_with_any_of; end
|
94
|
+
def prohibited_with_any_of=(vals); end
|
95
|
+
property :RequiresAllOf, :from => :requires_all_of
|
91
96
|
end
|
92
97
|
|
93
98
|
class Stamp < Hashie::Trash
|
@@ -103,7 +108,7 @@ module Stamps
|
|
103
108
|
property :ImageType, :from => :image_type
|
104
109
|
property :EltronPrinterDPIType, :from => :label_resolution
|
105
110
|
property :memo
|
106
|
-
property :recipient_email
|
111
|
+
property :recipient_email
|
107
112
|
property :deliveryNotification, :from => :notify
|
108
113
|
property :shipmentNotificationCC, :from => :notify_crates
|
109
114
|
property :shipmentNotificationFromCompany, :from => :notify_from_company
|
data/lib/stamps/request.rb
CHANGED
@@ -9,19 +9,20 @@ module Stamps
|
|
9
9
|
|
10
10
|
# Perform an HTTP request
|
11
11
|
def request(web_method, params, raw=false)
|
12
|
-
client = Savon
|
13
|
-
|
14
|
-
|
12
|
+
client = Savon.client do |globals|
|
13
|
+
globals.endpoint self.endpoint
|
14
|
+
globals.namespace self.namespace
|
15
|
+
globals.namespaces("xmlns:tns" => self.namespace)
|
16
|
+
globals.log false
|
17
|
+
globals.logger Logger.new(STDOUT)
|
18
|
+
globals.raise_errors false
|
19
|
+
globals.headers({ "SoapAction" => formatted_soap_action(web_method) })
|
20
|
+
globals.element_form_default :qualified
|
21
|
+
globals.namespace_identifier :tns
|
15
22
|
end
|
16
23
|
|
17
|
-
response = client.
|
18
|
-
|
19
|
-
soap.namespace = 'tns'
|
20
|
-
soap.element_form_default = :qualified
|
21
|
-
soap.env_namespace = 'soap'
|
22
|
-
soap.namespaces["xmlns:tns"] = self.namespace
|
23
|
-
soap.body = params.to_hash
|
24
|
-
end
|
24
|
+
response = client.call(web_method, :message => params.to_hash)
|
25
|
+
|
25
26
|
Stamps::Response.new(response).to_hash
|
26
27
|
end
|
27
28
|
|
@@ -36,14 +37,19 @@ module Stamps
|
|
36
37
|
# Make Authentication request for the user
|
37
38
|
#
|
38
39
|
def get_authenticator_token
|
39
|
-
self.request('AuthenticateUser',
|
40
|
+
response_hash = self.request('AuthenticateUser',
|
40
41
|
Stamps::Mapping::AuthenticateUser.new(
|
41
42
|
:credentials => {
|
42
43
|
:integration_id => self.integration_id,
|
43
44
|
:username => self.username,
|
44
45
|
:password => self.password
|
45
46
|
})
|
46
|
-
)
|
47
|
+
)
|
48
|
+
if response_hash[:authenticate_user_response] != nil
|
49
|
+
response_hash[:authenticate_user_response][:authenticator]
|
50
|
+
else
|
51
|
+
raise Stamps::InvalidIntegrationID.new(response_hash[:errors][0])
|
52
|
+
end
|
47
53
|
end
|
48
54
|
|
49
55
|
# Concatenates namespace and web method in a way the API can understand
|
data/lib/stamps/response.rb
CHANGED
@@ -23,7 +23,8 @@ module Stamps
|
|
23
23
|
self.hash.merge!(:errors => self.errors)
|
24
24
|
self.hash.merge!(:valid? => self.valid)
|
25
25
|
self.hash
|
26
|
-
|
26
|
+
# binding.pry
|
27
|
+
Stamps.format.to_s.downcase == 'hashie' ? Hashie::Trash.new(@hash) : self.hash
|
27
28
|
end
|
28
29
|
|
29
30
|
# Um, there's gotta be a better way
|
@@ -37,7 +38,7 @@ module Stamps
|
|
37
38
|
#
|
38
39
|
def raise_errors
|
39
40
|
message = 'FIXME: Need to parse http for response message'
|
40
|
-
return
|
41
|
+
return self.format_soap_faults if savon.soap_fault?
|
41
42
|
|
42
43
|
case http.code.to_i
|
43
44
|
when 200
|
@@ -62,8 +63,8 @@ module Stamps
|
|
62
63
|
# Include any errors in the response
|
63
64
|
#
|
64
65
|
def format_soap_faults
|
65
|
-
fault = self.hash.delete(:fault)
|
66
|
-
self.errors << fault[:faultstring]
|
66
|
+
fault = self.hash.delete("soap:Fault") || self.hash.delete(:fault)
|
67
|
+
self.errors << (fault[:faultstring] || fault["faultstring"])
|
67
68
|
self.valid = false
|
68
69
|
end
|
69
70
|
|
data/lib/stamps/types.rb
CHANGED
@@ -16,17 +16,24 @@ module Stamps
|
|
16
16
|
'Flat Rate Envelope',
|
17
17
|
'Flat Rate Padded Envelope',
|
18
18
|
'Large Package',
|
19
|
-
'Oversized Package'
|
19
|
+
'Oversized Package',
|
20
|
+
'Regional Rate Box A',
|
21
|
+
'Regional Rate Box B',
|
22
|
+
'Legal Flat Rate Envelope',
|
23
|
+
'Regional Rate Box C'].freeze
|
20
24
|
|
21
25
|
SERVICE = {
|
22
26
|
'US-FC' => 'USPS First-Class Mail',
|
23
27
|
'US-MM' => 'USPS Media Mail',
|
24
|
-
'US-PP' => 'USPS Parcel Post',
|
25
28
|
'US-PM' => 'USPS Priority Mail',
|
29
|
+
'US-BP' => 'USPS BP',
|
30
|
+
'US-LM' => 'USPS LM',
|
26
31
|
'US-XM' => 'USPS Express Mail',
|
27
32
|
'US-EMI' => 'USPS Express Mail International',
|
28
33
|
'US-PMI' => 'USPS Priority Mail International',
|
29
|
-
'US-FCI' => 'USPS First Class Mail International'
|
34
|
+
'US-FCI' => 'USPS First Class Mail International',
|
35
|
+
'US-CM' => 'USPS Critical Mail',
|
36
|
+
'US-PS' => 'USPS Parcel Select'
|
30
37
|
}
|
31
38
|
|
32
39
|
ADD_ONS = {
|
@@ -46,10 +53,9 @@ module Stamps
|
|
46
53
|
'US-A-RRM' => 'Return Receipt for Merchandise',
|
47
54
|
'US-A-SC' => 'USPS Signature Confirmation',
|
48
55
|
'US-A-SH' => 'Special Handling',
|
49
|
-
'US-A-WDS' => 'USPS Express - Waive Delivery Signature',
|
50
|
-
'US-A-NDW' => 'Do not Deliver on Saturday',
|
51
|
-
'US-A-ESH' => 'Sunday/Holiday Delivery Guaranteed',
|
52
56
|
'US-A-NND' => 'Notice of non-delivery',
|
57
|
+
'US-A-SR' => 'Unknow Service Name SR',
|
58
|
+
'US-A-RRE' => 'Unknow Service Name RRE'
|
53
59
|
}
|
54
60
|
|
55
61
|
CARRIER_PICKUP_LOCATION = {
|
data/lib/stamps/version.rb
CHANGED
data/stamps.gemspec
CHANGED
@@ -26,13 +26,15 @@ Gem::Specification.new do |s|
|
|
26
26
|
s.add_development_dependency('awesome_print')
|
27
27
|
s.add_development_dependency('yard')
|
28
28
|
s.add_development_dependency('bluecloth')
|
29
|
+
s.add_development_dependency('rake')
|
30
|
+
s.add_development_dependency('pry')
|
29
31
|
|
30
32
|
# We have to use savon 0.8.6 for now since newer versions of savon don't
|
31
33
|
# convert booleans, dates, or decimals consistently.
|
32
34
|
# See: https://github.com/rubiii/savon/issues/301
|
33
|
-
s.add_runtime_dependency('savon', '
|
34
|
-
s.add_runtime_dependency('httpi', '
|
35
|
-
s.add_runtime_dependency('json', '~> 1.
|
35
|
+
s.add_runtime_dependency('savon', '~> 2.3.0')
|
36
|
+
s.add_runtime_dependency('httpi', '~> 2.1.0')
|
37
|
+
s.add_runtime_dependency('json', '~> 1.0')
|
36
38
|
s.add_runtime_dependency('multi_json', '~> 1.0')
|
37
39
|
s.add_runtime_dependency('hashie', '~> 1.0.0')
|
38
40
|
end
|
data/test/client/rate_test.rb
CHANGED
data/test/fixtures/GetRate.xml
CHANGED
@@ -16,141 +16,141 @@
|
|
16
16
|
<ShipDate>2011-04-21</ShipDate>
|
17
17
|
<DimWeighting>N</DimWeighting>
|
18
18
|
<AddOns>
|
19
|
-
<
|
19
|
+
<AddOnV4>
|
20
20
|
<AddOnType>US-A-INS</AddOnType>
|
21
21
|
<ProhibitedWithAnyOf>
|
22
|
-
<
|
23
|
-
<
|
24
|
-
<
|
25
|
-
<
|
26
|
-
<
|
22
|
+
<AddOnTypeV4>SC-A-HP</AddOnTypeV4>
|
23
|
+
<AddOnTypeV4>US-A-REG</AddOnTypeV4>
|
24
|
+
<AddOnTypeV4>US-A-CM</AddOnTypeV4>
|
25
|
+
<AddOnTypeV4>US-A-COD</AddOnTypeV4>
|
26
|
+
<AddOnTypeV4>SC-A-INS</AddOnTypeV4>
|
27
27
|
</ProhibitedWithAnyOf>
|
28
28
|
<MissingData>InsuredValue</MissingData>
|
29
|
-
</
|
30
|
-
<
|
29
|
+
</AddOnV4>
|
30
|
+
<AddOnV4>
|
31
31
|
<AddOnType>US-A-COD</AddOnType>
|
32
32
|
<ProhibitedWithAnyOf>
|
33
|
-
<
|
34
|
-
<
|
35
|
-
<
|
36
|
-
<
|
33
|
+
<AddOnTypeV4>SC-A-HP</AddOnTypeV4>
|
34
|
+
<AddOnTypeV4>US-A-RRM</AddOnTypeV4>
|
35
|
+
<AddOnTypeV4>US-A-INS</AddOnTypeV4>
|
36
|
+
<AddOnTypeV4>US-A-CM</AddOnTypeV4>
|
37
37
|
</ProhibitedWithAnyOf>
|
38
38
|
<MissingData>CODValue</MissingData>
|
39
|
-
</
|
40
|
-
<
|
39
|
+
</AddOnV4>
|
40
|
+
<AddOnV4>
|
41
41
|
<AddOnType>US-A-DC</AddOnType>
|
42
42
|
<ProhibitedWithAnyOf>
|
43
|
-
<
|
44
|
-
<
|
43
|
+
<AddOnTypeV4>US-A-SC</AddOnTypeV4>
|
44
|
+
<AddOnTypeV4>US-A-CM</AddOnTypeV4>
|
45
45
|
</ProhibitedWithAnyOf>
|
46
|
-
</
|
47
|
-
<
|
46
|
+
</AddOnV4>
|
47
|
+
<AddOnV4>
|
48
48
|
<Amount>2.05</Amount>
|
49
49
|
<AddOnType>US-A-SC</AddOnType>
|
50
50
|
<ProhibitedWithAnyOf>
|
51
|
-
<
|
52
|
-
<
|
53
|
-
<
|
51
|
+
<AddOnTypeV4>US-A-DC</AddOnTypeV4>
|
52
|
+
<AddOnTypeV4>US-A-CM</AddOnTypeV4>
|
53
|
+
<AddOnTypeV4>US-A-RRM</AddOnTypeV4>
|
54
54
|
</ProhibitedWithAnyOf>
|
55
|
-
</
|
56
|
-
<
|
55
|
+
</AddOnV4>
|
56
|
+
<AddOnV4>
|
57
57
|
<Amount>2.85</Amount>
|
58
58
|
<AddOnType>US-A-CM</AddOnType>
|
59
59
|
<ProhibitedWithAnyOf>
|
60
|
-
<
|
61
|
-
<
|
62
|
-
<
|
63
|
-
<
|
64
|
-
<
|
65
|
-
<
|
66
|
-
<
|
60
|
+
<AddOnTypeV4>SC-A-HP</AddOnTypeV4>
|
61
|
+
<AddOnTypeV4>US-A-RRM</AddOnTypeV4>
|
62
|
+
<AddOnTypeV4>US-A-REG</AddOnTypeV4>
|
63
|
+
<AddOnTypeV4>US-A-DC</AddOnTypeV4>
|
64
|
+
<AddOnTypeV4>US-A-COD</AddOnTypeV4>
|
65
|
+
<AddOnTypeV4>US-A-SC</AddOnTypeV4>
|
66
|
+
<AddOnTypeV4>US-A-INS</AddOnTypeV4>
|
67
67
|
</ProhibitedWithAnyOf>
|
68
|
-
</
|
69
|
-
<
|
68
|
+
</AddOnV4>
|
69
|
+
<AddOnV4>
|
70
70
|
<Amount>2.3</Amount>
|
71
71
|
<AddOnType>US-A-RR</AddOnType>
|
72
72
|
<RequiresAllOf>
|
73
73
|
<RequiresOneOf>
|
74
|
-
<
|
75
|
-
<
|
76
|
-
<
|
77
|
-
<
|
74
|
+
<AddOnTypeV4>US-A-COD</AddOnTypeV4>
|
75
|
+
<AddOnTypeV4>US-A-REG</AddOnTypeV4>
|
76
|
+
<AddOnTypeV4>US-A-CM</AddOnTypeV4>
|
77
|
+
<AddOnTypeV4>US-A-INS</AddOnTypeV4>
|
78
78
|
</RequiresOneOf>
|
79
79
|
</RequiresAllOf>
|
80
80
|
<ProhibitedWithAnyOf>
|
81
|
-
<
|
82
|
-
<
|
81
|
+
<AddOnTypeV4>SC-A-HP</AddOnTypeV4>
|
82
|
+
<AddOnTypeV4>US-A-RRM</AddOnTypeV4>
|
83
83
|
</ProhibitedWithAnyOf>
|
84
|
-
</
|
85
|
-
<
|
84
|
+
</AddOnV4>
|
85
|
+
<AddOnV4>
|
86
86
|
<Amount>10.75</Amount>
|
87
87
|
<AddOnType>US-A-REG</AddOnType>
|
88
88
|
<ProhibitedWithAnyOf>
|
89
|
-
<
|
90
|
-
<
|
91
|
-
<
|
92
|
-
<
|
93
|
-
<
|
89
|
+
<AddOnTypeV4>SC-A-HP</AddOnTypeV4>
|
90
|
+
<AddOnTypeV4>US-A-CM</AddOnTypeV4>
|
91
|
+
<AddOnTypeV4>US-A-INS</AddOnTypeV4>
|
92
|
+
<AddOnTypeV4>US-A-RRM</AddOnTypeV4>
|
93
|
+
<AddOnTypeV4>SC-A-INS</AddOnTypeV4>
|
94
94
|
</ProhibitedWithAnyOf>
|
95
|
-
</
|
96
|
-
<
|
95
|
+
</AddOnV4>
|
96
|
+
<AddOnV4>
|
97
97
|
<Amount>4.5</Amount>
|
98
98
|
<AddOnType>US-A-RD</AddOnType>
|
99
99
|
<RequiresAllOf>
|
100
100
|
<RequiresOneOf>
|
101
|
-
<
|
102
|
-
<
|
103
|
-
<
|
104
|
-
<
|
101
|
+
<AddOnTypeV4>US-A-COD</AddOnTypeV4>
|
102
|
+
<AddOnTypeV4>US-A-REG</AddOnTypeV4>
|
103
|
+
<AddOnTypeV4>US-A-CM</AddOnTypeV4>
|
104
|
+
<AddOnTypeV4>US-A-INS</AddOnTypeV4>
|
105
105
|
</RequiresOneOf>
|
106
106
|
</RequiresAllOf>
|
107
107
|
<ProhibitedWithAnyOf>
|
108
|
-
<
|
109
|
-
<
|
108
|
+
<AddOnTypeV4>SC-A-HP</AddOnTypeV4>
|
109
|
+
<AddOnTypeV4>US-A-RRM</AddOnTypeV4>
|
110
110
|
</ProhibitedWithAnyOf>
|
111
|
-
</
|
112
|
-
<
|
111
|
+
</AddOnV4>
|
112
|
+
<AddOnV4>
|
113
113
|
<AddOnType>SC-A-INS</AddOnType>
|
114
114
|
<ProhibitedWithAnyOf>
|
115
|
-
<
|
116
|
-
<
|
115
|
+
<AddOnTypeV4>US-A-REG</AddOnTypeV4>
|
116
|
+
<AddOnTypeV4>US-A-INS</AddOnTypeV4>
|
117
117
|
</ProhibitedWithAnyOf>
|
118
118
|
<MissingData>InsuredValue</MissingData>
|
119
|
-
</
|
120
|
-
<
|
119
|
+
</AddOnV4>
|
120
|
+
<AddOnV4>
|
121
121
|
<AddOnType>SC-A-HP</AddOnType>
|
122
122
|
<ProhibitedWithAnyOf>
|
123
|
-
<
|
124
|
-
<
|
125
|
-
<
|
126
|
-
<
|
127
|
-
<
|
128
|
-
<
|
129
|
-
<
|
123
|
+
<AddOnTypeV4>US-A-RRM</AddOnTypeV4>
|
124
|
+
<AddOnTypeV4>US-A-INS</AddOnTypeV4>
|
125
|
+
<AddOnTypeV4>US-A-REG</AddOnTypeV4>
|
126
|
+
<AddOnTypeV4>US-A-RD</AddOnTypeV4>
|
127
|
+
<AddOnTypeV4>US-A-COD</AddOnTypeV4>
|
128
|
+
<AddOnTypeV4>US-A-CM</AddOnTypeV4>
|
129
|
+
<AddOnTypeV4>US-A-RR</AddOnTypeV4>
|
130
130
|
</ProhibitedWithAnyOf>
|
131
|
-
</
|
132
|
-
<
|
131
|
+
</AddOnV4>
|
132
|
+
<AddOnV4>
|
133
133
|
<Amount>3.9</Amount>
|
134
134
|
<AddOnType>US-A-NND</AddOnType>
|
135
135
|
<RequiresAllOf>
|
136
136
|
<RequiresOneOf>
|
137
|
-
<
|
137
|
+
<AddOnTypeV4>US-A-COD</AddOnTypeV4>
|
138
138
|
</RequiresOneOf>
|
139
139
|
</RequiresAllOf>
|
140
|
-
</
|
141
|
-
<
|
140
|
+
</AddOnV4>
|
141
|
+
<AddOnV4>
|
142
142
|
<Amount>3.85</Amount>
|
143
143
|
<AddOnType>US-A-RRM</AddOnType>
|
144
144
|
<ProhibitedWithAnyOf>
|
145
|
-
<
|
146
|
-
<
|
147
|
-
<
|
148
|
-
<
|
149
|
-
<
|
150
|
-
<
|
151
|
-
<
|
145
|
+
<AddOnTypeV4>SC-A-HP</AddOnTypeV4>
|
146
|
+
<AddOnTypeV4>US-A-REG</AddOnTypeV4>
|
147
|
+
<AddOnTypeV4>US-A-RD</AddOnTypeV4>
|
148
|
+
<AddOnTypeV4>US-A-COD</AddOnTypeV4>
|
149
|
+
<AddOnTypeV4>US-A-SC</AddOnTypeV4>
|
150
|
+
<AddOnTypeV4>US-A-CM</AddOnTypeV4>
|
151
|
+
<AddOnTypeV4>US-A-RR</AddOnTypeV4>
|
152
152
|
</ProhibitedWithAnyOf>
|
153
|
-
</
|
153
|
+
</AddOnV4>
|
154
154
|
</AddOns>
|
155
155
|
<EffectiveWeightInOunces>8</EffectiveWeightInOunces>
|
156
156
|
<IsIntraBMC>true</IsIntraBMC>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
2
|
+
<soap:Body>
|
3
|
+
<soap:Fault>
|
4
|
+
<faultcode>soap:Client</faultcode>
|
5
|
+
<faultstring>Server did not recognize the value of HTTP Header SOAPAction: http://stamps.com/xml/namespace/2013/05/swsim/swsimv26/AuthenticateUser.</faultstring>
|
6
|
+
<detail />
|
7
|
+
</soap:Fault>
|
8
|
+
</soap:Body>
|
9
|
+
</soap:Envelope>
|
10
|
+
|
data/test/helper.rb
CHANGED
@@ -35,6 +35,7 @@ end
|
|
35
35
|
# Stub requests
|
36
36
|
def stub_post(web_method, soap_action = nil)
|
37
37
|
soap_action = web_method if soap_action.nil?
|
38
|
+
|
38
39
|
stub_request(:post, Stamps.endpoint).
|
39
40
|
with(:headers => {"SoapAction" => "#{Stamps.namespace}/#{soap_action}"}).
|
40
41
|
to_return(:body => fixture("#{web_method}.xml"))
|
@@ -42,7 +43,7 @@ end
|
|
42
43
|
|
43
44
|
def stub_response(web_method, code = 200)
|
44
45
|
http_response = HTTPI::Response.new(code, {}, fixture("#{web_method}.xml").read)
|
45
|
-
Stamps::Response.new(Savon::
|
46
|
+
Stamps::Response.new(Savon::Response.new(http_response, {}, {}))
|
46
47
|
end
|
47
48
|
|
48
49
|
def fixture_path
|
@@ -52,7 +53,3 @@ end
|
|
52
53
|
def fixture(file)
|
53
54
|
File.new(fixture_path + '/' + file)
|
54
55
|
end
|
55
|
-
|
56
|
-
Savon.configure do |config|
|
57
|
-
config.log = false # disable logging
|
58
|
-
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__) # allows command line to execute tests
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class RequestTest < Test::Unit::TestCase
|
5
|
+
context "get_authenticator_token" do
|
6
|
+
context "with invalid authentication token" do
|
7
|
+
setup do
|
8
|
+
stub_post("failed_auth", "AuthenticateUser")
|
9
|
+
end
|
10
|
+
|
11
|
+
should "raise an exception" do
|
12
|
+
assert_raises Stamps::InvalidIntegrationID do
|
13
|
+
Stamps::API.new.get_authenticator_token
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stamps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.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:
|
12
|
+
date: 2013-08-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: simplecov
|
@@ -123,38 +123,70 @@ dependencies:
|
|
123
123
|
- - ! '>='
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: rake
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: pry
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
126
158
|
- !ruby/object:Gem::Dependency
|
127
159
|
name: savon
|
128
160
|
requirement: !ruby/object:Gem::Requirement
|
129
161
|
none: false
|
130
162
|
requirements:
|
131
|
-
- -
|
163
|
+
- - ~>
|
132
164
|
- !ruby/object:Gem::Version
|
133
|
-
version:
|
165
|
+
version: 2.3.0
|
134
166
|
type: :runtime
|
135
167
|
prerelease: false
|
136
168
|
version_requirements: !ruby/object:Gem::Requirement
|
137
169
|
none: false
|
138
170
|
requirements:
|
139
|
-
- -
|
171
|
+
- - ~>
|
140
172
|
- !ruby/object:Gem::Version
|
141
|
-
version:
|
173
|
+
version: 2.3.0
|
142
174
|
- !ruby/object:Gem::Dependency
|
143
175
|
name: httpi
|
144
176
|
requirement: !ruby/object:Gem::Requirement
|
145
177
|
none: false
|
146
178
|
requirements:
|
147
|
-
- -
|
179
|
+
- - ~>
|
148
180
|
- !ruby/object:Gem::Version
|
149
|
-
version:
|
181
|
+
version: 2.1.0
|
150
182
|
type: :runtime
|
151
183
|
prerelease: false
|
152
184
|
version_requirements: !ruby/object:Gem::Requirement
|
153
185
|
none: false
|
154
186
|
requirements:
|
155
|
-
- -
|
187
|
+
- - ~>
|
156
188
|
- !ruby/object:Gem::Version
|
157
|
-
version:
|
189
|
+
version: 2.1.0
|
158
190
|
- !ruby/object:Gem::Dependency
|
159
191
|
name: json
|
160
192
|
requirement: !ruby/object:Gem::Requirement
|
@@ -162,7 +194,7 @@ dependencies:
|
|
162
194
|
requirements:
|
163
195
|
- - ~>
|
164
196
|
- !ruby/object:Gem::Version
|
165
|
-
version: 1.
|
197
|
+
version: '1.0'
|
166
198
|
type: :runtime
|
167
199
|
prerelease: false
|
168
200
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -170,7 +202,7 @@ dependencies:
|
|
170
202
|
requirements:
|
171
203
|
- - ~>
|
172
204
|
- !ruby/object:Gem::Version
|
173
|
-
version: 1.
|
205
|
+
version: '1.0'
|
174
206
|
- !ruby/object:Gem::Dependency
|
175
207
|
name: multi_json
|
176
208
|
requirement: !ruby/object:Gem::Requirement
|
@@ -213,9 +245,7 @@ extensions: []
|
|
213
245
|
extra_rdoc_files: []
|
214
246
|
files:
|
215
247
|
- .gitignore
|
216
|
-
- .rvmrc
|
217
248
|
- Gemfile
|
218
|
-
- Gemfile.lock
|
219
249
|
- LICENSE.md
|
220
250
|
- README.md
|
221
251
|
- Rakefile
|
@@ -251,8 +281,10 @@ files:
|
|
251
281
|
- test/fixtures/InvalidSoap.xml
|
252
282
|
- test/fixtures/PurchasePostage.xml
|
253
283
|
- test/fixtures/TrackShipment.xml
|
284
|
+
- test/fixtures/failed_auth.xml
|
254
285
|
- test/helper.rb
|
255
286
|
- test/mapping_test.rb
|
287
|
+
- test/request_test.rb
|
256
288
|
- test/response_test.rb
|
257
289
|
- test/stamps_test.rb
|
258
290
|
- test/types_test.rb
|
@@ -276,7 +308,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
276
308
|
version: '0'
|
277
309
|
requirements: []
|
278
310
|
rubyforge_project: stamps
|
279
|
-
rubygems_version: 1.8.
|
311
|
+
rubygems_version: 1.8.23
|
280
312
|
signing_key:
|
281
313
|
specification_version: 3
|
282
314
|
summary: Ruby wrapper for the Stamps.com Web Services API
|
@@ -297,8 +329,10 @@ test_files:
|
|
297
329
|
- test/fixtures/InvalidSoap.xml
|
298
330
|
- test/fixtures/PurchasePostage.xml
|
299
331
|
- test/fixtures/TrackShipment.xml
|
332
|
+
- test/fixtures/failed_auth.xml
|
300
333
|
- test/helper.rb
|
301
334
|
- test/mapping_test.rb
|
335
|
+
- test/request_test.rb
|
302
336
|
- test/response_test.rb
|
303
337
|
- test/stamps_test.rb
|
304
338
|
- test/types_test.rb
|
data/.rvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rvm 1.9.2@stamps --create
|
data/Gemfile.lock
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
stamps (0.2.0)
|
5
|
-
hashie (~> 1.0.0)
|
6
|
-
httpi (= 0.7.9)
|
7
|
-
json (~> 1.5.1)
|
8
|
-
multi_json (~> 1.0)
|
9
|
-
savon (= 0.8.6)
|
10
|
-
|
11
|
-
GEM
|
12
|
-
remote: http://rubygems.org/
|
13
|
-
specs:
|
14
|
-
addressable (2.2.4)
|
15
|
-
awesome_print (0.3.2)
|
16
|
-
bluecloth (2.1.0)
|
17
|
-
builder (3.0.0)
|
18
|
-
crack (0.1.8)
|
19
|
-
gyoku (0.4.5)
|
20
|
-
builder (>= 2.1.2)
|
21
|
-
hashie (1.0.0)
|
22
|
-
httpi (0.7.9)
|
23
|
-
rack
|
24
|
-
json (1.5.4)
|
25
|
-
mocha (0.9.12)
|
26
|
-
multi_json (1.3.6)
|
27
|
-
rack (1.4.1)
|
28
|
-
savon (0.8.6)
|
29
|
-
builder (>= 2.1.2)
|
30
|
-
crack (~> 0.1.8)
|
31
|
-
gyoku (>= 0.3.0)
|
32
|
-
httpi (>= 0.7.8)
|
33
|
-
shoulda (2.11.3)
|
34
|
-
simplecov (0.4.1)
|
35
|
-
simplecov-html (~> 0.4.3)
|
36
|
-
simplecov-html (0.4.3)
|
37
|
-
webmock (1.6.2)
|
38
|
-
addressable (>= 2.2.2)
|
39
|
-
crack (>= 0.1.7)
|
40
|
-
yard (0.6.8)
|
41
|
-
|
42
|
-
PLATFORMS
|
43
|
-
ruby
|
44
|
-
|
45
|
-
DEPENDENCIES
|
46
|
-
awesome_print
|
47
|
-
bluecloth
|
48
|
-
mocha (~> 0.9.11)
|
49
|
-
shoulda (~> 2.11.3)
|
50
|
-
simplecov (~> 0.4.0)
|
51
|
-
stamps!
|
52
|
-
webmock (~> 1.6.2)
|
53
|
-
yard
|