nocms-seo 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Rakefile +28 -0
- data/app/controllers/no_cms/seo/concerns/controller_with_seo.rb +12 -0
- data/app/helpers/no_cms/seo/seo_helper.rb +29 -0
- data/app/models/no_cms/seo.rb +5 -0
- data/app/models/no_cms/seo/concerns/model_with_seo.rb +20 -0
- data/app/models/no_cms/seo/info.rb +5 -0
- data/app/presenters/no_cms/seo/presenters/base_presenter.rb +23 -0
- data/app/presenters/no_cms/seo/presenters/seo_info_presenter.rb +44 -0
- data/app/views/no_cms/admin/seo/infos/_form.html.erb +24 -0
- data/config/locales/en.yml +23 -0
- data/config/locales/es.yml +23 -0
- data/db/migrate/20140415142547_create_no_cms_seo_infos.rb +19 -0
- data/db/migrate/20140526083501_add_exclude_from_robots_to_no_cms_seo_info.rb +7 -0
- data/db/migrate/20140526101137_rename_exclude_from_robots_in_no_cms_seo_infos.rb +15 -0
- data/lib/no_cms/seo/engine.rb +9 -0
- data/lib/no_cms/seo/version.rb +5 -0
- data/lib/nocms-seo.rb +6 -0
- metadata +116 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 820073f4b26b84a5622a41c1d9da4fd16219eec0
|
4
|
+
data.tar.gz: 4c14dd7a0cb6cba6693115e70a5eb8021d34faa5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8e7be0e0093ad51ecc5a9aba002b055d5c6834a1bafa9a563f50fd88984a1adb2f3d43a1fb357bcadb7d0b239ad67a24b66be7490def0b04cd9e3b91cfd430c2
|
7
|
+
data.tar.gz: cccda20236617866db46809249ebbd60311c861d02a073652cbbe635ef59d1f2b42ff7122d0e238998bf9b94c2da4d8f7f27e0fd041adb1f9ffd933a679c3c16
|
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'Seo'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
Bundler::GemHelper.install_tasks
|
21
|
+
|
22
|
+
require 'rspec/core'
|
23
|
+
require 'rspec/core/rake_task'
|
24
|
+
|
25
|
+
desc "Run all specs in spec directory (excluding plugin specs)"
|
26
|
+
RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
|
27
|
+
|
28
|
+
task :default => :spec
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module NoCms::Seo::SeoHelper
|
2
|
+
|
3
|
+
def canonical_url_tag canonical_url = ''
|
4
|
+
canonical_url = canonical_url.blank? ? @seo_info.canonical_url(request.host_with_port) : canonical_url
|
5
|
+
content_tag :link, nil, rel: 'canonical', href: canonical_url unless canonical_url.blank?
|
6
|
+
end
|
7
|
+
|
8
|
+
def meta_description_tag default_description = ''
|
9
|
+
description = default_description.blank? ? @seo_info.description : default_description
|
10
|
+
content_tag :meta, nil, name: 'description', content: description unless description.blank?
|
11
|
+
end
|
12
|
+
|
13
|
+
def title_tag default_title
|
14
|
+
title = default_title.blank? ? @seo_info.title : default_title
|
15
|
+
content_tag :title, title unless title.blank?
|
16
|
+
end
|
17
|
+
|
18
|
+
def robots_tag options = {}
|
19
|
+
options ||= {}
|
20
|
+
no_index = options[:no_index].nil? ? @seo_info.no_index? : options[:no_index]
|
21
|
+
no_follow = options[:no_follow].nil? ? @seo_info.no_follow? : options[:no_follow]
|
22
|
+
content = no_index ? "noindex" : "index"
|
23
|
+
content += ', '
|
24
|
+
content += no_follow ? "nofollow" : "follow"
|
25
|
+
|
26
|
+
content_tag :meta, nil, name: 'robots', content: content
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module NoCms::Seo::Concerns::ModelWithSeo
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
has_one :seo_info, class_name: 'NoCms::Seo::Info', as: :target
|
6
|
+
accepts_nested_attributes_for :seo_info
|
7
|
+
|
8
|
+
def seo_info
|
9
|
+
super || build_seo_info
|
10
|
+
end
|
11
|
+
|
12
|
+
def dup_with_seo
|
13
|
+
dupped_model = dup_without_seo
|
14
|
+
dupped_model.seo_info = seo_info.dup
|
15
|
+
dupped_model
|
16
|
+
end
|
17
|
+
alias_method_chain :dup, :seo
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class NoCms::Seo::Presenters::BasePresenter
|
2
|
+
|
3
|
+
def title
|
4
|
+
I18n.t('no_cms.seo.default_title')
|
5
|
+
end
|
6
|
+
|
7
|
+
def description
|
8
|
+
I18n.t('no_cms.seo.default_description')
|
9
|
+
end
|
10
|
+
|
11
|
+
def canonical_url host
|
12
|
+
""
|
13
|
+
end
|
14
|
+
|
15
|
+
def no_index?
|
16
|
+
false
|
17
|
+
end
|
18
|
+
|
19
|
+
def no_follow?
|
20
|
+
false
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module NoCms::Seo::Presenters
|
2
|
+
class SeoInfoPresenter
|
3
|
+
|
4
|
+
attr_accessor :object, :base_presenter
|
5
|
+
|
6
|
+
def initialize object
|
7
|
+
self.object = object
|
8
|
+
self.base_presenter = NoCms::Seo::Presenters::BasePresenter.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def title
|
12
|
+
self.object.seo_info.title.blank? ? default_title : self.object.seo_info.title
|
13
|
+
end
|
14
|
+
|
15
|
+
def default_title
|
16
|
+
base_presenter.title
|
17
|
+
end
|
18
|
+
|
19
|
+
def description
|
20
|
+
self.object.seo_info.description.blank? ? default_description : self.object.seo_info.description
|
21
|
+
end
|
22
|
+
|
23
|
+
def default_description
|
24
|
+
base_presenter.description
|
25
|
+
end
|
26
|
+
|
27
|
+
def no_index?
|
28
|
+
default_no_index? || self.object.seo_info.no_index?
|
29
|
+
end
|
30
|
+
|
31
|
+
def default_no_index?
|
32
|
+
false
|
33
|
+
end
|
34
|
+
|
35
|
+
def no_follow?
|
36
|
+
default_no_follow? || self.object.seo_info.no_follow?
|
37
|
+
end
|
38
|
+
|
39
|
+
def default_no_follow?
|
40
|
+
false
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<div class="row">
|
2
|
+
<%= f.label :title %>
|
3
|
+
<%= f.text_field :title %>
|
4
|
+
</div>
|
5
|
+
<div class="row">
|
6
|
+
<%= f.label :description %>
|
7
|
+
<%= f.text_area :description %>
|
8
|
+
</div>
|
9
|
+
<div class="row">
|
10
|
+
<%= f.label :exclude_from_sitemap, t('.robots_options') %>
|
11
|
+
|
12
|
+
# <%= f.label :exclude_from_sitemap do %>
|
13
|
+
<%= f.check_box :exclude_from_sitemap %>
|
14
|
+
<%= t '.exclude_from_sitemap' %>
|
15
|
+
<% end -%>
|
16
|
+
<%= f.label :no_index do %>
|
17
|
+
<%= f.check_box :no_index %>
|
18
|
+
<%= t '.no_index' %>
|
19
|
+
<% end -%>
|
20
|
+
<%= f.label :no_follow do %>
|
21
|
+
<%= f.check_box :no_follow %>
|
22
|
+
<%= t '.no_follow' %>
|
23
|
+
<% end -%>
|
24
|
+
</div>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
en:
|
2
|
+
activerecord:
|
3
|
+
models:
|
4
|
+
no_cms/seo/info: Seo Info
|
5
|
+
attributes:
|
6
|
+
no_cms/seo/info:
|
7
|
+
description: Description
|
8
|
+
exclude_from_sitemap: Exclude from sitemap
|
9
|
+
no_follow: Don't follow links (meta nofollow)
|
10
|
+
no_index: Don't index (meta noindex)
|
11
|
+
robots_options: Options for robots and search engines
|
12
|
+
no_cms:
|
13
|
+
seo:
|
14
|
+
default_description: ""
|
15
|
+
default_title: ""
|
16
|
+
admin:
|
17
|
+
seo:
|
18
|
+
infos:
|
19
|
+
form:
|
20
|
+
exclude_from_sitemap: Exclude from sitemap
|
21
|
+
no_follow: Don't follow links (meta nofollow)
|
22
|
+
no_index: Don't index (meta noindex)
|
23
|
+
robots_options: Options for robots and search engines
|
@@ -0,0 +1,23 @@
|
|
1
|
+
es:
|
2
|
+
activerecord:
|
3
|
+
models:
|
4
|
+
no_cms/seo/info: Seo Info
|
5
|
+
attributes:
|
6
|
+
no_cms/seo/info:
|
7
|
+
description: Descripción
|
8
|
+
exclude_from_sitemap: Excluir del sitemap
|
9
|
+
no_follow: No seguir enlaces (meta nofollow)
|
10
|
+
no_index: No indexar (meta noindex)
|
11
|
+
robots_options: Opciones para robots y motores de búsqueda
|
12
|
+
no_cms:
|
13
|
+
seo:
|
14
|
+
default_description: ""
|
15
|
+
default_title: ""
|
16
|
+
admin:
|
17
|
+
seo:
|
18
|
+
infos:
|
19
|
+
form:
|
20
|
+
exclude_from_sitemap: Excluir del sitemap
|
21
|
+
no_follow: No seguir enlaces (meta nofollow)
|
22
|
+
no_index: No indexar (meta noindex)
|
23
|
+
robots_options: Opciones para robots y motores de búsqueda
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateNoCmsSeoInfos < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :no_cms_seo_infos do |t|
|
4
|
+
t.belongs_to :target, polymorphic: true, index: true
|
5
|
+
|
6
|
+
t.timestamps
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
create_table :no_cms_seo_info_translations do |t|
|
11
|
+
t.belongs_to :no_cms_seo_info, index: true
|
12
|
+
t.string :locale
|
13
|
+
|
14
|
+
t.string :title
|
15
|
+
t.text :description
|
16
|
+
t.timestamps
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
class AddExcludeFromRobotsToNoCmsSeoInfo < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
add_column :no_cms_seo_infos, :exclude_from_robots_txt, :boolean, default: false
|
4
|
+
add_column :no_cms_seo_infos, :no_index, :boolean, default: false
|
5
|
+
add_column :no_cms_seo_infos, :no_follow, :boolean, default: false
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class RenameExcludeFromRobotsInNoCmsSeoInfos < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def up
|
4
|
+
add_column :no_cms_seo_infos, :exclude_from_sitemap, :boolean, default: false
|
5
|
+
NoCms::Seo::Info.update_all 'exclude_from_sitemap=exclude_from_robots_txt'
|
6
|
+
remove_column :no_cms_seo_infos, :exclude_from_robots_txt, :boolean, default: false
|
7
|
+
end
|
8
|
+
|
9
|
+
def down
|
10
|
+
add_column :no_cms_seo_infos, :exclude_from_robots_txt, :boolean, default: false
|
11
|
+
NoCms::Seo::Info.update_all 'exclude_from_robots_txt=exclude_from_sitemap'
|
12
|
+
remove_column :no_cms_seo_infos, :exclude_from_sitemap, :boolean, default: false
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
data/lib/nocms-seo.rb
ADDED
metadata
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nocms-seo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Simplelogica
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-11-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '4.3'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '4.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '4.3'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: globalize
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 4.0.0
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '5.1'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 4.0.0
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '5.1'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: sqlite3
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
description: Gem with SEO functionality independent from any CMS and embeddable in
|
68
|
+
any Rails 4 app
|
69
|
+
email:
|
70
|
+
- gems@simplelogica.net
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- Rakefile
|
76
|
+
- app/controllers/no_cms/seo/concerns/controller_with_seo.rb
|
77
|
+
- app/helpers/no_cms/seo/seo_helper.rb
|
78
|
+
- app/models/no_cms/seo.rb
|
79
|
+
- app/models/no_cms/seo/concerns/model_with_seo.rb
|
80
|
+
- app/models/no_cms/seo/info.rb
|
81
|
+
- app/presenters/no_cms/seo/presenters/base_presenter.rb
|
82
|
+
- app/presenters/no_cms/seo/presenters/seo_info_presenter.rb
|
83
|
+
- app/views/no_cms/admin/seo/infos/_form.html.erb
|
84
|
+
- config/locales/en.yml
|
85
|
+
- config/locales/es.yml
|
86
|
+
- db/migrate/20140415142547_create_no_cms_seo_infos.rb
|
87
|
+
- db/migrate/20140526083501_add_exclude_from_robots_to_no_cms_seo_info.rb
|
88
|
+
- db/migrate/20140526101137_rename_exclude_from_robots_in_no_cms_seo_infos.rb
|
89
|
+
- lib/no_cms/seo/engine.rb
|
90
|
+
- lib/no_cms/seo/version.rb
|
91
|
+
- lib/nocms-seo.rb
|
92
|
+
homepage: https://github.com/simplelogica/nocms-seo
|
93
|
+
licenses: []
|
94
|
+
metadata: {}
|
95
|
+
post_install_message:
|
96
|
+
rdoc_options: []
|
97
|
+
require_paths:
|
98
|
+
- lib
|
99
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
requirements: []
|
110
|
+
rubyforge_project:
|
111
|
+
rubygems_version: 2.2.2
|
112
|
+
signing_key:
|
113
|
+
specification_version: 4
|
114
|
+
summary: Gem with SEO functionality independent from any CMS and embeddable in any
|
115
|
+
Rails 4 app
|
116
|
+
test_files: []
|