janio_api 0.2.1 → 0.3.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/.github/workflows/rspec.yml +42 -0
- data/Gemfile.lock +41 -1
- data/Guardfile +70 -0
- data/bin/console +5 -1
- data/bin/setup +4 -6
- data/janio_api.gemspec +3 -0
- data/lib/dev/config.rb +2 -1
- data/lib/dev/zeitwerk_loader.rb +4 -0
- data/lib/janio_api/connection.rb +0 -31
- data/lib/janio_api/resources/order.rb +83 -88
- data/lib/janio_api/services_list.rb +28068 -0
- data/lib/janio_api/version.rb +1 -1
- data/lib/janio_api.rb +5 -3
- metadata +47 -3
- data/lib/janio_api/exceptions.rb +0 -79
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa093e0f5ad7e07588aaf0c058fea09ef6ee4fbfa7e44044557e0fa313dc15cd
|
4
|
+
data.tar.gz: da73f1b6206dc12d175a71fbf6c73b43562eb4ec0c99b36dd5579c8bebf35863
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 934f2a7a98afd7dec8d84212fb4233484c7f31521812e4b2ca2e91060dff3f87a35f49c35e60b73f103de6257accaaafab0f079978f3809534f19fad2a4b3f3f
|
7
|
+
data.tar.gz: 569852e237c4db83f14c3092604ecfd27f1edd01aef5ac72ec93ed3021c810c816167c19bb2bf3bb25aeb7f4bd867afa7a86e463bcc85ced8696343f94f1fbe1
|
@@ -0,0 +1,42 @@
|
|
1
|
+
name: Rspec
|
2
|
+
|
3
|
+
on: [push]
|
4
|
+
|
5
|
+
env:
|
6
|
+
POSTGRES_USER: postgres
|
7
|
+
POSTGRES_PASSWORD: "postgres"
|
8
|
+
POSTGRES_DB: "postco_test"
|
9
|
+
|
10
|
+
jobs:
|
11
|
+
rspec:
|
12
|
+
name: Rspec
|
13
|
+
runs-on: ubuntu-latest
|
14
|
+
strategy:
|
15
|
+
matrix:
|
16
|
+
ruby: ["2.5", "2.6", "2.7"]
|
17
|
+
steps:
|
18
|
+
- name: Checkout to repo
|
19
|
+
uses: actions/checkout@master
|
20
|
+
|
21
|
+
- name: Set up Ruby
|
22
|
+
uses: ruby/setup-ruby@v1
|
23
|
+
with:
|
24
|
+
ruby-version: ${{ matrix.ruby }}
|
25
|
+
|
26
|
+
- name: Cache ruby gems
|
27
|
+
uses: actions/cache@v1
|
28
|
+
with:
|
29
|
+
path: vendor/bundle
|
30
|
+
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
31
|
+
restore-keys: |
|
32
|
+
${{ runner.os }}-gems-
|
33
|
+
|
34
|
+
- name: Build gem
|
35
|
+
run: |
|
36
|
+
gem install bundler
|
37
|
+
bundle config path vendor/bundle
|
38
|
+
bundle install --jobs 4 --retry 3
|
39
|
+
|
40
|
+
- name: Run rspec tests
|
41
|
+
run: |
|
42
|
+
bundle exec rspec spec
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
janio_api (0.2.
|
4
|
+
janio_api (0.2.1)
|
5
5
|
activeresource
|
6
|
+
countries
|
7
|
+
phonelib
|
6
8
|
|
7
9
|
GEM
|
8
10
|
remote: https://rubygems.org/
|
@@ -27,12 +29,42 @@ GEM
|
|
27
29
|
byebug (11.1.1)
|
28
30
|
coderay (1.1.2)
|
29
31
|
concurrent-ruby (1.1.6)
|
32
|
+
countries (3.0.0)
|
33
|
+
i18n_data (~> 0.8.0)
|
34
|
+
sixarm_ruby_unaccent (~> 1.1)
|
35
|
+
unicode_utils (~> 1.4)
|
30
36
|
diff-lcs (1.3)
|
31
37
|
dotenv (2.7.5)
|
38
|
+
ffi (1.12.2)
|
39
|
+
formatador (0.2.5)
|
40
|
+
guard (2.16.2)
|
41
|
+
formatador (>= 0.2.4)
|
42
|
+
listen (>= 2.7, < 4.0)
|
43
|
+
lumberjack (>= 1.0.12, < 2.0)
|
44
|
+
nenv (~> 0.1)
|
45
|
+
notiffany (~> 0.0)
|
46
|
+
pry (>= 0.9.12)
|
47
|
+
shellany (~> 0.0)
|
48
|
+
thor (>= 0.18.1)
|
49
|
+
guard-compat (1.2.1)
|
50
|
+
guard-rspec (4.7.3)
|
51
|
+
guard (~> 2.1)
|
52
|
+
guard-compat (~> 1.1)
|
53
|
+
rspec (>= 2.99.0, < 4.0)
|
32
54
|
i18n (1.8.2)
|
33
55
|
concurrent-ruby (~> 1.0)
|
56
|
+
i18n_data (0.8.0)
|
57
|
+
listen (3.2.1)
|
58
|
+
rb-fsevent (~> 0.10, >= 0.10.3)
|
59
|
+
rb-inotify (~> 0.9, >= 0.9.10)
|
60
|
+
lumberjack (1.2.4)
|
34
61
|
method_source (1.0.0)
|
35
62
|
minitest (5.14.0)
|
63
|
+
nenv (0.3.0)
|
64
|
+
notiffany (0.1.3)
|
65
|
+
nenv (~> 0.1)
|
66
|
+
shellany (~> 0.0)
|
67
|
+
phonelib (0.6.43)
|
36
68
|
pry (0.13.1)
|
37
69
|
coderay (~> 1.1)
|
38
70
|
method_source (~> 1.0)
|
@@ -40,6 +72,9 @@ GEM
|
|
40
72
|
byebug (~> 11.0)
|
41
73
|
pry (~> 0.13.0)
|
42
74
|
rake (12.3.3)
|
75
|
+
rb-fsevent (0.10.3)
|
76
|
+
rb-inotify (0.10.1)
|
77
|
+
ffi (~> 1.0)
|
43
78
|
rspec (3.9.0)
|
44
79
|
rspec-core (~> 3.9.0)
|
45
80
|
rspec-expectations (~> 3.9.0)
|
@@ -53,9 +88,13 @@ GEM
|
|
53
88
|
diff-lcs (>= 1.2.0, < 2.0)
|
54
89
|
rspec-support (~> 3.9.0)
|
55
90
|
rspec-support (3.9.2)
|
91
|
+
shellany (0.0.1)
|
92
|
+
sixarm_ruby_unaccent (1.2.0)
|
93
|
+
thor (1.0.1)
|
56
94
|
thread_safe (0.3.6)
|
57
95
|
tzinfo (1.2.7)
|
58
96
|
thread_safe (~> 0.1)
|
97
|
+
unicode_utils (1.4.0)
|
59
98
|
zeitwerk (2.3.0)
|
60
99
|
|
61
100
|
PLATFORMS
|
@@ -63,6 +102,7 @@ PLATFORMS
|
|
63
102
|
|
64
103
|
DEPENDENCIES
|
65
104
|
dotenv
|
105
|
+
guard-rspec
|
66
106
|
janio_api!
|
67
107
|
pry
|
68
108
|
pry-byebug
|
data/Guardfile
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
## Uncomment and set this to only include directories you want to watch
|
5
|
+
# directories %w(app lib config test spec features) \
|
6
|
+
# .select{|d| Dir.exist?(d) ? d : UI.warning("Directory #{d} does not exist")}
|
7
|
+
|
8
|
+
## Note: if you are using the `directories` clause above and you are not
|
9
|
+
## watching the project directory ('.'), then you will want to move
|
10
|
+
## the Guardfile to a watched dir and symlink it back, e.g.
|
11
|
+
#
|
12
|
+
# $ mkdir config
|
13
|
+
# $ mv Guardfile config/
|
14
|
+
# $ ln -s config/Guardfile .
|
15
|
+
#
|
16
|
+
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
17
|
+
|
18
|
+
# Note: The cmd option is now required due to the increasing number of ways
|
19
|
+
# rspec may be run, below are examples of the most common uses.
|
20
|
+
# * bundler: 'bundle exec rspec'
|
21
|
+
# * bundler binstubs: 'bin/rspec'
|
22
|
+
# * spring: 'bin/rspec' (This will use spring if running and you have
|
23
|
+
# installed the spring binstubs per the docs)
|
24
|
+
# * zeus: 'zeus rspec' (requires the server to be started separately)
|
25
|
+
# * 'just' rspec: 'rspec'
|
26
|
+
|
27
|
+
guard :rspec, cmd: "bundle exec rspec" do
|
28
|
+
require "guard/rspec/dsl"
|
29
|
+
dsl = Guard::RSpec::Dsl.new(self)
|
30
|
+
|
31
|
+
# Feel free to open issues for suggestions and improvements
|
32
|
+
|
33
|
+
# RSpec files
|
34
|
+
rspec = dsl.rspec
|
35
|
+
watch(rspec.spec_helper) { rspec.spec_dir }
|
36
|
+
watch(rspec.spec_support) { rspec.spec_dir }
|
37
|
+
watch(rspec.spec_files)
|
38
|
+
|
39
|
+
# Ruby files
|
40
|
+
ruby = dsl.ruby
|
41
|
+
dsl.watch_spec_files_for(ruby.lib_files)
|
42
|
+
|
43
|
+
# Rails files
|
44
|
+
rails = dsl.rails(view_extensions: %w(erb haml slim))
|
45
|
+
dsl.watch_spec_files_for(rails.app_files)
|
46
|
+
dsl.watch_spec_files_for(rails.views)
|
47
|
+
|
48
|
+
watch(rails.controllers) do |m|
|
49
|
+
[
|
50
|
+
rspec.spec.call("routing/#{m[1]}_routing"),
|
51
|
+
rspec.spec.call("controllers/#{m[1]}_controller"),
|
52
|
+
rspec.spec.call("acceptance/#{m[1]}")
|
53
|
+
]
|
54
|
+
end
|
55
|
+
|
56
|
+
# Rails config changes
|
57
|
+
watch(rails.spec_helper) { rspec.spec_dir }
|
58
|
+
watch(rails.routes) { "#{rspec.spec_dir}/routing" }
|
59
|
+
watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }
|
60
|
+
|
61
|
+
# Capybara features specs
|
62
|
+
watch(rails.view_dirs) { |m| rspec.spec.call("features/#{m[1]}") }
|
63
|
+
watch(rails.layouts) { |m| rspec.spec.call("features/#{m[1]}") }
|
64
|
+
|
65
|
+
# Turnip features and steps
|
66
|
+
watch(%r{^spec/acceptance/(.+)\.feature$})
|
67
|
+
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
|
68
|
+
Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance"
|
69
|
+
end
|
70
|
+
end
|
data/bin/console
CHANGED
@@ -1,14 +1,18 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require "bundler/setup"
|
4
|
+
require "dotenv/load"
|
5
|
+
require "dev/zeitwerk_loader"
|
6
|
+
require "dev/config"
|
4
7
|
require "janio_api"
|
5
8
|
|
6
9
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
10
|
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
11
|
+
set_config
|
9
12
|
|
10
13
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
14
|
require "pry"
|
15
|
+
require "pry-byebug"
|
12
16
|
Pry.start
|
13
17
|
|
14
18
|
# require "irb"
|
data/bin/setup
CHANGED
@@ -8,10 +8,8 @@ bundle install
|
|
8
8
|
# Do any other automated setup that you need to do here
|
9
9
|
|
10
10
|
filename=".env"
|
11
|
-
if [ ! -f $filename ]
|
12
|
-
then
|
11
|
+
if [ ! -f $filename ]; then
|
13
12
|
touch $filename
|
14
|
-
echo "API_HOST=https://janio-api-int.herokuapp.com"
|
15
|
-
echo "API_TOKEN="
|
16
|
-
|
17
|
-
fi
|
13
|
+
echo "API_HOST=https://janio-api-int.herokuapp.com" >>$filename
|
14
|
+
echo "API_TOKEN=" >>$filename
|
15
|
+
fi
|
data/janio_api.gemspec
CHANGED
@@ -27,9 +27,12 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.require_paths = ["lib"]
|
28
28
|
|
29
29
|
spec.add_dependency "activeresource"
|
30
|
+
spec.add_dependency "countries"
|
31
|
+
spec.add_dependency "phonelib"
|
30
32
|
|
31
33
|
spec.add_development_dependency "rspec", "~> 3.2"
|
32
34
|
spec.add_development_dependency "dotenv"
|
33
35
|
spec.add_development_dependency "pry-byebug"
|
34
36
|
spec.add_development_dependency "pry"
|
37
|
+
spec.add_development_dependency "guard-rspec"
|
35
38
|
end
|
data/lib/dev/config.rb
CHANGED
data/lib/dev/zeitwerk_loader.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
require "zeitwerk"
|
2
|
+
require_relative "config"
|
2
3
|
|
3
4
|
loader = Zeitwerk::Loader.for_gem
|
4
5
|
loader.inflector.inflect(
|
5
6
|
"janio_api" => "JanioAPI"
|
6
7
|
)
|
8
|
+
loader.push_dir("./lib")
|
7
9
|
loader.collapse("./lib/janio_api/resources")
|
8
10
|
loader.ignore("#{__dir__}/config.rb")
|
11
|
+
loader.ignore("./lib/janio_api/exceptions.rb")
|
12
|
+
loader.ignore("./lib/janio_api/services_list.rb")
|
9
13
|
loader.enable_reloading
|
10
14
|
# loader.log!
|
11
15
|
loader.setup
|
data/lib/janio_api/connection.rb
CHANGED
@@ -17,36 +17,5 @@ module JanioAPI
|
|
17
17
|
rescue OpenSSL::SSL::SSLError => e
|
18
18
|
raise SSLError.new(e.message)
|
19
19
|
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def handle_response(response)
|
24
|
-
case response.code.to_i
|
25
|
-
when 200...400
|
26
|
-
response
|
27
|
-
when 400
|
28
|
-
raise(BadRequest.new(response))
|
29
|
-
when 401
|
30
|
-
raise(UnauthorizedAccess.new(response))
|
31
|
-
when 403
|
32
|
-
raise(ForbiddenAccess.new(response))
|
33
|
-
when 404
|
34
|
-
raise(ResourceNotFound.new(response))
|
35
|
-
when 405
|
36
|
-
raise(MethodNotAllowed.new(response))
|
37
|
-
when 409
|
38
|
-
raise(ResourceConflict.new(response))
|
39
|
-
when 410
|
40
|
-
raise(ResourceGone.new(response))
|
41
|
-
when 422
|
42
|
-
raise(ResourceInvalid.new(response))
|
43
|
-
when 401...500
|
44
|
-
raise(ClientError.new(response))
|
45
|
-
when 500...600
|
46
|
-
raise(ServerError.new(response))
|
47
|
-
else
|
48
|
-
raise(ConnectionError.new(response, "Unknown response code: #{response.code}"))
|
49
|
-
end
|
50
|
-
end
|
51
20
|
end
|
52
21
|
end
|
@@ -15,69 +15,70 @@ module JanioAPI
|
|
15
15
|
|
16
16
|
self.collection_parser = Collection
|
17
17
|
|
18
|
-
SUPPORTED_PICKUP_COUNTRIES =
|
19
|
-
SUPPORTED_CONSIGNEE_COUNTRIES =
|
18
|
+
SUPPORTED_PICKUP_COUNTRIES = SERVICES.map { |s| s[:pickup_country] }.uniq.freeze
|
19
|
+
SUPPORTED_CONSIGNEE_COUNTRIES = SERVICES.map { |s| s[:consignee_country] }.uniq.freeze
|
20
20
|
|
21
21
|
POSTAL_EXCLUDED_COUNTRIES = ["Hong Kong", "Vietnam", "Brunei"].freeze
|
22
22
|
VALID_PAYMENT_TYPES = ["cod", "prepaid"].freeze
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
{id: 2, from: "Singapore", to: "Vietnam"},
|
56
|
-
{id: 2, from: "Singapore", to: "Hong Kong"},
|
57
|
-
{id: 2, from: "Singapore", to: "Japan"},
|
58
|
-
{id: 26, from: "Singapore", to: "Malaysia"},
|
59
|
-
{id: 10, from: "Singapore", to: "Singapore"},
|
60
|
-
{id: 17, from: "Singapore", to: "Thailand"},
|
61
|
-
{id: 34, from: "Thailand", to: "Indonesia"},
|
62
|
-
{id: 35, from: "Thailand", to: "Singapore"}
|
63
|
-
].freeze
|
64
|
-
|
24
|
+
DEFAULT_ATTRS = {
|
25
|
+
service_id: 1,
|
26
|
+
tracking_no: nil,
|
27
|
+
shipper_order_id: nil,
|
28
|
+
order_length: 12,
|
29
|
+
order_width: 12,
|
30
|
+
order_height: 12,
|
31
|
+
order_weight: 1,
|
32
|
+
payment_type: nil,
|
33
|
+
cod_amount_to_collect: 0,
|
34
|
+
consignee_name: nil,
|
35
|
+
consignee_number: nil,
|
36
|
+
consignee_country: nil,
|
37
|
+
consignee_address: nil,
|
38
|
+
consignee_postal: nil,
|
39
|
+
consignee_state: nil,
|
40
|
+
consignee_city: nil,
|
41
|
+
consignee_province: nil,
|
42
|
+
consignee_email: nil,
|
43
|
+
pickup_contact_name: nil,
|
44
|
+
pickup_contact_number: nil,
|
45
|
+
pickup_country: nil,
|
46
|
+
pickup_address: nil,
|
47
|
+
pickup_postal: nil,
|
48
|
+
pickup_state: nil,
|
49
|
+
pickup_city: nil,
|
50
|
+
pickup_province: nil,
|
51
|
+
pickup_date: nil,
|
52
|
+
pickup_notes: nil,
|
53
|
+
items: nil
|
54
|
+
}
|
65
55
|
self.prefix = "/api/order/orders/"
|
66
56
|
self.element_name = ""
|
67
57
|
|
68
58
|
has_many :items, class_name: "JanioAPI::Item"
|
69
59
|
|
70
|
-
validates :service_id, :order_length, :order_width, :order_height, :order_weight,
|
71
|
-
:
|
72
|
-
:pickup_state, :pickup_date, presence: true
|
73
|
-
|
74
|
-
validates :pickup_country, inclusion: {
|
75
|
-
|
76
|
-
|
60
|
+
validates :service_id, :order_length, :order_width, :order_height, :order_weight,
|
61
|
+
:consignee_name, :consignee_country, :consignee_address, :consignee_state, :consignee_email,
|
62
|
+
:pickup_contact_name, :pickup_country, :pickup_address, :pickup_state, :pickup_date, presence: true
|
63
|
+
|
64
|
+
validates :pickup_country, inclusion: {
|
65
|
+
in: SUPPORTED_PICKUP_COUNTRIES,
|
66
|
+
message: "%{value} is not a supported pickup country, supported countries are #{SUPPORTED_PICKUP_COUNTRIES.join(", ")}"
|
67
|
+
}
|
68
|
+
validates :consignee_country, inclusion: {
|
69
|
+
in: SUPPORTED_CONSIGNEE_COUNTRIES,
|
70
|
+
message: "%{value} is not a supported consignee country, supported countries are #{SUPPORTED_CONSIGNEE_COUNTRIES.join(", ")}"
|
71
|
+
}
|
72
|
+
validates :consignee_postal, presence: true, unless: -> { POSTAL_EXCLUDED_COUNTRIES.include?(consignee_country) }
|
77
73
|
validates :pickup_postal, presence: true, unless: -> { POSTAL_EXCLUDED_COUNTRIES.include?(pickup_country) }
|
78
|
-
validates :payment_type, inclusion: {
|
74
|
+
validates :payment_type, inclusion: {
|
75
|
+
in: VALID_PAYMENT_TYPES,
|
76
|
+
message: "%{value} is not a valid payment type, valid payment types are #{VALID_PAYMENT_TYPES.join(", ")}"
|
77
|
+
}
|
79
78
|
validates :cod_amount_to_collect, presence: true, if: -> { payment_type == "cod" }
|
80
79
|
validates :items, length: {minimum: 1, message: "are required. Please add at least one."}
|
80
|
+
validate :pickup_contact_number_country_matched?
|
81
|
+
validate :consignee_number_country_matched?
|
81
82
|
validate :items_validation
|
82
83
|
validate :route_supported?
|
83
84
|
|
@@ -95,8 +96,8 @@ module JanioAPI
|
|
95
96
|
options = arguments.slice!(0) || {}
|
96
97
|
options[:from] = "/api/order/order" unless options[:from]
|
97
98
|
options[:params] = {} unless options[:params]
|
98
|
-
options[:params][:secret_key] = JanioAPI.config.api_token
|
99
99
|
options[:params][:with_items] = true unless options[:params][:with_items]
|
100
|
+
options[:params][:secret_key] = JanioAPI.config.api_token
|
100
101
|
|
101
102
|
case scope
|
102
103
|
when :all
|
@@ -128,48 +129,22 @@ module JanioAPI
|
|
128
129
|
end
|
129
130
|
|
130
131
|
def initialize(attributes = {}, persisted = false)
|
131
|
-
|
132
|
-
service_id: 1,
|
133
|
-
tracking_no: nil,
|
134
|
-
shipper_order_id: nil,
|
135
|
-
order_length: 12,
|
136
|
-
order_width: 12,
|
137
|
-
order_height: 12,
|
138
|
-
order_weight: 1,
|
139
|
-
payment_type: nil,
|
140
|
-
cod_amount_to_collect: 0,
|
141
|
-
consignee_name: nil,
|
142
|
-
consignee_number: nil,
|
143
|
-
consignee_country: nil,
|
144
|
-
consignee_address: nil,
|
145
|
-
consignee_postal: nil,
|
146
|
-
consignee_state: nil,
|
147
|
-
consignee_city: nil,
|
148
|
-
consignee_province: nil,
|
149
|
-
consignee_email: nil,
|
150
|
-
pickup_contact_name: nil,
|
151
|
-
pickup_contact_number: nil,
|
152
|
-
pickup_country: nil,
|
153
|
-
pickup_address: nil,
|
154
|
-
pickup_postal: nil,
|
155
|
-
pickup_state: nil,
|
156
|
-
pickup_city: nil,
|
157
|
-
pickup_province: nil,
|
158
|
-
pickup_date: nil,
|
159
|
-
pickup_notes: nil,
|
160
|
-
items: nil
|
161
|
-
}
|
162
|
-
attributes = default_attrs.merge(attributes)
|
132
|
+
attributes = DEFAULT_ATTRS.merge(attributes)
|
163
133
|
super
|
164
134
|
set_service_id
|
165
135
|
end
|
166
136
|
|
167
|
-
def get_service_id
|
168
|
-
|
137
|
+
def get_service_id(service_category = "pickup")
|
138
|
+
# only check with services offering pickup by default
|
139
|
+
SERVICES.find do |s|
|
140
|
+
s[:pickup_country] == pickup_country &&
|
141
|
+
s[:consignee_country] == consignee_country &&
|
142
|
+
s[:service_category] == service_category
|
143
|
+
end&.dig(:id)
|
169
144
|
end
|
170
145
|
|
171
|
-
def set_service_id
|
172
|
-
@attributes[:service_id] = get_service_id
|
146
|
+
def set_service_id(service_category = "pickup")
|
147
|
+
@attributes[:service_id] = get_service_id(service_category)
|
173
148
|
end
|
174
149
|
|
175
150
|
# Tracks the current order
|
@@ -193,6 +168,26 @@ module JanioAPI
|
|
193
168
|
|
194
169
|
private
|
195
170
|
|
171
|
+
def pickup_contact_number_country_matched?
|
172
|
+
country_code = ISO3166::Country.find_country_by_name(pickup_country)&.alpha2
|
173
|
+
if Phonelib.invalid_for_country? pickup_contact_number, country_code
|
174
|
+
errors.add(
|
175
|
+
:pickup_contact_number,
|
176
|
+
"is invalid, please make sure the phone's country code matches the pickup address's country"
|
177
|
+
)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def consignee_number_country_matched?
|
182
|
+
country_code = ISO3166::Country.find_country_by_name(consignee_country)&.alpha2
|
183
|
+
if Phonelib.invalid_for_country? consignee_number, country_code
|
184
|
+
errors.add(
|
185
|
+
:consignee_number,
|
186
|
+
"is invalid, please make sure the phone's country code matches the consignee address's country"
|
187
|
+
)
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
196
191
|
def route_supported?
|
197
192
|
unless set_service_id
|
198
193
|
errors.add(:route, "not supported, if new route not available in service_id_map, please contact gem author.")
|