editorial_logic 1.1.6 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/VERSION +1 -1
- data/app/models/managed_content.rb +45 -32
- data/config/environments/test.rb +4 -0
- data/editorial_logic.gemspec +5 -2
- metadata +23 -9
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.3.0
|
@@ -2,12 +2,16 @@ class ManagedContent
|
|
2
2
|
include EditorialLogic::Base
|
3
3
|
include Mongoid::Document
|
4
4
|
include Mongoid::Timestamps
|
5
|
+
include Tanker
|
5
6
|
|
6
|
-
|
7
|
-
|
7
|
+
# Constants ======================================================================================
|
8
|
+
STATES = ['draft', 'published']
|
8
9
|
|
9
|
-
#
|
10
|
+
# Scopes ===================================================================================
|
11
|
+
scope :drafts, :where => {:state => 'draft'}
|
12
|
+
scope :published, :where => {:state => 'published'}
|
10
13
|
|
14
|
+
# Mongo Config ===================================================================================
|
11
15
|
field :author
|
12
16
|
field :headline # used as: (1) title element of page; (2) link text of links in FAQ index page - Corey was using this as the header of the page as well. - THIS IS THE QUESTION
|
13
17
|
field :subheader
|
@@ -18,7 +22,7 @@ class ManagedContent
|
|
18
22
|
field :state, :default => 'draft'
|
19
23
|
field :publication_date, :type => Date
|
20
24
|
field :revision_date, :type => Date
|
21
|
-
field :summary # used as: (1) meta description of page (2) link title attribute
|
25
|
+
field :summary # used as: (1) meta description of page (2) link title attribute of any link pointing to that page
|
22
26
|
field :related_contents, :type => Array, :default => []
|
23
27
|
field :kind
|
24
28
|
|
@@ -30,31 +34,36 @@ class ManagedContent
|
|
30
34
|
index :state, :unique => false
|
31
35
|
index :kind
|
32
36
|
|
33
|
-
# Constants ======================================================================================
|
34
|
-
STATES = ['draft', 'published']
|
35
|
-
|
36
|
-
# Scopes ===================================================================================
|
37
|
-
scope :drafts, :where => {:state => 'draft'}
|
38
|
-
scope :published, :where => {:state => 'published'}
|
39
|
-
|
40
|
-
# Relationships ==================================================================================
|
41
|
-
embeds_many :sections
|
42
37
|
embedded_in :publication, :inverse_of => :managed_contents
|
38
|
+
embeds_many :sections
|
43
39
|
|
44
40
|
# Behavior =======================================================================================
|
45
41
|
alias_method :answer, :content
|
46
42
|
alias_method :definition, :content
|
47
|
-
alias_method :term, :headline
|
48
43
|
alias_method :question, :headline
|
44
|
+
alias_method :term, :headline
|
49
45
|
attr_accessor :desired_slug
|
50
46
|
has_slug :desired_slug
|
47
|
+
mount_uploader :document, DocumentUploader, :mount_on => :document_filename
|
48
|
+
store_in :documents
|
49
|
+
|
50
|
+
# Tanker =========================================================================================
|
51
|
+
tankit 'idx' do
|
52
|
+
indexes :author
|
53
|
+
indexes :content
|
54
|
+
indexes :headline
|
55
|
+
indexes :keywords
|
56
|
+
indexes :summary
|
57
|
+
end
|
51
58
|
|
52
|
-
|
59
|
+
after_destroy :delete_tank_indexes
|
60
|
+
after_save :update_tank_indexes
|
53
61
|
|
62
|
+
# Validations ====================================================================================
|
54
63
|
class DesiredSlugPresenceValidator < ActiveModel::EachValidator
|
55
64
|
def validate_each(object, attribute, value)
|
56
65
|
unless object.desired_slug || object.slug
|
57
|
-
object.errors[attribute] << (options[:message] ||
|
66
|
+
object.errors[attribute] << (options[:message] || ' cannot be blank.')
|
58
67
|
end
|
59
68
|
end
|
60
69
|
end
|
@@ -63,7 +72,7 @@ class ManagedContent
|
|
63
72
|
def validate_each(object, attribute, value)
|
64
73
|
unless object.kind == 'Multiple Pages' || object.kind == 'Document'
|
65
74
|
if value.blank?
|
66
|
-
object.errors[attribute] << (options[:message] ||
|
75
|
+
object.errors[attribute] << (options[:message] || ' cannot be blank.')
|
67
76
|
end
|
68
77
|
end
|
69
78
|
end
|
@@ -73,22 +82,18 @@ class ManagedContent
|
|
73
82
|
def validate_each(object, attribute, value)
|
74
83
|
if object.kind == 'Document'
|
75
84
|
if value.blank?
|
76
|
-
object.errors[attribute] << (options[:message] ||
|
85
|
+
object.errors[attribute] << (options[:message] || ' file attachment cannot be blank.')
|
77
86
|
end
|
78
87
|
end
|
79
88
|
end
|
80
89
|
end
|
81
90
|
|
82
|
-
# Validations ====================================================================================
|
83
|
-
validates_uniqueness_of :slug
|
84
|
-
validates_presence_of :headline
|
85
|
-
validates :desired_slug, :desired_slug_presence => true
|
86
91
|
validates :content, :content_presence => true
|
87
|
-
|
88
|
-
|
92
|
+
validates :desired_slug, :desired_slug_presence => true
|
93
|
+
validates_presence_of :headline
|
94
|
+
validates_uniqueness_of :slug
|
89
95
|
|
90
96
|
# Instance methods ===============================================================================
|
91
|
-
|
92
97
|
def add_related_content(content_id)
|
93
98
|
self.related_contents ||= []
|
94
99
|
self.related_contents << content_id unless self.related_contents.include?(content_id)
|
@@ -104,19 +109,19 @@ class ManagedContent
|
|
104
109
|
end
|
105
110
|
|
106
111
|
def has_sections?
|
107
|
-
self.kind ==
|
112
|
+
self.kind == 'Multiple Pages'
|
108
113
|
end
|
109
114
|
|
110
115
|
def humanize_path
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
+
self.path
|
117
|
+
end
|
118
|
+
|
119
|
+
def path
|
120
|
+
kind == 'Document' ? self.document_url : "/#{self.publication.slug}/#{self.slug}/".gsub('//', '/')
|
116
121
|
end
|
117
122
|
|
118
123
|
def publish!
|
119
|
-
self.update_attributes
|
124
|
+
self.update_attributes :state => 'published', :publication_date => Time.zone.now
|
120
125
|
end
|
121
126
|
|
122
127
|
def related_content
|
@@ -135,6 +140,14 @@ class ManagedContent
|
|
135
140
|
self.save
|
136
141
|
end
|
137
142
|
|
143
|
+
def search_description
|
144
|
+
self.summary.gsub(/<\/?[^>]*>/, '')[0..199].html_safe
|
145
|
+
end
|
146
|
+
|
147
|
+
def search_title
|
148
|
+
self.headline
|
149
|
+
end
|
150
|
+
|
138
151
|
def state=(state)
|
139
152
|
self[:state] = state.downcase
|
140
153
|
end
|
data/config/environments/test.rb
CHANGED
@@ -32,4 +32,8 @@ EditorialLogic::Application.configure do
|
|
32
32
|
|
33
33
|
# Print deprecation notices to the stderr
|
34
34
|
config.active_support.deprecation = :stderr
|
35
|
+
|
36
|
+
# tanker gem
|
37
|
+
config.index_tank_url = 'http://:PctyyJitroN8iv@82wog.api.indextank.com'
|
38
|
+
config.tanker_pagination_backend = :kaminari
|
35
39
|
end
|
data/editorial_logic.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{editorial_logic}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Bantik"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-09-01}
|
13
13
|
s.description = %q{An engine for enabling managed content, including articles, blogs, FAQs and glossaries.}
|
14
14
|
s.email = %q{corey@seologic.com}
|
15
15
|
s.files = [
|
@@ -827,6 +827,7 @@ Gem::Specification.new do |s|
|
|
827
827
|
s.add_runtime_dependency(%q<rails>, [">= 3.0.1"])
|
828
828
|
s.add_runtime_dependency(%q<scaffold_logic>, [">= 0"])
|
829
829
|
s.add_runtime_dependency(%q<SystemTimer>, [">= 0"])
|
830
|
+
s.add_runtime_dependency(%q<tanker>, [">= 0"])
|
830
831
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
831
832
|
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
832
833
|
else
|
@@ -838,6 +839,7 @@ Gem::Specification.new do |s|
|
|
838
839
|
s.add_dependency(%q<rails>, [">= 3.0.1"])
|
839
840
|
s.add_dependency(%q<scaffold_logic>, [">= 0"])
|
840
841
|
s.add_dependency(%q<SystemTimer>, [">= 0"])
|
842
|
+
s.add_dependency(%q<tanker>, [">= 0"])
|
841
843
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
842
844
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
843
845
|
end
|
@@ -850,6 +852,7 @@ Gem::Specification.new do |s|
|
|
850
852
|
s.add_dependency(%q<rails>, [">= 3.0.1"])
|
851
853
|
s.add_dependency(%q<scaffold_logic>, [">= 0"])
|
852
854
|
s.add_dependency(%q<SystemTimer>, [">= 0"])
|
855
|
+
s.add_dependency(%q<tanker>, [">= 0"])
|
853
856
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
854
857
|
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
855
858
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: editorial_logic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 1.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Bantik
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-09-01 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -133,7 +133,7 @@ dependencies:
|
|
133
133
|
type: :runtime
|
134
134
|
version_requirements: *id008
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
|
-
name:
|
136
|
+
name: tanker
|
137
137
|
prerelease: false
|
138
138
|
requirement: &id009 !ruby/object:Gem::Requirement
|
139
139
|
none: false
|
@@ -144,12 +144,26 @@ dependencies:
|
|
144
144
|
segments:
|
145
145
|
- 0
|
146
146
|
version: "0"
|
147
|
-
type: :
|
147
|
+
type: :runtime
|
148
148
|
version_requirements: *id009
|
149
149
|
- !ruby/object:Gem::Dependency
|
150
|
-
name:
|
150
|
+
name: jeweler
|
151
151
|
prerelease: false
|
152
152
|
requirement: &id010 !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
hash: 3
|
158
|
+
segments:
|
159
|
+
- 0
|
160
|
+
version: "0"
|
161
|
+
type: :development
|
162
|
+
version_requirements: *id010
|
163
|
+
- !ruby/object:Gem::Dependency
|
164
|
+
name: rspec
|
165
|
+
prerelease: false
|
166
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
153
167
|
none: false
|
154
168
|
requirements:
|
155
169
|
- - ">="
|
@@ -161,7 +175,7 @@ dependencies:
|
|
161
175
|
- 9
|
162
176
|
version: 1.2.9
|
163
177
|
type: :development
|
164
|
-
version_requirements: *
|
178
|
+
version_requirements: *id011
|
165
179
|
description: An engine for enabling managed content, including articles, blogs, FAQs and glossaries.
|
166
180
|
email: corey@seologic.com
|
167
181
|
executables: []
|