Sha256: 11fb459fbf8493bed68656648353b57867314b7b033f114497278c58395ce05c

Contents?: true

Size: 1.19 KB

Versions: 55

Compression:

Stored size: 1.19 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, searchable: false
            )
          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

55 entries across 55 versions & 1 rubygems

Version Path
para-0.12.5 lib/para/model_field_parsers/store.rb
para-0.12.4 lib/para/model_field_parsers/store.rb
para-0.12.3 lib/para/model_field_parsers/store.rb
para-0.12.2 lib/para/model_field_parsers/store.rb
para-0.12.1 lib/para/model_field_parsers/store.rb
para-0.12.0 lib/para/model_field_parsers/store.rb
para-0.11.4 lib/para/model_field_parsers/store.rb
para-0.11.3 lib/para/model_field_parsers/store.rb
para-0.11.2 lib/para/model_field_parsers/store.rb
para-0.11.1 lib/para/model_field_parsers/store.rb
para-0.11.0 lib/para/model_field_parsers/store.rb
para-0.10.0 lib/para/model_field_parsers/store.rb
para-0.9.4 lib/para/model_field_parsers/store.rb
para-0.9.3.3 lib/para/model_field_parsers/store.rb
para-0.9.3.2 lib/para/model_field_parsers/store.rb
para-0.9.3.1 lib/para/model_field_parsers/store.rb
para-0.9.2 lib/para/model_field_parsers/store.rb
para-0.9.0 lib/para/model_field_parsers/store.rb
para-0.8.15 lib/para/model_field_parsers/store.rb
para-0.8.14 lib/para/model_field_parsers/store.rb