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 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
@@ -0,0 +1,20 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ .rvmrc
7
+ .DS_Store
8
+ Gemfile.lock
9
+ InstalledFiles
10
+ _yardoc
11
+ coverage
12
+ doc/
13
+ lib/bundler/man
14
+ pkg
15
+ rdoc
16
+ spec/reports
17
+ test/tmp
18
+ test/version_tmp
19
+ tmp
20
+ coverage/
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
@@ -0,0 +1,10 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "pry-byebug"
4
+ gem "rubocop"
5
+ gem "rubocop-rails", require: false
6
+ gem "rubocop-shopify", require: false
7
+ gem "activeresource"
8
+
9
+ # Specify your gem's dependencies in eshipper.gemspec
10
+ gemspec
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,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EShipper
4
+ class Client
5
+ include Singleton
6
+
7
+ attr_reader :url
8
+ attr_accessor :username, :password
9
+
10
+ def initialize
11
+ @url = "https://web.eshipper.com/rpc2"
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
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EShipper
4
+ class SearchReply < EShipperResponse
5
+ self.format = :xml
6
+
7
+ def self.search(options)
8
+ request = EShipper::OrderSearchRequest.new(options)
9
+ new(format.decode(request.send_now))
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EShipperRuby
4
+ VERSION = "0.1.1"
5
+ 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: []