mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-18 02:10:41 -07:00
Upgrade rubocop
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'benchmark/ips'
|
||||
require_relative 'theme_runner'
|
||||
|
||||
@@ -12,7 +14,7 @@ Benchmark.ips do |x|
|
||||
puts "Running benchmark for #{x.time} seconds (with #{x.warmup} seconds warmup)."
|
||||
puts
|
||||
|
||||
x.report("parse:") { profiler.compile }
|
||||
x.report("render:") { profiler.render }
|
||||
x.report("parse & render:") { profiler.run }
|
||||
x.report('parse:') { profiler.compile }
|
||||
x.report('render:') { profiler.render }
|
||||
x.report('parse & render:') { profiler.run }
|
||||
end
|
||||
|
||||
@@ -22,5 +22,5 @@ Liquid::Template.error_mode = ARGV.first.to_sym if ARGV.first
|
||||
|
||||
profiler = ThemeRunner.new
|
||||
|
||||
profile("Parsing") { profiler.compile }
|
||||
profile("Rendering") { profiler.render }
|
||||
profile('Parsing') { profiler.compile }
|
||||
profile('Rendering') { profiler.render }
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'stackprof'
|
||||
require_relative 'theme_runner'
|
||||
|
||||
@@ -5,7 +7,7 @@ Liquid::Template.error_mode = ARGV.first.to_sym if ARGV.first
|
||||
profiler = ThemeRunner.new
|
||||
profiler.run
|
||||
|
||||
[:cpu, :object].each do |profile_type|
|
||||
%i[cpu object].each do |profile_type|
|
||||
puts "Profiling in #{profile_type} mode..."
|
||||
results = StackProf.run(mode: profile_type) do
|
||||
200.times do
|
||||
@@ -13,12 +15,12 @@ profiler.run
|
||||
end
|
||||
end
|
||||
|
||||
if profile_type == :cpu && graph_filename = ENV['GRAPH_FILENAME']
|
||||
if profile_type == :cpu && (graph_filename = ENV['GRAPH_FILENAME'])
|
||||
File.open(graph_filename, 'w') do |f|
|
||||
StackProf::Report.new(results).print_graphviz(nil, f)
|
||||
end
|
||||
end
|
||||
|
||||
StackProf::Report.new(results).print_text(false, 20)
|
||||
File.write(ENV['FILENAME'] + "." + profile_type.to_s, Marshal.dump(results)) if ENV['FILENAME']
|
||||
File.write(ENV['FILENAME'] + '.' + profile_type.to_s, Marshal.dump(results)) if ENV['FILENAME']
|
||||
end
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class CommentForm < Liquid::Block
|
||||
Syntax = /(#{Liquid::VariableSignature}+)/
|
||||
SYNTAX = /(#{Liquid::VARIABLE_SIGNATURE}+)/.freeze
|
||||
|
||||
def initialize(tag_name, markup, options)
|
||||
super
|
||||
|
||||
if markup =~ Syntax
|
||||
@variable_name = $1
|
||||
if markup =~ SYNTAX
|
||||
@variable_name = Regexp.last_match(1)
|
||||
@attributes = {}
|
||||
else
|
||||
raise SyntaxError.new("Syntax Error in 'comment_form' - Valid syntax: comment_form [article]")
|
||||
raise SyntaxError, "Syntax Error in 'comment_form' - Valid syntax: comment_form [article]"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -20,8 +22,8 @@ class CommentForm < Liquid::Block
|
||||
'posted_successfully?' => context.registers[:posted_successfully],
|
||||
'errors' => context['comment.errors'],
|
||||
'author' => context['comment.author'],
|
||||
'email' => context['comment.email'],
|
||||
'body' => context['comment.body']
|
||||
'email' => context['comment.email'],
|
||||
'body' => context['comment.body'],
|
||||
}
|
||||
|
||||
output << wrap_in_form(article, render_all(@nodelist, context, output))
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'yaml'
|
||||
|
||||
module Database
|
||||
@@ -16,8 +18,11 @@ module Database
|
||||
end
|
||||
|
||||
# key the tables by handles, as this is how liquid expects it.
|
||||
db = db.inject({}) do |assigns, (key, values)|
|
||||
assigns[key] = values.inject({}) { |h, v| h[v['handle']] = v; h; }
|
||||
db = db.each_with_object({}) do |(key, values), assigns|
|
||||
assigns[key] = values.each_with_object({}) do |v, h|
|
||||
h[v['handle']] = v
|
||||
h
|
||||
end
|
||||
assigns
|
||||
end
|
||||
|
||||
@@ -29,9 +34,9 @@ module Database
|
||||
db['article'] = db['blog']['articles'].first
|
||||
|
||||
db['cart'] = {
|
||||
'total_price' => db['line_items'].values.inject(0) { |sum, item| sum += item['line_price'] * item['quantity'] },
|
||||
'item_count' => db['line_items'].values.inject(0) { |sum, item| sum += item['quantity'] },
|
||||
'items' => db['line_items'].values
|
||||
'total_price' => db['line_items'].values.inject(0) { |sum, item| sum + item['line_price'] * item['quantity'] },
|
||||
'item_count' => db['line_items'].values.inject(0) { |sum, item| sum + item['quantity'] },
|
||||
'items' => db['line_items'].values,
|
||||
}
|
||||
|
||||
db
|
||||
@@ -40,6 +45,6 @@ module Database
|
||||
end
|
||||
|
||||
if __FILE__ == $PROGRAM_NAME
|
||||
p Database.tables['collections']['frontpage'].keys
|
||||
p(Database.tables['collections']['frontpage'].keys)
|
||||
# p Database.tables['blog']['articles']
|
||||
end
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'json'
|
||||
|
||||
module JsonFilter
|
||||
def json(object)
|
||||
JSON.dump(object.reject { |k, v| k == "collections" })
|
||||
JSON.dump(object.reject { |k, _v| k == 'collections' })
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
$:.unshift __dir__ + '/../../lib'
|
||||
# frozen_string_literal: true
|
||||
|
||||
$LOAD_PATH.unshift(__dir__ + '/../../lib')
|
||||
require_relative '../../lib/liquid'
|
||||
|
||||
require_relative 'comment_form'
|
||||
@@ -9,11 +11,11 @@ require_relative 'shop_filter'
|
||||
require_relative 'tag_filter'
|
||||
require_relative 'weight_filter'
|
||||
|
||||
Liquid::Template.register_tag 'paginate', Paginate
|
||||
Liquid::Template.register_tag 'form', CommentForm
|
||||
Liquid::Template.register_tag('paginate', Paginate)
|
||||
Liquid::Template.register_tag('form', CommentForm)
|
||||
|
||||
Liquid::Template.register_filter JsonFilter
|
||||
Liquid::Template.register_filter MoneyFilter
|
||||
Liquid::Template.register_filter WeightFilter
|
||||
Liquid::Template.register_filter ShopFilter
|
||||
Liquid::Template.register_filter TagFilter
|
||||
Liquid::Template.register_filter(JsonFilter)
|
||||
Liquid::Template.register_filter(MoneyFilter)
|
||||
Liquid::Template.register_filter(WeightFilter)
|
||||
Liquid::Template.register_filter(ShopFilter)
|
||||
Liquid::Template.register_filter(TagFilter)
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module MoneyFilter
|
||||
def money_with_currency(money)
|
||||
return '' if money.nil?
|
||||
sprintf("$ %.2f USD", money / 100.0)
|
||||
|
||||
format('$ %.2f USD', money / 100.0)
|
||||
end
|
||||
|
||||
def money(money)
|
||||
return '' if money.nil?
|
||||
sprintf("$ %.2f", money / 100.0)
|
||||
|
||||
format('$ %.2f', money / 100.0)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -1,23 +1,25 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Paginate < Liquid::Block
|
||||
Syntax = /(#{Liquid::QuotedFragment})\s*(by\s*(\d+))?/
|
||||
SYNTAX = /(#{Liquid::QUOTED_FRAGMENT})\s*(by\s*(\d+))?/.freeze
|
||||
|
||||
def initialize(tag_name, markup, options)
|
||||
super
|
||||
|
||||
if markup =~ Syntax
|
||||
@collection_name = $1
|
||||
@page_size = if $2
|
||||
$3.to_i
|
||||
if markup =~ SYNTAX
|
||||
@collection_name = Regexp.last_match(1)
|
||||
@page_size = if Regexp.last_match(2)
|
||||
Regexp.last_match(3).to_i
|
||||
else
|
||||
20
|
||||
end
|
||||
|
||||
@attributes = { 'window_size' => 3 }
|
||||
markup.scan(Liquid::TagAttributes) do |key, value|
|
||||
markup.scan(Liquid::TAG_ATTRIBUTES) do |key, value|
|
||||
@attributes[key] = value
|
||||
end
|
||||
else
|
||||
raise SyntaxError.new("Syntax Error in tag 'paginate' - Valid syntax: paginate [collection] by number")
|
||||
raise SyntaxError, "Syntax Error in tag 'paginate' - Valid syntax: paginate [collection] by number"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -25,25 +27,25 @@ class Paginate < Liquid::Block
|
||||
@context = context
|
||||
|
||||
context.stack do
|
||||
current_page = context['current_page'].to_i
|
||||
current_page = context['current_page'].to_i
|
||||
|
||||
pagination = {
|
||||
'page_size' => @page_size,
|
||||
'current_page' => 5,
|
||||
'current_offset' => @page_size * 5
|
||||
'page_size' => @page_size,
|
||||
'current_page' => 5,
|
||||
'current_offset' => @page_size * 5,
|
||||
}
|
||||
|
||||
context['paginate'] = pagination
|
||||
|
||||
collection_size = context[@collection_name].size
|
||||
collection_size = context[@collection_name].size
|
||||
|
||||
raise ArgumentError.new("Cannot paginate array '#{@collection_name}'. Not found.") if collection_size.nil?
|
||||
raise ArgumentError, "Cannot paginate array '#{@collection_name}'. Not found." if collection_size.nil?
|
||||
|
||||
page_count = (collection_size.to_f / @page_size.to_f).to_f.ceil + 1
|
||||
|
||||
pagination['items'] = collection_size
|
||||
pagination['pages'] = page_count - 1
|
||||
pagination['previous'] = link('« Previous', current_page - 1) unless 1 >= current_page
|
||||
pagination['previous'] = link('« Previous', current_page - 1) unless current_page <= 1
|
||||
pagination['next'] = link('Next »', current_page + 1) unless page_count <= current_page + 1
|
||||
pagination['parts'] = []
|
||||
|
||||
@@ -59,6 +61,7 @@ class Paginate < Liquid::Block
|
||||
pagination['parts'] << link(page, page)
|
||||
elsif page <= current_page - @attributes['window_size'] || page >= current_page + @attributes['window_size']
|
||||
next if hellip_break
|
||||
|
||||
pagination['parts'] << no_link('…')
|
||||
hellip_break = true
|
||||
next
|
||||
@@ -85,6 +88,6 @@ class Paginate < Liquid::Block
|
||||
end
|
||||
|
||||
def current_url
|
||||
"/collections/frontpage"
|
||||
'/collections/frontpage'
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module ShopFilter
|
||||
def asset_url(input)
|
||||
"/files/1/[shop_id]/[shop_id]/assets/#{input}"
|
||||
@@ -15,15 +17,15 @@ module ShopFilter
|
||||
%(<script src="#{url}" type="text/javascript"></script>)
|
||||
end
|
||||
|
||||
def stylesheet_tag(url, media = "all")
|
||||
def stylesheet_tag(url, media = 'all')
|
||||
%(<link href="#{url}" rel="stylesheet" type="text/css" media="#{media}" />)
|
||||
end
|
||||
|
||||
def link_to(link, url, title = "")
|
||||
def link_to(link, url, title = '')
|
||||
%(<a href="#{url}" title="#{title}">#{link}</a>)
|
||||
end
|
||||
|
||||
def img_tag(url, alt = "")
|
||||
def img_tag(url, alt = '')
|
||||
%(<img src="#{url}" alt="#{alt}" />)
|
||||
end
|
||||
|
||||
@@ -52,15 +54,13 @@ module ShopFilter
|
||||
end
|
||||
|
||||
def product_img_url(url, style = 'small')
|
||||
unless url =~ /\Aproducts\/([\w\-\_]+)\.(\w{2,4})/
|
||||
raise ArgumentError, 'filter "size" can only be called on product images'
|
||||
end
|
||||
raise ArgumentError, 'filter "size" can only be called on product images' unless url =~ %r{\Aproducts/([\w\-\_]+)\.(\w{2,4})}
|
||||
|
||||
case style
|
||||
when 'original'
|
||||
return '/files/shops/random_number/' + url
|
||||
when 'grande', 'large', 'medium', 'compact', 'small', 'thumb', 'icon'
|
||||
"/files/shops/random_number/products/#{$1}_#{style}.#{$2}"
|
||||
"/files/shops/random_number/products/#{Regexp.last_match(1)}_#{style}.#{Regexp.last_match(2)}"
|
||||
else
|
||||
raise ArgumentError, 'valid parameters for filter "size" are: original, grande, large, medium, compact, small, thumb and icon '
|
||||
end
|
||||
@@ -70,16 +70,14 @@ module ShopFilter
|
||||
html = []
|
||||
html << %(<span class="prev">#{link_to(paginate['previous']['title'], paginate['previous']['url'])}</span>) if paginate['previous']
|
||||
|
||||
for part in paginate['parts']
|
||||
|
||||
if part['is_link']
|
||||
html << %(<span class="page">#{link_to(part['title'], part['url'])}</span>)
|
||||
paginate['parts'].each do |part|
|
||||
html << if part['is_link']
|
||||
%(<span class="page">#{link_to(part['title'], part['url'])}</span>)
|
||||
elsif part['title'].to_i == paginate['current_page'].to_i
|
||||
html << %(<span class="page current">#{part['title']}</span>)
|
||||
%(<span class="page current">#{part['title']}</span>)
|
||||
else
|
||||
html << %(<span class="deco">#{part['title']}</span>)
|
||||
%(<span class="deco">#{part['title']}</span>)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
html << %(<span class="next">#{link_to(paginate['next']['title'], paginate['next']['url'])}</span>) if paginate['next']
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module TagFilter
|
||||
def link_to_tag(label, tag)
|
||||
"<a title=\"Show tag #{tag}\" href=\"/collections/#{@context['handle']}/#{tag}\">#{label}</a>"
|
||||
@@ -13,11 +15,11 @@ module TagFilter
|
||||
|
||||
def link_to_add_tag(label, tag)
|
||||
tags = (@context['current_tags'] + [tag]).uniq
|
||||
"<a title=\"Show tag #{tag}\" href=\"/collections/#{@context['handle']}/#{tags.join("+")}\">#{label}</a>"
|
||||
"<a title=\"Show tag #{tag}\" href=\"/collections/#{@context['handle']}/#{tags.join('+')}\">#{label}</a>"
|
||||
end
|
||||
|
||||
def link_to_remove_tag(label, tag)
|
||||
tags = (@context['current_tags'] - [tag]).uniq
|
||||
"<a title=\"Show tag #{tag}\" href=\"/collections/#{@context['handle']}/#{tags.join("+")}\">#{label}</a>"
|
||||
"<a title=\"Show tag #{tag}\" href=\"/collections/#{@context['handle']}/#{tags.join('+')}\">#{label}</a>"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module WeightFilter
|
||||
def weight(grams)
|
||||
sprintf("%.2f", grams / 1000)
|
||||
format('%.2f', grams / 1000)
|
||||
end
|
||||
|
||||
def weight_with_unit(grams)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# This profiler run simulates Shopify.
|
||||
# We are looking in the tests directory for liquid files and render them within the designated layout file.
|
||||
# We will also export a substantial database to liquid which the templates can render values of.
|
||||
@@ -31,7 +33,7 @@ class ThemeRunner
|
||||
{
|
||||
liquid: File.read(test),
|
||||
layout: (File.file?(theme_path) ? File.read(theme_path) : nil),
|
||||
template_name: test
|
||||
template_name: test,
|
||||
}
|
||||
end.compact
|
||||
|
||||
|
||||
Reference in New Issue
Block a user