Sha256: 616bec8c60c12732ff789a636c36c77c0a155434843dfd491f2db3ace2d40b33

Contents?: true

Size: 1.17 KB

Versions: 2

Compression:

Stored size: 1.17 KB

Contents

module Para
  module ModelFieldParsers
    class Store < Para::ModelFieldParsers::Base
      register :json, self

      def parse!
        process_stored_attributes
        process_remaining_json_fields
      end

      def process_stored_attributes
        model.stored_attributes.each do |store_key, field_names|
          fields_hash.delete(store_key)

          field_names.each do |field_name|
            fields_hash[field_name] = AttributeField::Base.new(
              model, name: field_name, type: :string
            )
          end
        end
      end

      # Duplicate fields to avoid updating the hash while iterating through it
      # then remove remaining json fields from the hash
      def process_remaining_json_fields
        fields_hash.dup.each do |key, field|
          fields_hash.delete(key) if json_field?(field)
        end
      end

      def applicable?
        !model.stored_attributes.empty? || model_includes_json_fields?
      end

      def model_includes_json_fields?
        fields_hash.any? do |_, field|
          json_field?(field)
        end
      end

      def json_field?(field)
        field.type.to_s.in?(%w(json jsonb))
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
para-0.5.4 lib/para/model_field_parsers/store.rb
para-0.5.3 lib/para/model_field_parsers/store.rb