Sha256: 9698a3cfc61d9340ab7a10135bd3bd0e5b75f364405db9eb50131b27c1af32bb

Contents?: true

Size: 932 Bytes

Versions: 3

Compression:

Stored size: 932 Bytes

Contents

module Troo
  module Behaviours
    class NullEntity
      # @return [FalseClass]
      def default?
        false
      end
    end

    class SetDefault
      class << self
        # @param  []
        # @return []
        def for(entity)
          new(entity).set_default!
        end
      end

      # @param  []
      # @return []
      def initialize(entity)
        @entity = entity
      end

      # @return [TrueClass, ?]
      def set_default!
        return true if already_default?
        unset_default
        set_new_default
        entity
      end

      private

      attr_reader :entity

      def set_new_default
        entity.update(default: true)
      end

      def unset_default
        entity.class.update(default: false)
      end

      def already_default?
        entity.default?
      end

      def entity
        return NullEntity.new if @entity.nil?
        @entity
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
troo-0.0.13 lib/troo/models/behaviours/set_default.rb
troo-0.0.12 lib/troo/models/behaviours/set_default.rb
troo-0.0.11 lib/troo/models/behaviours/set_default.rb