Sha256: 226d977ec85d2de0da1c12810c0d4be48cae4b999956e4af78bff6deee223e2f

Contents?: true

Size: 1.26 KB

Versions: 54

Compression:

Stored size: 1.26 KB

Contents

# frozen_string_literal: true

require 'active_support/proxy_object'

module DeclareSchema
  class Dsl < BasicObject # avoid Object because that gets extended by lots of gems
    include ::Kernel      # but we need the basic class methods

    instance_methods.each do |m|
      unless m.to_s.starts_with?('__') || m.in?([:object_id, :instance_eval, :instance_exec])
        undef_method(m)
      end
    end

    def initialize(model, **options)
      @model = model
      @options = options
    end

    attr_reader :model

    def timestamps
      field(:created_at, :datetime, null: true)
      field(:updated_at, :datetime, null: true)
    end

    def optimistic_lock
      field(:lock_version, :integer, default: 1, null: false)
    end

    def field(name, type, *args, **options)
      @model.declare_field(name, type, *args, **@options.merge(options))
    end

    # TODO: make [:required] just another option. Either 'required: true] or 'optional: false'?
    def method_missing(*args, **options)
      args.count(&:itself) >= 2 or raise ::ArgumentError, "fields in declare_schema block must be declared as: type name, [:required], options (got #{args.inspect}, #{options.inspect})"
      type, name, *required = args
      field(name, type, *required, **options)
    end
  end
end

Version data entries

54 entries across 54 versions & 1 rubygems

Version Path
declare_schema-2.3.1 lib/declare_schema/dsl.rb
declare_schema-2.3.0 lib/declare_schema/dsl.rb
declare_schema-2.3.0.pre.is.0 lib/declare_schema/dsl.rb
declare_schema-2.2.1 lib/declare_schema/dsl.rb
declare_schema-2.2.0.colin.1 lib/declare_schema/dsl.rb
declare_schema-2.2.0 lib/declare_schema/dsl.rb
declare_schema-2.1.0 lib/declare_schema/dsl.rb
declare_schema-2.1.0.pre.1 lib/declare_schema/dsl.rb
declare_schema-1.4.0 lib/declare_schema/dsl.rb
declare_schema-1.4.0.colin.11 lib/declare_schema/dsl.rb
declare_schema-1.3.6 lib/declare_schema/dsl.rb
declare_schema-1.3.6.colin.1 lib/declare_schema/dsl.rb
declare_schema-1.3.5 lib/declare_schema/dsl.rb
declare_schema-1.3.5.colin.1 lib/declare_schema/dsl.rb
declare_schema-1.4.0.colin.9 lib/declare_schema/dsl.rb
declare_schema-1.3.4 lib/declare_schema/dsl.rb
declare_schema-1.3.4.colin.1 lib/declare_schema/dsl.rb
declare_schema-1.4.0.colin.8 lib/declare_schema/dsl.rb
declare_schema-1.3.3 lib/declare_schema/dsl.rb
declare_schema-1.3.3.colin.1 lib/declare_schema/dsl.rb