Class: GLSMech

Inherits:
Object
  • Object
show all
Defined in:
lib/gls_agent/gls_mech.rb

Overview

Utilize mechanize to do stuff on GLS webpage.

Constant Summary collapse

@@parcel_creation_url =
'http://www.your-gls.eu/276-I-PORTAL-WEB/content/GLS/DE03/DE/15005.htm'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeGLSMech

Setup the mech.



14
15
16
17
18
# File 'lib/gls_agent/gls_mech.rb', line 14

def initialize
  @mech = Mechanize.new
  @mech.user_agent_alias = 'Windows Mozilla'
  @mech.agent.allowed_error_codes = [404]
end

Instance Attribute Details

#mechObject

Returns the value of attribute mech.



8
9
10
# File 'lib/gls_agent/gls_mech.rb', line 8

def mech
  @mech
end

#passObject

Returns the value of attribute pass.



10
11
12
# File 'lib/gls_agent/gls_mech.rb', line 10

def pass
  @pass
end

#userObject

Returns the value of attribute user.



9
10
11
# File 'lib/gls_agent/gls_mech.rb', line 9

def user
  @user
end

Instance Method Details

#log_to(filename) ⇒ Object

Enable logging to given file.



21
22
23
# File 'lib/gls_agent/gls_mech.rb', line 21

def log_to filename
  @mech.log = Logger.new filename
end

#save_parcel_label(parcel_job, filename) ⇒ Object

Saves parcel label as pdf, does not overwrite file if exists, returns filename that label was saved to, or nil if login, creation or redirect failed.



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/gls_agent/gls_mech.rb', line 63

def save_parcel_label parcel_job, filename
  if !login! @user, @pass
    raise GLSAgent::GLSEndpointError.new page_error_text
  end

  form = @mech.page.forms.first
  fill_parcel_form form, parcel_job

  @mech.submit(form, form.buttons.first)

  pdf_iframe = @mech.page.iframes.first

  if @mech.log
    @mech.page.save_as "save_label#{DateTime.now.strftime('%s')}.html"
  end

  if page_has_error?
    raise GLSAgent::GLSEndpointError.new page_error_text
  end

  if pdf_iframe
    return pdf_iframe.content.save_as filename
  elsif @mech.log
    @mech.page.save_as "gls_agent_debug_save-parcel-fail.html"
  end
  return nil
end

#save_parcel_labels(parcel_jobs, filenames) ⇒ Object

Saves parcel labels as pdf, does not overwrite file if exists, yields error, filename that was saved to. Later is nil if login, creation or redirect failed.



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
56
57
58
# File 'lib/gls_agent/gls_mech.rb', line 28

def save_parcel_labels parcel_jobs, filenames
  return nil if !login! @user, @pass

  parcel_jobs.zip(filenames).each do |parcel, filename|
    if @mech.page.uri.to_s != @@parcel_creation_url
      @mech.get @@parcel_creation_url
    end

    if @mech.page.uri.to_s != @@parcel_creation_url
      yield "not logged in", nil
      next
    end

    form = @mech.page.forms.first
    fill_parcel_form form, parcel
    
    @mech.submit(form, form.buttons.first)

    pdf_iframe = @mech.page.iframes.first

    @mech.page.save_as "save_label#{DateTime.now.strftime('%s')}.html"
    
    if page_has_error?
      yield page_error_text, nil
    elsif pdf_iframe
      yield nil, pdf_iframe.content.save_as(filename)
    else
      yield 'unkown error', nil
    end
  end
end