headshop 0.2.1 → 0.3.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.markdown +52 -0
- data/VERSION +1 -1
- data/headshop.gemspec +79 -0
- data/lib/headshop.rb +0 -5
- data/lib/headshop/meta_tag_helper.rb +24 -7
- data/spec/headshop.yml +22 -0
- data/spec/lib/headshop/meta_tag_helper_spec.rb +46 -10
- data/spec/lib/headshop_spec.rb +0 -16
- metadata +5 -4
data/README.markdown
CHANGED
@@ -3,6 +3,58 @@ Headshop
|
|
3
3
|
|
4
4
|
Meta tag management to DRY up your views and SEO the crap out of your site.
|
5
5
|
|
6
|
+
Installation
|
7
|
+
------------
|
8
|
+
|
9
|
+
To get started with headshop add it to your gemfile:
|
10
|
+
|
11
|
+
gem 'headshop'
|
12
|
+
|
13
|
+
Usage
|
14
|
+
-----
|
15
|
+
|
16
|
+
Headshop relies on a yml file to determine the meta tags to display. Create an initializer file (config/intializers/headshop.rb) and tell headshop where your yml file is located.
|
17
|
+
|
18
|
+
Headshop.setup do |config|
|
19
|
+
config.config_file = File.join(Rails.root, 'config', 'headshop.yml')
|
20
|
+
end
|
21
|
+
|
22
|
+
Headshop will search the yml file with the controller name/action name to find the correct tags. To populate the meta tags for the index action on the landing controller:
|
23
|
+
|
24
|
+
landing:
|
25
|
+
index:
|
26
|
+
title: Landing Page
|
27
|
+
description: Landing Page
|
28
|
+
keywords: landing, page
|
29
|
+
|
30
|
+
Headshop will also look for default meta tags if they are defined. If headshop cannot locate the tags for a controller/action pair, the default tags will be displayed.
|
31
|
+
|
32
|
+
default_meta:
|
33
|
+
title: Default Page
|
34
|
+
description: Default Page
|
35
|
+
keywords: default, page
|
36
|
+
|
37
|
+
You can also apply base tags to each matching tag:
|
38
|
+
|
39
|
+
base_meta:
|
40
|
+
title: Headshop |
|
41
|
+
description: Headshop |
|
42
|
+
keywords: headshop
|
43
|
+
|
44
|
+
This will output (given the default_meta above):
|
45
|
+
|
46
|
+
<title>Headshop | Default Page</title>
|
47
|
+
<meta name='title' content='Headshop | Default Page' />
|
48
|
+
<meta name='description' content='Headshop | Default Page' />
|
49
|
+
<meta name='keywords' content='headshop, default, page' />
|
50
|
+
|
51
|
+
Meta tags aren't limited to title, description and keywords. Headshop will apply any meta tag found in the yml file to your view.
|
52
|
+
|
53
|
+
Display the meta tag in your view with the meta_tag helper:
|
54
|
+
|
55
|
+
= meta_tag
|
56
|
+
|
57
|
+
|
6
58
|
Contributing to providence
|
7
59
|
--------------------------
|
8
60
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.1
|
data/headshop.gemspec
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{headshop}
|
8
|
+
s.version = "0.3.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Chuck Collins"]
|
12
|
+
s.date = %q{2011-05-13}
|
13
|
+
s.description = %q{Manage meta tags through an external yml file. Easy configuration. Takes ugly boilerplate away from your app.}
|
14
|
+
s.email = %q{chuck.collins@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.markdown"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".rvmrc",
|
22
|
+
"Gemfile",
|
23
|
+
"Gemfile.lock",
|
24
|
+
"LICENSE.txt",
|
25
|
+
"README.markdown",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"headshop.gemspec",
|
29
|
+
"lib/headshop.rb",
|
30
|
+
"lib/headshop/meta_tag_helper.rb",
|
31
|
+
"spec/headshop.yml",
|
32
|
+
"spec/headshop_no_default_no_base.yml",
|
33
|
+
"spec/lib/headshop/meta_tag_helper_spec.rb",
|
34
|
+
"spec/lib/headshop_spec.rb",
|
35
|
+
"spec/spec_helper.rb"
|
36
|
+
]
|
37
|
+
s.homepage = %q{http://github.com/ccollins/headshop}
|
38
|
+
s.licenses = ["MIT"]
|
39
|
+
s.require_paths = ["lib"]
|
40
|
+
s.rubygems_version = %q{1.3.7}
|
41
|
+
s.summary = %q{Meta tag management to DRY up your views and SEO the crap out of your site.}
|
42
|
+
s.test_files = [
|
43
|
+
"spec/lib/headshop/meta_tag_helper_spec.rb",
|
44
|
+
"spec/lib/headshop_spec.rb",
|
45
|
+
"spec/spec_helper.rb"
|
46
|
+
]
|
47
|
+
|
48
|
+
if s.respond_to? :specification_version then
|
49
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
50
|
+
s.specification_version = 3
|
51
|
+
|
52
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
53
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
54
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
55
|
+
s.add_development_dependency(%q<mocha>, [">= 0"])
|
56
|
+
s.add_development_dependency(%q<providence>, [">= 0"])
|
57
|
+
s.add_development_dependency(%q<rails>, [">= 0"])
|
58
|
+
s.add_development_dependency(%q<rspec-rails>, [">= 0"])
|
59
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
60
|
+
else
|
61
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
62
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
63
|
+
s.add_dependency(%q<mocha>, [">= 0"])
|
64
|
+
s.add_dependency(%q<providence>, [">= 0"])
|
65
|
+
s.add_dependency(%q<rails>, [">= 0"])
|
66
|
+
s.add_dependency(%q<rspec-rails>, [">= 0"])
|
67
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
68
|
+
end
|
69
|
+
else
|
70
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
71
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
72
|
+
s.add_dependency(%q<mocha>, [">= 0"])
|
73
|
+
s.add_dependency(%q<providence>, [">= 0"])
|
74
|
+
s.add_dependency(%q<rails>, [">= 0"])
|
75
|
+
s.add_dependency(%q<rspec-rails>, [">= 0"])
|
76
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
data/lib/headshop.rb
CHANGED
@@ -16,12 +16,7 @@ module Headshop
|
|
16
16
|
def self.setup
|
17
17
|
yield self
|
18
18
|
end
|
19
|
-
|
20
|
-
def self.has_meta_data_for?(controller, action)
|
21
|
-
self.meta_data.has_key?(controller) && self.meta_data[controller].has_key?(action)
|
22
|
-
end
|
23
19
|
end
|
24
20
|
|
25
21
|
require 'headshop/meta_tag_helper'
|
26
|
-
|
27
22
|
ActionView::Base.send :include, Headshop::MetaTagHelper
|
@@ -1,12 +1,29 @@
|
|
1
|
+
require 'action_view'
|
2
|
+
|
1
3
|
module Headshop::MetaTagHelper
|
4
|
+
include ActionView::Helpers::TagHelper
|
5
|
+
|
2
6
|
def meta_tag
|
3
|
-
write_meta_data(get_meta_data_for(
|
7
|
+
write_meta_data(get_meta_data_for(controller_path, action_name))
|
8
|
+
end
|
9
|
+
|
10
|
+
def find_meta_data_for(controller, action)
|
11
|
+
controller_path = controller.split('/')
|
12
|
+
md = Headshop.meta_data
|
13
|
+
has_controller_meta_data = true
|
14
|
+
|
15
|
+
controller_path.each do |key|
|
16
|
+
has_controller_meta_data = has_controller_meta_data & md.has_key?(key)
|
17
|
+
md = md[key] if has_controller_meta_data
|
18
|
+
end
|
19
|
+
|
20
|
+
md[action] if has_controller_meta_data && md.has_key?(action)
|
4
21
|
end
|
5
22
|
|
6
23
|
def get_meta_data_for(controller, action)
|
7
|
-
if
|
8
|
-
|
9
|
-
|
24
|
+
if meta_data = find_meta_data_for(controller, action)
|
25
|
+
meta_data
|
26
|
+
else
|
10
27
|
Headshop.meta_data['default_meta']
|
11
28
|
end
|
12
29
|
end
|
@@ -20,8 +37,8 @@ module Headshop::MetaTagHelper
|
|
20
37
|
end
|
21
38
|
|
22
39
|
def write_meta_data meta_data
|
23
|
-
|
24
|
-
|
25
|
-
|
40
|
+
display_meta = meta_data.collect { |meta| tag(:meta, {:name => meta[0], :content => apply_base_tag(meta[0], meta[1])}, false, false) }
|
41
|
+
display_meta.push(content_tag(:title, apply_base_tag('title', meta_data['title']), nil, false)) if meta_data.has_key?('title')
|
42
|
+
display_meta.join("\n").html_safe
|
26
43
|
end
|
27
44
|
end
|
data/spec/headshop.yml
CHANGED
@@ -13,7 +13,29 @@ controller:
|
|
13
13
|
description: 'action_description'
|
14
14
|
keywords: 'action_keywords'
|
15
15
|
title: 'action_title'
|
16
|
+
|
17
|
+
namespace:
|
18
|
+
controller:
|
19
|
+
action:
|
20
|
+
description: 'namespace_description'
|
21
|
+
keywords: 'namespace_keywords'
|
22
|
+
title: 'namespace_title'
|
16
23
|
|
24
|
+
n:
|
25
|
+
a:
|
26
|
+
m:
|
27
|
+
e:
|
28
|
+
s:
|
29
|
+
p:
|
30
|
+
a:
|
31
|
+
c:
|
32
|
+
e:
|
33
|
+
controller:
|
34
|
+
action:
|
35
|
+
description: 'namespace_description'
|
36
|
+
keywords: 'namespace_keywords'
|
37
|
+
title: 'namespace_title'
|
38
|
+
|
17
39
|
tester:
|
18
40
|
default_meta:
|
19
41
|
description: 'tester_description'
|
@@ -24,7 +24,7 @@ describe Headshop::MetaTagHelper do
|
|
24
24
|
|
25
25
|
context "#meta_tag" do
|
26
26
|
before(:each) do
|
27
|
-
Class.stub!(:
|
27
|
+
Class.stub!(:controller_path).and_return('controller')
|
28
28
|
Class.stub!(:action_name).and_return('action')
|
29
29
|
end
|
30
30
|
|
@@ -40,18 +40,18 @@ describe Headshop::MetaTagHelper do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
meta_data = Class.meta_tag
|
43
|
-
/<title>action_title<\/title
|
44
|
-
/<meta name=
|
45
|
-
/<meta name=
|
46
|
-
/<meta name=
|
43
|
+
/<title>action_title<\/title>/.should =~ meta_data
|
44
|
+
/<meta content="action_title" name="title" \/>/.should =~ meta_data
|
45
|
+
/<meta content="action_description" name="description" \/>/.should =~ meta_data
|
46
|
+
/<meta content="action_keywords" name="keywords" \/>/.should =~ meta_data
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should write the meta data for controller/action" do
|
50
50
|
meta_data = Class.meta_tag
|
51
|
-
/<title>base | action_title<\/title
|
52
|
-
/<meta
|
53
|
-
/<meta
|
54
|
-
/<meta
|
51
|
+
/<title>base | action_title<\/title>/.should =~ meta_data
|
52
|
+
/<meta content="base | action_title" name="title" \/>/.should =~ meta_data
|
53
|
+
/<meta content="base | action_description" name="description" \/>/.should =~ meta_data
|
54
|
+
/<meta content="base, action_keywords" name="keywords" \/>/.should =~ meta_data
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -68,6 +68,10 @@ describe Headshop::MetaTagHelper do
|
|
68
68
|
Class.get_meta_data_for('controller', 'action').should == {"title"=>"action_title", "description"=>"action_description", "keywords"=>"action_keywords"}
|
69
69
|
end
|
70
70
|
|
71
|
+
it "should return meta data for a namespaced controller and action" do
|
72
|
+
Class.get_meta_data_for('n/a/m/e/s/p/a/c/e/controller', 'action').should == {"title"=>"namespace_title", "description"=>"namespace_description", "keywords"=>"namespace_keywords"}
|
73
|
+
end
|
74
|
+
|
71
75
|
it "should return nil when a controller and action arent found and no default set" do
|
72
76
|
Headshop.setup do |config|
|
73
77
|
config.config_file = File.join(File.dirname(__FILE__), '..', '..', 'headshop_no_default_no_base.yml')
|
@@ -80,7 +84,39 @@ describe Headshop::MetaTagHelper do
|
|
80
84
|
context "#write_meta_data" do
|
81
85
|
it "should write meta data for anything" do
|
82
86
|
meta_data = Class.write_meta_data({:yousocrazy => :tester})
|
83
|
-
/<meta name=
|
87
|
+
/<meta content="tester" name="yousocrazy" \/>/.should =~ meta_data
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context "#find_meta_data_for" do
|
92
|
+
before(:all) do
|
93
|
+
Headshop.setup do |config|
|
94
|
+
config.config_file = File.join(File.dirname(__FILE__), '..', '..', 'headshop.yml')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should return nil if no meta data" do
|
99
|
+
Class.find_meta_data_for('noway', 'noway').should be_nil
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should return true if the controller/action key are found" do
|
103
|
+
Class.find_meta_data_for('controller', 'action').should == {"title"=>"action_title", "description"=>"action_description", "keywords"=>"action_keywords"}
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should return true for a namespaced controller" do
|
107
|
+
Class.find_meta_data_for('namespace/controller', 'action').should == {"title"=>"namespace_title", "description"=>"namespace_description", "keywords"=>"namespace_keywords"}
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should return nil for a namespaced controller that is not found" do
|
111
|
+
Class.find_meta_data_for('noway/controller', 'action').should be_nil
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should be able to deeply nest a controller" do
|
115
|
+
Class.find_meta_data_for('n/a/m/e/s/p/a/c/e/controller', 'action').should == {"title"=>"namespace_title", "description"=>"namespace_description", "keywords"=>"namespace_keywords"}
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should be able to deeply nest a controller and return nil" do
|
119
|
+
Class.find_meta_data_for('s/h/a/m/a/l/a/m/a/d/i/n/g/o/n/g/controller', 'action').should be_nil
|
84
120
|
end
|
85
121
|
end
|
86
122
|
end
|
data/spec/lib/headshop_spec.rb
CHANGED
@@ -28,20 +28,4 @@ describe Headshop do
|
|
28
28
|
Headshop.meta_data.should == {:test => 'test'}
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
32
|
-
context "#has_meta_data_for?" do
|
33
|
-
before(:all) do
|
34
|
-
Headshop.setup do |config|
|
35
|
-
config.config_file = File.join(File.dirname(__FILE__), '..', 'headshop.yml')
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should return false if no meta data" do
|
40
|
-
Headshop.has_meta_data_for?('noway', 'noway').should be_false
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should return true if the controller/action key are found" do
|
44
|
-
Headshop.has_meta_data_for?('controller', 'action').should be_true
|
45
|
-
end
|
46
|
-
end
|
47
31
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: headshop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 1
|
10
|
-
version: 0.
|
10
|
+
version: 0.3.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Chuck Collins
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-05-
|
18
|
+
date: 2011-05-13 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -138,6 +138,7 @@ files:
|
|
138
138
|
- README.markdown
|
139
139
|
- Rakefile
|
140
140
|
- VERSION
|
141
|
+
- headshop.gemspec
|
141
142
|
- lib/headshop.rb
|
142
143
|
- lib/headshop/meta_tag_helper.rb
|
143
144
|
- spec/headshop.yml
|