redde_seo 0.0.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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +17 -0
- data/app/controllers/admin/seos_controller.rb +61 -0
- data/app/controllers/concerns/with_seo_ctrl.rb +15 -0
- data/app/models/concerns/with_seo.rb +9 -0
- data/app/models/redde/seo/custom_class_names.rb +5 -0
- data/app/models/redde/seo/default_seo.rb +19 -0
- data/app/models/redde/seo/finder/objected.rb +52 -0
- data/app/models/redde/seo/finder/urled.rb +23 -0
- data/app/models/redde/seo/finder.rb +27 -0
- data/app/models/redde/seo.rb +25 -0
- data/app/validators/redde/seo_validator.rb +61 -0
- data/app/views/admin/seos/_block.html.haml +5 -0
- data/app/views/admin/seos/_form.html.haml +14 -0
- data/app/views/admin/seos/edit.html.haml +21 -0
- data/app/views/admin/seos/index.html.haml +31 -0
- data/app/views/application/_seo.html.haml +3 -0
- data/db/migrate/20140624084916_create_seos.rb +19 -0
- data/lib/redde_seo/engine.rb +4 -0
- data/lib/redde_seo/version.rb +3 -0
- data/lib/redde_seo.rb +4 -0
- metadata +247 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: eb12b97f9efc40584a77ec678288a3c4b5504fe4
|
4
|
+
data.tar.gz: 1a1b6308643fb6eb89080e5bb6649449adbfdcb9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6b09359daae9ed6117e5928ef2796ac87c853002ddb5f16de06e60e24459e7e13c41705bf823f9cf79ed5ae934039d115779aa2134ff071ed874297b4a617d2b
|
7
|
+
data.tar.gz: a2cab5c78564a2a8c254681a65dbdc768eaddd99e29c43780b6fc08e3fe950076f379177f0b67515bb3e50204c8b97c1ec664f19ac6f3c34ac68d44c789157e7
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2014 YOURNAME
|
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.
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
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
|
+
Bundler::GemHelper.install_tasks
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
class Admin::SeosController < Admin::BaseController
|
3
|
+
def index
|
4
|
+
@seos = Redde::Seo.empty
|
5
|
+
end
|
6
|
+
|
7
|
+
def all
|
8
|
+
@seos = Redde::Seo.all
|
9
|
+
render 'index'
|
10
|
+
end
|
11
|
+
|
12
|
+
def new
|
13
|
+
@seo = Redde::Seo.new
|
14
|
+
render 'edit'
|
15
|
+
end
|
16
|
+
|
17
|
+
def edit
|
18
|
+
@seo = Redde::Seo.find(params[:id])
|
19
|
+
end
|
20
|
+
|
21
|
+
def create
|
22
|
+
@seo = Redde::Seo.new(seo_params)
|
23
|
+
redirect_or_edit(@seo, @seo.save)
|
24
|
+
end
|
25
|
+
|
26
|
+
def update
|
27
|
+
@seo = Redde::Seo.find(params[:id])
|
28
|
+
redirect_or_edit(@seo, @seo.update_attributes(seo_params))
|
29
|
+
end
|
30
|
+
|
31
|
+
def destroy
|
32
|
+
@seo = Redde::Seo.find(params[:id])
|
33
|
+
@seo.destroy
|
34
|
+
redirect_to admin_seos_path, notice: 'Seo удален.'
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def seo_params
|
40
|
+
params.require(:seo).permit!
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def redirect_or_edit(obj, saved)
|
46
|
+
if saved
|
47
|
+
redirect_to url_for_obj(obj), notice: notice_for(obj)
|
48
|
+
else
|
49
|
+
render 'edit'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def notice_for(obj)
|
54
|
+
"#{obj.class.model_name.human} сохранен."
|
55
|
+
end
|
56
|
+
|
57
|
+
def url_for_obj(obj)
|
58
|
+
return [:edit, :admin, obj] if params[:commit] == 'Применить'
|
59
|
+
[:admin, obj.class.model_name.plural.to_sym]
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
class Redde::Seo::Finder::Objected
|
4
|
+
attr_accessor :url, :objekt, :seo
|
5
|
+
|
6
|
+
def initialize(url, objekt)
|
7
|
+
@url = url
|
8
|
+
@objekt = objekt
|
9
|
+
@seo = Redde::Seo.for_object(objekt).first
|
10
|
+
end
|
11
|
+
|
12
|
+
def find
|
13
|
+
return updated_object_seo if seo && !seo.empty?
|
14
|
+
return templated_seo if templated?
|
15
|
+
create_seo
|
16
|
+
default_seo
|
17
|
+
end
|
18
|
+
|
19
|
+
def default_seo
|
20
|
+
Redde::Seo::DefaultSeo.new
|
21
|
+
end
|
22
|
+
|
23
|
+
def updated_object_seo
|
24
|
+
seo.update(url: url) if seo.url != url
|
25
|
+
seo
|
26
|
+
end
|
27
|
+
|
28
|
+
def object_class_name
|
29
|
+
objekt.class.name
|
30
|
+
end
|
31
|
+
|
32
|
+
def templated?
|
33
|
+
Redde::Seo::CustomClassNames::NAMES.include? object_class_name
|
34
|
+
end
|
35
|
+
|
36
|
+
def templated_seo
|
37
|
+
"Redde::Seo::#{object_class_name}Seo".constantize.new(objekt)
|
38
|
+
end
|
39
|
+
|
40
|
+
def objekt_params
|
41
|
+
{ seoable_id: objekt.id, seoable_type: objekt.class.name }
|
42
|
+
end
|
43
|
+
|
44
|
+
def seo_params
|
45
|
+
objekt_params.merge(url: url)
|
46
|
+
end
|
47
|
+
|
48
|
+
def create_seo
|
49
|
+
s = Redde::Seo.new(seo_params.merge(skip_basic_validation: true))
|
50
|
+
s.save if objekt.try(:id) && objekt.try(:class).try(:name)
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Redde::Seo::Finder::Urled
|
4
|
+
def find_url_seo
|
5
|
+
return default_or_existing_urled_seo if urled_seo_from_db
|
6
|
+
create_urled_seo
|
7
|
+
default_seo
|
8
|
+
end
|
9
|
+
|
10
|
+
def default_or_existing_urled_seo
|
11
|
+
return default_seo if urled_seo_from_db.nil?
|
12
|
+
urled_seo_from_db
|
13
|
+
end
|
14
|
+
|
15
|
+
def urled_seo_from_db
|
16
|
+
@urled_seo ||= ::Redde::Seo.for_url(url).first
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_urled_seo
|
20
|
+
s = Redde::Seo.new(url: url, skip_basic_validation: true)
|
21
|
+
s.save if url.present?
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
class Redde::Seo::Finder
|
4
|
+
include Urled
|
5
|
+
|
6
|
+
attr_accessor :url, :object, :result, :object_seo
|
7
|
+
|
8
|
+
def initialize(url, object = nil)
|
9
|
+
@url = url
|
10
|
+
@object = object
|
11
|
+
end
|
12
|
+
|
13
|
+
def find
|
14
|
+
@result = find_object_seo if object.present?
|
15
|
+
@result = find_url_seo if result.nil?
|
16
|
+
@result = default_seo if result.nil?
|
17
|
+
@result
|
18
|
+
end
|
19
|
+
|
20
|
+
def find_object_seo
|
21
|
+
Redde::Seo::Finder::Objected.new(url, object).find
|
22
|
+
end
|
23
|
+
|
24
|
+
def default_seo
|
25
|
+
Redde::Seo::DefaultSeo.new
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
class Redde::Seo < ActiveRecord::Base
|
4
|
+
attr_accessor :skip_basic_validation
|
5
|
+
|
6
|
+
belongs_to :seoable, polymorphic: true
|
7
|
+
|
8
|
+
scope :for_url, ->(u) { where(url: u) }
|
9
|
+
scope :for_object, ->(o) { where(seoable_type: o.class.name, seoable_id: o.id) }
|
10
|
+
scope :empty, -> { where("title is null or title = '' or keywords is null or keywords = '' or description is null or description = ''") }
|
11
|
+
|
12
|
+
validates :title, :keywords, :description, length: { minimum: 5 }, allow_blank: true, unless: :skip_basic_validation
|
13
|
+
|
14
|
+
validate do |seo|
|
15
|
+
Redde::SeoValidator.new(seo).validate
|
16
|
+
end
|
17
|
+
|
18
|
+
def empty?
|
19
|
+
!(title.present? && keywords.present? && description.present?)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.model_name
|
23
|
+
ActiveModel::Name.new(self, nil, 'Seo')
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
class Redde::SeoValidator
|
4
|
+
attr_accessor :seo
|
5
|
+
|
6
|
+
def initialize(seo)
|
7
|
+
@seo = seo
|
8
|
+
end
|
9
|
+
|
10
|
+
def validate
|
11
|
+
empty_fields
|
12
|
+
if valid?
|
13
|
+
check_url_uniqueness
|
14
|
+
check_object_uniqueness
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def valid?
|
19
|
+
!seo.errors.any?
|
20
|
+
end
|
21
|
+
|
22
|
+
def edit_or_create_count
|
23
|
+
seo.persisted? ? 1 : 0
|
24
|
+
end
|
25
|
+
|
26
|
+
def check_url_uniqueness
|
27
|
+
@seo.errors[:base] << 'Нарушение уникальности привязки. Два разных сео не могут быть привязаны к одному url' if url_uniq?
|
28
|
+
end
|
29
|
+
|
30
|
+
def url_uniq?
|
31
|
+
url_present? && Redde::Seo.where(url: seo.url).count > edit_or_create_count
|
32
|
+
end
|
33
|
+
|
34
|
+
def check_object_uniqueness
|
35
|
+
@seo.errors[:base] << 'Нарушение уникальности привязки. Два разных сео не могут быть привязаны к одному объекту' if object_uniq?
|
36
|
+
end
|
37
|
+
|
38
|
+
def object_uniq?
|
39
|
+
object_present? && Redde::Seo.where(seoable_type: @seo.seoable_type, seoable_id: @seo.seoable_id).count > edit_or_create_count
|
40
|
+
end
|
41
|
+
|
42
|
+
def empty_fields
|
43
|
+
@seo.errors[:base] << 'Отсутствует привязка. Сео дожно быть привязано к url или объекту' unless any_field_present?
|
44
|
+
end
|
45
|
+
|
46
|
+
def any_field_present?
|
47
|
+
url_present? || object_present?
|
48
|
+
end
|
49
|
+
|
50
|
+
def all_fields_present?
|
51
|
+
url_present? && object_present?
|
52
|
+
end
|
53
|
+
|
54
|
+
def url_present?
|
55
|
+
seo.url.present?
|
56
|
+
end
|
57
|
+
|
58
|
+
def object_present?
|
59
|
+
seo.seoable_type.present?
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
%tr
|
2
|
+
%th= f.label :title
|
3
|
+
%td= f.text_field :title
|
4
|
+
%tr
|
5
|
+
%th= f.label :keywords
|
6
|
+
%td= f.text_field :keywords
|
7
|
+
%tr
|
8
|
+
%th= f.label :description
|
9
|
+
%td= f.text_field :description
|
10
|
+
%tr
|
11
|
+
%td{ colspan: 2 }
|
12
|
+
= f.label :text
|
13
|
+
%br
|
14
|
+
= f.text_area :text, size: '20x5'
|
@@ -0,0 +1,21 @@
|
|
1
|
+
- content_for :page_header do
|
2
|
+
%h1 Редактировать SEO
|
3
|
+
|
4
|
+
= form_for [:admin, @seo] do |f|
|
5
|
+
- if @seo.errors.any?
|
6
|
+
#error_explanation
|
7
|
+
%h2= "Ошибки при сохранении: #{@seo.errors.count}"
|
8
|
+
%ul
|
9
|
+
- @seo.errors.full_messages.each do |msg|
|
10
|
+
%li= msg
|
11
|
+
%table
|
12
|
+
- if @seo.url.present?
|
13
|
+
%tr
|
14
|
+
%th{colspan: 2}= "#{@seo.url}"
|
15
|
+
- if @seo.seoable_type.present? && @seo.seoable_id.present?
|
16
|
+
%tr
|
17
|
+
%th{colspan: 2}= "#{@seo.seoable_type}@#{@seo.seoable_id}"
|
18
|
+
= render 'form', f: f
|
19
|
+
.actions
|
20
|
+
= f.submit 'Сохранить'
|
21
|
+
= f.submit 'Применить'
|
@@ -0,0 +1,31 @@
|
|
1
|
+
- content_for(:page_header) do
|
2
|
+
%h1 SEO
|
3
|
+
%p= link_to 'Все', [:all, :admin, :seos] if action_name != 'all'
|
4
|
+
%p= link_to 'Пустые', [:admin, :seos] if action_name != 'index'
|
5
|
+
|
6
|
+
- unless @seos.empty?
|
7
|
+
%table.list
|
8
|
+
%colgroup
|
9
|
+
%col
|
10
|
+
%col
|
11
|
+
%col
|
12
|
+
%col
|
13
|
+
%col
|
14
|
+
%col.w1
|
15
|
+
%thead
|
16
|
+
%tr
|
17
|
+
%th Url
|
18
|
+
%th Объект
|
19
|
+
%th Тайтл
|
20
|
+
%th Кейвордс
|
21
|
+
%th Дескрипшен
|
22
|
+
%th
|
23
|
+
- @seos.each do |seo|
|
24
|
+
%tr
|
25
|
+
%td= link_to "#{seo.url}" || 'НЕ ЗАПОЛНЕНО', [:edit, :admin, seo]
|
26
|
+
%td= link_to "#{seo.seoable_type}@#{seo.seoable_id}" || 'НЕ ЗАПОЛНЕНО', [:edit, :admin, seo]
|
27
|
+
%td= link_to seo.title || 'НЕ ЗАПОЛНЕНО', [:edit, :admin, seo]
|
28
|
+
%td= link_to seo.keywords || 'НЕ ЗАПОЛНЕНО', [:edit, :admin, seo]
|
29
|
+
%td= link_to seo.description || 'НЕ ЗАПОЛНЕНО', [:edit, :admin, seo]
|
30
|
+
%td= link_to 'Удалить', [:admin, seo], method: :delete, data: { confirm: 'Удалить?' }, class: :del
|
31
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateSeos < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :seos do |t|
|
4
|
+
t.string :title
|
5
|
+
t.string :description
|
6
|
+
t.string :keywords
|
7
|
+
t.text :url
|
8
|
+
t.string :seoable_type
|
9
|
+
t.integer :seoable_id
|
10
|
+
t.text :text
|
11
|
+
|
12
|
+
t.timestamps
|
13
|
+
end
|
14
|
+
|
15
|
+
add_index :seos, :seoable_type
|
16
|
+
add_index :seos, :seoable_id
|
17
|
+
add_index :seos, :url
|
18
|
+
end
|
19
|
+
end
|
data/lib/redde_seo.rb
ADDED
metadata
ADDED
@@ -0,0 +1,247 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: redde_seo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Oleg Bovykin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-06-24 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: '3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pg
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.6'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.6'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: redde
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: haml-rails
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: sass
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: jquery-rails
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: jquery-ui-rails
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rspec-rails
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: guard-rspec
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: factory_girl_rails
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: ffaker
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
description: SEO for redde rails projects
|
196
|
+
email:
|
197
|
+
- oleg.bovykin@gmail.com
|
198
|
+
executables: []
|
199
|
+
extensions: []
|
200
|
+
extra_rdoc_files: []
|
201
|
+
files:
|
202
|
+
- MIT-LICENSE
|
203
|
+
- Rakefile
|
204
|
+
- app/controllers/admin/seos_controller.rb
|
205
|
+
- app/controllers/concerns/with_seo_ctrl.rb
|
206
|
+
- app/models/concerns/with_seo.rb
|
207
|
+
- app/models/redde/seo.rb
|
208
|
+
- app/models/redde/seo/custom_class_names.rb
|
209
|
+
- app/models/redde/seo/default_seo.rb
|
210
|
+
- app/models/redde/seo/finder.rb
|
211
|
+
- app/models/redde/seo/finder/objected.rb
|
212
|
+
- app/models/redde/seo/finder/urled.rb
|
213
|
+
- app/validators/redde/seo_validator.rb
|
214
|
+
- app/views/admin/seos/_block.html.haml
|
215
|
+
- app/views/admin/seos/_form.html.haml
|
216
|
+
- app/views/admin/seos/edit.html.haml
|
217
|
+
- app/views/admin/seos/index.html.haml
|
218
|
+
- app/views/application/_seo.html.haml
|
219
|
+
- db/migrate/20140624084916_create_seos.rb
|
220
|
+
- lib/redde_seo.rb
|
221
|
+
- lib/redde_seo/engine.rb
|
222
|
+
- lib/redde_seo/version.rb
|
223
|
+
homepage: https://github.com/redde/seo
|
224
|
+
licenses:
|
225
|
+
- MIT
|
226
|
+
metadata: {}
|
227
|
+
post_install_message:
|
228
|
+
rdoc_options: []
|
229
|
+
require_paths:
|
230
|
+
- lib
|
231
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
232
|
+
requirements:
|
233
|
+
- - ">="
|
234
|
+
- !ruby/object:Gem::Version
|
235
|
+
version: '0'
|
236
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
237
|
+
requirements:
|
238
|
+
- - ">="
|
239
|
+
- !ruby/object:Gem::Version
|
240
|
+
version: '0'
|
241
|
+
requirements: []
|
242
|
+
rubyforge_project:
|
243
|
+
rubygems_version: 2.2.2
|
244
|
+
signing_key:
|
245
|
+
specification_version: 4
|
246
|
+
summary: SEO for redde rails projects
|
247
|
+
test_files: []
|