Sha256: c4dd23a72f901b05a12306e96f1d8d6b0227056f5187c875738a8d04a57434b1

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

module Upgrow
  # Models are objects that represent core entities of the app’s business logic.
  # These are usually persisted and can be fetched and created as needed. They
  # have unique keys for identification (usually a numeric value), and, most
  # importantly perhaps, they are immutable. This is the key difference between
  # this new Model layer of objects and the Active Record instances regularly
  # referred to as models in typical Rails default apps.
  #
  # Another difference between Models and Records is that, once instantiated,
  # Models simply hold its attributes immutably, and they don’t have any
  # capabilities to create or update any information in the persistence layer.
  #
  # The collaboration between Repositories and Models is what allows Active
  # Record to be completely hidden away from any other areas of the app. There
  # are no references to Records in controllers, views, and anywhere else.
  # Repositories are invoked instead, which in turn return read-only Models.
  class Model < ImmutableObject
    attribute :id
    attribute :created_at
    attribute :updated_at

    # Initializes a new Model with the given member values.
    #
    # @param args [Hash<Symbol, Object>] the list of values for each attribute.
    #
    # @raise [KeyError] if an attribute is missing in the list of arguments.
    def initialize(**args)
      self.class.attribute_names.each { |key| args.fetch(key) }

      super
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
upgrow-0.0.2 lib/upgrow/model.rb