Skip to content

Commit

Permalink
Refactor HTML parsing into DOM objects
Browse files Browse the repository at this point in the history
  • Loading branch information
jpeace committed Jan 27, 2012
1 parent 18757a5 commit c285e94
Show file tree
Hide file tree
Showing 30 changed files with 1,301 additions and 228 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1,3 +1,4 @@
.bundle
vendor
pkg
.irbrc
8 changes: 6 additions & 2 deletions Gemfile.lock
Expand Up @@ -3,6 +3,7 @@ PATH
specs:
horseman (0.0.4)
nokogiri (>= 1.5.0)
therubyracer

GEM
remote: http://rubygems.org/
Expand All @@ -16,8 +17,9 @@ GEM
rdoc (>= 3.6.1)
rubyforge (>= 2.0.4)
gemcutter (0.7.1)
json (1.6.4)
json_pure (1.6.4)
json (1.6.5)
json_pure (1.6.5)
libv8 (3.3.10.4)
nokogiri (1.5.0)
rake (0.9.2.2)
rdoc (3.12)
Expand All @@ -32,6 +34,8 @@ GEM
rspec-mocks (2.8.0)
rubyforge (2.0.4)
json_pure (>= 1.1.7)
therubyracer (0.9.9)
libv8 (~> 3.3.10)

PLATFORMS
ruby
Expand Down
374 changes: 373 additions & 1 deletion Manifest

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Rakefile
Expand Up @@ -9,7 +9,7 @@ Echoe.new("horseman", "0.0.4") do |p|
p.email = "peace.jarrod@gmail.com"
p.ignore_pattern = FileList[".gitignore"]
p.development_dependencies = []
p.runtime_dependencies = ["nokogiri >=1.5.0"]
p.runtime_dependencies = ["nokogiri >=1.5.0", "therubyracer"]
end

Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
Expand Down
16 changes: 13 additions & 3 deletions doc/Horseman.html
Expand Up @@ -51,6 +51,10 @@ <h3 class="section-header">Defined In</h3>
<li>lib/horseman/browser.rb
<li>lib/horseman/connection.rb
<li>lib/horseman/cookies.rb
<li>lib/horseman/dom/document.rb
<li>lib/horseman/dom/element.rb
<li>lib/horseman/dom/form.rb
<li>lib/horseman/dom/script.rb
<li>lib/horseman/response.rb
<li>lib/horseman/version.rb
</ul>
Expand Down Expand Up @@ -94,11 +98,17 @@ <h3 class="section-header">Class and Module Index</h3>

<li><a href="./Horseman/Cookies.html">Horseman::Cookies</a>

<li><a href="./Horseman/Element.html">Horseman::Element</a>
<li><a href="./Horseman/Dom.html">Horseman::Dom</a>

<li><a href="./Horseman/Form.html">Horseman::Form</a>
<li><a href="./Horseman/Dom/Document.html">Horseman::Dom::Document</a>

<li><a href="./Horseman/FormField.html">Horseman::FormField</a>
<li><a href="./Horseman/Dom/Element.html">Horseman::Dom::Element</a>

<li><a href="./Horseman/Dom/Form.html">Horseman::Dom::Form</a>

<li><a href="./Horseman/Dom/FormField.html">Horseman::Dom::FormField</a>

<li><a href="./Horseman/Dom/Script.html">Horseman::Dom::Script</a>

<li><a href="./Horseman/Response.html">Horseman::Response</a>

Expand Down
12 changes: 9 additions & 3 deletions doc/Horseman/Action.html
Expand Up @@ -109,11 +109,17 @@ <h3 class="section-header">Class and Module Index</h3>

<li><a href="../Horseman/Cookies.html">Horseman::Cookies</a>

<li><a href="../Horseman/Element.html">Horseman::Element</a>
<li><a href="../Horseman/Dom.html">Horseman::Dom</a>

<li><a href="../Horseman/Form.html">Horseman::Form</a>
<li><a href="../Horseman/Dom/Document.html">Horseman::Dom::Document</a>

<li><a href="../Horseman/FormField.html">Horseman::FormField</a>
<li><a href="../Horseman/Dom/Element.html">Horseman::Dom::Element</a>

<li><a href="../Horseman/Dom/Form.html">Horseman::Dom::Form</a>

<li><a href="../Horseman/Dom/FormField.html">Horseman::Dom::FormField</a>

<li><a href="../Horseman/Dom/Script.html">Horseman::Dom::Script</a>

<li><a href="../Horseman/Response.html">Horseman::Response</a>

Expand Down
35 changes: 23 additions & 12 deletions doc/Horseman/Browser.html
Expand Up @@ -113,11 +113,17 @@ <h3 class="section-header">Class and Module Index</h3>

<li><a href="../Horseman/Cookies.html">Horseman::Cookies</a>

