Class: DeliveryStateJp::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/delivery_state_jp/base.rb

Direct Known Subclasses

Sagawa, Seino, Yamato, Yuusei

Class Method Summary collapse

Class Method Details

.action_urlObject



37
38
39
# File 'lib/delivery_state_jp/base.rb', line 37

def self.action_url
  fail NotImplementedError
end

.charsetObject



33
34
35
# File 'lib/delivery_state_jp/base.rb', line 33

def self.charset
  fail NotImplementedError
end

.delivery_state(args) ⇒ Object



5
6
7
8
9
10
11
12
13
14
# File 'lib/delivery_state_jp/base.rb', line 5

def self.delivery_state(args)
  doc = Nokogiri::HTML.parse(response_body(args), nil, charset)
  index = 1
  statuses = []
  while doc.xpath(xpath(index)).text.strip != ''
    statuses << doc.xpath(xpath(index)).text.strip
    index += 1
  end
  statuses.last
end

.error_messagesObject



49
50
51
# File 'lib/delivery_state_jp/base.rb', line 49

def self.error_messages
  fail NotImplementedError
end

.post_params(_number) ⇒ Object



41
42
43
# File 'lib/delivery_state_jp/base.rb', line 41

def self.post_params(_number)
  fail NotImplementedError
end

.response_body(args) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/delivery_state_jp/base.rb', line 21

def self.response_body(args)
  number = args.fetch(:number)
  uri = URI.parse(action_url)
  request = Net::HTTP::Post.new(uri)
  request.set_form_data(post_params(number))
  req_options = {use_ssl: uri.scheme == 'https'}
  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
  end
  response.body
end

.tracking_error_message(args) ⇒ Object



16
17
18
19
# File 'lib/delivery_state_jp/base.rb', line 16

def self.tracking_error_message(args)
  doc = Nokogiri::HTML.parse(response_body(args), nil, charset)
  error_messages.map { |error_message| (doc.search "[text() *= '#{error_message}']").last }.compact.map(&:text).map(&:strip).join('、')
end

.xpath(_index) ⇒ Object



45
46
47
# File 'lib/delivery_state_jp/base.rb', line 45

def self.xpath(_index)
  fail NotImplementedError
end