Sha256: caca1423d1a0699e326607a3a8201c88f7205646f077c644bb4b9640a2a652ff

Contents?: true

Size: 1.72 KB

Versions: 1

Compression:

Stored size: 1.72 KB

Contents

# frozen_string_literal: true

module LazyRecord
  # This module gives the Base class its functionality, and can be included
  # in any class as an alternative to inheriting from LazyRecord::Base
  module BaseModule
    def self.included(base)
      base.extend ClassMethods
      base.extend Scopes
      base.extend Attributes
      base.extend Associations
      base.extend Callbacks
      base.extend Validations
      base.extend Methods
      base.extend DynamicModules
    end

    attr_writer :id

    def initialize(opts = {})
      opts.each do |k, v|
        send("#{k}=", v) if respond_to?("#{k}=")
      end
      yield self if block_given?
    end

    def instance_attrs_to_s
      []
    end

    def instance_attr_accessors
      []
    end

    def collection_counts_to_s
      []
    end

    def inspect
      "#<#{self.class} id: #{id ? id : 'nil'}"\
      "#{instance_attrs_to_s.unshift('').join(', ')}"\
      "#{collection_counts_to_s.unshift('').join(', ')}>"
    end

    def id
      @id.freeze
    end

    def stringify_value(value)
      if value.is_a?(String)
        "\"#{value}\""
      elsif value.nil?
        'nil'
      else
        value
      end
    end

    private :id=,
            :stringify_value,
            :instance_attrs_to_s,
            :instance_attr_accessors,
            :collection_counts_to_s

    # Class methods provided to all LazyRecord classes
    module ClassMethods
      attr_reader :all

      def count
        @all.count
      end

      def first
        @all.first
      end

      def last
        @all.last
      end

      def where(condition = nil, &block)
        @all.where(condition, &block)
      end

      def destroy_all
        @all.send(:clear)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lazy_record-0.2.2 lib/lazy_record/base_module.rb