eshipper 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.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/.rubocop.yml +20 -0
- data/.ruby-version +1 -0
- data/Gemfile +10 -0
- data/eshipper.gemspec +21 -0
- data/lib/eshipper/classes/order.rb +14 -0
- data/lib/eshipper/client.rb +14 -0
- data/lib/eshipper/requests/order_information_request.rb +28 -0
- data/lib/eshipper/requests/order_search_request.rb +60 -0
- data/lib/eshipper/requests/request.rb +37 -0
- data/lib/eshipper/responses/eshipper_response.rb +16 -0
- data/lib/eshipper/responses/order_information_reply.rb +12 -0
- data/lib/eshipper/responses/search_reply.rb +12 -0
- data/lib/eshipper/version.rb +5 -0
- data/lib/eshipper.rb +13 -0
- metadata +89 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 430bd6453ae77295e5e46c31e7f2e5c336d9c49de930f5e45f89df5b475b1e1f
|
|
4
|
+
data.tar.gz: 06023bb5db1fddaa9087fb8071e99f45d6f0574172bdc5781e86e22723583bc7
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 7e3a4ec1dd8230490dfa716d4ed9eae3cbf9769c2d10f5e6b1b8c5023aa679e4225d3ce55a1e780a842da5e7f2dde4b344a369c4efe1936e65612b013f1ff709
|
|
7
|
+
data.tar.gz: 98cb1ce593bbe3d435829d0e67caf0de47f761122a34659960f63a3358cb3ffe2c610ffb08a653b1d844fb228b3c75909863c95bdb5ab8d99b58c07260e81d02
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
##
|
|
2
|
+
# .rubocop.yml
|
|
3
|
+
|
|
4
|
+
require:
|
|
5
|
+
- rubocop-rails
|
|
6
|
+
|
|
7
|
+
inherit_gem:
|
|
8
|
+
rubocop-shopify: rubocop.yml
|
|
9
|
+
|
|
10
|
+
AllCops:
|
|
11
|
+
TargetRubyVersion: 2.7.6
|
|
12
|
+
|
|
13
|
+
Naming/VariableName:
|
|
14
|
+
Enabled: false
|
|
15
|
+
|
|
16
|
+
Naming/MethodName:
|
|
17
|
+
Enabled: false
|
|
18
|
+
|
|
19
|
+
Rails:
|
|
20
|
+
Enabled: false
|
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.7.6
|
data/Gemfile
ADDED
data/eshipper.gemspec
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require File.expand_path("../lib/eshipper/version", __FILE__)
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |gem|
|
|
7
|
+
gem.name = "eshipper"
|
|
8
|
+
gem.version = EShipperRuby::VERSION
|
|
9
|
+
gem.authors = ["Marc 🐝", "Daniel Gonzalez", "Chris Wise", "Damien Imberdis"]
|
|
10
|
+
gem.email = ["hello@inventory.horse"]
|
|
11
|
+
gem.description = "eShipper API client"
|
|
12
|
+
gem.summary = "eShipper API wrapper for Ruby using ActiveResource"
|
|
13
|
+
gem.homepage = "https://github.com/hrdwdmrbl/eshipper"
|
|
14
|
+
gem.licenses = ["MIT"]
|
|
15
|
+
|
|
16
|
+
gem.files = %x(git ls-files).split($/)
|
|
17
|
+
gem.require_paths = ["lib"]
|
|
18
|
+
|
|
19
|
+
gem.add_dependency("activeresource")
|
|
20
|
+
gem.add_dependency("nokogiri")
|
|
21
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module EShipper
|
|
4
|
+
class Order < EShipperResponse
|
|
5
|
+
def self.search(options = {})
|
|
6
|
+
orders = SearchReply.search(options).OrderSearchReply.Order
|
|
7
|
+
orders.is_a?(Array) ? orders : [orders]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def fetch
|
|
11
|
+
OrderInformationReply.fetch(order_id: self.Id).OrderInformationReply
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module EShipper
|
|
4
|
+
class OrderInformationRequest < EShipper::Request
|
|
5
|
+
attr_reader :order_id
|
|
6
|
+
|
|
7
|
+
def initialize(order_id:)
|
|
8
|
+
@order_id = order_id
|
|
9
|
+
super()
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def order_properties
|
|
13
|
+
{
|
|
14
|
+
orderId: @order_id,
|
|
15
|
+
detailed: "true",
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def request_body
|
|
20
|
+
builder = build do |xml|
|
|
21
|
+
xml.OrderInformationRequest do
|
|
22
|
+
xml.Order(order_properties)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
builder.to_xml
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require "date"
|
|
2
|
+
|
|
3
|
+
module EShipper
|
|
4
|
+
class OrderSearchRequest < EShipper::Request
|
|
5
|
+
attr_reader :fromDate
|
|
6
|
+
attr_reader :toDate
|
|
7
|
+
attr_reader :carrierId
|
|
8
|
+
attr_reader :statusId
|
|
9
|
+
attr_reader :startOrderId
|
|
10
|
+
attr_reader :endOrderId
|
|
11
|
+
attr_reader :carrierTrackingNumber
|
|
12
|
+
attr_reader :referenceValue
|
|
13
|
+
|
|
14
|
+
def initialize(
|
|
15
|
+
fromDate: Date.today - 90, # [Required]
|
|
16
|
+
toDate: Date.today, # [Required]
|
|
17
|
+
carrierId: nil, # [Optional]
|
|
18
|
+
statusId: nil, # [Optional]
|
|
19
|
+
startOrderId: nil, # [Optional]
|
|
20
|
+
endOrderId: nil, # [Optional]
|
|
21
|
+
carrierTrackingNumber: nil, # [Optional]
|
|
22
|
+
referenceValue: nil # [Optional]
|
|
23
|
+
)
|
|
24
|
+
throw("Order date range should be within 3 month.") if toDate - 90 > fromDate
|
|
25
|
+
|
|
26
|
+
@fromDate = fromDate
|
|
27
|
+
@toDate = toDate
|
|
28
|
+
@carrierId = carrierId
|
|
29
|
+
@statusId = statusId
|
|
30
|
+
@startOrderId = startOrderId
|
|
31
|
+
@endOrderId = endOrderId
|
|
32
|
+
@carrierTrackingNumber = carrierTrackingNumber
|
|
33
|
+
@referenceValue = referenceValue
|
|
34
|
+
super()
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def order_properties
|
|
38
|
+
{
|
|
39
|
+
fromDate: fromDate,
|
|
40
|
+
toDate: toDate,
|
|
41
|
+
carrierId: carrierId,
|
|
42
|
+
statusId: statusId,
|
|
43
|
+
startOrderId: startOrderId,
|
|
44
|
+
endOrderId: endOrderId,
|
|
45
|
+
carrierTrackingNumber: carrierTrackingNumber,
|
|
46
|
+
referenceValue: referenceValue,
|
|
47
|
+
}.compact
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def request_body
|
|
51
|
+
builder = build do |xml|
|
|
52
|
+
xml.OrderSearchRequest do
|
|
53
|
+
xml.Order(order_properties)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
builder.to_xml
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module EShipper
|
|
2
|
+
class Request
|
|
3
|
+
def client
|
|
4
|
+
EShipper::Client.instance
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def build(&block)
|
|
8
|
+
Nokogiri::XML::Builder.new do |xml|
|
|
9
|
+
xml.EShipper(
|
|
10
|
+
version: "3.1.0",
|
|
11
|
+
xmlns: "http://www.eshipper.net/XMLSchema",
|
|
12
|
+
username: client.username,
|
|
13
|
+
password: client.password
|
|
14
|
+
) do
|
|
15
|
+
yield(xml)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def send_now
|
|
21
|
+
uri = URI(EShipper::Client.instance.url)
|
|
22
|
+
http_request = Net::HTTP::Post.new(uri.path)
|
|
23
|
+
http_request.body = request_body
|
|
24
|
+
|
|
25
|
+
http_session = Net::HTTP.new(uri.host, uri.port)
|
|
26
|
+
http_session.use_ssl = true
|
|
27
|
+
http_session.read_timeout = 3000
|
|
28
|
+
http_session.set_debug_output($stdout)
|
|
29
|
+
|
|
30
|
+
http_response = http_session.start do |http|
|
|
31
|
+
http.request(http_request)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
http_response.body
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EShipperXMLFormatter
|
|
4
|
+
include ActiveResource::Formats::XmlFormat
|
|
5
|
+
|
|
6
|
+
def decode(xml)
|
|
7
|
+
ActiveResource::Formats::XmlFormat.decode(xml)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
module EShipper
|
|
12
|
+
class EShipperResponse < ::ActiveResource::Base
|
|
13
|
+
self.site = EShipper::Client.instance.url
|
|
14
|
+
self.format = :xml
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module EShipper
|
|
4
|
+
class OrderInformationReply < EShipperResponse
|
|
5
|
+
self.format = :xml
|
|
6
|
+
|
|
7
|
+
def self.fetch(options)
|
|
8
|
+
request = EShipper::OrderInformationRequest.new(options)
|
|
9
|
+
new(format.decode(request.send_now))
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
data/lib/eshipper.rb
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require "net/http"
|
|
2
|
+
require "nokogiri"
|
|
3
|
+
require "singleton"
|
|
4
|
+
require "yaml"
|
|
5
|
+
require "activeresource"
|
|
6
|
+
|
|
7
|
+
require("#{File.dirname(__FILE__)}/eshipper/requests/request")
|
|
8
|
+
require("#{File.dirname(__FILE__)}/eshipper/client")
|
|
9
|
+
require("#{File.dirname(__FILE__)}/eshipper/responses/eshipper_response")
|
|
10
|
+
|
|
11
|
+
Dir.glob("#{File.dirname(__FILE__)}/eshipper/requests/*").sort.each { |file| require(file) }
|
|
12
|
+
Dir.glob("#{File.dirname(__FILE__)}/eshipper/responses/*").sort.each { |file| require(file) }
|
|
13
|
+
Dir.glob("#{File.dirname(__FILE__)}/eshipper/classes/*").sort.each { |file| require(file) }
|
metadata
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: eshipper
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- "Marc \U0001F41D"
|
|
8
|
+
- Daniel Gonzalez
|
|
9
|
+
- Chris Wise
|
|
10
|
+
- Damien Imberdis
|
|
11
|
+
autorequire:
|
|
12
|
+
bindir: bin
|
|
13
|
+
cert_chain: []
|
|
14
|
+
date: 2022-08-19 00:00:00.000000000 Z
|
|
15
|
+
dependencies:
|
|
16
|
+
- !ruby/object:Gem::Dependency
|
|
17
|
+
name: activeresource
|
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
|
19
|
+
requirements:
|
|
20
|
+
- - ">="
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: '0'
|
|
23
|
+
type: :runtime
|
|
24
|
+
prerelease: false
|
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
+
requirements:
|
|
27
|
+
- - ">="
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '0'
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
name: nokogiri
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
requirements:
|
|
34
|
+
- - ">="
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: '0'
|
|
37
|
+
type: :runtime
|
|
38
|
+
prerelease: false
|
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
40
|
+
requirements:
|
|
41
|
+
- - ">="
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
version: '0'
|
|
44
|
+
description: eShipper API client
|
|
45
|
+
email:
|
|
46
|
+
- hello@inventory.horse
|
|
47
|
+
executables: []
|
|
48
|
+
extensions: []
|
|
49
|
+
extra_rdoc_files: []
|
|
50
|
+
files:
|
|
51
|
+
- ".gitignore"
|
|
52
|
+
- ".rubocop.yml"
|
|
53
|
+
- ".ruby-version"
|
|
54
|
+
- Gemfile
|
|
55
|
+
- eshipper.gemspec
|
|
56
|
+
- lib/eshipper.rb
|
|
57
|
+
- lib/eshipper/classes/order.rb
|
|
58
|
+
- lib/eshipper/client.rb
|
|
59
|
+
- lib/eshipper/requests/order_information_request.rb
|
|
60
|
+
- lib/eshipper/requests/order_search_request.rb
|
|
61
|
+
- lib/eshipper/requests/request.rb
|
|
62
|
+
- lib/eshipper/responses/eshipper_response.rb
|
|
63
|
+
- lib/eshipper/responses/order_information_reply.rb
|
|
64
|
+
- lib/eshipper/responses/search_reply.rb
|
|
65
|
+
- lib/eshipper/version.rb
|
|
66
|
+
homepage: https://github.com/hrdwdmrbl/eshipper
|
|
67
|
+
licenses:
|
|
68
|
+
- MIT
|
|
69
|
+
metadata: {}
|
|
70
|
+
post_install_message:
|
|
71
|
+
rdoc_options: []
|
|
72
|
+
require_paths:
|
|
73
|
+
- lib
|
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
75
|
+
requirements:
|
|
76
|
+
- - ">="
|
|
77
|
+
- !ruby/object:Gem::Version
|
|
78
|
+
version: '0'
|
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
|
+
requirements:
|
|
81
|
+
- - ">="
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
83
|
+
version: '0'
|
|
84
|
+
requirements: []
|
|
85
|
+
rubygems_version: 3.1.6
|
|
86
|
+
signing_key:
|
|
87
|
+
specification_version: 4
|
|
88
|
+
summary: eShipper API wrapper for Ruby using ActiveResource
|
|
89
|
+
test_files: []
|