<li><a href="../Horseman/Element.html">Horseman::Element</a>
<li><a href="../Horseman/Dom.html">Horseman::Dom</a>

<li><a href="../Horseman/Form.html">Horseman::Form</a>
<li><a href="../Horseman/Dom/Document.html">Horseman::Dom::Document</a>

<li><a href="../Horseman/FormField.html">Horseman::FormField</a>
<li><a href="../Horseman/Dom/Element.html">Horseman::Dom::Element</a>

<li><a href="../Horseman/Dom/Form.html">Horseman::Dom::Form</a>

<li><a href="../Horseman/Dom/FormField.html">Horseman::Dom::FormField</a>

<li><a href="../Horseman/Dom/Script.html">Horseman::Dom::Script</a>

<li><a href="../Horseman/Response.html">Horseman::Response</a>

Expand Down Expand Up @@ -241,7 +247,7 @@ <h3 class="section-header">Public Class Methods</h3>

<div class="method-heading">
<span class="method-name">new</span><span
class="method-args">(connection, base_url='')</span>
class="method-args">(connection, base_url='', options={})</span>
<span class="method-click-advice">click to toggle source</span>
</div>

Expand All @@ -254,11 +260,13 @@ <h3 class="section-header">Public Class Methods</h3>

<div class="method-source-code" id="new-source">
<pre><span class="ruby-comment"># File lib/horseman/browser.rb, line 17</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">connection</span>, <span class="ruby-identifier">base_url</span>=<span class="ruby-string">''</span>)
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">connection</span>, <span class="ruby-identifier">base_url</span>=<span class="ruby-string">''</span>, <span class="ruby-identifier">options</span>={})
<span class="ruby-ivar">@connection</span> = <span class="ruby-identifier">connection</span>
<span class="ruby-ivar">@base_url</span> = <span class="ruby-identifier">base_url</span>
<span class="ruby-ivar">@cookies</span> = <span class="ruby-constant">Cookies</span>.<span class="ruby-identifier">new</span>
<span class="ruby-ivar">@multipart_boundary</span> = <span class="ruby-node">&quot;----HorsemanBoundary#{SecureRandom.hex(8)}&quot;</span>

<span class="ruby-ivar">@verbose</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:verbose</span>] <span class="ruby-operator">||</span> <span class="ruby-keyword">false</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- new-source -->

Expand All @@ -274,7 +282,7 @@ <h3 class="section-header">Public Class Methods</h3>

<div class="method-heading">
<span class="method-name">with_base_url</span><span
class="method-args">(base_url)</span>
class="method-args">(base_url, options={})</span>
<span class="method-click-advice">click to toggle source</span>
</div>

Expand All @@ -287,8 +295,8 @@ <h3 class="section-header">Public Class Methods</h3>

<div class="method-source-code" id="with_base_url-source">
<pre><span class="ruby-comment"># File lib/horseman/browser.rb, line 13</span>
<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">with_base_url</span>(<span class="ruby-identifier">base_url</span>)
<span class="ruby-constant">Browser</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">Connection</span>.<span class="ruby-identifier">new</span>, <span class="ruby-identifier">base_url</span>)
<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">with_base_url</span>(<span class="ruby-identifier">base_url</span>, <span class="ruby-identifier">options</span>={})
<span class="ruby-constant">Browser</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">Connection</span>.<span class="ruby-identifier">new</span>, <span class="ruby-identifier">base_url</span>, <span class="ruby-identifier">options</span>)
<span class="ruby-keyword">end</span></pre>
</div><!-- with_base_url-source -->

Expand Down Expand Up @@ -322,7 +330,7 @@ <h3 class="section-header">Public Instance Methods</h3>


<div class="method-source-code" id="clear_session-source">
<pre><span class="ruby-comment"># File lib/horseman/browser.rb, line 24</span>
<pre><span class="ruby-comment"># File lib/horseman/browser.rb, line 26</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">clear_session</span>
<span class="ruby-ivar">@cookies</span>.<span class="ruby-identifier">clear</span>
<span class="ruby-keyword">end</span></pre>
Expand Down Expand Up @@ -352,11 +360,13 @@ <h3 class="section-header">Public Instance Methods</h3>


<div class="method-source-code" id="get-21-source">
<pre><span class="ruby-comment"># File lib/horseman/browser.rb, line 28</span>
<pre><span class="ruby-comment"># File lib/horseman/browser.rb, line 30</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">get!</span>(<span class="ruby-identifier">path</span> = <span class="ruby-string">'/'</span>, <span class="ruby-identifier">options</span> = {})
<span class="ruby-identifier">url</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:no_base_url</span>] <span class="ruby-operator">?</span> <span class="ruby-identifier">path</span> <span class="ruby-operator">:</span> <span class="ruby-node">&quot;#{@base_url}#{path}&quot;</span>
<span class="ruby-identifier">request</span> = <span class="ruby-ivar">@connection</span>.<span class="ruby-identifier">build_request</span>(<span class="ruby-value">:url</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">url</span>, <span class="ruby-value">:verb</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">:get</span>)
<span class="ruby-identifier">redirects</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:redirects</span>] <span class="ruby-operator">||</span> <span class="ruby-value">0</span>

