summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/liquid-4.0.4/lib/liquid/expression.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/bundle/ruby/3.4.0/gems/liquid-4.0.4/lib/liquid/expression.rb')
-rw-r--r--vendor/bundle/ruby/3.4.0/gems/liquid-4.0.4/lib/liquid/expression.rb49
1 files changed, 49 insertions, 0 deletions
diff --git a/vendor/bundle/ruby/3.4.0/gems/liquid-4.0.4/lib/liquid/expression.rb b/vendor/bundle/ruby/3.4.0/gems/liquid-4.0.4/lib/liquid/expression.rb
new file mode 100644
index 0000000..98be6db
--- /dev/null
+++ b/vendor/bundle/ruby/3.4.0/gems/liquid-4.0.4/lib/liquid/expression.rb
@@ -0,0 +1,49 @@
+module Liquid
+ class Expression
+ class MethodLiteral
+ attr_reader :method_name, :to_s
+
+ def initialize(method_name, to_s)
+ @method_name = method_name
+ @to_s = to_s
+ end
+
+ def to_liquid
+ to_s
+ end
+ end
+
+ LITERALS = {
+ nil => nil, 'nil'.freeze => nil, 'null'.freeze => nil, ''.freeze => nil,
+ 'true'.freeze => true,
+ 'false'.freeze => false,
+ 'blank'.freeze => MethodLiteral.new(:blank?, '').freeze,
+ 'empty'.freeze => MethodLiteral.new(:empty?, '').freeze
+ }.freeze
+
+ SINGLE_QUOTED_STRING = /\A'(.*)'\z/m
+ DOUBLE_QUOTED_STRING = /\A"(.*)"\z/m
+ INTEGERS_REGEX = /\A(-?\d+)\z/
+ FLOATS_REGEX = /\A(-?\d[\d\.]+)\z/
+ RANGES_REGEX = /\A\((\S+)\.\.(\S+)\)\z/
+
+ def self.parse(markup)
+ if LITERALS.key?(markup)
+ LITERALS[markup]
+ else
+ case markup
+ when SINGLE_QUOTED_STRING, DOUBLE_QUOTED_STRING
+ $1
+ when INTEGERS_REGEX
+ $1.to_i
+ when RANGES_REGEX
+ RangeLookup.parse($1, $2)
+ when FLOATS_REGEX
+ $1.to_f
+ else
+ VariableLookup.parse(markup)
+ end
+ end
+ end
+ end
+end