markbates-content_o_matic 0.0.2.20090721162019 → 0.1.0.20090721175910
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/LICENSE
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
module ContentOMatic
|
2
|
+
# This class is used to cache results of succesful retrieval of a web page.
|
3
|
+
# It uses Cachetastic to do the caching. You can expect to receive
|
4
|
+
# ContentOMatic::Response objects, if they are in the cache.
|
5
|
+
#
|
6
|
+
# Caching can be turned on (it's off by default) with the following configatron setting:
|
7
|
+
# configatron.content_o_matic.cache_results = true
|
2
8
|
class ContentCache < Cachetastic::Cache
|
3
9
|
|
4
10
|
end # ContentCache
|
@@ -2,10 +2,37 @@ module ContentOMatic
|
|
2
2
|
|
3
3
|
class << self
|
4
4
|
|
5
|
+
# Returns the logger being used by ContentOMatic.
|
6
|
+
# The logger can be set with the following configatron setting:
|
7
|
+
# configatron.content_o_matic.logger = ::Logger.new(STDOUT)
|
8
|
+
#
|
9
|
+
# In a Rails environment this defaults to the <tt>RAILS_DEFAULT_LOGGER</tt>.
|
10
|
+
# The non-Rails default is:
|
11
|
+
# <pwd>/log/content_o_matic.log
|
5
12
|
def logger
|
6
13
|
configatron.content_o_matic.logger
|
7
14
|
end
|
8
15
|
|
16
|
+
# This method does pretty much all of the heavy work. You pass it a url
|
17
|
+
# and it will fetch the contents of that page and return a ContentOMatic::Response
|
18
|
+
# object to you.
|
19
|
+
#
|
20
|
+
# If you pass in a 'relative' url it will be joined with a default url that can be
|
21
|
+
# set with the following configatron setting:
|
22
|
+
# configatron.content_o_matic.url = 'http://www.example.com'
|
23
|
+
#
|
24
|
+
# url examples:
|
25
|
+
# 'foo.html' => 'http://www.example.com/foo.html'
|
26
|
+
# '/foo.html' => 'http://www.example.com/foo.html'
|
27
|
+
# '/foo/bar.html' => 'http://www.example.com/foo/bar.html'
|
28
|
+
# 'http://www.example.com/index.html' => 'http://www.example.com/index.html'
|
29
|
+
#
|
30
|
+
# Any options passed into will become query string parameters passed to the
|
31
|
+
# requested url.
|
32
|
+
#
|
33
|
+
# If you have caching enabled it will look first in the cache, if it doesn't find
|
34
|
+
# it there, it will do a fetch of the page and store it in the cache, if it was successful.
|
35
|
+
# See ContentOMatic::ContentCache for more details on caching.
|
9
36
|
def get(slug_url, options = {})
|
10
37
|
if configatron.content_o_matic.retrieve(:cache_results, false)
|
11
38
|
url = url_from_slug(slug_url, options)
|
@@ -21,7 +48,7 @@ module ContentOMatic
|
|
21
48
|
end
|
22
49
|
end
|
23
50
|
|
24
|
-
def get_without_cache(slug_url, options = {})
|
51
|
+
def get_without_cache(slug_url, options = {}) # :nodoc:
|
25
52
|
url = url_from_slug(slug_url, options)
|
26
53
|
begin
|
27
54
|
Timeout::timeout(configatron.content_o_matic.response.time_out) do
|
@@ -34,7 +61,7 @@ module ContentOMatic
|
|
34
61
|
end
|
35
62
|
end # get_without_cache
|
36
63
|
|
37
|
-
def url_from_slug(slug_url, options = {})
|
64
|
+
def url_from_slug(slug_url, options = {}) # :nodoc:
|
38
65
|
return slug_url if slug_url.nil?
|
39
66
|
url = slug_url
|
40
67
|
if !slug_url.match(/^([a-zA-Z]+):\/\//)
|
@@ -1,33 +1,58 @@
|
|
1
1
|
module ContentOMatic
|
2
|
-
|
2
|
+
# This class wraps the response received from pulling down content from a web page.
|
3
3
|
class Response
|
4
4
|
|
5
|
+
# The status of the response
|
5
6
|
attr_accessor :status
|
7
|
+
# The full body of the response
|
6
8
|
attr_accessor :body
|
9
|
+
# The url of the requested page
|
7
10
|
attr_accessor :url
|
8
11
|
|
12
|
+
# Takes the url of the requested page, the status code of the
|
13
|
+
# response, and the body of the response.
|
9
14
|
def initialize(url, status, body = '')
|
10
15
|
self.url = url
|
11
16
|
self.status = status.to_i
|
12
17
|
self.body = body
|
13
18
|
end
|
14
19
|
|
20
|
+
# Returns <tt>true</tt> if the status of the page was 200
|
15
21
|
def success?
|
16
22
|
self.status == 200
|
17
23
|
end
|
18
24
|
|
19
|
-
def to_s
|
25
|
+
def to_s # :nodoc:
|
20
26
|
self.success? ? self.body : ''
|
21
27
|
end
|
22
28
|
|
23
|
-
def to_str
|
29
|
+
def to_str # :nodoc:
|
24
30
|
self.to_s
|
25
31
|
end
|
26
32
|
|
33
|
+
# Returns <tt>true</tt> if the page is wrapped in <tt>html</tt> tags.
|
27
34
|
def has_layout?
|
28
35
|
return self.body != self.html_body
|
29
36
|
end
|
30
37
|
|
38
|
+
# Returns the 'full' HTML body of the requested page.
|
39
|
+
# If you pass in <tt>true</tt> it will normalize all the links
|
40
|
+
# found in the body.
|
41
|
+
#
|
42
|
+
# Example:
|
43
|
+
# # http://www.example.com/foo/bar.html
|
44
|
+
# <img src='image.jpg'> # => <img src='http://www.example.com/foo/image.jpg'>
|
45
|
+
# <img src='/image.jpg'> # => <img src='http://www.example.com/image.jpg'>
|
46
|
+
# <img src='http://www.example.org/image.jpg'> # => <img src='http://www.example.org/image.jpg'>
|
47
|
+
#
|
48
|
+
# The following tags get 'normalized' with the <tt>true</tt> parameter:
|
49
|
+
# img
|
50
|
+
# script
|
51
|
+
# link
|
52
|
+
# a
|
53
|
+
# iframe
|
54
|
+
# form
|
55
|
+
# object
|
31
56
|
def body(normalize_assets = false)
|
32
57
|
if normalize_assets
|
33
58
|
unless @__normalized_body
|
@@ -50,6 +75,10 @@ module ContentOMatic
|
|
50
75
|
@body
|
51
76
|
end
|
52
77
|
|
78
|
+
# Returns just the content within the HTML 'body' tag.
|
79
|
+
# If there is no 'body' tag, then the whole response body is returned.
|
80
|
+
# If you pass in <tt>true</tt> it will normalize all the links
|
81
|
+
# found in the body. See the body method for more details.
|
53
82
|
def html_body(normalize_assets = false)
|
54
83
|
unless @__doc_body
|
55
84
|
doc = Nokogiri::HTML(self.body(normalize_assets))
|
@@ -59,8 +88,10 @@ module ContentOMatic
|
|
59
88
|
return @__doc_body
|
60
89
|
end
|
61
90
|
|
91
|
+
# Returns a ContentOMatic::InvalidResponseError exception if the
|
92
|
+
# response was not a success.
|
62
93
|
def exception
|
63
|
-
ContentOMatic::InvalidResponseError.new("URL: '#{self.url}' did not return a valid response! Status: '#{self.status}'
|
94
|
+
ContentOMatic::InvalidResponseError.new("URL: '#{self.url}' did not return a valid response! Status: '#{self.status}'") unless self.success?
|
64
95
|
end
|
65
96
|
|
66
97
|
private
|
@@ -1,21 +1,23 @@
|
|
1
|
-
module ActionView
|
2
|
-
module Helpers
|
1
|
+
module ActionView # :nodoc:
|
2
|
+
module Helpers # :nodoc:
|
3
3
|
module TextHelper
|
4
4
|
|
5
|
+
# This convenience method automatically plugs into Rails views, however,
|
6
|
+
# this module could easily be included in a non-Rails environment.
|
7
|
+
#
|
8
|
+
# This method wraps the ContentOMatic.get method with some nice HTML
|
9
|
+
# comments to let you know what has been loaded. It also normalizes
|
10
|
+
# links in that content by default. See ContentOMatic::Response body for more
|
11
|
+
# information on normalizing links.
|
12
|
+
#
|
13
|
+
# This method will also, by default, return just the contents of the HTML
|
14
|
+
# 'body' tag.
|
5
15
|
def content_o_matic(slug, options = {})
|
6
16
|
options = {} if options.nil?
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
html_body = true
|
12
|
-
if options.has_key?(:html_body)
|
13
|
-
html_body = options.delete(:html_body)
|
14
|
-
end
|
15
|
-
normalize_assets = true
|
16
|
-
if options.has_key?(:normalize_assets)
|
17
|
-
normalize_assets = options.delete(:normalize_assets)
|
18
|
-
end
|
17
|
+
options = {:print_comments => true, :html_body => true, :normalize_assets => true}.merge(options)
|
18
|
+
comments = options.delete(:print_comments)
|
19
|
+
html_body = options.delete(:html_body)
|
20
|
+
normalize_assets = options.delete(:normalize_assets)
|
19
21
|
text = "<!-- Loading Content: '#{slug}' -->\n" if comments
|
20
22
|
begin
|
21
23
|
res = ContentOMatic.get(slug, options)
|