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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a80399749f497c0cfb91bbf482a96ad8a41b74c7c759014ea6cfc755b7f2127b
4
- data.tar.gz: 790d234ef4b3f8dda30f789e8a92f99663df66fd3e2a8693c02502346811494c
3
+ metadata.gz: 3a6d36701b1b8fa5816f7e19a6e4e19da3d169c2b1e3001310e7480a6f1c87a0
4
+ data.tar.gz: 0fd6ab34c7f2d65ef57b6c0a6a2b12d329055a3b2601d39247f2c825741d4a2e
5
5
  SHA512:
6
- metadata.gz: e596d9496665068ac763770b8d99f6bd40e302b1055235fce94372020af86e311adcc200f967da4579dba9f4afd7f8b847feffa239eb5e9d609865e29c32cf58
7
- data.tar.gz: f4073cfbfe00bb060522da79de8d680ebd68fbc3892678fed7612738369787281902a942c0d345b1e02aa3c1a544ec1d678616f7fd7a1f309598b8d1fa1ed05d
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
@@ -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")
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SendleAPI
2
4
  class Configuration
3
5
  attr_accessor :sendle_id, :api_key, :testing
@@ -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 < ActiveModel::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
- # delete top level not-needed keys
33
- messages.delete("error")
34
- messages.delete("error_description")
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 key, error
14
+ add(key, error)
40
15
  elsif key == "base"
41
- self[:base] << error
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
- self[:base] << "#{key.humanize} #{error}"
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,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module SendleAPI
3
4
  class Base < ::ActiveResource::Base
4
5
  validate :child_object_validations
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SendleAPI
2
4
  class Contact < Base
3
5
  include NotSaveable
@@ -12,4 +14,4 @@ module SendleAPI
12
14
 
13
15
  FIELDS = [:name, :phone, :company]
14
16
  end
15
- end
17
+ end
@@ -1,4 +1,6 @@
1
- require 'digest/sha1'
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(self.encode))
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 = ['AU', 'US', 'Australia', 'United States']
25
- unless valid_sender_countries.include? address.country
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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SendleAPI
2
4
  class Tracking < Base
3
5
  self.prefix = "/api/tracking"
@@ -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: %w(m3 in3) }, if: -> {value.present?}
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: %w(lb kg) }
13
+ validates :units, inclusion: { in: ["lb", "kg"] }
13
14
  end
14
- end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module SendleAPI
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
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 = Dir.chdir(File.expand_path("..", __FILE__)) do
24
- %x(git ls-files -z).split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
- end
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", ">= 4.1.0")
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.1.4
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: 2022-04-12 00:00:00.000000000 Z
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: 4.1.0
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: 4.1.0
26
+ version: 6.1.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: countries
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.6'
48
- type: :runtime
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.6'
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: '3.2'
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: '3.2'
54
+ version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
- name: dotenv
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: pry
84
+ name: rspec
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - ">="
87
+ - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '0'
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: '0'
96
+ version: '3.2'
111
97
  - !ruby/object:Gem::Dependency
112
- name: guard-rspec
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: rubocop-shopify
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: '0'
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: '0'
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.2.32
206
+ rubygems_version: 3.5.23
215
207
  signing_key:
216
208
  specification_version: 4
217
209
  summary: Ruby object based Sendle API wrapper.