diff --git a/lib/garb.rb b/lib/garb.rb index 13cce03..2c2d9f7 100644 --- a/lib/garb.rb +++ b/lib/garb.rb @@ -78,6 +78,11 @@ def parse_link(entry, rel) entry['link'].detect {|link| link["rel"] == rel}['href'] end + def symbol_operator_slugs + [:eql, :not_eql, :gt, :gte, :lt, :lte, :desc, :descending, :matches, + :does_not_match, :contains, :does_not_contain, :substring, :not_substring] + end + # new(address, port = nil, p_addr = nil, p_port = nil, p_user = nil, p_pass = nil) # opts => open_timeout, read_timeout, ssl_timeout diff --git a/lib/support.rb b/lib/support.rb index 4094fd7..37ccf8e 100644 --- a/lib/support.rb +++ b/lib/support.rb @@ -2,11 +2,7 @@ require File.expand_path("./lib/support/string.rb") end -class SymbolOperator - def initialize(field, operator) - @field, @operator = field, operator - end unless method_defined?(:initialize) - +module SymbolOperatorMethods def to_google_analytics operators = { :eql => '==', @@ -25,21 +21,42 @@ def to_google_analytics :descending => '-' } - target = Garb.to_google_analytics(@field) - operator = operators[@operator] + t = Garb.to_google_analytics(@field || @target) + o = operators[@operator] - [:desc, :descending].include?(@operator) ? "#{operator}#{target}" : "#{target}#{operator}" + [:desc, :descending].include?(@operator) ? "#{o}#{t}" : "#{t}#{o}" end end -class Symbol - [:eql, :not_eql, :gt, :gte, :lt, :lte, :desc, :descending, - :matches, :does_not_match, :contains, :does_not_contain, - :substring, :not_substring].each do |operator| +class SymbolOperator + def initialize(field, operator) + @field, @operator = field, operator + end unless method_defined?(:initialize) + include SymbolOperatorMethods +end + +symbol_slugs = [] + +if Object.const_defined?(DataMapper) + # make sure the class is defined + require 'dm-core/core_ext/symbol' + + # add to_google_analytics to DM's Opeartor + class DataMapper::Query::Operator + include SymbolOperatorMethods + end + + symbol_slugs = (Garb.symbol_operator_slugs - DataMapper::Query::Conditions::Comparison.slugs) +else + symbol_slugs = Garb.symbol_operator_slugs +end + +class Symbol + symbol_slugs.each do |operator| define_method(operator) do warn("The use of SymbolOperator(#{operator}, etc.) has been deprecated. Please use named filters.") SymbolOperator.new(self, operator) end unless method_defined?(operator) end -end +end \ No newline at end of file