seo_meta 1.0.0
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/app/models/seo_metum.rb +3 -0
- data/db/migrate/1_create_seo_meta.rb +23 -0
- data/lib/generators/seo_meta_generator.rb +9 -0
- data/lib/seo_meta.rb +45 -0
- data/lib/seo_meta/class_methods.rb +5 -0
- data/lib/seo_meta/instance_methods.rb +56 -0
- data/lib/tasks/seo_meta.rake +9 -0
- metadata +72 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
class CreateSeoMeta < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def self.up
|
4
|
+
create_table :seo_meta do |t|
|
5
|
+
t.integer :seo_meta_id
|
6
|
+
t.string :seo_meta_type
|
7
|
+
|
8
|
+
t.string :browser_title
|
9
|
+
t.string :meta_keywords
|
10
|
+
t.text :meta_description
|
11
|
+
|
12
|
+
t.timestamps
|
13
|
+
end
|
14
|
+
|
15
|
+
add_index :seo_meta, :id
|
16
|
+
add_index :seo_meta, [:seo_meta_id, :seo_meta_type]
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.down
|
20
|
+
drop_table :seo_meta
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/lib/seo_meta.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
module SeoMeta
|
2
|
+
|
3
|
+
class << self
|
4
|
+
def attributes
|
5
|
+
@@attributes ||= {
|
6
|
+
:browser_title => :string,
|
7
|
+
:meta_keywords => :string,
|
8
|
+
:meta_description => :text
|
9
|
+
}
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Engine < ::Rails::Engine
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
autoload :ClassMethods, File.expand_path('../seo_meta/class_methods', __FILE__)
|
18
|
+
autoload :InstanceMethods, File.expand_path('../seo_meta/instance_methods', __FILE__)
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
def is_seo_meta(options = {})
|
23
|
+
# Let the base know about SeoMetum
|
24
|
+
has_one :seo_meta, :class_name => 'SeoMetum',
|
25
|
+
:foreign_key => :seo_meta_id, :dependent => :destroy,
|
26
|
+
:conditions => {:seo_meta_type => self.name}
|
27
|
+
|
28
|
+
# Let SeoMetum know about the base
|
29
|
+
::SeoMetum.send :belongs_to, self.name.underscore.gsub('/', '_').to_sym,
|
30
|
+
:class_name => self.name
|
31
|
+
|
32
|
+
# Include the instance methods and extend with the class methods.
|
33
|
+
self.send :include, ::SeoMeta::InstanceMethods
|
34
|
+
extend ::SeoMeta::ClassMethods
|
35
|
+
|
36
|
+
# Ensure seo_meta is saved when the model is saved.
|
37
|
+
after_save :save_meta_tags
|
38
|
+
|
39
|
+
# Delegate both the accessor and setters for the fields to :seo_meta
|
40
|
+
fields = ::SeoMeta.attributes.keys.reject{|field|
|
41
|
+
self.column_names.map(&:to_sym).include?(field)
|
42
|
+
}.map{|a| [a, :"#{a}="]}.flatten
|
43
|
+
|
44
|
+
delegate *fields, :to => :seo_meta
|
45
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module SeoMeta
|
2
|
+
module InstanceMethods
|
3
|
+
|
4
|
+
class << self
|
5
|
+
def included(base)
|
6
|
+
# This has to be introduced using module_eval because it overrides something.
|
7
|
+
base.module_eval do
|
8
|
+
def seo_meta
|
9
|
+
find_seo_meta_tags || build_seo_meta_tags
|
10
|
+
end
|
11
|
+
|
12
|
+
def attributes
|
13
|
+
super.merge(seo_meta_attributes)
|
14
|
+
end
|
15
|
+
|
16
|
+
def attributes=(attributes, *args)
|
17
|
+
attributes.update(seo_meta_attributes)
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def update_attributes(attributes, *args)
|
22
|
+
attributes.update(seo_meta_attributes) if ::SeoMetum.table_exists?
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def seo_meta_attributes
|
30
|
+
::SeoMeta.attributes.keys.inject({}) { |attrs, name|
|
31
|
+
attrs.merge(name.to_s => send(name))
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
def build_seo_meta_tags
|
37
|
+
if ::SeoMetum.table_exists?
|
38
|
+
@seo_meta ||= ::SeoMetum.new :seo_meta_type => self.class.name
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def find_seo_meta_tags
|
43
|
+
if self.persisted? && ::SeoMetum.table_exists?
|
44
|
+
@seo_meta ||= ::SeoMetum.where(:seo_meta_type => self.class.name,
|
45
|
+
:seo_meta_id => self.id).first
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def save_meta_tags
|
50
|
+
if ::SeoMetum.table_exists?
|
51
|
+
seo_meta.seo_meta_id ||= self.id
|
52
|
+
seo_meta.save
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: seo_meta
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 1.0.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Philip Arndt
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-03-29 00:00:00 +13:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: refinerycms-generators
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ~>
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 1.0.1
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
description: SEO Meta tags plugin for Ruby on Rails
|
28
|
+
email: parndt@gmail.com
|
29
|
+
executables: []
|
30
|
+
|
31
|
+
extensions: []
|
32
|
+
|
33
|
+
extra_rdoc_files: []
|
34
|
+
|
35
|
+
files:
|
36
|
+
- lib/generators/seo_meta_generator.rb
|
37
|
+
- lib/seo_meta/class_methods.rb
|
38
|
+
- lib/seo_meta/instance_methods.rb
|
39
|
+
- lib/seo_meta.rb
|
40
|
+
- lib/tasks/seo_meta.rake
|
41
|
+
- db/migrate/1_create_seo_meta.rb
|
42
|
+
- app/models/seo_metum.rb
|
43
|
+
has_rdoc: true
|
44
|
+
homepage: http://philiparndt.name
|
45
|
+
licenses: []
|
46
|
+
|
47
|
+
post_install_message:
|
48
|
+
rdoc_options: []
|
49
|
+
|
50
|
+
require_paths:
|
51
|
+
- lib
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "0"
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: "0"
|
64
|
+
requirements: []
|
65
|
+
|
66
|
+
rubyforge_project:
|
67
|
+
rubygems_version: 1.6.1
|
68
|
+
signing_key:
|
69
|
+
specification_version: 3
|
70
|
+
summary: SEO Meta tags plugin
|
71
|
+
test_files: []
|
72
|
+
|