Sha256: c2534a843baaea84ac95aa11722e7eab559783bde419fda3a201831dfd4e3cd5

Contents?: true

Size: 1.78 KB

Versions: 1

Compression:

Stored size: 1.78 KB

Contents

class ActiveRecordSchemaScrapper
  class Attributes

    class << self
      def register_type(name:, klass:)
        registered_types << [name, klass]
      end

      def registered_types
        @registered_types ||= []
      end

      def register_default(name:, klass:)
        registered_defaults << [name, klass]
      end

      def registered_defaults
        @registered_defaults ||= []
      end
    end

    attr_reader :errors, :model
    private :model

    def initialize(model:)
      @model  = model
      @errors = []
    end

    include Enumerable

    def each
      call.each { |attr| yield(attr) }
    end

    def to_a
      @to_a ||= map { |v| v }
    end

    private

    def call
      @attributes ||= model.columns_hash.map do |k, v|
        ActiveRecordSchemaScrapper::Attribute.new(
          name:      k,
          type:      v.type,
          precision: v.cast_type.precision,
          limit:     v.cast_type.limit,
          scale:     v.cast_type.scale,
          default:   v.default,
          null:      v.null,
        )
      end
    rescue NoMethodError => e
      @errors << OpenStruct.new(class_name:     model.name,
                                message:        "#{model.name} is not a valid ActiveRecord model.",
                                original_error: e,
                                level:          :error)
        []
    rescue ActiveRecord::StatementInvalid => e
      level   = model.abstract_class? ? :warn : :error
      message = model.abstract_class? ? "Could not find table for abstract_class" : e.message
      @errors << OpenStruct.new(class_name:     model.name,
                                message:        message,
                                original_error: e,
                                level:          level)
      []
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
active_record_schema_scrapper-0.2.1 lib/active_record_schema_scrapper/attributes.rb