publishing_logic 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ begin
8
8
  gem.summary = %Q{Publishing logic for ActiveRecord models}
9
9
  gem.description = %Q{Publishing logic for ActiveRecord models}
10
10
  gem.email = "enquiries@unboxedconsulting.com"
11
- gem.homepage = "http://github.com/tomtt/publishing_logic"
11
+ gem.homepage = "http://github.com/unboxed/publishing_logic"
12
12
  gem.authors = ["Unboxed Consulting"]
13
13
  gem.add_development_dependency "rspec", ">= 1.2.9"
14
14
  gem.add_development_dependency "cucumber", ">= 0"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
data/lib/model_logic.rb CHANGED
@@ -1,10 +1,5 @@
1
1
  module PublishingLogic
2
2
  module ModelLogic
3
- PUBLISHED_CONDITIONS = <<EOT
4
- publishing_enabled = true AND
5
- (published_until is null or published_until > ?) AND
6
- (published_at is null or published_at < ?)
7
- EOT
8
3
 
9
4
  def published?
10
5
  return false if published_at && Time.now < published_at
@@ -15,7 +10,12 @@ EOT
15
10
  def self.included(base)
16
11
  base.extend(ClassMethods)
17
12
  base.instance_eval do
18
- named_scope :published, lambda {{ :conditions => [PUBLISHED_CONDITIONS, Time.now.utc, Time.now.utc] }} do
13
+ named_scope :published, lambda {{ :conditions => ["#{base.table_name}.publishing_enabled = true AND \
14
+ (#{base.table_name}.published_until is null or #{base.table_name}.published_until > ?) AND \
15
+ (#{base.table_name}.published_at is null or #{base.table_name}.published_at < ?)",
16
+ Time.now.utc, Time.now.utc] }} do
17
+
18
+ # TODO Not using table name with the following methods so in danger of getting ambiguous column names
19
19
  def newest
20
20
  find(:first, :order => "published_at DESC")
21
21
  end
@@ -29,8 +29,8 @@ EOT
29
29
  # identical as well, then order by id. This is done to ensure there is a unique
30
30
  # ordering of objects, ordering by newest and oldest should result in arrays that are
31
31
  # the inverse of the other.
32
- named_scope :by_date_oldest_first, :order => 'published_at ASC, created_at ASC, id ASC'
33
- named_scope :by_date_newest_first, :order => 'published_at DESC, created_at DESC, id DESC'
32
+ named_scope :by_date_oldest_first, :order => "#{base.table_name}.published_at ASC, #{base.table_name}.created_at ASC, #{base.table_name}.id ASC"
33
+ named_scope :by_date_newest_first, :order => "#{base.table_name}.published_at DESC, #{base.table_name}.created_at DESC, #{base.table_name}.id DESC"
34
34
  end
35
35
  end
36
36
 
@@ -1,38 +1,32 @@
1
1
  require File.expand_path(File.join(File.dirname(__FILE__), '../spec_helper'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), "../../../../../spec/factories"))
2
3
  require 'model_logic'
3
4
 
4
- class FunItem < ActiveRecord::Base
5
- include PublishingLogic::ModelLogic
6
- end
7
-
8
- Factory.define :fun_item do |c|
9
- end
10
-
11
5
  describe PublishingLogic::ModelLogic do
12
6
  def create_objects_with_different_published_at_dates
13
- @object2 = Factory.create(:fun_item, :publishing_enabled => true, :published_at => 2.days.ago)
14
- @object1 = Factory.create(:fun_item, :publishing_enabled => true, :published_at => 1.days.ago)
15
- @object3 = Factory.create(:fun_item, :publishing_enabled => true, :published_at => 3.days.ago)
7
+ @object2 = Factory.create(:programme, :publishing_enabled => true, :published_at => 2.days.ago)
8
+ @object1 = Factory.create(:programme, :publishing_enabled => true, :published_at => 1.days.ago)
9
+ @object3 = Factory.create(:programme, :publishing_enabled => true, :published_at => 3.days.ago)
16
10
  end
17
11
 
18
12
  describe "published?" do
19
13
  describe "with publishing enabled" do
20
14
  it "should be published by default" do
21
- Factory.create(:fun_item,
15
+ Factory.create(:programme,
22
16
  :publishing_enabled => true,
23
17
  :published_at => nil,
24
18
  :published_until => nil).should be_published
25
19
  end
26
20
 
27
21
  it "should not be published if the published_at datetime is in the future" do
28
- Factory.create(:fun_item,
22
+ Factory.create(:programme,
29
23
  :publishing_enabled => true,
30
24
  :published_at => 5.seconds.from_now,
31
25
  :published_until => nil).should_not be_published
32
26
  end
33
27
 
34
28
  it "should not be published if the published_until datetime is in the past" do
35
- Factory.create(:fun_item,
29
+ Factory.create(:programme,
36
30
  :publishing_enabled => true,
37
31
  :published_at => nil,
38
32
  :published_until => 5.seconds.ago).should_not be_published
@@ -40,7 +34,7 @@ describe PublishingLogic::ModelLogic do
40
34
  end
41
35
  describe "with publishing disabled" do
42
36
  it "should not be published" do
43
- Factory.create(:fun_item,
37
+ Factory.create(:programme,
44
38
  :publishing_enabled => false,
45
39
  :published_at => 1.days.ago,
46
40
  :published_until => 10.days.from_now).should_not be_published
@@ -50,13 +44,13 @@ describe PublishingLogic::ModelLogic do
50
44
 
51
45
  describe "published named scope" do
52
46
  it "should include published objects" do
53
- fun_item = Factory.create(:fun_item, :publishing_enabled => true)
54
- FunItem.published.should == [fun_item]
47
+ programme = Factory.create(:programme, :publishing_enabled => true)
48
+ Programme.published.should == [programme]
55
49
  end
56
50
 
57
51
  it "should not include any unpublished objects" do
58
- fun_item = Factory.create(:fun_item, :publishing_enabled => false)
59
- FunItem.published.should be_empty
52
+ Factory.create(:programme, :publishing_enabled => false)
53
+ Programme.published.should be_empty
60
54
  end
61
55
 
62
56
  # it "should not expose a published episode published an hour ago" do
@@ -65,26 +59,26 @@ describe PublishingLogic::ModelLogic do
65
59
  # end
66
60
 
67
61
  it "should not include objects with a published_until in the past" do
68
- Factory.create(:fun_item,
62
+ Factory.create(:programme,
69
63
  :publishing_enabled => true,
70
64
  :published_until => 5.seconds.ago)
71
- FunItem.published.should be_empty
65
+ Programme.published.should be_empty
72
66
  end
73
67
 
74
68
  it "should not include objects with a published_at in the future" do
75
- Factory.create(:fun_item,
69
+ Factory.create(:programme,
76
70
  :publishing_enabled => true,
77
71
  :published_at => 5.seconds.from_now)
78
- FunItem.published.should be_empty
72
+ Programme.published.should be_empty
79
73
  end
80
74
 
81
75
  it "should get a new Time.now for each invocation of the named scope" do
82
- item = Factory.create(:fun_item,
76
+ item = Factory.create(:programme,
83
77
  :publishing_enabled => true,
84
78
  :published_until => 10.days.from_now)
85
79
  mock_now = mock('now', :utc => 20.days.from_now, :to_f => 0)
86
80
  Time.stub(:now).and_return mock_now
87
- FunItem.published.should be_empty
81
+ Programme.published.should be_empty
88
82
  end
89
83
 
90
84
  it "should use the utc of the current time" do
@@ -92,7 +86,7 @@ describe PublishingLogic::ModelLogic do
92
86
  mock_now = mock('now')
93
87
  Time.stub(:now).and_return mock_now
94
88
  mock_now.should_receive(:utc).twice
95
- FunItem.published
89
+ Programme.published
96
90
  end
97
91
 
98
92
  describe "newest" do
@@ -101,12 +95,12 @@ describe PublishingLogic::ModelLogic do
101
95
  end
102
96
 
103
97
  it "should be the most recently published object" do
104
- FunItem.published.newest.should == @object1
98
+ Programme.published.newest.should == @object1
105
99
  end
106
100
  end
107
101
  describe "oldest" do
108
102
  it "should be the object published the longest ago" do
109
- FunItem.published.oldest.should == @object3
103
+ Programme.published.oldest.should == @object3
110
104
  end
111
105
  end
112
106
  end
@@ -115,18 +109,18 @@ describe PublishingLogic::ModelLogic do
115
109
  describe "by date oldest first" do
116
110
  it "should return the items, oldest first" do
117
111
  create_objects_with_different_published_at_dates
118
- FunItem.by_date_oldest_first.map(&:id).should == [@object3,
112
+ Programme.by_date_oldest_first.map(&:id).should == [@object3,
119
113
  @object2,
120
114
  @object1].map(&:id)
121
115
  end
122
116
 
123
117
  it "should order by created_at date if published_ats are equal" do
124
118
  create_objects_with_different_published_at_dates
125
- @object2b = Factory.create(:fun_item,
119
+ @object2b = Factory.create(:programme,
126
120
  :publishing_enabled => true,
127
121
  :published_at => @object2.published_at,
128
122
  :created_at => 3.days.ago)
129
- FunItem.by_date_oldest_first.map(&:id).should == [@object3,
123
+ Programme.by_date_oldest_first.map(&:id).should == [@object3,
130
124
  @object2b,
131
125
  @object2,
132
126
  @object1].map(&:id)
@@ -136,18 +130,18 @@ describe PublishingLogic::ModelLogic do
136
130
  describe "by date newest first" do
137
131
  it "should return the items, oldest first" do
138
132
  create_objects_with_different_published_at_dates
139
- FunItem.by_date_newest_first.map(&:id).should == [@object1,
133
+ Programme.by_date_newest_first.map(&:id).should == [@object1,
140
134
  @object2,
141
135
  @object3].map(&:id)
142
136
  end
143
137
 
144
138
  it "should order by created_at date if published_ats are equal" do
145
139
  create_objects_with_different_published_at_dates
146
- @object2b = Factory.create(:fun_item,
140
+ @object2b = Factory.create(:programme,
147
141
  :publishing_enabled => true,
148
142
  :published_at => @object2.published_at,
149
143
  :created_at => 3.days.from_now)
150
- FunItem.by_date_newest_first.map(&:id).should == [@object1,
144
+ Programme.by_date_newest_first.map(&:id).should == [@object1,
151
145
  @object2b,
152
146
  @object2,
153
147
  @object3].map(&:id)
@@ -157,8 +151,8 @@ describe PublishingLogic::ModelLogic do
157
151
  it "should have a newest first ordering that is the reverse of the oldest first ordering for identical objects" do
158
152
  creation_time = 2.days.ago
159
153
  publish_time = 1.days.ago
160
- 5.times { Factory.create(:fun_item, :created_at => creation_time, :published_at => publish_time) }
161
- FunItem.by_date_newest_first.map(&:id).should == FunItem.by_date_oldest_first.map(&:id).reverse
154
+ 5.times { Factory.create(:programme, :created_at => creation_time, :published_at => publish_time) }
155
+ Programme.by_date_newest_first.map(&:id).should == Programme.by_date_oldest_first.map(&:id).reverse
162
156
  end
163
157
  end
164
158
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: publishing_logic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Unboxed Consulting
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-11 00:00:00 +00:00
12
+ date: 2010-01-17 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -63,7 +63,7 @@ files:
63
63
  - spec/spec.opts
64
64
  - spec/spec_helper.rb
65
65
  has_rdoc: true
66
- homepage: http://github.com/tomtt/publishing_logic
66
+ homepage: http://github.com/unboxed/publishing_logic
67
67
  licenses: []
68
68
 
69
69
  post_install_message: