seo_meta_builder 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ 0.1.0 (Mar 12, 2010)
2
+
3
+ * Initial release
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Guillaume Luccisano - g-mai|: guillaume.luccisano
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,15 @@
1
+ = SeoMetaBuilder
2
+
3
+ Seo Meta Builder is a plugin for Ruby on Rails that lets you easily manage your meta titles and descriptions.
4
+
5
+ All necessary informations are available on the wiki : http://wiki.github.com/kwi/seo_meta_builder
6
+
7
+ == Functionalities :
8
+
9
+ * Help to eradicate duplicate titles and descriptions (Very good for SEO)
10
+ * Easy to set up
11
+ * Build title/description with multiple parameters
12
+ * Works with multiple languages through the I18n Api.
13
+ * Works with Rails 2 and Rails 3
14
+
15
+ Copyright (c) 2010 Guillaume Luccisano - g-mai|: guillaume.luccisano, released under the MIT license
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'spec/rake/spectask'
4
+
5
+ spec_files = Rake::FileList["spec/**/*_spec.rb"]
6
+
7
+ desc "Run specs for current Rails version"
8
+ Spec::Rake::SpecTask.new do |t|
9
+ t.spec_files = spec_files
10
+ t.spec_opts = ["-c"]
11
+ end
12
+
13
+ task :default => :spec
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'seo_meta_builder'
@@ -0,0 +1,104 @@
1
+ # encoding: utf-8
2
+ # Build localized titles and description for webpages
3
+ module SeoMetaBuilder
4
+
5
+ # Set title and description at the same time
6
+ def set_page_metas(hash, order = nil)
7
+ set_page_title(hash, order)
8
+ set_page_description(hash, order)
9
+ end
10
+
11
+ # Set the page title with an hash of parameters
12
+ def set_page_title(hash, order = nil, type = :title)
13
+ @page_title = page_meta_string_builder(type, hash, order)
14
+ end
15
+
16
+ # Set the page description with an hash of parameters
17
+ def set_page_description(hash, order = nil, type = :description)
18
+ @page_description = page_meta_string_builder(type, hash, order)
19
+ end
20
+
21
+ private
22
+ def page_meta_auto_hash
23
+ hash = {}
24
+ hash[:id] = params[:id] if !params[:id].blank?
25
+ if !params[:page].blank?
26
+ (hash[:page] = params[:page].to_i) rescue nil
27
+ end
28
+ return hash
29
+ end
30
+
31
+ AutoOrder = [:id, :page]
32
+
33
+ # Return the default action name to use as scope
34
+ def page_meta_action_name
35
+ case params[:action]
36
+ when 'create'
37
+ :new
38
+ when 'update'
39
+ :edit
40
+ when 'destroy'
41
+ :show
42
+ else
43
+ params[:action]
44
+ end
45
+ end
46
+
47
+ # Return an escaped value for building metas
48
+ def page_meta_escape_value(val)
49
+ val.to_s.gsub("<", "&lt;").gsub(">", "&gt;")
50
+ end
51
+
52
+ # Build a meta string for i18n dependings on parameters
53
+ def page_meta_string_builder(type = :title, hash = {}, order = nil)
54
+ pt = "page_#{type}"
55
+
56
+ # Build order table
57
+ order = hash.keys if !order
58
+ order.each do |k|
59
+ pt << " - #{k}: %s" if hash[k]
60
+ end
61
+
62
+ # Build values table ordered and escaped
63
+ values = []
64
+ order.each do |k|
65
+ # Escape value :
66
+ values << page_meta_escape_value(hash[k]) if hash[k]
67
+ end
68
+
69
+ pt = I18n.t(pt, :default => 'no', :scope => :"meta.#{params[:controller]}.#{page_meta_action_name}")
70
+
71
+ # No translation found
72
+ # So use meta/default translation !
73
+ if pt == 'no'
74
+ pt = "page_#{type}"
75
+ pt << (' - %s' * values.size)
76
+ pt = I18n.t(pt, :default => pt, :scope => :'meta.default')
77
+ end
78
+
79
+ begin
80
+ sprintf(pt, *values)
81
+ rescue Exception
82
+ raise 'Mal formed string : ' + pt.to_s + ' | for : ' + values.join(' - ').to_s
83
+ end
84
+ end
85
+
86
+ public
87
+ def page_title
88
+ @page_title ||= page_meta_string_builder(:title, page_meta_auto_hash, AutoOrder)
89
+ end
90
+
91
+ def page_description
92
+ @page_description ||= page_meta_string_builder(:description, page_meta_auto_hash, AutoOrder)
93
+ end
94
+ end
95
+
96
+
97
+ # In order to use with rails :
98
+ if defined? ActionView
99
+ ActionView::Base.send :include, SeoMetaBuilder
100
+ end
101
+
102
+ if defined? ActionController
103
+ ActionController::Base.send :include, SeoMetaBuilder
104
+ end
@@ -0,0 +1,15 @@
1
+ en:
2
+ yo: 'salut'
3
+ meta:
4
+ default:
5
+ page_title: 'Default Title'
6
+ page_description: 'Default description'
7
+ "page_title - %s": 'Default Title %s'
8
+ "page_title - %s - %s": 'Default Title %s - %s'
9
+ users:
10
+ index:
11
+ page_title: 'Members list'
12
+ page_description: 'Members list description'
13
+ show:
14
+ "page_title - login: %s": '%s, member of our site'
15
+ "page_description - login: %s": '%s is member of our website'
@@ -0,0 +1,14 @@
1
+ fr:
2
+ meta:
3
+ default:
4
+ page_title: 'Default Title Fr'
5
+ page_description: 'Default description Fr'
6
+ "page_title - %s": 'Default Title %s Fr'
7
+ "page_title - %s - %s": 'Default Title %s Fr - %s'
8
+ users:
9
+ index:
10
+ page_title: 'Listing des membres'
11
+ page_description: 'La page de la liste des membres'
12
+ show:
13
+ "page_title - login: %s": '%s, membre de notre site'
14
+ "page_description - login: %s": '%s est membre de notre site'
@@ -0,0 +1,100 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe :seo_meat_builder do
4
+ before(:all) do
5
+ I18n.load_path = []
6
+ I18n.reload!
7
+ end
8
+
9
+ before(:each) do
10
+ @o = SeoMetaTester.new
11
+ end
12
+
13
+ it "should show page_title when nothing is translated" do
14
+ @o.page_title.should == 'page_title'
15
+ end
16
+
17
+ it "should show page_description when nothing is translated" do
18
+ @o.page_description.should == 'page_description'
19
+ end
20
+
21
+ it "should just load i18n translations test :p" do
22
+ # Add I18n load_path
23
+ I18n.load_path = (I18n.load_path << Dir[File.join(File.dirname(__FILE__), '../locales', '*.yml')]).uniq
24
+ I18n.reload!
25
+ I18n.locale = :en
26
+ end
27
+
28
+ it "should show correct default for page_title" do
29
+ @o.page_title.should == 'Default Title'
30
+ end
31
+
32
+ it "should show correct default for page_description" do
33
+ @o.page_description.should == 'Default description'
34
+ end
35
+
36
+ it "should show correct default for page_title with auto id parameters" do
37
+ @o.params = {:controller => :u, :action => :a, :id => 1}
38
+ @o.page_title.should == 'Default Title 1'
39
+ end
40
+
41
+ it "should show correct default for page_title with auto id parameters in fr" do
42
+ I18n.locale = :fr
43
+ @o.params = {:controller => :u, :action => :a, :id => 1}
44
+ @o.page_title.should == 'Default Title 1 Fr'
45
+ end
46
+
47
+ it "should show correct default for page_title with auto id and page parameters" do
48
+ I18n.locale = :en
49
+ @o.params = {:controller => :u, :action => :a, :id => 1, :page => 32}
50
+ @o.page_title.should == 'Default Title 1 - 32'
51
+ end
52
+
53
+ it "should show correct default for page_title with auto id and page parameters in fr" do
54
+ I18n.locale = :fr
55
+ @o.params = {:controller => :u, :action => :a, :id => 1, :page => 32}
56
+ @o.page_title.should == 'Default Title 1 Fr - 32'
57
+ end
58
+
59
+ it "should show correct page_title with translation done" do
60
+ I18n.locale = :en
61
+ @o.params = {:controller => :users, :action => :index}
62
+ @o.page_title.should == 'Members list'
63
+ end
64
+
65
+ it "should show correct page_title with parameters" do
66
+ I18n.locale = :en
67
+ @o.params = {:controller => :users, :action => :show}
68
+ @o.set_page_title(:login => 'kwi')
69
+ @o.page_title.should == 'kwi, member of our site'
70
+ end
71
+
72
+ it "should show correct page_title with parameters in fr" do
73
+ I18n.locale = :fr
74
+ @o.params = {:controller => :users, :action => :show}
75
+ @o.set_page_title(:login => 'kwi')
76
+ @o.page_title.should == 'kwi, membre de notre site'
77
+ end
78
+
79
+ it "should show correct ordered parameters" do
80
+ I18n.locale = :en
81
+ @o.params = {:controller => :users, :action => :show}
82
+ @o.set_page_title({:p1 => :p1, :p3 => :p3, :p2 => :p2, :login => 'kwi'}, [:login, :p1, :p2, :p3])
83
+ @o.page_title.should == 'page_title - kwi - p1 - p2 - p3'
84
+ end
85
+
86
+ it "should show not show parameters if no order is specified" do
87
+ I18n.locale = :en
88
+ @o.params = {:controller => :users, :action => :show}
89
+ @o.set_page_title({:p1 => :p1, :p3 => :p3, :p2 => :p2, :login => 'kwi'}, [:login, :p4, :p3])
90
+ @o.page_title.should == 'Default Title kwi - p3'
91
+ end
92
+
93
+ it "should correctly escape parameters" do
94
+ I18n.locale = :fr
95
+ @o.params = {:controller => :users, :action => :show}
96
+ @o.set_page_title(:login => '<script></script>')
97
+ @o.page_title.should == '&lt;script&gt;&lt;/script&gt;, membre de notre site'
98
+ end
99
+
100
+ end
@@ -0,0 +1,19 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+
4
+ require 'i18n'
5
+ require 'active_support'
6
+
7
+ require File.dirname(__FILE__) + '/../init.rb'
8
+
9
+ class SeoMetaTester
10
+ include SeoMetaBuilder
11
+
12
+ def params=(params)
13
+ @params = params
14
+ end
15
+
16
+ def params
17
+ @params || {:controller => :controller, :action => :index}
18
+ end
19
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: seo_meta_builder
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Guillaume Luccisano
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-04-14 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: Seo Meta Builder is a plugin for Ruby on Rails that lets you easily manage your meta titles and descriptions.
22
+ email: guillaume.luccisano@gmail.com
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - lib/seo_meta_builder.rb
31
+ - spec/locales/en.yml
32
+ - spec/locales/fr.yml
33
+ - spec/seo_meta_builder/seo_meta_builder_spec.rb
34
+ - spec/spec_helper.rb
35
+ - CHANGELOG.rdoc
36
+ - MIT-LICENSE
37
+ - Rakefile
38
+ - README.rdoc
39
+ - init.rb
40
+ has_rdoc: true
41
+ homepage: http://github.com/kwi/seo_meta_builder
42
+ licenses: []
43
+
44
+ post_install_message:
45
+ rdoc_options: []
46
+
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ version: "0"
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ segments:
61
+ - 1
62
+ - 3
63
+ - 4
64
+ version: 1.3.4
65
+ requirements: []
66
+
67
+ rubyforge_project: seo_meta_builder
68
+ rubygems_version: 1.3.6
69
+ signing_key:
70
+ specification_version: 3
71
+ summary: Manage easily your meta titles and descriptions with Ruby On Rails
72
+ test_files: []
73
+