Sha256: 6e9876c3250426b474b4c7a7c77c9e945e160b6bf7a20341d354b1a13382fe15

Contents?: true

Size: 1.63 KB

Versions: 17

Compression:

Stored size: 1.63 KB

Contents

# encoding: UTF-8

module StorageRoom
  module Extensions
    
    # With inspiration from John Nunemaker's MongoMapper/Plucky
    module Symbol
      def gt
        SymbolOperator.new(self, 'gt')
      end

      def lt
        SymbolOperator.new(self, 'lt')
      end

      def gte
        SymbolOperator.new(self, 'gte')
      end

      def lte
        SymbolOperator.new(self, 'lte')
      end

      def ne
        SymbolOperator.new(self, 'ne')
      end

      def in
        SymbolOperator.new(self, 'in')
      end

      def nin
        SymbolOperator.new(self, 'nin')
      end

      # def mod
      #   SymbolOperator.new(self, 'mod')
      # end

      def all
        SymbolOperator.new(self, 'all')
      end

      # def size
      #   SymbolOperator.new(self, 'size')
      # end unless Symbol.instance_methods.include?(:size) # Ruby 1.9 defines symbol size

      # def exists
      #   SymbolOperator.new(self, 'exists')
      # end
      # 
      # def asc
      #   SymbolOperator.new(self, 'asc')
      # end
      # 
      # def desc
      #   SymbolOperator.new(self, 'desc')
      # end
    end
  end
end

class SymbolOperator
  include Comparable

  attr_reader :field, :operator

  def initialize(field, operator, options={})
    @field, @operator = field, operator
  end unless method_defined?(:initialize)

  def <=>(other)
    if field == other.field
      operator <=> other.operator
    else
      field.to_s <=> other.field.to_s
    end
  end

  def ==(other)
    field == other.field && operator == other.operator
  end
  
  def to_s
    "#{field}!#{operator}"
  end
end

class Symbol
  include StorageRoom::Extensions::Symbol
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
storage_room-0.3.24 lib/storage_room/extensions/symbol.rb
storage_room-0.3.23 lib/storage_room/extensions/symbol.rb
storage_room-0.3.22 lib/storage_room/extensions/symbol.rb
storage_room-0.3.21 lib/storage_room/extensions/symbol.rb
storage_room-0.3.20 lib/storage_room/extensions/symbol.rb
storage_room-0.3.19 lib/storage_room/extensions/symbol.rb
storage_room-0.3.18 lib/storage_room/extensions/symbol.rb
storage_room-0.3.17 lib/storage_room/extensions/symbol.rb
storage_room-0.3.16 lib/storage_room/extensions/symbol.rb
storage_room-0.3.15 lib/storage_room/extensions/symbol.rb
storage_room-0.3.14 lib/storage_room/extensions/symbol.rb
storage_room-0.3.13 lib/storage_room/extensions/symbol.rb
storage_room-0.3.12 lib/storage_room/extensions/symbol.rb
storage_room-0.3.11 lib/storage_room/extensions/symbol.rb
storage_room-0.3.10 lib/storage_room/extensions/symbol.rb
storage_room-0.3.9 lib/storage_room/extensions/symbol.rb
storage_room-0.3.8 lib/storage_room/extensions/symbol.rb