Sha256: 07df64476b45b8a9e161b7ac6ec9dd3c4e0b55cd2ed952e4eeaa768023718d0c

Contents?: true

Size: 726 Bytes

Versions: 3

Compression:

Stored size: 726 Bytes

Contents

module PushType
  class MatrixField < PushType::FieldType

    include PushType::Fields::Arrays

    options template: :matrix, mapping: [:key, :value]

    def param
      { json_key => mapping.keys }
    end

    def mapping
      @mapping ||= @opts[:mapping].reduce({}) do |h, col|
        col.is_a?(Hash) ? h.merge(col) : h.update(col => form_helper)
      end
    end

    def struct
      @struct ||= Struct.new *mapping.keys
    end

    def to_json(val)
      return if val.blank?
      super.reject { |v| v.blank? or v.values.all?(&:blank?) }
    end

    def from_json(val)
      return if val.blank?
      super.reject { |v| v.blank? or v.values.all?(&:blank?) }.map { |h| struct.new(*h.values) }
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
push_type_core-0.5.0.alpha.5 app/fields/push_type/matrix_field.rb
push_type_core-0.5.0.alpha.4 app/fields/push_type/matrix_field.rb
push_type_core-0.5.0.alpha.3 app/fields/push_type/matrix_field.rb