redde_seo 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,15 @@
1
+ module WithSeoCtrl
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ helper_method :seo_block
6
+ end
7
+
8
+ def seo_block
9
+ @seo_block ||= Redde::Seo::Finder.new(request.path, seo_object).find
10
+ end
11
+
12
+ def seo_object
13
+ nil
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ module WithSeo
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ attr_accessible :seo_attributes if Rails.version.to_f < 4.0
6
+ has_one :seo, as: :seoable, dependent: :destroy, class_name: 'Redde::Seo'
7
+ accepts_nested_attributes_for :seo
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ # coding: utf-8
2
+
3
+ module Redde::Seo::CustomClassNames
4
+ NAMES = []
5
+ end
@@ -0,0 +1,19 @@
1
+ # coding: utf-8
2
+
3
+ class Redde::Seo::DefaultSeo
4
+ def empty?
5
+ false
6
+ end
7
+
8
+ def title
9
+ 'Redde'
10
+ end
11
+
12
+ def description
13
+ 'Redde'
14
+ end
15
+
16
+ def keywords
17
+ 'Redde'
18
+ end
19
+ 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,5 @@
1
+ %h3 SEO
2
+ %table
3
+ - f.object.build_seo unless f.object.seo
4
+ = f.fields_for :seo do |s|
5
+ = render 'admin/seos/form', f: s
@@ -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,3 @@
1
+ %title= seo_block.try(:title)
2
+ %meta{ content: seo_block.try(:description), name: 'description'}/
3
+ %meta{ content: seo_block.try(:keywords), name: 'keywords'}/
@@ -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
@@ -0,0 +1,4 @@
1
+ module ReddeSeo
2
+ class Engine < ::Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module ReddeSeo
2
+ VERSION = '0.0.1'
3
+ end
data/lib/redde_seo.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'redde_seo/engine'
2
+
3
+ module ReddeSeo
4
+ end
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: []