publishing_logic 0.1.2 → 0.1.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/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: