mechanized_session 0.0.2 → 0.1.0

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.
Files changed (4) hide show
  1. data/README.rdoc +43 -9
  2. data/Rakefile +1 -1
  3. data/lib/mechanized_session.rb +38 -3
  4. metadata +62 -17
data/README.rdoc CHANGED
@@ -1,32 +1,66 @@
1
1
  = mechanized_session
2
2
 
3
- * http://github.com/#{github_username}/#{project_name}
3
+ * http://github.com/dsboulder/mechanized_session
4
4
 
5
5
  == DESCRIPTION:
6
6
 
7
- FIX (describe your package)
7
+ A gem which uses the `mechanize` gem to make it easier to execute remote requests that require an authenticated session.
8
+ It allows the programmer to provide a `:login` action callback which is executed whenever mechanized_session determines that the
9
+ session has gone bad or authentication is required. The programmer also provides other actions which perform useful tasks.
8
10
 
9
- == FEATURES/PROBLEMS:
10
-
11
- * FIX (list of features or problems)
11
+ To use this with rails, check out `acts_as_other_website`.
12
12
 
13
13
  == SYNOPSIS:
14
14
 
15
- FIX (code sample of usage)
15
+ class SomeSiteSession < MechanizedSession
16
+ action :login do |session, options|
17
+ session.get('http://www.google.com/login') do |page|
18
+ next_page = page.form_with(:action =>"/login") do |form|
19
+ form["email"] = options[:username]
20
+ form["password"] = options[:password]
21
+ end.click_button
22
+ return false if next_page.uri.path.include?("/login")
23
+ end
24
+ true
25
+ end
26
+
27
+ action :get_widgets do |session|
28
+ links = []
29
+ session.get('http://www.google.com/ig") do |page| # might throw InvalidSession if not logged in
30
+ links += page.links
31
+ end
32
+ links
33
+ end
34
+
35
+ def self.requires_login?(page) # explaining to mechanized_session when a page was a redirect to the login page
36
+ page.uri.path.downcase.include?("/login")
37
+ end
38
+ end
39
+
40
+ @session = SomeSiteSession.new
41
+ begin
42
+ @session.get_widgets
43
+ rescue InvalidSession => e
44
+ # deal with invalid session, ask the user for credentials
45
+ @session = SomeSiteSession.new(:username => "bob", :password => "password")
46
+ retry
47
+ end
16
48
 
17
49
  == REQUIREMENTS:
18
50
 
19
- * FIX (list of requirements)
51
+ * mechanize gem
20
52
 
21
53
  == INSTALL:
22
54
 
23
- * FIX (sudo gem install, anything else)
55
+ * sudo gem install mechanized_session
56
+
57
+ See blog post at: http://flouri.sh/2009/12/7/introducing-mechanized_session-and-acts_as_other_website
24
58
 
25
59
  == LICENSE:
26
60
 
27
61
  (The MIT License)
28
62
 
29
- Copyright (c) 2009 FIXME full name
63
+ Copyright (c) 2009 David Stevenson
30
64
 
31
65
  Permission is hereby granted, free of charge, to any person obtaining
32
66
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -14,7 +14,7 @@ $hoe = Hoe.spec 'mechanized_session' do
14
14
  self.developer 'David Stevenson', 'stellar256@hotmail.com'
15
15
  # self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
16
16
  # self.rubyforge_name = self.name # TODO this is default value
17
- self.extra_deps = [['mechanize','>= 0.9.3']]
17
+ self.extra_deps = [['mechanize','>= 1.0.0']]
18
18
 
19
19
  end
20
20
 
@@ -19,7 +19,7 @@ class MechanizedSession
19
19
  attr_accessor :inner
20
20
  end
21
21
 
22
- VERSION = '0.0.2'
22
+ VERSION = '0.1.0'
23
23
  attr_accessor :agent
24
24
  attr_accessor :disable_session_check
25
25
  attr_accessor :logger
@@ -79,6 +79,33 @@ class MechanizedSession
79
79
  page
80
80
  end
81
81
 
82
+ def post(uri, params = {}, &block)
83
+ logger.debug "POST #{uri} #{params.inspect}"
84
+ page = agent.post(uri, params)
85
+ logger.debug "Successfully got page #{page.uri}"
86
+ check_for_invalid_session! unless disable_session_check?
87
+ yield page if block_given?
88
+ page
89
+ end
90
+
91
+ def put(uri, entity, &block)
92
+ logger.debug "PUT #{uri} #{entity.inspect}"
93
+ page = agent.put(uri, entity)
94
+ logger.debug "Successfully got page #{page.uri}"
95
+ check_for_invalid_session! unless disable_session_check?
96
+ yield page if block_given?
97
+ page
98
+ end
99
+
100
+ def delete(uri, params = {}, &block)
101
+ logger.debug "DELETE #{uri} #{params.inspect}"
102
+ page = agent.delete(uri, params)
103
+ logger.debug "Successfully got page #{page.uri}"
104
+ check_for_invalid_session! unless disable_session_check?
105
+ yield page if block_given?
106
+ page
107
+ end
108
+
82
109
  def login(username, password)
83
110
  raise "#{self.class} must declare action :login describing how to log in a session"
84
111
  end
@@ -87,6 +114,10 @@ class MechanizedSession
87
114
  agent.cookie_jar.to_yaml
88
115
  end
89
116
 
117
+ def basic_auth
118
+ nil
119
+ end
120
+
90
121
  private
91
122
  def disable_session_check?
92
123
  @disable_session_check
@@ -104,6 +135,10 @@ class MechanizedSession
104
135
  end
105
136
 
106
137
  def create_agent
107
- self.agent = WWW::Mechanize.new
138
+ self.agent = Mechanize.new
139
+ self.agent.log = logger
140
+ if auth = basic_auth
141
+ self.agent.auth(*auth)
142
+ end
108
143
  end
109
- end
144
+ end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mechanized_session
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - David Stevenson
@@ -9,30 +15,63 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-12-06 00:00:00 -08:00
18
+ date: 2010-10-02 00:00:00 -07:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: mechanize
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 23
30
+ segments:
31
+ - 1
32
+ - 0
33
+ - 0
34
+ version: 1.0.0
17
35
  type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: rubyforge
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
20
42
  requirements:
21
43
  - - ">="
22
44
  - !ruby/object:Gem::Version
23
- version: 0.9.3
24
- version:
45
+ hash: 7
46
+ segments:
47
+ - 2
48
+ - 0
49
+ - 4
50
+ version: 2.0.4
51
+ type: :development
52
+ version_requirements: *id002
25
53
  - !ruby/object:Gem::Dependency
26
54
  name: hoe
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
30
58
  requirements:
31
59
  - - ">="
32
60
  - !ruby/object:Gem::Version
33
- version: 2.3.3
34
- version:
35
- description: FIX (describe your package)
61
+ hash: 21
62
+ segments:
63
+ - 2
64
+ - 6
65
+ - 1
66
+ version: 2.6.1
67
+ type: :development
68
+ version_requirements: *id003
69
+ description: |-
70
+ A gem which uses the `mechanize` gem to make it easier to execute remote requests that require an authenticated session.
71
+ It allows the programmer to provide a `:login` action callback which is executed whenever mechanized_session determines that the
72
+ session has gone bad or authentication is required. The programmer also provides other actions which perform useful tasks.
73
+
74
+ To use this with rails, check out `acts_as_other_website`.
36
75
  email:
37
76
  - stellar256@hotmail.com
38
77
  executables: []
@@ -56,7 +95,7 @@ files:
56
95
  - test/test_helper.rb
57
96
  - test/test_mechanized_session.rb
58
97
  has_rdoc: true
59
- homepage: http://github.com/#{github_username}/#{project_name}
98
+ homepage: http://github.com/dsboulder/mechanized_session
60
99
  licenses: []
61
100
 
62
101
  post_install_message:
@@ -66,24 +105,30 @@ rdoc_options:
66
105
  require_paths:
67
106
  - lib
68
107
  required_ruby_version: !ruby/object:Gem::Requirement
108
+ none: false
69
109
  requirements:
70
110
  - - ">="
71
111
  - !ruby/object:Gem::Version
112
+ hash: 3
113
+ segments:
114
+ - 0
72
115
  version: "0"
73
- version:
74
116
  required_rubygems_version: !ruby/object:Gem::Requirement
117
+ none: false
75
118
  requirements:
76
119
  - - ">="
77
120
  - !ruby/object:Gem::Version
121
+ hash: 3
122
+ segments:
123
+ - 0
78
124
  version: "0"
79
- version:
80
125
  requirements: []
81
126
 
82
127
  rubyforge_project: mechanized_session
83
- rubygems_version: 1.3.5
128
+ rubygems_version: 1.3.7
84
129
  signing_key:
85
130
  specification_version: 3
86
- summary: FIX (describe your package)
131
+ summary: A gem which uses the `mechanize` gem to make it easier to execute remote requests that require an authenticated session
87
132
  test_files:
88
133
  - test/test_helper.rb
89
134
  - test/test_mechanized_session.rb