Sha256: 87b3ba54ace293df4da635c6bf324b48d09d17c7bf61becde4d0f27dd875f1ec

Contents?: true

Size: 757 Bytes

Versions: 23

Compression:

Stored size: 757 Bytes

Contents

require 'miasma'

module Miasma

  module Utils
    # Make best effort to make model immutable
    # @note this should be included at end of model definition
    module Immutable

      # Freezes underlying data hash
      def frozen_valid_state(*args)
        unfrozen_valid_state(*args)
        data.freeze
        dirty.freeze
        self
      end

      # @raises [Error::ImmutableError]
      def save
        raise Error::ImmutableError.new 'Resource information cannot be mutated!'
      end

      class << self

        def included(klass)
          klass.class_eval do
            alias_method :unfrozen_valid_state, :valid_state
            alias_method :valid_state, :frozen_valid_state
          end
        end

      end

    end
  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

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