typo 3.99.4 → 4.0.0
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/app/controllers/admin/content_controller.rb +8 -4
- data/app/models/content.rb +7 -11
- data/app/models/content_state/base.rb +4 -0
- data/app/models/content_state/factory.rb +7 -10
- data/db/migrate/047_add_content_state_field.rb +24 -0
- data/db/schema.rb +2 -1
- data/lib/tasks/release.rake +1 -1
- data/lib/typo_version.rb +1 -1
- data/svk-commitP6cVv.tmp +1 -0
- data/test/fixtures/contents.yml +18 -0
- data/test/unit/content_state/factory_test.rb +12 -17
- data/vendor/akismet/{Akismet.rb → akismet.rb} +0 -0
- metadata +5 -4
- data/.DS_Store +0 -0
@@ -78,9 +78,9 @@ class Admin::ContentController < Admin::BaseController
|
|
78
78
|
def new_or_edit
|
79
79
|
get_or_build_article
|
80
80
|
params[:article] ||= {}
|
81
|
-
params[:article].reverse_merge!('allow_comments' => this_blog.default_allow_comments,
|
82
|
-
'allow_pings' => this_blog.default_allow_pings,
|
83
|
-
'published' => true)
|
81
|
+
# params[:article].reverse_merge!('allow_comments' => this_blog.default_allow_comments,
|
82
|
+
# 'allow_pings' => this_blog.default_allow_pings,
|
83
|
+
# 'published' => true)
|
84
84
|
@article.attributes = (params[:article])
|
85
85
|
setup_categories
|
86
86
|
@selected = @article.categories.collect { |c| c.id }
|
@@ -129,7 +129,11 @@ class Admin::ContentController < Admin::BaseController
|
|
129
129
|
def get_or_build_article
|
130
130
|
@article = case params[:action]
|
131
131
|
when 'new'
|
132
|
-
this_blog.articles.build
|
132
|
+
art = this_blog.articles.build
|
133
|
+
art.allow_comments = this_blog.default_allow_comments
|
134
|
+
art.allow_pings = this_blog.default_allow_pings
|
135
|
+
art.published = true
|
136
|
+
art
|
133
137
|
when 'edit'
|
134
138
|
this_blog.articles.find(params[:id])
|
135
139
|
else
|
data/app/models/content.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'observer'
|
2
2
|
require 'set'
|
3
|
-
require 'Akismet'
|
4
3
|
|
5
4
|
class Content < ActiveRecord::Base
|
6
5
|
include Observable
|
@@ -9,6 +8,9 @@ class Content < ActiveRecord::Base
|
|
9
8
|
belongs_to :blog
|
10
9
|
validates_presence_of :blog_id
|
11
10
|
|
11
|
+
composed_of :state, :class_name => 'ContentState::Factory',
|
12
|
+
:mapping => %w{ state memento }
|
13
|
+
|
12
14
|
has_and_belongs_to_many :notify_users, :class_name => 'User',
|
13
15
|
:join_table => 'notifications', :foreign_key => 'notify_content_id',
|
14
16
|
:association_foreign_key => 'notify_user_id', :uniq => true
|
@@ -25,10 +27,12 @@ class Content < ActiveRecord::Base
|
|
25
27
|
|
26
28
|
def initialize(*args)
|
27
29
|
super(*args)
|
30
|
+
set_default_blog
|
31
|
+
end
|
28
32
|
|
29
|
-
|
33
|
+
def set_default_blog
|
30
34
|
if self.blog_id == nil or self.blog_id == 0
|
31
|
-
self.
|
35
|
+
self.blog = Blog.default
|
32
36
|
end
|
33
37
|
end
|
34
38
|
|
@@ -107,14 +111,6 @@ class Content < ActiveRecord::Base
|
|
107
111
|
end
|
108
112
|
end
|
109
113
|
|
110
|
-
def state
|
111
|
-
@state ||= ContentState::Factory.derived_from(self)
|
112
|
-
end
|
113
|
-
|
114
|
-
def state=(new_state)
|
115
|
-
@state = new_state
|
116
|
-
end
|
117
|
-
|
118
114
|
def state_before_save
|
119
115
|
self.state.before_save(self)
|
120
116
|
end
|
@@ -1,16 +1,13 @@
|
|
1
1
|
module ContentState
|
2
2
|
class Factory
|
3
|
-
def self.
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
unless state
|
10
|
-
raise "No derivable state for #{content.inspect}"
|
11
|
-
else
|
12
|
-
return state
|
3
|
+
def self.new(state_name)
|
4
|
+
return ContentState::New.instance unless state_name
|
5
|
+
state_name = state_name.to_s.underscore
|
6
|
+
unless state_name.rindex('/')
|
7
|
+
state_name = 'content_state/' + state_name
|
13
8
|
end
|
9
|
+
require state_name
|
10
|
+
state_name.camelize.constantize.instance
|
14
11
|
end
|
15
12
|
end
|
16
13
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class AddContentStateField < ActiveRecord::Migration
|
2
|
+
class Content < ActiveRecord::Base
|
3
|
+
include BareMigration
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.up
|
7
|
+
modify_tables_and_update(:add_column, Content,
|
8
|
+
:state, :text) do |content|
|
9
|
+
unless $schema_generator
|
10
|
+
if content.published?
|
11
|
+
content.state = 'Published'
|
12
|
+
elsif content.published_at
|
13
|
+
content.state = 'PublicationPending'
|
14
|
+
else
|
15
|
+
content.state = 'Draft'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.down
|
22
|
+
remove_column :contents, :state
|
23
|
+
end
|
24
|
+
end
|
data/db/schema.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# migrations feature of ActiveRecord to incrementally modify your database, and
|
3
3
|
# then regenerate this schema definition.
|
4
4
|
|
5
|
-
ActiveRecord::Schema.define(:version =>
|
5
|
+
ActiveRecord::Schema.define(:version => 47) do
|
6
6
|
|
7
7
|
create_table "articles_categories", :id => false, :force => true do |t|
|
8
8
|
t.column "article_id", :integer
|
@@ -65,6 +65,7 @@ ActiveRecord::Schema.define(:version => 46) do
|
|
65
65
|
t.column "allow_comments", :boolean
|
66
66
|
t.column "blog_id", :integer
|
67
67
|
t.column "published_at", :datetime
|
68
|
+
t.column "state", :text
|
68
69
|
end
|
69
70
|
|
70
71
|
add_index "contents", ["article_id"], :name => "contents_article_id_index"
|
data/lib/tasks/release.rake
CHANGED
data/lib/typo_version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
TYPO_VERSION = '
|
1
|
+
TYPO_VERSION = '4.0.0'
|
data/svk-commitP6cVv.tmp
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Tagging 3.99.4
|
data/test/fixtures/contents.yml
CHANGED
@@ -19,6 +19,7 @@ article1:
|
|
19
19
|
guid: a87c4220-18d4-11da-aadd-0002a5d5c51b
|
20
20
|
type: Article
|
21
21
|
published: true
|
22
|
+
state: ContentState::Published
|
22
23
|
|
23
24
|
article2:
|
24
25
|
type: Article
|
@@ -39,6 +40,7 @@ article2:
|
|
39
40
|
author: Bob
|
40
41
|
guid: bbbbb
|
41
42
|
published: true
|
43
|
+
state: ContentState::Published
|
42
44
|
|
43
45
|
|
44
46
|
article3:
|
@@ -60,6 +62,7 @@ article3:
|
|
60
62
|
author: Tobi
|
61
63
|
guid: ccccc
|
62
64
|
published: true
|
65
|
+
state: ContentState::Published
|
63
66
|
|
64
67
|
article4:
|
65
68
|
type: Article
|
@@ -69,6 +72,7 @@ article4:
|
|
69
72
|
body: I'm not "public":http://www.example.com/public!
|
70
73
|
body_html: I'm not <a href="http://www.example.com/public">public</a>!
|
71
74
|
published: false
|
75
|
+
state: ContentState::Draft
|
72
76
|
created_at: 2004-06-01 20:00:01
|
73
77
|
updated_at: 2004-06-01 20:00:01
|
74
78
|
published_at: 2004-06-01 20:00:01
|
@@ -92,6 +96,7 @@ spam_comment:
|
|
92
96
|
updated_at: 2005-01-01 02:00:00
|
93
97
|
published_at: 2005-01-01 02:00:00
|
94
98
|
guid: 12313123123123123
|
99
|
+
state: ContentState::Published
|
95
100
|
|
96
101
|
comment2:
|
97
102
|
type: Comment
|
@@ -108,12 +113,14 @@ comment2:
|
|
108
113
|
updated_at: 2005-01-01 02:00:01
|
109
114
|
published_at: 2005-01-01 02:00:01
|
110
115
|
guid: 453456456456456
|
116
|
+
state: ContentState::Published
|
111
117
|
|
112
118
|
comment3:
|
113
119
|
type: Comment
|
114
120
|
blog_id: 1
|
115
121
|
id: 12
|
116
122
|
published: false
|
123
|
+
state: ContentState::Draft
|
117
124
|
article_id: 1
|
118
125
|
author: Foo Bar
|
119
126
|
body: Zzzzzz
|
@@ -128,6 +135,7 @@ trackback1:
|
|
128
135
|
id: 7
|
129
136
|
article_id: 2
|
130
137
|
published: false
|
138
|
+
state: ContentState::Draft
|
131
139
|
blog_name: Trackback Blog
|
132
140
|
title: Trackback Entry
|
133
141
|
url: http://www.example.com
|
@@ -142,6 +150,7 @@ trackback2:
|
|
142
150
|
blog_id: 1
|
143
151
|
id: 8
|
144
152
|
article_id: 1
|
153
|
+
state: ContentState::Published
|
145
154
|
published: true
|
146
155
|
blog_name: Trackback Blog
|
147
156
|
title: Trackback Entry
|
@@ -158,6 +167,7 @@ trackback3:
|
|
158
167
|
id: 13
|
159
168
|
article_id: 1
|
160
169
|
published: true
|
170
|
+
state: ContentState::Published
|
161
171
|
blog_name: Trackback Blog 2
|
162
172
|
title: Trackback Entry 2
|
163
173
|
url: http://www.example.com
|
@@ -179,6 +189,7 @@ first_page:
|
|
179
189
|
updated_at: 2005-05-05 01:00:00
|
180
190
|
user_id: 1
|
181
191
|
published: true
|
192
|
+
state: ContentState::Published
|
182
193
|
|
183
194
|
another_page:
|
184
195
|
type: Page
|
@@ -192,6 +203,7 @@ another_page:
|
|
192
203
|
published_at: 2005-05-05 01:00:00
|
193
204
|
user_id: 1
|
194
205
|
published: true
|
206
|
+
state: ContentState::Published
|
195
207
|
|
196
208
|
markdown_page:
|
197
209
|
type: Page
|
@@ -206,6 +218,7 @@ markdown_page:
|
|
206
218
|
published_at: 2005-05-05 01:00:00
|
207
219
|
user_id: 1
|
208
220
|
published: true
|
221
|
+
state: ContentState::Published
|
209
222
|
|
210
223
|
inactive_article:
|
211
224
|
type: Article
|
@@ -226,6 +239,7 @@ inactive_article:
|
|
226
239
|
author: Tobi
|
227
240
|
guid: i1n2a3c4t5i6v7e
|
228
241
|
published: true
|
242
|
+
state: ContentState::Published
|
229
243
|
|
230
244
|
old_comment:
|
231
245
|
type: Comment
|
@@ -241,6 +255,7 @@ old_comment:
|
|
241
255
|
updated_at: 2004-05-02 20:00:02
|
242
256
|
published_at: 2004-05-02 20:00:02
|
243
257
|
published: true
|
258
|
+
state: ContentState::Published
|
244
259
|
|
245
260
|
second_blog_article:
|
246
261
|
type: Article
|
@@ -261,6 +276,7 @@ second_blog_article:
|
|
261
276
|
author: Tobi
|
262
277
|
guid: 2b1l0o6g4ar7
|
263
278
|
published: true
|
279
|
+
state: ContentState::Published
|
264
280
|
|
265
281
|
search_target:
|
266
282
|
type: Article
|
@@ -281,6 +297,7 @@ search_target:
|
|
281
297
|
author: Tobi
|
282
298
|
guid: 2b1l0o6g4ar7
|
283
299
|
published: true
|
300
|
+
state: ContentState::Published
|
284
301
|
|
285
302
|
xmltest:
|
286
303
|
type: Article
|
@@ -300,3 +317,4 @@ xmltest:
|
|
300
317
|
author: Tobi
|
301
318
|
guid: urn:uuid:0d676c66-4135-4a8b-9d65-b6a3248d3032
|
302
319
|
published: true
|
320
|
+
state: ContentState::Published
|
@@ -2,32 +2,27 @@ require File.dirname(__FILE__) + '/../../test_helper'
|
|
2
2
|
require 'content_state/factory'
|
3
3
|
|
4
4
|
class ContentState::FactoryTest < Test::Unit::TestCase
|
5
|
-
def
|
6
|
-
|
7
|
-
|
5
|
+
def test_correctly_builds_new_state
|
6
|
+
[:new, 'new', 'content_state/new', 'New',
|
7
|
+
'ContentState::New', nil].each do |memento|
|
8
|
+
assert_instance_of(ContentState::New,
|
9
|
+
ContentState::Factory.new(memento))
|
10
|
+
end
|
8
11
|
end
|
9
12
|
|
10
|
-
def
|
13
|
+
def test_correctly_builds_draft_state
|
11
14
|
assert_instance_of(ContentState::Draft,
|
12
|
-
ContentState::Factory.
|
15
|
+
ContentState::Factory.new('draft'))
|
13
16
|
end
|
14
17
|
|
15
|
-
def
|
16
|
-
assert_instance_of(ContentState::PublicationPending,
|
17
|
-
ContentState::Factory.derived_from(MockContent.new(false, nil, 1.day.from_now)))
|
18
|
-
assert_instance_of(ContentState::PublicationPending,
|
19
|
-
ContentState::Factory.derived_from(MockContent.new(true, true,
|
20
|
-
1.hour.from_now)))
|
21
|
-
|
18
|
+
def test_correctly_builds_publication_pending_state
|
22
19
|
assert_instance_of(ContentState::PublicationPending,
|
23
|
-
ContentState::Factory.
|
24
|
-
1.hour.from_now)))
|
20
|
+
ContentState::Factory.new('publication_pending'))
|
25
21
|
end
|
26
22
|
|
27
|
-
def
|
23
|
+
def test_correct_builds_published_state
|
28
24
|
assert_instance_of(ContentState::Published,
|
29
|
-
ContentState::Factory.
|
30
|
-
1.hour.ago)))
|
25
|
+
ContentState::Factory.new('published'))
|
31
26
|
end
|
32
27
|
|
33
28
|
def test_cant_make_state_directly
|
File without changes
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: typo
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version:
|
7
|
-
date: 2006-07-
|
6
|
+
version: 4.0.0
|
7
|
+
date: 2006-07-22 00:00:00 -07:00
|
8
8
|
summary: Modern weblog engine.
|
9
9
|
require_paths:
|
10
10
|
- .
|
@@ -28,7 +28,6 @@ cert_chain:
|
|
28
28
|
authors:
|
29
29
|
- Tobias Luetke
|
30
30
|
files:
|
31
|
-
- .DS_Store
|
32
31
|
- app
|
33
32
|
- bin
|
34
33
|
- cache
|
@@ -45,6 +44,7 @@ files:
|
|
45
44
|
- Rakefile
|
46
45
|
- README
|
47
46
|
- script
|
47
|
+
- svk-commitP6cVv.tmp
|
48
48
|
- test
|
49
49
|
- themes
|
50
50
|
- tmp
|
@@ -490,6 +490,7 @@ files:
|
|
490
490
|
- db/migrate/044_add_published_at_to_content.rb
|
491
491
|
- db/migrate/045_fix_contents_published_default.rb
|
492
492
|
- db/migrate/046_fixup_forthcoming_publications.rb
|
493
|
+
- db/migrate/047_add_content_state_field.rb
|
493
494
|
- db/scripts/fix_permalinks.rb
|
494
495
|
- db/updates/update.168.to.200.mysql.sql
|
495
496
|
- db/updates/update.168.to.200.psql.sql
|
@@ -785,7 +786,7 @@ files:
|
|
785
786
|
- vendor/sparklines
|
786
787
|
- vendor/syntax
|
787
788
|
- vendor/uuidtools
|
788
|
-
- vendor/akismet/
|
789
|
+
- vendor/akismet/akismet.rb
|
789
790
|
- vendor/bluecloth/bin
|
790
791
|
- vendor/bluecloth/CHANGES
|
791
792
|
- vendor/bluecloth/install.rb
|
data/.DS_Store
DELETED
Binary file
|