pulitzer 0.14.4 → 0.15.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.
- checksums.yaml +4 -4
- data/app/controllers/pulitzer/arrangement_styles_controller.rb +1 -3
- data/app/controllers/pulitzer/background_styles_controller.rb +1 -3
- data/app/controllers/pulitzer/free_form_section_types_controller.rb +4 -4
- data/app/controllers/pulitzer/justification_styles_controller.rb +1 -3
- data/app/controllers/pulitzer/partial_types_controller.rb +0 -1
- data/app/controllers/pulitzer/post_type_content_element_types_controller.rb +4 -4
- data/app/controllers/pulitzer/post_type_versions_controller.rb +54 -0
- data/app/controllers/pulitzer/post_types_controller.rb +1 -5
- data/app/controllers/pulitzer/posts_controller.rb +3 -3
- data/app/controllers/pulitzer/sequence_flow_styles_controller.rb +1 -3
- data/app/controllers/pulitzer/versions_controller.rb +8 -2
- data/app/helpers/pulitzer/posts_helper.rb +7 -7
- data/app/interactions/pulitzer/create_free_form_section_partials.rb +2 -2
- data/app/interactions/pulitzer/create_post_type_content_elements.rb +3 -3
- data/app/interactions/pulitzer/create_post_type_free_form_sections.rb +3 -3
- data/app/interactions/pulitzer/create_singleton_post.rb +6 -6
- data/app/interactions/pulitzer/destroy_post_type_content_elements.rb +3 -3
- data/app/interactions/pulitzer/destroy_post_type_free_form_sections.rb +3 -3
- data/app/interactions/pulitzer/post_type_versions_controller/change_state.rb +15 -0
- data/app/interactions/pulitzer/post_type_versions_controller/create.rb +18 -0
- data/app/interactions/pulitzer/post_types_controller/create_singleton_post.rb +15 -0
- data/app/interactions/pulitzer/post_types_controller/create_template_version.rb +12 -0
- data/app/interactions/pulitzer/update_post_type_content_elements.rb +4 -4
- data/app/interactions/pulitzer/update_post_type_free_form_sections.rb +3 -3
- data/app/interactions/pulitzer/update_singleton_post.rb +6 -4
- data/app/models/pulitzer/arrangement_style.rb +1 -1
- data/app/models/pulitzer/background_style.rb +1 -1
- data/app/models/pulitzer/free_form_section_type.rb +1 -1
- data/app/models/pulitzer/justification_style.rb +1 -1
- data/app/models/pulitzer/partial.rb +8 -3
- data/app/models/pulitzer/post.rb +10 -2
- data/app/models/pulitzer/post_type.rb +10 -39
- data/app/models/pulitzer/post_type_content_element_type.rb +1 -1
- data/app/models/pulitzer/post_type_element.rb +1 -1
- data/app/models/pulitzer/post_type_version.rb +84 -0
- data/app/models/pulitzer/sequence_flow_style.rb +1 -1
- data/app/services/pulitzer/post_type_version/preview.rb +30 -0
- data/app/services/pulitzer/post_type_version/publish.rb +38 -0
- data/app/services/pulitzer/post_type_version/retire.rb +20 -0
- data/app/views/pulitzer/arrangement_styles/_new.html.erb +3 -3
- data/app/views/pulitzer/arrangement_styles/_show.html.erb +10 -6
- data/app/views/pulitzer/background_styles/_new.html.erb +3 -3
- data/app/views/pulitzer/background_styles/_show.html.erb +10 -6
- data/app/views/pulitzer/free_form_section_types/_new.html.erb +3 -3
- data/app/views/pulitzer/justification_styles/_new.html.erb +3 -3
- data/app/views/pulitzer/justification_styles/_show.html.erb +10 -6
- data/app/views/pulitzer/partials/_new.html.erb +8 -8
- data/app/views/pulitzer/post_type_content_element_types/_form.html.erb +0 -2
- data/app/views/pulitzer/post_type_content_element_types/_form_fields.html.erb +2 -2
- data/app/views/pulitzer/post_type_content_element_types/_new.html.erb +2 -2
- data/app/views/pulitzer/post_type_content_element_types/_show.html.erb +6 -2
- data/app/views/pulitzer/post_type_versions/_index.html.erb +15 -0
- data/app/views/pulitzer/post_type_versions/_show.html.erb +20 -0
- data/app/views/pulitzer/post_type_versions/_show_wrapper.html.erb +3 -0
- data/app/views/pulitzer/{post_types → post_type_versions}/_template.html.erb +34 -34
- data/app/views/pulitzer/post_types/_show.html.erb +3 -9
- data/app/views/pulitzer/post_types/index.html.erb +13 -10
- data/app/views/pulitzer/posts/_breadcrumbs.html.erb +4 -0
- data/app/views/pulitzer/posts/_edit.html.erb +5 -4
- data/app/views/pulitzer/posts/_index.html.erb +3 -3
- data/app/views/pulitzer/posts/_new.html.erb +1 -1
- data/app/views/pulitzer/posts/_show.html.erb +1 -1
- data/app/views/pulitzer/posts/_show_slug.html.erb +1 -1
- data/app/views/pulitzer/sequence_flow_styles/_new.html.erb +3 -3
- data/app/views/pulitzer/sequence_flow_styles/_show.html.erb +10 -6
- data/config/routes.rb +6 -4
- data/db/migrate/20170515230633_create_post_type_version.rb +9 -0
- data/db/migrate/20170515232938_reconnect_post_type_to_post.rb +13 -0
- data/lib/generators/pulitzer/post_type_generator.rb +24 -4
- data/lib/pulitzer.rb +1 -0
- data/lib/pulitzer/controller_helpers.rb +9 -0
- data/lib/pulitzer/version.rb +1 -1
- metadata +19 -4
- data/app/interactions/pulitzer/destroy_free_form_section_partials.rb +0 -17
@@ -1,14 +1,14 @@
|
|
1
1
|
class Pulitzer::UpdatePostTypeContentElements
|
2
|
-
attr_accessor :
|
2
|
+
attr_accessor :post_type_version, :ptcet, :old_label
|
3
3
|
|
4
4
|
def initialize(ptcet, old_label=nil)
|
5
|
-
self.
|
5
|
+
self.post_type_version = ptcet.post_type_version
|
6
6
|
self.ptcet = ptcet
|
7
7
|
self.old_label = old_label || ptcet.label
|
8
8
|
end
|
9
9
|
|
10
10
|
def call
|
11
|
-
|
11
|
+
post_type_version.posts.each do |post|
|
12
12
|
begin
|
13
13
|
preview_version = post.get_preview_version!
|
14
14
|
post.preview_version.content_elements.where(label: old_label).each do |content_element|
|
@@ -23,7 +23,7 @@ class Pulitzer::UpdatePostTypeContentElements
|
|
23
23
|
# if there is no preview version, skip this one.
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
26
|
+
post_type_version.partials.joins(free_form_section: :version).where(pulitzer_versions: {status: 0}).each do |partial|
|
27
27
|
partial.content_elements.where(label: old_label).each do |content_element|
|
28
28
|
content_element.update(label: ptcet.label,
|
29
29
|
height: ptcet.height,
|
@@ -1,14 +1,14 @@
|
|
1
1
|
class Pulitzer::UpdatePostTypeFreeFormSections
|
2
|
-
attr_accessor :
|
2
|
+
attr_accessor :post_type_version, :ffst, :old_label
|
3
3
|
|
4
4
|
def initialize(ffst, old_label=nil)
|
5
|
-
self.
|
5
|
+
self.post_type_version = ffst.post_type_version
|
6
6
|
self.ffst = ffst
|
7
7
|
self.old_label = old_label || ffst.label
|
8
8
|
end
|
9
9
|
|
10
10
|
def call
|
11
|
-
|
11
|
+
post_type_version.posts.each do |post|
|
12
12
|
post.preview_version.free_form_sections.where(free_form_section_type_id: ffst.id).each do |ffs|
|
13
13
|
ffs.update(name: ffst.name)
|
14
14
|
end
|
@@ -8,10 +8,12 @@ class Pulitzer::UpdateSingletonPost
|
|
8
8
|
|
9
9
|
def call
|
10
10
|
if post_type.singular?
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
post_type.preview_type_versions.each do |ptv|
|
12
|
+
unless ptv.singleton_post?
|
13
|
+
Pulitzer::CreateSingletonPost.new(ptv).call
|
14
|
+
else
|
15
|
+
ptv.singleton_post.update(title: title)
|
16
|
+
end
|
15
17
|
end
|
16
18
|
end
|
17
19
|
end
|
@@ -1,15 +1,16 @@
|
|
1
1
|
module Pulitzer
|
2
2
|
class Partial < ActiveRecord::Base
|
3
3
|
belongs_to :free_form_section
|
4
|
-
belongs_to :
|
4
|
+
belongs_to :post_type_version
|
5
5
|
belongs_to :background_style
|
6
6
|
belongs_to :justification_style
|
7
7
|
belongs_to :sequence_flow_style
|
8
8
|
belongs_to :arrangement_style
|
9
|
+
has_one :post_type, through: :post_type_version
|
9
10
|
|
10
11
|
has_many :content_elements, dependent: :destroy
|
11
12
|
|
12
|
-
delegate :name, :post_type_content_element_types, :has_display?, to: :
|
13
|
+
delegate :name, :post_type_content_element_types, :has_display?, :post_type_id, :version_number, to: :post_type_version
|
13
14
|
delegate :template_path, to: :layout, allow_nil: true
|
14
15
|
|
15
16
|
before_save :handle_sort_order
|
@@ -56,6 +57,10 @@ module Pulitzer
|
|
56
57
|
name.downcase.gsub(/ /,'_').gsub(/\W/,'')
|
57
58
|
end
|
58
59
|
|
60
|
+
def version_folder
|
61
|
+
"v_#{version_number}"
|
62
|
+
end
|
63
|
+
|
59
64
|
def template_path
|
60
65
|
if arrangement_style.present?
|
61
66
|
arrangement_style.view_file_name
|
@@ -65,7 +70,7 @@ module Pulitzer
|
|
65
70
|
end
|
66
71
|
|
67
72
|
def full_view_path
|
68
|
-
Pulitzer.partial_folder
|
73
|
+
File.join Pulitzer.partial_folder, folder_path, version_folder, template_path
|
69
74
|
end
|
70
75
|
|
71
76
|
def clone_me
|
data/app/models/pulitzer/post.rb
CHANGED
@@ -5,8 +5,8 @@ module Pulitzer
|
|
5
5
|
has_many :versions, dependent: :destroy
|
6
6
|
has_one :active_version, -> { where(status: 'active') }, class_name: "Pulitzer::Version"
|
7
7
|
|
8
|
-
belongs_to :
|
9
|
-
delegate :post_type_content_element_types, :free_form_section_types, :has_free_form_sections?, :has_templated_content_elements?, to: :
|
8
|
+
belongs_to :post_type_version
|
9
|
+
delegate :post_type_content_element_types, :free_form_section_types, :has_free_form_sections?, :has_templated_content_elements?, :post_type, :post_type_id, :plural?, to: :post_type_version
|
10
10
|
delegate :post_tags, :content_elements, :content_element, :section, :has_label_type, :has_label, :post_tags_for, to: :active_version, allow_nil: true
|
11
11
|
|
12
12
|
friendly_id :title, use: [:slugged, :finders]
|
@@ -74,6 +74,14 @@ module Pulitzer
|
|
74
74
|
versions.create(status: :processing)
|
75
75
|
end
|
76
76
|
|
77
|
+
def editor_title
|
78
|
+
if post_type_version.published?
|
79
|
+
title
|
80
|
+
else
|
81
|
+
title + " version #{post_type_version.version_number}"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
77
85
|
def serialize
|
78
86
|
self.attributes.merge \
|
79
87
|
new_preview_version: self.new_preview_version
|
@@ -1,14 +1,14 @@
|
|
1
1
|
class Pulitzer::PostType < ActiveRecord::Base
|
2
2
|
enum kind: [ :template, :partial ]
|
3
|
-
has_many :
|
4
|
-
|
5
|
-
has_many :
|
3
|
+
has_many :post_type_versions, dependent: :destroy
|
4
|
+
has_one :published_type_version, -> { where(status: 'published') }, class_name: 'PostTypeVersion'
|
5
|
+
has_many :preview_type_versions, -> { where(status: 'prevew') }, class_name: 'PostTypeVersion'
|
6
|
+
has_many :posts, through: :published_type_version
|
7
|
+
has_many :partials, through: :published_type_version
|
8
|
+
has_many :post_type_content_element_types, through: :published_type_version
|
6
9
|
has_many :content_element_types, through: :post_type_content_element_types
|
7
|
-
has_many :free_form_section_types,
|
8
|
-
has_many :
|
9
|
-
has_many :justification_styles, dependent: :destroy
|
10
|
-
has_many :sequence_flow_styles, dependent: :destroy
|
11
|
-
has_many :arrangement_styles, dependent: :destroy
|
10
|
+
has_many :free_form_section_types, through: :published_type_version
|
11
|
+
has_many :layouts, through: :published_type_version
|
12
12
|
|
13
13
|
scope :templates, -> { where(kind: Pulitzer::PostType.kinds[:template])}
|
14
14
|
scope :partials, -> { where(kind: Pulitzer::PostType.kinds[:partial])}
|
@@ -19,36 +19,7 @@ class Pulitzer::PostType < ActiveRecord::Base
|
|
19
19
|
self.find_by(name: label)
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
def singleton_post
|
27
|
-
posts.first
|
28
|
-
end
|
29
|
-
|
30
|
-
def singleton_post?
|
31
|
-
!plural
|
32
|
-
end
|
33
|
-
|
34
|
-
def has_display?
|
35
|
-
background_styles.any? || justification_styles.any? || sequence_flow_styles.any? || arrangement_styles.any?
|
36
|
-
end
|
37
|
-
|
38
|
-
def has_templated_content_elements?
|
39
|
-
content_element_types.any?
|
40
|
-
end
|
41
|
-
|
42
|
-
def has_free_form_sections?
|
43
|
-
free_form_section_types.any?
|
44
|
-
end
|
45
|
-
|
46
|
-
def all_element_types
|
47
|
-
(post_type_content_element_types.to_a + free_form_section_types.to_a)
|
48
|
-
end
|
49
|
-
|
50
|
-
def highest_element_sort
|
51
|
-
last_element = all_element_types.max_by{ |e| e.sort_order || 0}
|
52
|
-
last_element&.sort_order || 0
|
22
|
+
def published_type_version_id
|
23
|
+
published_type_version&.id
|
53
24
|
end
|
54
25
|
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
class Pulitzer::PostTypeVersion < ActiveRecord::Base
|
2
|
+
include StateMachine::Model
|
3
|
+
|
4
|
+
belongs_to :post_type
|
5
|
+
has_many :posts, dependent: :destroy
|
6
|
+
has_many :partials, dependent: :destroy
|
7
|
+
has_many :post_type_content_element_types, dependent: :destroy
|
8
|
+
has_many :content_element_types, through: :post_type_content_element_types
|
9
|
+
has_many :free_form_section_types, dependent: :destroy
|
10
|
+
has_many :background_styles, dependent: :destroy
|
11
|
+
has_many :justification_styles, dependent: :destroy
|
12
|
+
has_many :sequence_flow_styles, dependent: :destroy
|
13
|
+
has_many :arrangement_styles, dependent: :destroy
|
14
|
+
|
15
|
+
delegate :name, :kind, :partial?, :template?, :plural, :plural?, to: :post_type
|
16
|
+
|
17
|
+
register_transitions({
|
18
|
+
previewing_service: Preview,
|
19
|
+
publishing_service: Publish,
|
20
|
+
retiring_service: Retire })
|
21
|
+
|
22
|
+
def full_name
|
23
|
+
"\"#{name}\" v#{version_number}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def singular?
|
27
|
+
!plural
|
28
|
+
end
|
29
|
+
|
30
|
+
def singleton_post
|
31
|
+
posts.first
|
32
|
+
end
|
33
|
+
|
34
|
+
def singleton_post?
|
35
|
+
!plural
|
36
|
+
end
|
37
|
+
|
38
|
+
def arity_display
|
39
|
+
plural? ? 'Many Posts' : 'Single Post'
|
40
|
+
end
|
41
|
+
|
42
|
+
def has_display?
|
43
|
+
background_styles.any? || justification_styles.any? || sequence_flow_styles.any? || arrangement_styles.any?
|
44
|
+
end
|
45
|
+
|
46
|
+
def has_templated_content_elements?
|
47
|
+
content_element_types.any?
|
48
|
+
end
|
49
|
+
|
50
|
+
def has_free_form_sections?
|
51
|
+
free_form_section_types.any?
|
52
|
+
end
|
53
|
+
|
54
|
+
def all_element_types
|
55
|
+
(post_type_content_element_types.to_a + free_form_section_types.to_a)
|
56
|
+
end
|
57
|
+
|
58
|
+
def highest_element_sort
|
59
|
+
last_element = all_element_types.max_by{ |e| e.sort_order || 0}
|
60
|
+
last_element&.sort_order || 0
|
61
|
+
end
|
62
|
+
|
63
|
+
def locked?
|
64
|
+
published? || retired?
|
65
|
+
end
|
66
|
+
|
67
|
+
def status_display
|
68
|
+
{'incomplete' => 'Not Ready',
|
69
|
+
'preview' => 'Previewing',
|
70
|
+
'published' => 'Published',
|
71
|
+
'retired' => 'Retired'}[status]
|
72
|
+
end
|
73
|
+
|
74
|
+
def state_change
|
75
|
+
{'incomplete' => :preview,
|
76
|
+
'preview' => :publish,
|
77
|
+
'published' => :retire,
|
78
|
+
'retired' => :publish}[status]
|
79
|
+
end
|
80
|
+
|
81
|
+
def state_change_display
|
82
|
+
state_change.to_s.humanize
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class Pulitzer::PostTypeVersion::Preview
|
2
|
+
include StateMachine::Transition
|
3
|
+
|
4
|
+
self.action_name = :preview
|
5
|
+
self.target_state = 'preview'
|
6
|
+
self.valid_from_states = [:incomplete]
|
7
|
+
|
8
|
+
def initialize(post_type_version)
|
9
|
+
@post_type_version = post_type_version
|
10
|
+
self.object = @post_type_version
|
11
|
+
self.errors = ActiveModel::Errors.new(self)
|
12
|
+
end
|
13
|
+
|
14
|
+
def preview
|
15
|
+
self.validate_transition!
|
16
|
+
validate_elements or return false
|
17
|
+
update_status
|
18
|
+
return true
|
19
|
+
end
|
20
|
+
|
21
|
+
def validate_elements
|
22
|
+
if @post_type_version.post_type_content_element_types.empty? &&
|
23
|
+
@post_type_version.free_form_section_types.empty?
|
24
|
+
@post_type_version.errors.add(:base, 'You must set up all the content elements and free form sections before previewing the post type')
|
25
|
+
return false
|
26
|
+
end
|
27
|
+
return true
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class Pulitzer::PostTypeVersion::Publish
|
2
|
+
include StateMachine::Transition
|
3
|
+
|
4
|
+
self.action_name = :publish
|
5
|
+
self.target_state = 'published'
|
6
|
+
self.valid_from_states = [:preview,:retired]
|
7
|
+
|
8
|
+
def initialize(post_type_version)
|
9
|
+
@post_type_version = post_type_version
|
10
|
+
self.object = @post_type_version
|
11
|
+
self.errors = ActiveModel::Errors.new(self)
|
12
|
+
@old_published = get_old_published_version
|
13
|
+
end
|
14
|
+
|
15
|
+
def publish
|
16
|
+
self.validate_transition!
|
17
|
+
validate_published_post or return false
|
18
|
+
update_status
|
19
|
+
archive_old_version
|
20
|
+
return true
|
21
|
+
end
|
22
|
+
|
23
|
+
def archive_old_version
|
24
|
+
@old_published.update(status: 'archived') if @old_published.present?
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_old_published_version
|
28
|
+
@post_type_version.post_type.published_type_version
|
29
|
+
end
|
30
|
+
|
31
|
+
def validate_published_post
|
32
|
+
if @post_type_version.posts.none?{|post| post.active_version.present?}
|
33
|
+
@post_type_version.errors.add(:base, 'You must publish a post before publishing the post type')
|
34
|
+
return false
|
35
|
+
end
|
36
|
+
return true
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Pulitzer::PostTypeVersion::Retire
|
2
|
+
include StateMachine::Transition
|
3
|
+
|
4
|
+
self.action_name = :retire
|
5
|
+
self.target_state = 'retired'
|
6
|
+
self.valid_from_states = [:published]
|
7
|
+
|
8
|
+
def initialize(post_type_version)
|
9
|
+
@post_type_version = post_type_version
|
10
|
+
self.object = @post_type_version
|
11
|
+
self.errors = ActiveModel::Errors.new(self)
|
12
|
+
end
|
13
|
+
|
14
|
+
def retire
|
15
|
+
self.validate_transition!
|
16
|
+
update_status
|
17
|
+
return true
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
<div class="pulitzer-row">
|
2
|
-
<%= form_for arrangement_style, html: ajax_form_hash(dom_target(arrangement_style.
|
3
|
-
<%= f.hidden_field :
|
2
|
+
<%= form_for arrangement_style, html: ajax_form_hash(dom_target(arrangement_style.post_type_version, :arrangement_styles_container), insert_method: 'append', reset_on_success: true) do |f| %>
|
3
|
+
<%= f.hidden_field :post_type_version_id %>
|
4
4
|
<%= render partial: 'form_fields', locals: { f: f, arrangement_style: arrangement_style } %>
|
5
5
|
<div class="pulitzer-span ten-percent">
|
6
6
|
<%= f.submit "Create", data: {disable_with: false} %>
|
7
7
|
</div>
|
8
8
|
<div class="pulitzer-span ten-percent">
|
9
|
-
<a class="button" data-emptier="true" data-target="<%= dom_target(arrangement_style.
|
9
|
+
<a class="button" data-emptier="true" data-target="<%= dom_target(arrangement_style.post_type_version, :new_arrangement_style)%>">Close</a>
|
10
10
|
</div>
|
11
11
|
<% end %>
|
12
12
|
</div>
|