<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;GET: #{path}&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@verbose</span>
<span class="ruby-identifier">exec</span>(<span class="ruby-identifier">request</span>, <span class="ruby-identifier">redirects</span>)
<span class="ruby-keyword">end</span></pre>
</div><!-- get-21-source -->
Expand Down Expand Up @@ -385,15 +395,15 @@ <h3 class="section-header">Public Instance Methods</h3>


<div class="method-source-code" id="post-21-source">
<pre><span class="ruby-comment"># File lib/horseman/browser.rb, line 35</span>
<pre><span class="ruby-comment"># File lib/horseman/browser.rb, line 39</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">post!</span>(<span class="ruby-identifier">path</span> = <span class="ruby-string">'/'</span>, <span class="ruby-identifier">options</span> = {})
<span class="ruby-identifier">get!</span> <span class="ruby-identifier">path</span>

<span class="ruby-identifier">form</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:form</span>] <span class="ruby-operator">||</span> <span class="ruby-value">:form</span>
<span class="ruby-identifier">data</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:data</span>] <span class="ruby-operator">||</span> {}
<span class="ruby-identifier">unchecked</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:unchecked</span>] <span class="ruby-operator">||</span> []

<span class="ruby-identifier">selected_form</span> = <span class="ruby-ivar">@last_action</span>.<span class="ruby-identifier">response</span>.<span class="ruby-identifier">forms</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">id</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">id</span>.<span class="ruby-identifier">to_sym</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">form</span>}.<span class="ruby-identifier">first</span>
<span class="ruby-identifier">selected_form</span> = <span class="ruby-ivar">@last_action</span>.<span class="ruby-identifier">response</span>.<span class="ruby-identifier">document</span>.<span class="ruby-identifier">forms</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">id</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">id</span>.<span class="ruby-identifier">to_sym</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">form</span>}.<span class="ruby-identifier">first</span>
<span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Could not find form #{form}&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">selected_form</span>.<span class="ruby-identifier">nil?</span>

<span class="ruby-identifier">selected_form</span>.<span class="ruby-identifier">fields</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
Expand Down Expand Up @@ -421,6 +431,7 @@ <h3 class="section-header">Public Instance Methods</h3>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">request</span>[<span class="ruby-string">'Referer'</span>] = <span class="ruby-ivar">@last_action</span>.<span class="ruby-identifier">url</span>

<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;POST: #{path}&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@verbose</span>
<span class="ruby-identifier">exec</span> <span class="ruby-identifier">request</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- post-21-source -->
Expand Down
12 changes: 9 additions & 3 deletions doc/Horseman/Connection.html
Expand Up @@ -109,11 +109,17 @@ <h3 class="section-header">Class and Module Index</h3>

<li><a href="../Horseman/Cookies.html">Horseman::Cookies</a>

<li><a href="../Horseman/Element.html">Horseman::Element</a>
<li><a href="../Horseman/Dom.html">Horseman::Dom</a>

<li><a href="../Horseman/Form.html">Horseman::Form</a>
<li><a href="../Horseman/Dom/Document.html">Horseman::Dom::Document</a>

<li><a href="../Horseman/FormField.html">Horseman::FormField</a>
<li><a href="../Horseman/Dom/Element.html">Horseman::Dom::Element</a>

<li><a href="../Horseman/Dom/Form.html">Horseman::Dom::Form</a>

<li><a href="../Horseman/Dom/FormField.html">Horseman::Dom::FormField</a>

<li><a href="../Horseman/Dom/Script.html">Horseman::Dom::Script</a>

<li><a href="../Horseman/Response.html">Horseman::Response</a>

Expand Down
12 changes: 9 additions & 3 deletions doc/Horseman/Cookie.html
Expand Up @@ -105,11 +105,17 @@ <h3 class="section-header">Class and Module Index</h3>

<li><a href="../Horseman/Cookies.html">Horseman::Cookies</a>

<li><a href="../Horseman/Element.html">Horseman::Element</a>
<li><a href="../Horseman/Dom.html">Horseman::Dom</a>

<li><a href="../Horseman/Form.html">Horseman::Form</a>
<li><a href="../Horseman/Dom/Document.html">Horseman::Dom::Document</a>

<li><a href="../Horseman/FormField.html">Horseman::FormField</a>
<li><a href="../Horseman/Dom/Element.html">Horseman::Dom::Element</a>

<li><a href="../Horseman/Dom/Form.html">Horseman::Dom::Form</a>

