Sha256: 6b19b55e25a934bcb03e5b918a164a96963db70a58bc92ea16adbf3531e133fb

Contents?: true

Size: 1.53 KB

Versions: 70

Compression:

Stored size: 1.53 KB

Contents

module Pageflow
  module OutputSource
    STATE_MAPPING = {
      true => 'finished',
      false => 'skipped'
    }.freeze

    extend ActiveSupport::Concern

    included do
      serialize :output_presences, JSON
    end

    def present_outputs
      present_outputs_label_state_array = output_presences.select do |output_label, _output_state|
        output_present?(output_label) == true
      end

      present_outputs_label_state_array.map { |output_label_state| output_label_state[0].to_sym }
    end

    def output_present?(type)
      output_presences[type.to_s]
    end

    def output_presences=(presences)
      boolean_presences = presences.stringify_keys.each_with_object({}) do |(key, value), result|
        if value == true || value == STATE_MAPPING[true]
          result[key] = true
        elsif value == false || value == STATE_MAPPING[false]
          result[key] = false
        elsif value.blank?
          result[key] = nil
        end
      end

      self[:output_presences] = output_presences
                                .merge(boolean_presences)
                                .reject { |_key, value| value.nil? }
    end

    def output_presences
      output_presences = self[:output_presences] || {}
      output_presences.merge(externally_generated_output_presences)
    end

    def externally_generated_outputs
      []
    end

    private

    def externally_generated_output_presences
      pairs = externally_generated_outputs.map do |label|
        [label.to_s, true]
      end

      Hash[pairs]
    end
  end
end

Version data entries

70 entries across 70 versions & 1 rubygems

Version Path
pageflow-16.2.0 app/models/concerns/pageflow/output_source.rb
pageflow-16.1.0 app/models/concerns/pageflow/output_source.rb
pageflow-16.0.0 app/models/concerns/pageflow/output_source.rb
pageflow-15.8.0 app/models/concerns/pageflow/output_source.rb
pageflow-14.5.2 app/models/concerns/pageflow/output_source.rb
pageflow-15.7.1 app/models/concerns/pageflow/output_source.rb
pageflow-15.7.0 app/models/concerns/pageflow/output_source.rb
pageflow-15.6.1 app/models/concerns/pageflow/output_source.rb
pageflow-15.6.0 app/models/concerns/pageflow/output_source.rb
pageflow-15.5.0 app/models/concerns/pageflow/output_source.rb
pageflow-15.4.0 app/models/concerns/pageflow/output_source.rb
pageflow-15.3.0 app/models/concerns/pageflow/output_source.rb
pageflow-15.2.2 app/models/concerns/pageflow/output_source.rb
pageflow-15.2.1 app/models/concerns/pageflow/output_source.rb
pageflow-15.2.0 app/models/concerns/pageflow/output_source.rb
pageflow-15.1.2 app/models/concerns/pageflow/output_source.rb
pageflow-15.1.1 app/models/concerns/pageflow/output_source.rb
pageflow-15.1.0 app/models/concerns/pageflow/output_source.rb
pageflow-15.1.0.rc0 app/models/concerns/pageflow/output_source.rb
pageflow-15.1.0.beta6 app/models/concerns/pageflow/output_source.rb