has_seo_fields 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,25 +9,33 @@ module HasSeoFields
9
9
  end
10
10
 
11
11
  module ClassMethods
12
- def has_seo_fields *args
12
+ def has_seo_fields options
13
+ @@seo_names = {}
13
14
 
14
- args.map! do |field|
15
- getter_name = "seo_#{field}"
15
+ options.each do |key, v|
16
+ getter_name = :"seo_#{key}"
16
17
 
18
+ # @city.seo_h1_tag
17
19
  define_method getter_name do
18
- field.value if (field = seo_fields.find_by_name getter_name)
20
+ if field = seo_fields.find_by_name(getter_name)
21
+ field.value
22
+ else
23
+ @@seo_names[getter_name]
24
+ end
19
25
  end
20
26
 
27
+ # @city.seo_h1_tag=
21
28
  define_method "#{getter_name}=" do |value|
22
- if (field = seo_fields.find_by_name getter_name)
23
- field.update_attribute :value, value
24
- elsif value.present?
25
- seo_fields.create :name => getter_name, :value => value
26
- end
29
+ field = seo_fields.find_or_initialize_by_name getter_name
30
+ return field.destroy if value.empty? || value == @@seo_names[getter_name]
31
+
32
+ field.update_attribute(:value, value)
27
33
  end
28
- getter_name
34
+
35
+ @@seo_names[getter_name] = v
29
36
  end
30
- const_set "SEO_NAMES", args
37
+
38
+ const_set "SEO_NAMES", @@seo_names
31
39
  end
32
40
  end
33
41
  end
@@ -1,3 +1,3 @@
1
1
  module HasSeoFields
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -9,7 +9,7 @@ describe HasSeoFields do
9
9
  end
10
10
 
11
11
  it "sets SEO_NAMES" do
12
- subject.class::SEO_NAMES.should eql(['seo_h1_tag', 'seo_title'])
12
+ subject.class::SEO_NAMES.should eql({ :seo_h1_tag => 'It is your city!', :seo_title => 'Clubs, bars, etc.' })
13
13
  end
14
14
 
15
15
  context "getters" do
@@ -19,8 +19,8 @@ describe HasSeoFields do
19
19
  subject.seo_h1_tag.should eql('Cool!')
20
20
  end
21
21
 
22
- it "returns nil if nothing founded" do
23
- subject.seo_title.should be_nil
22
+ it "returns the default value if nothing founded" do
23
+ subject.seo_title.should eql('Clubs, bars, etc.')
24
24
  end
25
25
  end
26
26
 
@@ -38,9 +38,26 @@ describe HasSeoFields do
38
38
  subject.seo_fields.find_by_name('seo_h1_tag').value.should eql('Cool city')
39
39
  end
40
40
 
41
- it "does not creates entries with empty strings as values" do
42
- subject.seo_h1_tag=''
43
- subject.seo_fields.should have(0).items
41
+ it "does note creates seo field if given value equals the default one" do
42
+ subject.seo_title = 'Clubs, bars, etc.'
43
+ subject.seo_fields.should have(0).item
44
+ end
45
+
46
+ describe "when empty string given" do
47
+
48
+ it "does not creates entries with empty strings as values" do
49
+ subject.seo_h1_tag = ''
50
+ subject.seo_fields.should have(0).items
51
+ end
52
+
53
+ it "removes existing record if present" do
54
+ subject.seo_fields.create :name => 'seo_h1_tag', :value => 'Cool!'
55
+ seo_title = subject.seo_fields.create :name => 'seo_title', :value => 'Best city ever!'
56
+ subject.seo_h1_tag = ''
57
+ subject.reload
58
+
59
+ subject.seo_fields.should eql([seo_title])
60
+ end
44
61
  end
45
62
  end
46
63
 
@@ -1,5 +1,5 @@
1
1
  class City < ActiveRecord::Base
2
- has_seo_fields :h1_tag, :title
2
+ has_seo_fields :h1_tag => 'It is your city!', :title => 'Clubs, bars, etc.'
3
3
  end
4
4
 
5
5
  class SeoField < ActiveRecord::Base
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: has_seo_fields
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nick Erlikh
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-12-09 00:00:00 Z
18
+ date: 2011-12-14 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: activerecord