Module: Workarea::Releasable
- Extended by:
- ActiveSupport::Concern
- Includes:
- Mongoid::DocumentPath
- Included in:
- Catalog::Category, Catalog::Product, Catalog::Variant, Content, Content::Block, Content::Page, Navigation::Menu, Pricing::Discount, Pricing::Price, Pricing::Sku, Search::Customization
- Defined in:
- app/models/workarea/releasable.rb
Instance Method Summary collapse
-
#activates_with_current_release? ⇒ Boolean
Whether this model becomes active with the current release.
- #releasable? ⇒ Boolean
-
#release_changes ⇒ Hash
A hash of changes for being set on the changeset.
-
#save_changeset(release_id) ⇒ Object
Persist a to be recalled for publishing later.
-
#skip_changeset ⇒ Object
Skip the release changeset for the duration of the block.
Instance Method Details
#activates_with_current_release? ⇒ Boolean
Whether this model becomes active with the current release. Used for some funny business when displaying content blocks in the admin. :(
67 68 69 70 |
# File 'app/models/workarea/releasable.rb', line 67 def activates_with_current_release? return false if Release.current.blank? active? && active_changed? && !was_active? end |
#releasable? ⇒ Boolean
114 115 116 |
# File 'app/models/workarea/releasable.rb', line 114 def releasable? true end |
#release_changes ⇒ Hash
A hash of changes for being set on the changeset. It’s just a filtered version of #changes from Mongoid.
37 38 39 40 41 42 43 44 45 46 47 |
# File 'app/models/workarea/releasable.rb', line 37 def release_changes changes.keys.inject({}) do |memo, key| old_value, new_value = *changes[key] if Release::Changeset.track_change?(key, old_value, new_value) memo[key] = new_value end memo end end |
#save_changeset(release_id) ⇒ Object
Persist a to be recalled for publishing later. This is where changesets make it to the database.
Will raise an error if the persistence goes wrong (it shouldn’t)
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'app/models/workarea/releasable.rb', line 79 def save_changeset(release_id) return unless release_id.present? changeset = Release::Changeset.find_or_initialize_by( releasable_id: id, releasable_type: self.class.name, release_id: release_id ) if changeset.persisted? && release_changes.present? # This is to avoid triggering callbacks - calling #save on a # persisted Changeset is causing Mongoid to run callbacks on the # parent document, which resets the changeset changes to previous # values, not allowing updates to a changeset. #set merges a hash # field's new value into the old, so a call to #unset is necessary # to ensure any removed changes are properly deleted. # # TODO check in with this before v3 to see if Mongoid has fixed or # open a Mongoid PR # changeset.unset(:changeset) changeset.set(changeset: release_changes) elsif release_changes.present? changeset.document_path = document_path changeset.changeset = release_changes changeset.save! elsif changeset.persisted? changeset.destroy end changes.each do |field, change| attributes[field] = change.first end end |
#skip_changeset ⇒ Object
Skip the release changeset for the duration of the block. Used when publishing a changeset, i.e. don’t apply/save the release changes since we actually want to publish.
55 56 57 58 59 60 |
# File 'app/models/workarea/releasable.rb', line 55 def skip_changeset @_skip_changeset = true result = yield @_skip_changeset = false result end |