class Glug::Condition

—– Condition

represents a GL filter of the form [operator, key, value] (etc.)
can be merged with other conditions via the & and | operators

Constants

DOT_METHODS

GL operators that make sense to use as suffixed dot methods

SUBSTITUTIONS

GL operators we can’t use verbatim (mostly Ruby reserved words)

Attributes

operator[RW]
values[RW]

Public Class Methods

new() click to toggle source
# File lib/glug/condition.rb, line 59
def initialize
        @values=[]
end

Public Instance Methods

!=(*args) click to toggle source
# File lib/glug/condition.rb, line 44
def !=(*args); Condition.new.from_key(:!=, self, args) end
%(*args) click to toggle source
# File lib/glug/condition.rb, line 49
def  %(*args); Condition.new.from_key(:% , self, args) end
&(cond) click to toggle source
# File lib/glug/condition.rb, line 78
def &(cond); merge(:all,cond) end
*(*args) click to toggle source
# File lib/glug/condition.rb, line 52
def  *(*args); Condition.new.from_key(:* , self, args) end
**(*args) click to toggle source
# File lib/glug/condition.rb, line 54
def **(*args); Condition.new.from_key(:^ , self, args) end
+(*args) click to toggle source
# File lib/glug/condition.rb, line 50
def  +(*args); Condition.new.from_key(:+ , self, args) end
-(*args) click to toggle source
# File lib/glug/condition.rb, line 51
def  -(*args); Condition.new.from_key(:- , self, args) end
/(*args) click to toggle source
# File lib/glug/condition.rb, line 53
def  /(*args); Condition.new.from_key(:/ , self, args) end
<(*args) click to toggle source
# File lib/glug/condition.rb, line 45
def  <(*args); Condition.new.from_key(:< , self, args) end
<<(cond) click to toggle source
# File lib/glug/condition.rb, line 91
def <<(cond); @values << cond.encode; self end
<=(*args) click to toggle source
# File lib/glug/condition.rb, line 47
def <=(*args); Condition.new.from_key(:<=, self, args) end
==(*args) click to toggle source
# File lib/glug/condition.rb, line 43
def ==(*args); Condition.new.from_key(:==, self, args) end
>(*args) click to toggle source
# File lib/glug/condition.rb, line 46
def  >(*args); Condition.new.from_key(:> , self, args) end
>=(*args) click to toggle source
# File lib/glug/condition.rb, line 48
def >=(*args); Condition.new.from_key(:>=, self, args) end
[](*args) click to toggle source
# File lib/glug/condition.rb, line 56
def [](*args); Condition.new.from_key(:at, args[0], [self]) end
coerce(other) click to toggle source
# File lib/glug/condition.rb, line 57
def coerce(other); [Condition.new.just_value(other), self] end
encode() click to toggle source

Encode into an array for GL JSON (recursive)

# File lib/glug/condition.rb, line 103
def encode
        transform_underscores
        values = @values.map { |v| v.is_a?(Condition) ? v.encode : v }
        @operator.nil? ? values[0] : [@operator.to_s, *values]
end
from_key(operator, key, list) click to toggle source
# File lib/glug/condition.rb, line 62
def from_key(operator, key, list)
        @operator = SUBSTITUTIONS[operator] || operator.to_s.gsub('_','-')
        @values = [key].concat(list)
        self
end
from_list(operator, list) click to toggle source
# File lib/glug/condition.rb, line 67
def from_list(operator, list)
        @operator = SUBSTITUTIONS[operator] || operator.to_s.gsub('_','-')
        @values = list
        self
end
in(*args) click to toggle source
# File lib/glug/condition.rb, line 55
def in(*args); Condition.new.from_key(:in, self, [[:literal,args.flatten]]) end
is(*args) click to toggle source
# File lib/glug/condition.rb, line 42
def is(*args); Condition.new.from_key(:==, self, args) end
just_value(val) click to toggle source
# File lib/glug/condition.rb, line 72
def just_value(val)
        @operator = nil
        @values = [val]
        self
end
merge(op,cond) click to toggle source
# File lib/glug/condition.rb, line 80
def merge(op,cond)
        if cond.nil?
                self
        elsif @operator==op
                Condition.new.from_list(op, @values + [cond])
        elsif cond.operator==op
                Condition.new.from_list(op, [self] + cond.values)
        else
                Condition.new.from_list(op, [self, cond])
        end
end
method_missing(method_sym, *args) click to toggle source

Support dot access for most methods

Calls superclass method
# File lib/glug/condition.rb, line 94
def method_missing(method_sym, *args)
        if DOT_METHODS.include?(method_sym)
                Condition.new.from_key(method_sym, self, args)
        else
                super
        end
end
to_json(opts) click to toggle source
# File lib/glug/condition.rb, line 108
def to_json(opts)
        encode.to_json(opts)
end
to_s() click to toggle source
# File lib/glug/condition.rb, line 111
def to_s
        "<Condition #{@operator} #{@values}>"
end
transform_underscores() click to toggle source

Transform nested { font_scale: 0.8 } to { “font-scale”=>0.8 }

# File lib/glug/condition.rb, line 116
def transform_underscores
        @values.map! do |v|
                if v.is_a?(Hash)
                        new_hash = {}
                        v.each { |hk,hv| new_hash[hk.is_a?(Symbol) ? hk.to_s.gsub('_','-') : hk] = hv }
                        new_hash
                else
                        v
                end
        end
end
|(cond) click to toggle source
# File lib/glug/condition.rb, line 79
def |(cond); merge(:any,cond) end