has_content 0.0.2 → 0.0.3
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/CHANGELOG +5 -0
- data/lib/has_content/content_owner.rb +9 -6
- data/lib/has_content/record.rb +4 -10
- data/lib/has_content/version.rb +1 -1
- data/spec/has_content/record_spec.rb +7 -12
- metadata +14 -14
data/CHANGELOG
CHANGED
@@ -41,22 +41,25 @@ module HasContent
|
|
41
41
|
|
42
42
|
has_one "#{name}_content".to_sym, options.reverse_merge(:as => 'owner', :class_name => 'HasContent::Record', :dependent => :destroy, :conditions => {name: name}, :autosave => true)
|
43
43
|
|
44
|
+
# content getter (delegates to the content association)
|
44
45
|
define_method name do
|
45
|
-
send("
|
46
|
+
send("get_#{name}_content").content
|
46
47
|
end
|
47
48
|
|
49
|
+
# content setter (delegates to the content association, updating timestamps on owner record if required)
|
48
50
|
define_method "#{name}=" do |value|
|
49
|
-
(send("
|
50
|
-
if respond_to?(:updated_at?) && send("
|
51
|
+
(send("get_#{name}_content").content = value).tap do |*|
|
52
|
+
if respond_to?(:updated_at?) && send("get_#{name}_content").changed?
|
51
53
|
updated_at_will_change!
|
52
54
|
end
|
53
55
|
end
|
54
56
|
end
|
55
57
|
|
56
|
-
|
57
|
-
|
58
|
+
# find or build (and save if possible) the content association
|
59
|
+
define_method "get_#{name}_content" do
|
60
|
+
send("#{name}_content") or send("build_#{name}_content").tap {|r| r.name = name; r.save unless new_record? }
|
58
61
|
end
|
59
|
-
private "
|
62
|
+
private "get_#{name}_content".to_sym
|
60
63
|
end
|
61
64
|
end
|
62
65
|
end
|
data/lib/has_content/record.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module HasContent
|
2
2
|
class Record < ActiveRecord::Base
|
3
|
+
attr_accessible :content # :name, and :owner are set by content owners
|
4
|
+
|
3
5
|
self.table_name = 'has_content_records'
|
4
6
|
|
5
7
|
belongs_to :owner, polymorphic: true
|
@@ -8,17 +10,9 @@ module HasContent
|
|
8
10
|
inclusion: {in: lambda(&:allowed_names), if: :owner},
|
9
11
|
uniqueness: {scope: %w(owner_id owner_type), if: :owner_persisted?}
|
10
12
|
|
11
|
-
before_create :verify_valid_owner! #
|
13
|
+
before_create :verify_valid_owner! # this badboy is here because owner is sometimes not present at validation
|
12
14
|
# because content is a has_one on owner, with autosave true
|
13
|
-
|
14
|
-
# Contents are only ever instantiated by has_content assoc, and it's convenient for them to
|
15
|
-
# always refer (for links to content etc).
|
16
|
-
# If there is a validation problem, the save will fail silently (which is fine)
|
17
|
-
def initialize(*)
|
18
|
-
super
|
19
|
-
save if new_record? && owner_persisted?
|
20
|
-
end
|
21
|
-
|
15
|
+
|
22
16
|
def to_s
|
23
17
|
content
|
24
18
|
end
|
data/lib/has_content/version.rb
CHANGED
@@ -3,21 +3,16 @@ require 'spec_helper'
|
|
3
3
|
describe HasContent::Record do
|
4
4
|
subject { record }
|
5
5
|
|
6
|
-
let(:record) { described_class.new
|
7
|
-
let(:attrs) { {} }
|
8
|
-
|
9
|
-
it "does not save itself - as it's invalid" do
|
10
|
-
should be_new_record
|
11
|
-
end
|
6
|
+
let(:record) { described_class.new }
|
12
7
|
|
13
8
|
describe 'with valid attributes' do
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
it "saves itself (to enable always referring relationships)" do
|
18
|
-
should_not be_new_record
|
9
|
+
before do
|
10
|
+
record.name = 'body'
|
11
|
+
record.owner = owner
|
19
12
|
end
|
20
13
|
|
14
|
+
let(:owner) { ContentOwner.create! }
|
15
|
+
|
21
16
|
it { should be_valid }
|
22
17
|
|
23
18
|
describe '[validation]' do
|
@@ -28,7 +23,7 @@ describe HasContent::Record do
|
|
28
23
|
|
29
24
|
it 'requires :name + :owner be unique' do
|
30
25
|
record.save!
|
31
|
-
record = described_class.new
|
26
|
+
record = described_class.new {|r| r.name = 'body'; r.owner = owner }
|
32
27
|
record.should_not be_valid
|
33
28
|
record.name = 'excerpt'
|
34
29
|
record.should be_valid
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_content
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-06-20 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &70179807906620 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.2'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70179807906620
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70179807716000 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70179807716000
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &70179807713540 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '2'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70179807713540
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: sqlite3
|
49
|
-
requirement: &
|
49
|
+
requirement: &70179807710640 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70179807710640
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: database_cleaner
|
60
|
-
requirement: &
|
60
|
+
requirement: &70179807709560 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,9 +65,9 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70179807709560
|
69
69
|
description: Simple wrapper for adding content via a polymorphic join for any active
|
70
|
-
record. Version 0.0.
|
70
|
+
record. Version 0.0.3.
|
71
71
|
email:
|
72
72
|
- ian.w.white@gmail.com
|
73
73
|
executables: []
|
@@ -105,7 +105,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
105
105
|
version: '0'
|
106
106
|
segments:
|
107
107
|
- 0
|
108
|
-
hash:
|
108
|
+
hash: 778003700105874322
|
109
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
110
|
none: false
|
111
111
|
requirements:
|
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
114
|
version: '0'
|
115
115
|
segments:
|
116
116
|
- 0
|
117
|
-
hash:
|
117
|
+
hash: 778003700105874322
|
118
118
|
requirements: []
|
119
119
|
rubyforge_project:
|
120
120
|
rubygems_version: 1.8.15
|