Sha256: 0f5d256fd89da41df251a72f5164051d845e0685bd86b804cbb389ed1d160f58

Contents?: true

Size: 798 Bytes

Versions: 5

Compression:

Stored size: 798 Bytes

Contents

module ActiveEnum
  module Storage
    class MemoryStore < AbstractStore

      def set(id, name, meta=nil)
        check_duplicate id, name
        _values << [id, name.to_s, 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 check_duplicate(id, name)
        if get_by_id(id) || get_by_name(name)
          raise ActiveEnum::DuplicateValue
        end
      end

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

      def _values
        @_values ||= []
      end

    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
active_enum-0.9.12 lib/active_enum/storage/memory_store.rb
active_enum-0.9.11 lib/active_enum/storage/memory_store.rb
active_enum-0.9.10 lib/active_enum/storage/memory_store.rb
active_enum-0.9.9 lib/active_enum/storage/memory_store.rb
active_enum-0.9.8 lib/active_enum/storage/memory_store.rb