Class: MechanizedSession

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

Defined Under Namespace

Classes: Error, InvalidAuthentication, InvalidSession, MechanizeError

Constant Summary collapse

VERSION =
'0.1.0'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ MechanizedSession

Returns a new instance of MechanizedSession.



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/mechanized_session.rb', line 53

def initialize(options)
  create_agent
  @logger = options[:logger] || Logger.new($stdout)
  if options[:session_data]
    logger.debug "Initializing session from previous data"
    self.agent.cookie_jar = YAML.load(options[:session_data])
  elsif options[:username]
    result = self.(options)
    if result == false
      logger.debug "Login returned false, due to invalid credentials we hope"
      raise InvalidAuthentication
    elsif result == true
      logger.debug "Login returned true, assuming session established"
      @logged_in = true
    else
      raise "the :login method of #{self.class} must return exactly true or false (depending on the success of the login)"
    end
  end
end

Instance Attribute Details

#agentObject

Returns the value of attribute agent.



23
24
25
# File 'lib/mechanized_session.rb', line 23

def agent
  @agent
end

#disable_session_checkObject

Returns the value of attribute disable_session_check.



24
25
26
# File 'lib/mechanized_session.rb', line 24

def disable_session_check
  @disable_session_check
end

#logged_inObject (readonly)

Returns the value of attribute logged_in.



26
27
28
# File 'lib/mechanized_session.rb', line 26

def logged_in
  @logged_in
end

#loggerObject

Returns the value of attribute logger.



25
26
27
# File 'lib/mechanized_session.rb', line 25

def logger
  @logger
end

Class Method Details

.action(name, &block) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/mechanized_session.rb', line 28

def self.action(name, &block)
  define_method name do |*args|
    result = nil
    logger.debug "Executing action :#{name}"
    begin
      self.disable_session_check = true if name == :login
      result = block.call(self, *args)
      check_for_invalid_session! unless name == :login
    rescue StandardError => e
      logger.debug "Exception #{e} (#{e.class}) raised in action :#{name}"
      if e.is_a?(MechanizedSession::Error) || e.is_a?(WWW::Mechanize::ResponseCodeError) && e.response_code.to_s == "401"
        raise e
      else
        ex = MechanizeError.new("Unable to execute action :#{name}, due to '#{e}'")
        ex.inner = e
        ex.set_backtrace(e.backtrace)
        raise ex
      end
    ensure
      self.disable_session_check = nil
    end
    result
  end
end

Instance Method Details

#basic_authObject



117
118
119
# File 'lib/mechanized_session.rb', line 117

def basic_auth
  nil
end

#delete(uri, params = {}) {|page| ... } ⇒ Object

Yields:

  • (page)


100
101
102
103
104
105
106
107
# File 'lib/mechanized_session.rb', line 100

def delete(uri, params = {}, &block)
  logger.debug "DELETE #{uri} #{params.inspect}"
  page = agent.delete(uri, params)
  logger.debug "Successfully got page #{page.uri}"
  check_for_invalid_session! unless disable_session_check?
  yield page if block_given?
  page
end

#get(uri) {|page| ... } ⇒ Object

Yields:

  • (page)


73
74
75
76
77
78
79
80
# File 'lib/mechanized_session.rb', line 73

def get(uri, &block)
  logger.debug "GET #{uri}"
  page = agent.get(uri)
  logger.debug "Successfully got page #{page.uri}"
  check_for_invalid_session! unless disable_session_check?
  yield page if block_given?
  page
end

#login(username, password) ⇒ Object



109
110
111
# File 'lib/mechanized_session.rb', line 109

def (username, password)
  raise "#{self.class} must declare action :login describing how to log in a session"
end

#post(uri, params = {}) {|page| ... } ⇒ Object

Yields:

  • (page)


82
83
84
85
86
87
88
89
# File 'lib/mechanized_session.rb', line 82

def post(uri, params = {}, &block)
  logger.debug "POST #{uri} #{params.inspect}"
  page = agent.post(uri, params)
  logger.debug "Successfully got page #{page.uri}"
  check_for_invalid_session! unless disable_session_check?
  yield page if block_given?
  page
end

#put(uri, entity) {|page| ... } ⇒ Object

Yields:

  • (page)


91
92
93
94
95
96
97
98
# File 'lib/mechanized_session.rb', line 91

def put(uri, entity, &block)
  logger.debug "PUT #{uri} #{entity.inspect}"
  page = agent.put(uri, entity)
  logger.debug "Successfully got page #{page.uri}"
  check_for_invalid_session! unless disable_session_check?
  yield page if block_given?
  page
end

#session_dataObject



113
114
115
# File 'lib/mechanized_session.rb', line 113

def session_data
  agent.cookie_jar.to_yaml
end