Sha256: 54cdd48ce4895c7aae3d2aa689f47f2966e8308d37a98cfc2fd38e05019a08d8

Contents?: true

Size: 822 Bytes

Versions: 4

Compression:

Stored size: 822 Bytes

Contents

module ActiveEnum
  module Storage
    class MemoryStore < AbstractStore
      def set(id, name, meta=nil)
        check_duplicate id, name
        values << [id, name, meta].compact
        sort!
      end

      def get_by_id(id)
        values.assoc(id)
      end

      def get_by_name(name)
        values.rassoc(name.to_s) || values.rassoc(name.to_s.titleize)
      end

      def values
        @values ||= []
      end

      def check_duplicate(id, name)
        if get_by_id(id) || get_by_name(name)
          raise ActiveEnum::DuplicateValue
        end
      end

      def sort!
        return if @order == :as_defined

        case @order
        when :asc
          values.sort! {|a,b| a[0] <=> b[0] }
        when :desc
          values.sort! {|a,b| b[0] <=> a[0] }
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
active_enum-0.9.1 lib/active_enum/storage/memory_store.rb
active_enum-0.9.0 lib/active_enum/storage/memory_store.rb
active_enum-0.8.2 lib/active_enum/storage/memory_store.rb
active_enum-0.8.1 lib/active_enum/storage/memory_store.rb