sendle_api 0.1.4 → 0.2.0
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/lib/dev/config.rb +4 -2
- data/lib/dev/zeitwerk_loader.rb +3 -1
- data/lib/sendle_api/configuration.rb +2 -0
- data/lib/sendle_api/errors.rb +8 -53
- data/lib/sendle_api/resources/address.rb +4 -2
- data/lib/sendle_api/resources/base.rb +1 -0
- data/lib/sendle_api/resources/contact.rb +3 -1
- data/lib/sendle_api/resources/order.rb +6 -5
- data/lib/sendle_api/resources/receiver.rb +3 -1
- data/lib/sendle_api/resources/sender.rb +7 -5
- data/lib/sendle_api/resources/tracking.rb +2 -0
- data/lib/sendle_api/resources/volume.rb +5 -3
- data/lib/sendle_api/resources/weight.rb +4 -3
- data/lib/sendle_api/version.rb +1 -1
- data/lib/sendle_api.rb +2 -3
- data/sendle_api.gemspec +10 -9
- metadata +33 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a6d36701b1b8fa5816f7e19a6e4e19da3d169c2b1e3001310e7480a6f1c87a0
|
4
|
+
data.tar.gz: 0fd6ab34c7f2d65ef57b6c0a6a2b12d329055a3b2601d39247f2c825741d4a2e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e27eaf700d38a76b4db7437109013328bbeaa0c3d1dbb44aff6eaa4cece40e12b83c9c5af87f9538e4bd4d4695a65cfc2b66be70c9f126639beb80230f6f555
|
7
|
+
data.tar.gz: 8a0de62d7bf13843cf38e55549bf2858711dcf9275a1be9a46d8416928c7b09443856d9c9e761079abe9cc5391a098c93bea46a912ee3f7fd1cdf0ed069b211a
|
data/lib/dev/config.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "dotenv/load"
|
2
4
|
|
3
5
|
def set_config
|
4
6
|
SendleAPI.configure do |config|
|
5
|
-
config.sendle_id = ENV["SENDLE_ID"]
|
7
|
+
config.sendle_id = ENV["SENDLE_ID"]
|
6
8
|
config.api_key = ENV["SENDLE_API_KEY"]
|
7
9
|
config.testing = true
|
8
10
|
end
|
9
|
-
end
|
11
|
+
end
|
data/lib/dev/zeitwerk_loader.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "zeitwerk"
|
2
4
|
require_relative "config"
|
3
5
|
|
4
6
|
loader = Zeitwerk::Loader.for_gem
|
5
7
|
loader.inflector.inflect(
|
6
|
-
"sendle_api" => "SendleAPI"
|
8
|
+
"sendle_api" => "SendleAPI",
|
7
9
|
)
|
8
10
|
loader.push_dir("./lib")
|
9
11
|
loader.collapse("./lib/sendle_api/resources")
|
data/lib/sendle_api/errors.rb
CHANGED
@@ -1,71 +1,26 @@
|
|
1
|
-
|
2
1
|
require "active_support/core_ext/array/wrap"
|
3
2
|
require "active_support/core_ext/object/blank"
|
4
3
|
|
5
4
|
module SendleAPI
|
6
|
-
class Errors <
|
7
|
-
# Grabs errors from an array of messages (like ActiveRecord::Validations).
|
8
|
-
# The second parameter directs the errors cache to be cleared (default)
|
9
|
-
# or not (by passing true).
|
10
|
-
def from_array(messages, save_cache = false)
|
11
|
-
clear unless save_cache
|
12
|
-
humanized_attributes = Hash[@base.known_attributes.map { |attr_name| [attr_name.humanize, attr_name] }]
|
13
|
-
messages.each do |message|
|
14
|
-
attr_message = humanized_attributes.keys.sort_by { |a| -a.length }.detect do |attr_name|
|
15
|
-
if message[0, attr_name.size + 1] == "#{attr_name} "
|
16
|
-
add humanized_attributes[attr_name], message[(attr_name.size + 1)..-1]
|
17
|
-
end
|
18
|
-
end
|
19
|
-
self[:base] << message if attr_message.nil?
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
# Grabs errors from a hash of attribute => array of errors elements
|
24
|
-
# The second parameter directs the errors cache to be cleared (default)
|
25
|
-
# or not (by passing true)
|
26
|
-
#
|
27
|
-
# Unrecognized attribute names will be humanized and added to the record's
|
28
|
-
# base errors.
|
5
|
+
class Errors < ActiveResource::Errors
|
29
6
|
def from_hash(messages, save_cache = false)
|
30
7
|
clear unless save_cache
|
31
8
|
|
32
|
-
|
33
|
-
|
34
|
-
messages.
|
35
|
-
|
36
|
-
messages.each do |(key, errors)|
|
9
|
+
add(:base, messages["error_description"]) if messages["error_description"]
|
10
|
+
|
11
|
+
messages["messages"].each do |(key, errors)|
|
37
12
|
errors.each do |error|
|
38
13
|
if @base.known_attributes.include?(key)
|
39
|
-
add
|
14
|
+
add(key, error)
|
40
15
|
elsif key == "base"
|
41
|
-
|
16
|
+
add(:base, error)
|
42
17
|
else
|
43
18
|
# reporting an error on an attribute not in attributes
|
44
19
|
# format and add them to base
|
45
|
-
|
20
|
+
add(:base, "#{key.humanize} #{error}")
|
46
21
|
end
|
47
22
|
end
|
48
23
|
end
|
49
24
|
end
|
50
|
-
|
51
|
-
# Grabs errors from a json response.
|
52
|
-
def from_json(json, save_cache = false)
|
53
|
-
decoded = ActiveSupport::JSON.decode(json) || {} rescue {}
|
54
|
-
if decoded.kind_of?(Hash) && (decoded.has_key?("errors") || decoded.empty?)
|
55
|
-
errors = decoded["errors"] || {}
|
56
|
-
if errors.kind_of?(Array)
|
57
|
-
# 3.2.1-style with array of strings
|
58
|
-
ActiveSupport::Deprecation.warn("Returning errors as an array of strings is deprecated.")
|
59
|
-
from_array errors, save_cache
|
60
|
-
else
|
61
|
-
# 3.2.2+ style
|
62
|
-
from_hash errors, save_cache
|
63
|
-
end
|
64
|
-
else
|
65
|
-
# <3.2-style respond_with - lacks 'errors' key
|
66
|
-
ActiveSupport::Deprecation.warn('Returning errors as a hash without a root "errors" key is deprecated.')
|
67
|
-
from_hash decoded, save_cache
|
68
|
-
end
|
69
|
-
end
|
70
25
|
end
|
71
|
-
end
|
26
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SendleAPI
|
2
4
|
class Address < Base
|
3
5
|
include NotSaveable
|
@@ -7,9 +9,9 @@ module SendleAPI
|
|
7
9
|
suburb: nil,
|
8
10
|
state_name: nil,
|
9
11
|
postcode: nil,
|
10
|
-
country: nil
|
12
|
+
country: nil,
|
11
13
|
}
|
12
14
|
|
13
15
|
validates :address_line1, :suburb, :state_name, :postcode, :country, presence: true
|
14
16
|
end
|
15
|
-
end
|
17
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "digest/sha1"
|
2
4
|
|
3
5
|
module SendleAPI
|
4
6
|
class Order < Base
|
@@ -8,7 +10,7 @@ module SendleAPI
|
|
8
10
|
has_one :receiver, class_name: Receiver
|
9
11
|
|
10
12
|
validates :description, :weight, :sender, :receiver, presence: true
|
11
|
-
validates :first_mile_option, inclusion: { in: ["pickup", "drop off"]}
|
13
|
+
validates :first_mile_option, inclusion: { in: ["pickup", "drop off"] }
|
12
14
|
|
13
15
|
DEFAULT_ATTRS = {
|
14
16
|
pickup_date: nil,
|
@@ -20,7 +22,7 @@ module SendleAPI
|
|
20
22
|
weight: Weight.new,
|
21
23
|
volume: Volume.new,
|
22
24
|
sender: Sender.new,
|
23
|
-
receiver: Receiver.new
|
25
|
+
receiver: Receiver.new,
|
24
26
|
}
|
25
27
|
|
26
28
|
CHILD_OBJECT_KEYS_FOR_VALIDATION = [:weight, :volume, :sender, :receiver]
|
@@ -47,8 +49,7 @@ module SendleAPI
|
|
47
49
|
end
|
48
50
|
|
49
51
|
def set_idempotency_key_header
|
50
|
-
self.class.headers.merge!("Idempotency-Key": Digest::SHA1.hexdigest(
|
52
|
+
self.class.headers.merge!("Idempotency-Key": Digest::SHA1.hexdigest(encode))
|
51
53
|
end
|
52
|
-
|
53
54
|
end
|
54
55
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SendleAPI
|
2
4
|
class Receiver < Base
|
3
5
|
include NotSaveable
|
@@ -10,7 +12,7 @@ module SendleAPI
|
|
10
12
|
DEFAULT_ATTRS = {
|
11
13
|
contact: Contact.new,
|
12
14
|
address: Address.new,
|
13
|
-
instructions: ""
|
15
|
+
instructions: "",
|
14
16
|
}
|
15
17
|
|
16
18
|
CHILD_OBJECT_KEYS_FOR_VALIDATION = [:contact, :address]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SendleAPI
|
2
4
|
class Sender < Base
|
3
5
|
include NotSaveable
|
@@ -7,11 +9,11 @@ module SendleAPI
|
|
7
9
|
|
8
10
|
validates :contact, :address, presence: true
|
9
11
|
validate :address_country_valid
|
10
|
-
|
12
|
+
|
11
13
|
DEFAULT_ATTRS = {
|
12
14
|
contact: Contact.new,
|
13
15
|
address: Address.new,
|
14
|
-
instructions: ""
|
16
|
+
instructions: "",
|
15
17
|
}
|
16
18
|
|
17
19
|
CHILD_OBJECT_KEYS_FOR_VALIDATION = [:contact, :address]
|
@@ -20,9 +22,9 @@ module SendleAPI
|
|
20
22
|
|
21
23
|
def address_country_valid
|
22
24
|
return unless address
|
23
|
-
|
24
|
-
valid_sender_countries = [
|
25
|
-
unless valid_sender_countries.include?
|
25
|
+
|
26
|
+
valid_sender_countries = ["AU", "US", "Australia", "United States"]
|
27
|
+
unless valid_sender_countries.include?(address.country)
|
26
28
|
errors.add(:sender_address_country, "Must be from #{valid_sender_countries}")
|
27
29
|
end
|
28
30
|
end
|
@@ -1,11 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SendleAPI
|
2
4
|
class Volume < Base
|
3
5
|
include NotSaveable
|
4
6
|
|
5
7
|
DEFAULT_ATTRS = {
|
6
8
|
value: nil,
|
7
|
-
units: nil
|
9
|
+
units: nil,
|
8
10
|
}
|
9
|
-
validates :units, inclusion: { in:
|
11
|
+
validates :units, inclusion: { in: ["m3", "in3"] }, if: -> { value.present? }
|
10
12
|
end
|
11
|
-
end
|
13
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
module SendleAPI
|
3
4
|
class Weight < Base
|
@@ -5,10 +6,10 @@ module SendleAPI
|
|
5
6
|
|
6
7
|
DEFAULT_ATTRS = {
|
7
8
|
value: nil,
|
8
|
-
units: nil
|
9
|
+
units: nil,
|
9
10
|
}
|
10
11
|
|
11
12
|
validates :value, presence: true
|
12
|
-
validates :units, inclusion: { in:
|
13
|
+
validates :units, inclusion: { in: ["lb", "kg"] }
|
13
14
|
end
|
14
|
-
end
|
15
|
+
end
|
data/lib/sendle_api/version.rb
CHANGED
data/lib/sendle_api.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "sendle_api/version"
|
2
4
|
require "active_resource"
|
3
5
|
|
4
6
|
module SendleAPI
|
5
|
-
require "phonelib"
|
6
|
-
require "countries"
|
7
|
-
|
8
7
|
require "sendle_api/configuration"
|
9
8
|
require "sendle_api/not_saveable"
|
10
9
|
require "sendle_api/errors"
|
data/sendle_api.gemspec
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require_relative "lib/sendle_api/version"
|
3
4
|
|
4
5
|
Gem::Specification.new do |spec|
|
@@ -20,23 +21,23 @@ Gem::Specification.new do |spec|
|
|
20
21
|
|
21
22
|
# Specify which files should be added to the gem when it is released.
|
22
23
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
|
-
spec.files =
|
24
|
-
|
25
|
-
|
24
|
+
spec.files =
|
25
|
+
Dir.chdir(File.expand_path("..", __FILE__)) do
|
26
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
27
|
+
end
|
26
28
|
spec.bindir = "exe"
|
27
29
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
30
|
spec.require_paths = ["lib"]
|
29
31
|
|
30
|
-
spec.add_dependency("activeresource", ">=
|
31
|
-
spec.add_dependency("countries", "~> 3.0")
|
32
|
-
spec.add_dependency("phonelib", "~> 0.6")
|
32
|
+
spec.add_dependency("activeresource", ">= 6.1.0")
|
33
33
|
|
34
|
-
spec.add_development_dependency("rspec", "~> 3.2")
|
35
34
|
spec.add_development_dependency("dotenv")
|
36
|
-
spec.add_development_dependency("pry-byebug")
|
37
|
-
spec.add_development_dependency("pry")
|
38
35
|
spec.add_development_dependency("guard-rspec")
|
36
|
+
spec.add_development_dependency("pry")
|
37
|
+
spec.add_development_dependency("pry-byebug")
|
38
|
+
spec.add_development_dependency("rspec", "~> 3.2")
|
39
39
|
spec.add_development_dependency("rubocop")
|
40
40
|
spec.add_development_dependency("rubocop-shopify")
|
41
|
+
spec.add_development_dependency("zeitwerk", "~> 2.1", ">= 2.1.8")
|
41
42
|
spec.metadata["rubygems_mfa_required"] = "true"
|
42
43
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sendle_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Chong
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activeresource
|
@@ -16,58 +16,44 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 6.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 6.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '3.0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '3.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: phonelib
|
28
|
+
name: dotenv
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
|
-
- - "
|
31
|
+
- - ">="
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0
|
48
|
-
type: :
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
|
-
- - "
|
38
|
+
- - ">="
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0
|
40
|
+
version: '0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
|
-
name: rspec
|
42
|
+
name: guard-rspec
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
|
-
- - "
|
45
|
+
- - ">="
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
47
|
+
version: '0'
|
62
48
|
type: :development
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
|
-
- - "
|
52
|
+
- - ">="
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
54
|
+
version: '0'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
56
|
+
name: pry
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
59
|
- - ">="
|
@@ -95,21 +81,21 @@ dependencies:
|
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
84
|
+
name: rspec
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
|
-
- - "
|
87
|
+
- - "~>"
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
89
|
+
version: '3.2'
|
104
90
|
type: :development
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
|
-
- - "
|
94
|
+
- - "~>"
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
96
|
+
version: '3.2'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
98
|
+
name: rubocop
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
101
|
- - ">="
|
@@ -123,7 +109,7 @@ dependencies:
|
|
123
109
|
- !ruby/object:Gem::Version
|
124
110
|
version: '0'
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
|
-
name: rubocop
|
112
|
+
name: rubocop-shopify
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
128
114
|
requirements:
|
129
115
|
- - ">="
|
@@ -137,19 +123,25 @@ dependencies:
|
|
137
123
|
- !ruby/object:Gem::Version
|
138
124
|
version: '0'
|
139
125
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
126
|
+
name: zeitwerk
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
142
128
|
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '2.1'
|
143
132
|
- - ">="
|
144
133
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
134
|
+
version: 2.1.8
|
146
135
|
type: :development
|
147
136
|
prerelease: false
|
148
137
|
version_requirements: !ruby/object:Gem::Requirement
|
149
138
|
requirements:
|
139
|
+
- - "~>"
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '2.1'
|
150
142
|
- - ">="
|
151
143
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
144
|
+
version: 2.1.8
|
153
145
|
description:
|
154
146
|
email:
|
155
147
|
- andygg1996personal@gmail.com
|
@@ -211,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
211
203
|
- !ruby/object:Gem::Version
|
212
204
|
version: '0'
|
213
205
|
requirements: []
|
214
|
-
rubygems_version: 3.
|
206
|
+
rubygems_version: 3.5.23
|
215
207
|
signing_key:
|
216
208
|
specification_version: 4
|
217
209
|
summary: Ruby object based Sendle API wrapper.
|