<li><a href="../Horseman/Dom/FormField.html">Horseman::Dom::FormField</a>

<li><a href="../Horseman/Dom/Script.html">Horseman::Dom::Script</a>

<li><a href="../Horseman/Response.html">Horseman::Response</a>

Expand Down
12 changes: 9 additions & 3 deletions doc/Horseman/Cookies.html
Expand Up @@ -119,11 +119,17 @@ <h3 class="section-header">Class and Module Index</h3>

<li><a href="../Horseman/Cookies.html">Horseman::Cookies</a>

<li><a href="../Horseman/Element.html">Horseman::Element</a>
<li><a href="../Horseman/Dom.html">Horseman::Dom</a>

<li><a href="../Horseman/Form.html">Horseman::Form</a>
<li><a href="../Horseman/Dom/Document.html">Horseman::Dom::Document</a>

<li><a href="../Horseman/FormField.html">Horseman::FormField</a>
<li><a href="../Horseman/Dom/Element.html">Horseman::Dom::Element</a>

<li><a href="../Horseman/Dom/Form.html">Horseman::Dom::Form</a>

<li><a href="../Horseman/Dom/FormField.html">Horseman::Dom::FormField</a>

<li><a href="../Horseman/Dom/Script.html">Horseman::Dom::Script</a>

<li><a href="../Horseman/Response.html">Horseman::Response</a>

Expand Down
64 changes: 17 additions & 47 deletions doc/Horseman/FormField.html → doc/Horseman/Dom.html
Expand Up @@ -4,7 +4,7 @@
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">

<title>class Horseman::FormField - Horseman</title>
<title>module Horseman::Dom - Horseman</title>

<link type="text/css" media="screen" href="../rdoc.css" rel="stylesheet">

Expand All @@ -20,7 +20,7 @@
<script type="text/javascript" charset="utf-8" src="../js/darkfish.js"></script>


<body id="top" class="class">
<body id="top" class="module">
<nav id="metadata">
<nav id="home-section" class="section">
<h3 class="section-header">
Expand All @@ -47,7 +47,10 @@ <h3 class="section-header">
<nav id="file-list-section" class="section">
<h3 class="section-header">Defined In</h3>
<ul>
<li>lib/horseman/response.rb
<li>lib/horseman/dom/document.rb
<li>lib/horseman/dom/element.rb
<li>lib/horseman/dom/form.rb
<li>lib/horseman/dom/script.rb
</ul>
</nav>

Expand All @@ -56,13 +59,7 @@ <h3 class="section-header">Defined In</h3>

<div id="class-metadata">

<nav id="parent-class-section" class="section">
<h3 class="section-header">Parent</h3>

<p class="link"><a href="Element.html">Horseman::Element</a>

</nav>




</div>
Expand Down Expand Up @@ -95,11 +92,17 @@ <h3 class="section-header">Class and Module Index</h3>

<li><a href="../Horseman/Cookies.html">Horseman::Cookies</a>

<li><a href="../Horseman/Element.html">Horseman::Element</a>
<li><a href="../Horseman/Dom.html">Horseman::Dom</a>

<li><a href="../Horseman/Form.html">Horseman::Form</a>
<li><a href="../Horseman/Dom/Document.html">Horseman::Dom::Document</a>

<li><a href="../Horseman/FormField.html">Horseman::FormField</a>
<li><a href="../Horseman/Dom/Element.html">Horseman::Dom::Element</a>

<li><a href="../Horseman/Dom/Form.html">Horseman::Dom::Form</a>

<li><a href="../Horseman/Dom/FormField.html">Horseman::Dom::FormField</a>

<li><a href="../Horseman/Dom/Script.html">Horseman::Dom::Script</a>

<li><a href="../Horseman/Response.html">Horseman::Response</a>

Expand All @@ -110,7 +113,7 @@ <h3 class="section-header">Class and Module Index</h3>
</nav>

<div id="documentation">
<h1 class="class">class Horseman::FormField</h1>
<h1 class="module">module Horseman::Dom</h1>

<div id="description" class="description">

Expand All @@ -127,39 +130,6 @@ <h1 class="class">class Horseman::FormField</h1>



<!-- Attributes -->
<section id="attribute-method-details" class="method-section section">
<h3 class="section-header">Attributes</h3>


<div id="attribute-i-type" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">type</span><span
class="attribute-access-type">[RW]</span>
</div>

<div class="method-description">



</div>
</div>

<div id="attribute-i-value" class="method-detail">
<div class="method-heading attribute-method-heading">
<span class="method-name">value</span><span
class="attribute-access-type">[RW]</span>
</div>

<div class="method-description">



</div>
</div>

</section><!-- attribute-method-details -->


<!-- Methods -->

Expand Down

0 comments on commit c285e94

Please sign in to comment.