has_seo_fields 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.
- data/.gitignore +6 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/has_seo_fields.gemspec +30 -0
- data/lib/has_seo_fields/version.rb +3 -0
- data/lib/has_seo_fields.rb +36 -0
- data/spec/lib/has_seo_fields_spec.rb +45 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/support/data.rb +1 -0
- data/spec/support/models.rb +7 -0
- data/spec/support/schema.rb +15 -0
- metadata +156 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "has_seo_fields/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "has_seo_fields"
|
7
|
+
s.version = HasSeoFields::VERSION
|
8
|
+
s.authors = ["Nick Erlikh"]
|
9
|
+
s.email = ["n.erlikh@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/erlikh/has_seo_fields"
|
11
|
+
s.summary = %q{Allows to easily add SEO fields for models}
|
12
|
+
s.description = %q{Allows to easily add SEO fields for models}
|
13
|
+
|
14
|
+
s.rubyforge_project = "has_seo_fields"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
# s.add_runtime_dependency "rest-client"
|
24
|
+
|
25
|
+
s.add_dependency "activerecord", "~> 3.0"
|
26
|
+
s.add_dependency "activesupport", "~> 3.0.0"
|
27
|
+
s.add_development_dependency "bundler", ">= 1.0.0"
|
28
|
+
s.add_development_dependency "rspec", "~> 2.7"
|
29
|
+
s.add_development_dependency "sqlite3-ruby"
|
30
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "active_record"
|
2
|
+
require "has_seo_fields/version"
|
3
|
+
|
4
|
+
module HasSeoFields
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
has_many :seo_fields, :as => :optimizable
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
def has_seo_fields *args
|
13
|
+
const_set "SEO_NAMES", args
|
14
|
+
|
15
|
+
args.each do |field|
|
16
|
+
getter_name = "seo_#{field}"
|
17
|
+
|
18
|
+
define_method getter_name do
|
19
|
+
end
|
20
|
+
|
21
|
+
define_method "#{getter_name}=" do |value|
|
22
|
+
if (field = seo_fields.find_by_name(getter_name))
|
23
|
+
field.update_attribute :value, value
|
24
|
+
else
|
25
|
+
seo_fields.create :name => getter_name, :value => value
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
module InstanceMethods
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
ActiveRecord::Base.send :include, HasSeoFields
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe HasSeoFields do
|
4
|
+
|
5
|
+
subject { City.create :name => 'Los Angeles' }
|
6
|
+
|
7
|
+
it "defines methods" do
|
8
|
+
subject.should respond_to('seo_h1_tag', 'seo_title')
|
9
|
+
end
|
10
|
+
|
11
|
+
it "sets SEO_NAMES" do
|
12
|
+
subject.class::SEO_NAMES.should eql([:h1_tag, :title])
|
13
|
+
end
|
14
|
+
|
15
|
+
context "setters" do
|
16
|
+
|
17
|
+
it "defines setter methods" do
|
18
|
+
subject.should respond_to('seo_h1_tag=', 'seo_title=')
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "seo field with that name does not exists" do
|
22
|
+
|
23
|
+
it "create needed seo field with given value" do
|
24
|
+
subject.seo_h1_tag='Cool city'
|
25
|
+
subject.seo_fields.where(:name => 'seo_h1_tag').should have(1).item
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "already exists" do
|
30
|
+
|
31
|
+
before :each do
|
32
|
+
subject.seo_fields.create :name => 'seo_h1_tag', :value => 'Cool!'
|
33
|
+
subject.seo_h1_tag = 'Super city'
|
34
|
+
end
|
35
|
+
|
36
|
+
it "does not creates new entry" do
|
37
|
+
subject.seo_fields.should have(1).item
|
38
|
+
end
|
39
|
+
|
40
|
+
it "updates value of the existing entry" do
|
41
|
+
subject.seo_fields.find_by_name('seo_h1_tag').value.should eql('Super city')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
require "has_seo_fields"
|
2
|
+
|
3
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3",
|
4
|
+
:database => File.dirname(__FILE__) + "/has_seo_fields.sqlite3")
|
5
|
+
load File.dirname(__FILE__) + '/support/schema.rb'
|
6
|
+
load File.dirname(__FILE__) + '/support/models.rb'
|
7
|
+
load File.dirname(__FILE__) + '/support/data.rb'
|
@@ -0,0 +1 @@
|
|
1
|
+
City.create :name => 'Los Angeles'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
ActiveRecord::Schema.define do
|
2
|
+
|
3
|
+
create_table "cities", :force => true do |t|
|
4
|
+
t.string "name", :limit => 50
|
5
|
+
end
|
6
|
+
|
7
|
+
create_table "seo_fields", :force => true do |t|
|
8
|
+
t.string "name", :limit => 50
|
9
|
+
t.string "value", :limit => 200
|
10
|
+
t.integer "optimizable_id", :null => false
|
11
|
+
t.string "optimizable_type", :limit => 20, :null => false
|
12
|
+
t.datetime "created_at"
|
13
|
+
t.datetime "updated_at"
|
14
|
+
end
|
15
|
+
end
|
metadata
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: has_seo_fields
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Nick Erlikh
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-12-09 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: activerecord
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 7
|
29
|
+
segments:
|
30
|
+
- 3
|
31
|
+
- 0
|
32
|
+
version: "3.0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: activesupport
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 7
|
44
|
+
segments:
|
45
|
+
- 3
|
46
|
+
- 0
|
47
|
+
- 0
|
48
|
+
version: 3.0.0
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: bundler
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 23
|
60
|
+
segments:
|
61
|
+
- 1
|
62
|
+
- 0
|
63
|
+
- 0
|
64
|
+
version: 1.0.0
|
65
|
+
type: :development
|
66
|
+
version_requirements: *id003
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: rspec
|
69
|
+
prerelease: false
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 13
|
76
|
+
segments:
|
77
|
+
- 2
|
78
|
+
- 7
|
79
|
+
version: "2.7"
|
80
|
+
type: :development
|
81
|
+
version_requirements: *id004
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: sqlite3-ruby
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
hash: 3
|
91
|
+
segments:
|
92
|
+
- 0
|
93
|
+
version: "0"
|
94
|
+
type: :development
|
95
|
+
version_requirements: *id005
|
96
|
+
description: Allows to easily add SEO fields for models
|
97
|
+
email:
|
98
|
+
- n.erlikh@gmail.com
|
99
|
+
executables: []
|
100
|
+
|
101
|
+
extensions: []
|
102
|
+
|
103
|
+
extra_rdoc_files: []
|
104
|
+
|
105
|
+
files:
|
106
|
+
- .gitignore
|
107
|
+
- Gemfile
|
108
|
+
- Rakefile
|
109
|
+
- has_seo_fields.gemspec
|
110
|
+
- lib/has_seo_fields.rb
|
111
|
+
- lib/has_seo_fields/version.rb
|
112
|
+
- spec/lib/has_seo_fields_spec.rb
|
113
|
+
- spec/spec_helper.rb
|
114
|
+
- spec/support/data.rb
|
115
|
+
- spec/support/models.rb
|
116
|
+
- spec/support/schema.rb
|
117
|
+
homepage: https://github.com/erlikh/has_seo_fields
|
118
|
+
licenses: []
|
119
|
+
|
120
|
+
post_install_message:
|
121
|
+
rdoc_options: []
|
122
|
+
|
123
|
+
require_paths:
|
124
|
+
- lib
|
125
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
126
|
+
none: false
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
hash: 3
|
131
|
+
segments:
|
132
|
+
- 0
|
133
|
+
version: "0"
|
134
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
|
+
none: false
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
hash: 3
|
140
|
+
segments:
|
141
|
+
- 0
|
142
|
+
version: "0"
|
143
|
+
requirements: []
|
144
|
+
|
145
|
+
rubyforge_project: has_seo_fields
|
146
|
+
rubygems_version: 1.8.10
|
147
|
+
signing_key:
|
148
|
+
specification_version: 3
|
149
|
+
summary: Allows to easily add SEO fields for models
|
150
|
+
test_files:
|
151
|
+
- spec/lib/has_seo_fields_spec.rb
|
152
|
+
- spec/spec_helper.rb
|
153
|
+
- spec/support/data.rb
|
154
|
+
- spec/support/models.rb
|
155
|
+
- spec/support/schema.rb
|
156
|
+
has_rdoc:
|