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 ADDED
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .idea/*
6
+ spec/*.sqlite3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in has_seo_fields.gemspec
4
+ gemspec
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,3 @@
1
+ module HasSeoFields
2
+ VERSION = "0.0.1"
3
+ 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
@@ -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,7 @@
1
+ class City < ActiveRecord::Base
2
+ has_seo_fields :h1_tag, :title
3
+ end
4
+
5
+ class SeoField < ActiveRecord::Base
6
+ belongs_to :optimizable, :polymorphic => true
7
+ end
@@ -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: