cinch-toolbox 1.0.1 → 1.0.2
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.
- data/.travis.yml +1 -2
- data/README.md +9 -2
- data/cinch-toolbox.gemspec +1 -1
- data/lib/{cinch-toolbox → cinch/toolbox}/version.rb +1 -1
- data/lib/{cinch-toolbox.rb → cinch/toolbox.rb} +22 -14
- data/spec/cinch-toolbox_spec.rb +23 -5
- data/spec/spec_helper.rb +1 -1
- metadata +4 -4
data/.travis.yml
CHANGED
data/README.md
CHANGED
|
@@ -24,7 +24,7 @@ Note that this *only* honors redirection requests from HTTP => HTTPS and *not* H
|
|
|
24
24
|
|
|
25
25
|
Add this line to your application's Gemfile:
|
|
26
26
|
|
|
27
|
-
gem 'cinch
|
|
27
|
+
gem 'cinch/toolbox'
|
|
28
28
|
|
|
29
29
|
And then execute:
|
|
30
30
|
|
|
@@ -44,7 +44,14 @@ Or install it yourself as:
|
|
|
44
44
|
|
|
45
45
|
## Changelog
|
|
46
46
|
|
|
47
|
-
* 1.0.
|
|
47
|
+
* 1.0.2
|
|
48
|
+
* [Enhancement] Reorged the file layout a bit to be more canonical (`require cinch/toolbox`
|
|
49
|
+
now instead of `require cinch-toolbox`.
|
|
50
|
+
* [Enhancement] Added support for retrieving the full contents of a html element by passing
|
|
51
|
+
`:css_full` or `:xpath_full` to the `Cinch::Toolbox.get_html_element` method.
|
|
52
|
+
* 1.0.1
|
|
53
|
+
* [Refactor] Updated how `time_format` functions.
|
|
54
|
+
* 1.0.0 (
|
|
48
55
|
* Added tests!
|
|
49
56
|
* Added docs!
|
|
50
57
|
* Cleaned up code in `Toolbox.get_html_element` to be more error resistant
|
data/cinch-toolbox.gemspec
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
require 'cinch
|
|
2
|
+
require 'cinch/toolbox/version'
|
|
3
3
|
require 'open-uri'
|
|
4
4
|
require 'patron'
|
|
5
5
|
require 'nokogiri'
|
|
@@ -10,17 +10,25 @@ module Cinch
|
|
|
10
10
|
# Get an element of the supplied website
|
|
11
11
|
# @param [String] url The url to access.
|
|
12
12
|
# @param [String] selector The the selector to try an acquire on the page.
|
|
13
|
-
# @param [String] mode (:css) Set
|
|
13
|
+
# @param [String] mode (:css) Set this to the kind of selection you want to do.
|
|
14
|
+
# @option [String] :mode :css Fetch just the text content at the css selector.
|
|
15
|
+
# @option [String] :mode :css_full Fetch the markup and text content at the css selector.
|
|
16
|
+
# @option [String] :mode :xpath Fetch just the text content at the xpath selector.
|
|
17
|
+
# @option [String] :mode :xpath_full Fetch the markup and text at the xpath selector.
|
|
14
18
|
# @return [String] The content ofg the Element or Nil if the element could not be found.
|
|
15
19
|
def Toolbox.get_html_element(url, selector, mode = :css)
|
|
16
20
|
# Make sure the URL is legit
|
|
17
21
|
url = URI::extract(url, ["http", "https"]).first
|
|
18
22
|
url = Nokogiri::HTML(open(url))
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
|
|
24
|
+
content = case mode
|
|
25
|
+
when :css, :xpath
|
|
26
|
+
page = url.send(mode.to_sym, selector)
|
|
27
|
+
page.first.content unless page.first.nil?
|
|
28
|
+
when :css_full, :xpath_full
|
|
29
|
+
url.send("at_#{mode.to_s.gsub(/_full/, '')}", selector).to_html
|
|
30
|
+
end
|
|
31
|
+
return content
|
|
24
32
|
rescue SocketError, RuntimeError
|
|
25
33
|
# Rescue for any kind of network sillyness
|
|
26
34
|
return nil
|
|
@@ -78,16 +86,16 @@ module Cinch
|
|
|
78
86
|
# Used to render a period of time in a uniform string.
|
|
79
87
|
# There is probably a much better way to do this, so FIXME
|
|
80
88
|
# @param [Fixnum] secs Number of seconds to render into a string.
|
|
81
|
-
def Toolbox.time_format(secs, units = nil)
|
|
82
|
-
data = { :days
|
|
83
|
-
:hours
|
|
84
|
-
:mins
|
|
85
|
-
:
|
|
89
|
+
def Toolbox.time_format(secs, units = nil, format = :long)
|
|
90
|
+
data = { :days => (secs / 86400).floor,
|
|
91
|
+
:hours => ((secs % 86400) / 3600).floor,
|
|
92
|
+
:mins => ((secs % 3600) / 60).floor,
|
|
93
|
+
:seconds => (secs % 60).floor }
|
|
86
94
|
string = []
|
|
87
95
|
data.keys.map do |period|
|
|
88
|
-
if period == :
|
|
96
|
+
if period == :seconds || !(data[period].zero? && string.empty?)
|
|
89
97
|
if units.nil? || units.include?(period)
|
|
90
|
-
string << "#{data[period]} #{period}"
|
|
98
|
+
string << "#{data[period]}#{format == :long ? " #{period}" : period.slice(0)}"
|
|
91
99
|
end
|
|
92
100
|
end
|
|
93
101
|
end
|
data/spec/cinch-toolbox_spec.rb
CHANGED
|
@@ -5,11 +5,9 @@ describe Cinch::Toolbox do
|
|
|
5
5
|
|
|
6
6
|
describe 'the get_html_element method' do
|
|
7
7
|
before(:all) do
|
|
8
|
+
@fake_web_html = "<div id=\"a1\" class=\"top\">\n<div class=\"foo\">Bar</div>\n<div id=\"foo1\">Baz</div>\n</div>"
|
|
8
9
|
FakeWeb.register_uri( :get, "http://example.com/",
|
|
9
|
-
:body =>
|
|
10
|
-
<div class='foo'>Bar</div>
|
|
11
|
-
<div id='foo1'>Baz</div>
|
|
12
|
-
</div>")
|
|
10
|
+
:body => @fake_web_html)
|
|
13
11
|
end
|
|
14
12
|
|
|
15
13
|
it 'should return a string with contents of a css selector of a web page' do
|
|
@@ -17,11 +15,21 @@ describe Cinch::Toolbox do
|
|
|
17
15
|
should == 'Bar'
|
|
18
16
|
end
|
|
19
17
|
|
|
18
|
+
it 'should return a string with full markup of a css selector of a web page' do
|
|
19
|
+
Cinch::Toolbox.get_html_element('http://example.com/', '.top', :css_full).
|
|
20
|
+
should == @fake_web_html
|
|
21
|
+
end
|
|
22
|
+
|
|
20
23
|
it 'should return a string with contents of a xpath selector of a web page' do
|
|
21
24
|
Cinch::Toolbox.get_html_element('http://example.com/', "//div/div[1]", :xpath).
|
|
22
25
|
should == 'Bar'
|
|
23
26
|
end
|
|
24
27
|
|
|
28
|
+
it 'should return a string with contents of a xpath selector of a web page' do
|
|
29
|
+
Cinch::Toolbox.get_html_element('http://example.com/', "//div[@id='a1']", :xpath_full).
|
|
30
|
+
should == @fake_web_html
|
|
31
|
+
end
|
|
32
|
+
|
|
25
33
|
it 'should return nil if the css element does not exist' do
|
|
26
34
|
Cinch::Toolbox.get_html_element('http://example.com/', '.foo2', :css).
|
|
27
35
|
should be_nil
|
|
@@ -111,7 +119,17 @@ describe Cinch::Toolbox do
|
|
|
111
119
|
describe 'time parseing' do
|
|
112
120
|
it 'should parse seconds into a user friendly string' do
|
|
113
121
|
Cinch::Toolbox.time_format(126).
|
|
114
|
-
should == '
|
|
122
|
+
should == '2 mins, 6 seconds'
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it 'should allow users to limit the kinds of units returned' do
|
|
126
|
+
Cinch::Toolbox.time_format(126020, [:days, :seconds]).
|
|
127
|
+
should == '1 days, 20 seconds'
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it 'should allow users to specify short form' do
|
|
131
|
+
Cinch::Toolbox.time_format(126000, [:days], :short).
|
|
132
|
+
should == '1d'
|
|
115
133
|
end
|
|
116
134
|
end
|
|
117
135
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cinch-toolbox
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.2
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-
|
|
12
|
+
date: 2013-07-01 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rake
|
|
@@ -122,8 +122,8 @@ files:
|
|
|
122
122
|
- README.md
|
|
123
123
|
- Rakefile
|
|
124
124
|
- cinch-toolbox.gemspec
|
|
125
|
-
- lib/cinch
|
|
126
|
-
- lib/cinch
|
|
125
|
+
- lib/cinch/toolbox.rb
|
|
126
|
+
- lib/cinch/toolbox/version.rb
|
|
127
127
|
- spec/cinch-toolbox_spec.rb
|
|
128
128
|
- spec/spec_helper.rb
|
|
129
129
|
homepage: https://github.com/bhaberer/cinch-toolbox
|