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>
         |