Sha256: d0eef2e196e8dd167c6cd1db035a34ff15d6aea1978f5eac1b5c7abd3c221c81

Contents?: true

Size: 1.66 KB

Versions: 23

Compression:

Stored size: 1.66 KB

Contents

require 'miasma'

module Miasma
  module Types

    # Base data container
    class ThinModel < Data

      class << self

        # Get/Set fat model
        #
        # @param klass [Class] fat model class
        # @return [Class] fat model class
        def model(klass=nil)
          if(klass)
            unless(klass.ancestors.include?(Miasma::Types::Model))
              raise TypeError.new "Expecting `Miasma::Types::Model` subclass! (got #{klass})"
            else
              self._model = klass
            end
          end
          self._model
        end

        protected

        # @return [Class] fat model class
        attr_accessor :_model

      end

      # @return [Miasma::Types::Api] service API
      attr_reader :api

      # Build new instance
      #
      # @param api [Miasma::Types::Api] service API
      # @param args [Hash] model data
      def initialize(api, args={})
        @api = api
        super args
      end

      # @return [FalseClass]
      # @note thin models are always false
      def persisted?
        false
      end

      # Associated model class
      #
      # @return [Class] of type Miasma::Types::Model
      # @note will deconstruct namespace and rebuild using provider
      def model
        if(self.class.model)
          self.class.model
        else
          raise NotImplementedError.new "No associated model for this thin model type (#{self.class})"
        end
      end

      # Build fat model instance
      #
      # @return [Miasma::Types::Model]
      def expand
        inst = model.new(api)
        inst.data[:id] = self.id
        inst.reload
      end
      alias_method :instance, :expand

    end

  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
miasma-0.3.2 lib/miasma/types/thin_model.rb
miasma-0.3.0 lib/miasma/types/thin_model.rb
miasma-0.2.38 lib/miasma/types/thin_model.rb
miasma-0.2.36 lib/miasma/types/thin_model.rb
miasma-0.2.34 lib/miasma/types/thin_model.rb
miasma-0.2.32 lib/miasma/types/thin_model.rb
miasma-0.2.30 lib/miasma/types/thin_model.rb
miasma-0.2.28 lib/miasma/types/thin_model.rb
miasma-0.2.26 lib/miasma/types/thin_model.rb
miasma-0.2.24 lib/miasma/types/thin_model.rb
miasma-0.2.22 lib/miasma/types/thin_model.rb
miasma-0.2.20 lib/miasma/types/thin_model.rb
miasma-0.2.18 lib/miasma/types/thin_model.rb
miasma-0.2.16 lib/miasma/types/thin_model.rb
miasma-0.2.14 lib/miasma/types/thin_model.rb
miasma-0.2.12 lib/miasma/types/thin_model.rb
miasma-0.2.10 lib/miasma/types/thin_model.rb
miasma-0.2.8 lib/miasma/types/thin_model.rb
miasma-0.2.6 lib/miasma/types/thin_model.rb
miasma-0.2.4 lib/miasma/types/thin_model.rb