class MixpanelMagicLamp::InstanceMethods::ExpressionBuilder

Attributes

expression[R]

Public Class Methods

new(*args) click to toggle source
# File lib/mixpanel_magic_lamp/expression_builder.rb, line 17
def initialize(*args)
  @expression = ''
  equals(*args) if args.any?
end

Public Instance Methods

and() click to toggle source
# File lib/mixpanel_magic_lamp/expression_builder.rb, line 26
def and
  @expression += ' and ' if @expression.present? and not @expression =~ /(and|or)\s*$/
  self
end
contains(args = {}, union = 'and') click to toggle source
# File lib/mixpanel_magic_lamp/expression_builder.rb, line 46
def contains(args = {}, union = 'and')
  @expression += join(args, union, "\":value\" in (properties[\":name\"])")
  self
end
does_not_contain(args = {}, union = 'and') click to toggle source
# File lib/mixpanel_magic_lamp/expression_builder.rb, line 51
def does_not_contain(args = {}, union = 'and')
  @expression += join(args, union, "not \":value\" in (properties[\":name\"])")
  self
end
does_not_equal(args = {}, union = 'and') click to toggle source
# File lib/mixpanel_magic_lamp/expression_builder.rb, line 41
def does_not_equal(args = {}, union = 'and')
  @expression += join(args, union, "properties[\":name\"] != \":value\"")
  self
end
equals(args = {}, union = 'and') click to toggle source
# File lib/mixpanel_magic_lamp/expression_builder.rb, line 36
def equals(args = {}, union = 'and')
  @expression += join(args, union, "properties[\":name\"] == \":value\"")
  self
end
is_not_set(args = [], union = 'and') click to toggle source
# File lib/mixpanel_magic_lamp/expression_builder.rb, line 61
def is_not_set(args = [], union = 'and')
  @expression += join(args, union, "not defined (properties[\":name\"])")
  self
end
is_set(args = [], union = 'and') click to toggle source
# File lib/mixpanel_magic_lamp/expression_builder.rb, line 56
def is_set(args = [], union = 'and')
  @expression += join(args, union, "defined (properties[\":name\"])")
  self
end
or() click to toggle source
# File lib/mixpanel_magic_lamp/expression_builder.rb, line 31
def or
  @expression += ' or ' if @expression.present? and not @expression =~ /(and|or)\s*$/
  self
end
to_s() click to toggle source
# File lib/mixpanel_magic_lamp/expression_builder.rb, line 22
def to_s
  @expression
end

Private Instance Methods

join(args, union, exp) click to toggle source
# File lib/mixpanel_magic_lamp/expression_builder.rb, line 67
def join(args, union, exp)
  args = [args] unless args.is_a? Array or args.is_a? Hash
  (args.is_a? Array) ? args.compact! : args.reject! {|k,v| v.nil?}

  built_in = '(' + args.map do |name, values|
    if values.nil?
      exp.gsub(':name', name)
    else
      values = [values] unless values.is_a? Array
      values.map do |value|
        exp.gsub(':name', name.to_s).gsub(':value', value.to_s)
      end
    end
  end.flatten.join(" #{union} ") + ')'

  built_in == '()' ? '' : built_in
end