From 6aa8a26631b3de71b37b56c068187977821dc23f Mon Sep 17 00:00:00 2001 From: Anthony Khedaywi <> Date: Fri, 27 Mar 2020 18:33:09 -0700 Subject: [PATCH 1/2] Update slice function to allow string params for indices --- lib/liquid/filters.ex | 4 +++- test/liquid/filter_test.exs | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/liquid/filters.ex b/lib/liquid/filters.ex index 7e3c353b..e82ebdb5 100644 --- a/lib/liquid/filters.ex +++ b/lib/liquid/filters.ex @@ -365,7 +365,9 @@ defmodule Liquid.Filters do end def slice(<>, from, to) do - string |> String.slice(from, to) + {from_int, _from_len} = from |> get_int_and_counter + {to_int, _to_len} = to |> get_int_and_counter + string |> String.slice(from_int, to_int) end def slice(list, 0) when is_list(list), do: list diff --git a/test/liquid/filter_test.exs b/test/liquid/filter_test.exs index 4e7f4476..2686d33c 100644 --- a/test/liquid/filter_test.exs +++ b/test/liquid/filter_test.exs @@ -58,6 +58,9 @@ defmodule Liquid.FilterTest do test :slice do assert "oob" == Functions.slice("foobar", 1, 3) + assert "oob" == Functions.slice("foobar", "1", "3") + assert "oob" == Functions.slice("foobar", "1", 3) + assert "oob" == Functions.slice("foobar", 1, "3") assert "oobar" == Functions.slice("foobar", 1, 1000) assert "" == Functions.slice("foobar", 1, 0) assert "o" == Functions.slice("foobar", 1, 1) From 79229b357779c07d30b3c73deee3a109ccfa831b Mon Sep 17 00:00:00 2001 From: Anthony Khedaywi <> Date: Sat, 28 Mar 2020 17:09:29 -0700 Subject: [PATCH 2/2] Add ability for date filter to convert from unix time --- lib/liquid/filters.ex | 13 +++++++++++-- test/liquid/filter_test.exs | 5 +++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/liquid/filters.ex b/lib/liquid/filters.ex index e82ebdb5..34195018 100644 --- a/lib/liquid/filters.ex +++ b/lib/liquid/filters.ex @@ -434,6 +434,10 @@ defmodule Liquid.Filters do input |> date end + def date(input, format) when is_integer(input) do + input |> Timex.from_unix() |> date(format) + end + def date("now", format), do: Timex.now() |> date(format) def date("today", format), do: Timex.now() |> date(format) @@ -443,8 +447,13 @@ defmodule Liquid.Filters do input_date |> date(format) else {:error, :invalid_format} -> - with {:ok, input_date} <- Timex.parse(input, "%a %b %d %T %Y", :strftime), - do: input_date |> date(format) + with {:ok, input_date} <- Timex.parse(input, "%a %b %d %T %Y", :strftime) do + input_date |> date(format) + else + _ -> + with {integer, _rem} <- Integer.parse(input), + do: integer |> Timex.from_unix() |> date(format) + end end end diff --git a/test/liquid/filter_test.exs b/test/liquid/filter_test.exs index 2686d33c..14184258 100644 --- a/test/liquid/filter_test.exs +++ b/test/liquid/filter_test.exs @@ -247,6 +247,11 @@ defmodule Liquid.FilterTest do assert "June" == Functions.date(Timex.parse!("2006-06-05 10:00:00", "%F %T", :strftime), "%B") assert "July" == Functions.date(~N[2006-07-05 10:00:00], "%B") + assert "July" == Functions.date(1152093600, "%B") + assert "July" == Functions.date("1152093600", "%B") + assert "2006-07-05 10:00:00" == Functions.date(1152093600, "") + assert "2006-07-05 10:00:00" == Functions.date("1152093600", "") + assert "May" == Functions.date("2006-05-05 10:00:00", "%B") assert "June" == Functions.date("2006-06-05 10:00:00", "%B") assert "July" == Functions.date("2006-07-05 10:00:00", "%B")