sealink/rails_core_extensions

View on GitHub
lib/rails_core_extensions/active_record_liquid_extensions.rb

Summary

Maintainability
A
0 mins
Test Coverage
module RailsCoreExtensions
  module ActiveRecordLiquidExtensions
    extend ActiveSupport::Concern

    module ClassMethods
      def validates_liquid(field)
        field = field.to_sym
        before_validation do |record|
          begin
            Liquid::Template.parse(record.send(field), error_mode: :strict)
          rescue Liquid::SyntaxError => e
            record.errors.add(field, "Liquid Syntax Error: #{e}")
          end
        end
      end

      def liquid_field(field)
        class_eval <<-CODE
          def parsed_#{field}
            Liquid::Template.parse(#{field})
          end

          def render_#{field}(*args)
            parsed_#{field}.render!(*args)
          end
        CODE
      end
    end
  end
end