orthor 0.1.0 → 0.1.1
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/README.md +30 -19
- data/lib/orthor.rb +3 -0
- data/spec/orthor/templates_spec.rb +17 -9
- metadata +2 -2
data/README.md
CHANGED
@@ -4,8 +4,6 @@ The Orthor gem is used to fetch and display your content from orthor.com
|
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
-
Is easy
|
8
|
-
|
9
7
|
gem install orthor
|
10
8
|
|
11
9
|
## Configuration
|
@@ -14,41 +12,36 @@ Add the below to a file and require it:
|
|
14
12
|
|
15
13
|
Orthor.setup do
|
16
14
|
account "orthor" # your orthor account id
|
17
|
-
caching :
|
15
|
+
caching :basic_file, 300, :path => "tmp/" # cache content in tmp/ for 5 mins
|
18
16
|
end
|
19
17
|
|
20
|
-
You can specify any Moneta cache store
|
21
|
-
|
22
|
-
Orthor.setup do
|
23
|
-
account "bob"
|
24
|
-
caching :basic_file, 300, :path => "tmp/"
|
25
|
-
end
|
18
|
+
You can specify any Moneta cache store you like, e.g. basic_file, memcache etc. The (optional) second argument is cache expiry in seconds, you can provide any initialize options required by your cache store as the 3rd arg.
|
26
19
|
|
27
20
|
## Usage
|
28
21
|
|
29
|
-
|
30
|
-
|
31
|
-
If you do not provide a template_name to render your content with, you will get the parsed JSON back.
|
32
|
-
|
33
|
-
### Content
|
22
|
+
#### Content
|
34
23
|
|
35
24
|
Orthor.content("id", :template_name)
|
36
25
|
|
37
|
-
|
26
|
+
#### Queries
|
38
27
|
|
39
28
|
Orthor.query("id", :template_name)
|
40
29
|
|
41
|
-
|
30
|
+
#### Categories
|
42
31
|
|
43
32
|
Orthor.category("id", :template_name)
|
44
33
|
|
45
|
-
|
34
|
+
#### Feeds
|
46
35
|
|
47
36
|
Orthor.feed("id")
|
48
37
|
|
38
|
+
The first argument to all these methods is the orthor-id of your piece of content/category etc. The second argument is the name of a template (see below) to use to render the returned content.
|
39
|
+
|
40
|
+
If you do not provide a template_name to render your content with, you will get the parsed JSON back.
|
41
|
+
|
49
42
|
## Templates
|
50
43
|
|
51
|
-
Orthor returns all of your content in JSON so to make the job of translating JSON -> HTML, we provide some templating help:
|
44
|
+
Orthor returns all of your content in JSON so to make the job of translating JSON -> HTML easier, we provide some templating help:
|
52
45
|
|
53
46
|
Orthor::Templates.define do
|
54
47
|
template :basic_content, %(<div>{{Content}}</div>)
|
@@ -71,10 +64,28 @@ Orthor returns all of your content in JSON so to make the job of translating JSO
|
|
71
64
|
<p class="last-updated">Last updated: {{Updated on}}</p>
|
72
65
|
<div class="content">{{Wysiwyg}}</div>
|
73
66
|
</div>)
|
67
|
+
|
68
|
+
mapping :detail_templates, {
|
69
|
+
"Blog Post" => :blog_entry,
|
70
|
+
"User Manual" => :user_manual
|
71
|
+
}
|
74
72
|
end
|
75
73
|
|
76
74
|
Now any call you make to Orthor.content/category/query can be given a 2nd argument of a template name and rather than receiving parsed JSON, you will be returned a HTML string.
|
77
75
|
|
76
|
+
### Named template mappings
|
77
|
+
|
78
|
+
For the times when you have a category or query that returns multiple types of content (e.g. a tumblr like blog with bookmarks, quotes etc), you can provide a named template mapping.
|
79
|
+
|
80
|
+
As an example if this was your template mapping:
|
81
|
+
|
82
|
+
mapping :blog_types, {
|
83
|
+
"Bookmark" => :bookmark_detail,
|
84
|
+
"Quote" => :quote_detail
|
85
|
+
}
|
86
|
+
|
87
|
+
A call to Orthor.category("blog", :blog_types) means that any content item using the "Bookmark" template will render using the bookmark_detail template.
|
88
|
+
|
78
89
|
### Default template tags
|
79
90
|
|
80
91
|
These tags are available to all content:
|
@@ -105,5 +116,5 @@ anthony@orthor.com
|
|
105
116
|
|
106
117
|
[Orthor demo site](http://github.com/anthony/orthor-demo)
|
107
118
|
|
108
|
-
Copyright (c)
|
119
|
+
Copyright (c) 2010 Robotic Foo, released under the MIT license
|
109
120
|
|
data/lib/orthor.rb
CHANGED
@@ -8,10 +8,12 @@ describe Orthor::Templates do
|
|
8
8
|
:body => File.join(SPEC_DIR, 'resources', 'query.json'))
|
9
9
|
FakeWeb.register_uri(:get, "http://content.orthor.com/orthor/categories/category.json",
|
10
10
|
:body => File.join(SPEC_DIR, 'resources', 'category.json'))
|
11
|
-
FakeWeb.register_uri(:get, "http://content.orthor.com/orthor/
|
11
|
+
FakeWeb.register_uri(:get, "http://content.orthor.com/orthor/queries/varied.json",
|
12
12
|
:body => File.join(SPEC_DIR, 'resources', 'varied_content.json'))
|
13
13
|
FakeWeb.register_uri(:get, "http://content.orthor.com/orthor/feeds/feed.rss",
|
14
14
|
:body => File.join(SPEC_DIR, 'resources', 'feed.rss'))
|
15
|
+
FakeWeb.register_uri(:get, "http://content.orthor.com/orthor/content_items/utf8.json",
|
16
|
+
:body => File.join(SPEC_DIR, 'resources', 'utf8.json'))
|
15
17
|
FakeWeb.register_uri(:get, "http://content.orthor.com/orthor/content_items/missing.json",
|
16
18
|
:body => "")
|
17
19
|
|
@@ -20,15 +22,21 @@ describe Orthor::Templates do
|
|
20
22
|
end
|
21
23
|
|
22
24
|
Orthor::Templates.define do
|
23
|
-
template :basic, %!<h2>{{
|
24
|
-
template :brief, %!<h2>{{
|
25
|
-
template :blurb, %!<div>{{
|
26
|
-
template :user, %!<div>{{
|
25
|
+
template :basic, %!<h2>{{title}}</h2><div class="content">{{content}}</div>!
|
26
|
+
template :brief, %!<h2>{{title}}</h2>!
|
27
|
+
template :blurb, %!<div>{{content.blurb}}</div>!
|
28
|
+
template :user, %!<div>{{author.email}}</div><div>{{author.first_name}} {{author.last_name}}</div>!
|
27
29
|
|
28
30
|
mapping :listing, { "Text Block" => :brief }
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
34
|
+
describe "utf8" do
|
35
|
+
it "should be able to parse utf8" do
|
36
|
+
Orthor.content("utf8", :brief).should == "<h2>Q&A with Tobias Lütke of Shopify - (37signals)</h2>"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
32
40
|
describe "with no content returned" do
|
33
41
|
it "should return an empty string" do
|
34
42
|
Orthor.content("missing").should be_empty
|
@@ -41,7 +49,7 @@ describe Orthor::Templates do
|
|
41
49
|
end
|
42
50
|
|
43
51
|
it "should return templates by name" do
|
44
|
-
Orthor::Templates[:basic].should == %!<h2>{{
|
52
|
+
Orthor::Templates[:basic].should == %!<h2>{{title}}</h2><div class="content">{{content}}</div>!
|
45
53
|
end
|
46
54
|
end
|
47
55
|
|
@@ -101,11 +109,11 @@ describe Orthor::Templates do
|
|
101
109
|
|
102
110
|
describe "template mapping" do
|
103
111
|
before(:all) do
|
104
|
-
@json = Orthor.
|
112
|
+
@json = Orthor.query("varied")
|
105
113
|
end
|
106
114
|
|
107
115
|
it "should allow you to pass a hash of orthor template names" do
|
108
|
-
Orthor.render(@json
|
116
|
+
Orthor.render(@json, { "Brief News Item" => :basic, "Link" => :brief, "Bookmark" => :blurb }).should == "<div>The User Manual has recently had a big overhaul with increased documentation for lots of Orthor's great features, including Content Queries, RSS Feeds,...</div><h2>Account event tracking</h2><h2>Tutorials have been updated</h2><div class=\"content\">We've recently made the tutorials section of the site public, stay tuned for some more language examples + increased detail of the existing languages. </div><h2>Tutorials have been updated</h2><div class=\"content\">We've recently made the tutorials section of the site public, stay tuned for some more language examples + increased detail of the existing languages. </div>"
|
109
117
|
end
|
110
118
|
|
111
119
|
describe "with a named map" do
|
@@ -117,7 +125,7 @@ describe Orthor::Templates do
|
|
117
125
|
describe "when a mapping is missing" do
|
118
126
|
it "should raise an Unknown template exception" do
|
119
127
|
lambda do
|
120
|
-
Orthor.render(@json
|
128
|
+
Orthor.render(@json, { "Brief News Item" => :basic, "Link" => :brief })
|
121
129
|
end.should raise_error(Orthor::Templates::Unknown)
|
122
130
|
end
|
123
131
|
end
|