class MailyHerald::Utils::MarkupEvaluator
Constants
- VariableSignature
Public Class Methods
new(drop)
click to toggle source
# File lib/maily_herald/utils.rb, line 64 def initialize drop @drop = drop end
test_conditions(conditions)
click to toggle source
# File lib/maily_herald/utils.rb, line 22 def self.test_conditions conditions return true if !conditions || conditions.empty? drop = Class.new(Liquid::Drop) do def has_key?(name); true; end def invoke_drop(name); true; end alias :[] :invoke_drop end.new evaluator = Utils::MarkupEvaluator.new(drop) evaluator.evaluate_conditions(conditions) true rescue return false end
test_start_at(markup)
click to toggle source
# File lib/maily_herald/utils.rb, line 38 def self.test_start_at markup return true if !markup || markup.empty? drop = Class.new(Liquid::Drop) do def has_key?(name); true; end def invoke_drop(name) t = Time.now t.define_singleton_method(:[]) do |v| Time.now end t.define_singleton_method(:has_key?) do |v| true end t end alias :[] :invoke_drop end.new evaluator = Utils::MarkupEvaluator.new(drop) val = evaluator.evaluate_start_at(markup) return val.is_a?(Time) || val.is_a?(DateTime) rescue return false end
Private Class Methods
create_liquid_condition(markup)
click to toggle source
# File lib/maily_herald/utils.rb, line 102 def self.create_liquid_condition markup expressions = markup.scan(Liquid::If::ExpressionsAndOperators).reverse raise(Liquid::SyntaxError, Liquid::SyntaxHelp) unless expressions.shift =~ Liquid::If::Syntax condition = Liquid::Condition.new($1, $2, $3) while not expressions.empty? operator = (expressions.shift).to_s.strip raise(Liquid::SyntaxError, Liquid::SyntaxHelp) unless expressions.shift.to_s =~ Liquid::If::Syntax new_condition = Liquid::Condition.new($1, $2, $3) new_condition.send(operator.to_sym, condition) condition = new_condition end condition end
Public Instance Methods
evaluate_conditions(conditions)
click to toggle source
# File lib/maily_herald/utils.rb, line 68 def evaluate_conditions conditions return true if !conditions || conditions.empty? condition = MarkupEvaluator.create_liquid_condition conditions template = Liquid::Template.parse(conditions) raise StandardError unless template.errors.empty? liquid_context = Liquid::Context.new([@drop, template.assigns], template.instance_assigns, template.registers, true, {}) @drop.context = liquid_context if @drop.is_a?(Liquid::Drop) val = condition.evaluate liquid_context raise(ArgumentError, "Conditions do not evaluate to boolean (got `#{val}`)") unless [true, false].include?(val) val end
evaluate_start_at(markup)
click to toggle source
# File lib/maily_herald/utils.rb, line 83 def evaluate_start_at markup begin Time.parse(markup) rescue raise(ArgumentError, "Start at is not a proper variable: `#{markup}`") unless VariableSignature =~ markup liquid_context = Liquid::Context.new([@drop], {}, {}, true, {}) liquid_context.add_filters([Filters::Date]) @drop.context = liquid_context if @drop.is_a?(Liquid::Drop) #liquid_context[markup] variable = Liquid::Variable.new markup variable.render(liquid_context) end end
has_key?(name)
click to toggle source
# File lib/maily_herald/utils.rb, line 26 def has_key?(name); true; end
invoke_drop(name)
click to toggle source
# File lib/maily_herald/utils.rb, line 27 def invoke_drop(name); true; end