Sha256: e2f74a6a697a8181239236bcdcdd161ee765afe4987fd4622ca816e7e180ab46

Contents?: true

Size: 1.53 KB

Versions: 1

Compression:

Stored size: 1.53 KB

Contents

require 'csv'

module AxleAttributes
  class Dumper
    attr_reader :model
    def initialize(model)
      @model  = model
    end

    def dump_internal
      dump(model.attribute_set, ["Attribute", "Display Name", "Type", "Deprecation", "Legacy Name", "Mapping", "Description", "Note"]) do |definition|
        [
          definition.canonical_name,
          definition.display_name,
          definition.type,
          definition.deprecated_on ? definition.deprecated_on.to_s('%Y/%m/%d') : nil,
          definition.options[:mmdb_name],
          mapping_display(definition),
          definition.description,
          definition.notes
        ]
      end
    end

    def dump_public(attribute_set)
      dump(attribute_set, ["Attribute", "Display Name", "Type", "Description"]) do |definition|
        [
          definition.canonical_name,
          definition.display_name,
          definition.type,
          definition.description
        ]
      end
    end

    def dump(attribute_set, headers)
      CSV.generate(headers: headers, write_headers: true) do |csv|
        attribute_set.sort.each do |attribute_name|
          definition = model.attributes[attribute_name]
          csv << yield(definition) if definition
        end
      end
    end

    def mapping_display(definition)
      if mapping_model = definition.mapping_model
        "#{mapping_model.model_name.plural}.#{mapping_model.natural_key}" if mapping_model.respond_to?(:natural_key)
      elsif definition.mappings.any?
        "attribute_mappings"
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
axle_attributes-1.13.2 lib/axle_attributes/dumper.rb