liquid 5.7.0 → 5.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 72a0f18697a90c81db846fc86027cbec36198105fb458d40989f88b1acd55687
4
- data.tar.gz: ba8f6ecc9612f737f954006109b91759ea7cea41074de2ab38e73221d4e18be2
3
+ metadata.gz: eedf7295997cbab7b8d526eb516c8c34aa4a73c8b943d69ee4363cb1684a9d12
4
+ data.tar.gz: 335b1d05b70f581e05730e6a21f71a22a83283ac6135e4f29dbab962063e9e90
5
5
  SHA512:
6
- metadata.gz: ad608314f023c78123d3cf57a3c9b54229ec7dca712f1b3897218c27880e5f78d7188cdce775d15759960803a31c5e7d1adc81c9282ab784a6f6fa50efeb051e
7
- data.tar.gz: 6988a403789ca9a3a3d3d48e5cba0639f81226b3cd8af477dcce1d8eeb9db3693e90b373ea391f5d458a723ec40d7c0c6d28f7e445d3d0562b219e9cbcfff1ee
6
+ metadata.gz: e62a54477a5e5c1baba527b412d5009e892bf082c085de5416a88073fffc488576d6842615b1f7f7332d2bd02ccb1ff73bb3e2add22ec57be732d74e5178b389
7
+ data.tar.gz: aacf9a3490e2739a7a2ff738fee2d610dd833c5a2a763830c63de2972420687bb4989934d438ee4635d6251b1c0d8ac9eeb4a28a358255b7eeef40b49e30c340
data/History.md CHANGED
@@ -2,9 +2,19 @@
2
2
 
3
3
  ## 5.8.0 (unreleased)
4
4
 
5
+ ## 5.7.2 2025-01-31
6
+
7
+ * Fix array filters to not support nested properties
8
+
9
+ ## 5.7.1 2025-01-24
10
+
11
+ * Fix the `find` and `find_index`filters to return `nil` when filtering empty arrays
12
+ * Fix the `has` filter to return `false` when filtering empty arrays
13
+
5
14
  ## 5.7.0 2025-01-16
6
15
 
7
16
  ### Features
17
+
8
18
  * Add `find`, `find_index`, `has`, and `reject` filters to arrays
9
19
  * Compatibility with Ruby 3.4
10
20
 
@@ -387,7 +387,7 @@ module Liquid
387
387
  end
388
388
  elsif ary.all? { |el| el.respond_to?(:[]) }
389
389
  begin
390
- ary.sort { |a, b| nil_safe_compare(fetch_property(a, property), fetch_property(b, property)) }
390
+ ary.sort { |a, b| nil_safe_compare(a[property], b[property]) }
391
391
  rescue TypeError
392
392
  raise_property_error(property)
393
393
  end
@@ -416,7 +416,7 @@ module Liquid
416
416
  end
417
417
  elsif ary.all? { |el| el.respond_to?(:[]) }
418
418
  begin
419
- ary.sort { |a, b| nil_safe_casecmp(fetch_property(a, property), fetch_property(b, property)) }
419
+ ary.sort { |a, b| nil_safe_casecmp(a[property], b[property]) }
420
420
  rescue TypeError
421
421
  raise_property_error(property)
422
422
  end
@@ -459,7 +459,7 @@ module Liquid
459
459
  # @liquid_syntax array | some: string, string
460
460
  # @liquid_return [boolean]
461
461
  def has(input, property, target_value = nil)
462
- filter_array(input, property, target_value) { |ary, &block| ary.any?(&block) }
462
+ filter_array(input, property, target_value, false) { |ary, &block| ary.any?(&block) }
463
463
  end
464
464
 
465
465
  # @liquid_public_docs
@@ -472,7 +472,7 @@ module Liquid
472
472
  # @liquid_syntax array | find: string, string
473
473
  # @liquid_return [untyped]
474
474
  def find(input, property, target_value = nil)
475
- filter_array(input, property, target_value) { |ary, &block| ary.find(&block) }
475
+ filter_array(input, property, target_value, nil) { |ary, &block| ary.find(&block) }
476
476
  end
477
477
 
478
478
  # @liquid_public_docs
@@ -485,7 +485,7 @@ module Liquid
485
485
  # @liquid_syntax array | find_index: string, string
486
486
  # @liquid_return [number]
487
487
  def find_index(input, property, target_value = nil)
488
- filter_array(input, property, target_value) { |ary, &block| ary.find_index(&block) }
488
+ filter_array(input, property, target_value, nil) { |ary, &block| ary.find_index(&block) }
489
489
  end
490
490
 
491
491
  # @liquid_public_docs
@@ -504,7 +504,7 @@ module Liquid
504
504
  []
505
505
  else
506
506
  ary.uniq do |item|
507
- fetch_property(item, property)
507
+ item[property]
508
508
  rescue TypeError
509
509
  raise_property_error(property)
510
510
  rescue NoMethodError
@@ -540,7 +540,7 @@ module Liquid
540
540
  if property == "to_liquid"
541
541
  e
542
542
  elsif e.respond_to?(:[])
543
- r = fetch_property(e, property)
543
+ r = e[property]
544
544
  r.is_a?(Proc) ? r.call : r
545
545
  end
546
546
  end
@@ -564,7 +564,7 @@ module Liquid
564
564
  []
565
565
  else
566
566
  ary.reject do |item|
567
- fetch_property(item, property).nil?
567
+ item[property].nil?
568
568
  rescue TypeError
569
569
  raise_property_error(property)
570
570
  rescue NoMethodError
@@ -950,7 +950,7 @@ module Liquid
950
950
  if property.nil?
951
951
  item
952
952
  elsif item.respond_to?(:[])
953
- fetch_property(item, property)
953
+ item[property]
954
954
  else
955
955
  0
956
956
  end
@@ -969,16 +969,16 @@ module Liquid
969
969
 
970
970
  attr_reader :context
971
971
 
972
- def filter_array(input, property, target_value, &block)
972
+ def filter_array(input, property, target_value, default_value = [], &block)
973
973
  ary = InputIterator.new(input, context)
974
974
 
975
- return [] if ary.empty?
975
+ return default_value if ary.empty?
976
976
 
977
977
  block.call(ary) do |item|
978
978
  if target_value.nil?
979
- fetch_property(item, property)
979
+ item[property]
980
980
  else
981
- fetch_property(item, property) == target_value
981
+ item[property] == target_value
982
982
  end
983
983
  rescue TypeError
984
984
  raise_property_error(property)
@@ -988,31 +988,6 @@ module Liquid
988
988
  end
989
989
  end
990
990
 
991
- def fetch_property(drop, property_or_keys)
992
- ##
993
- # This keeps backward compatibility by supporting properties containing
994
- # dots. This is valid in Liquid syntax and used in some runtimes, such as
995
- # Shopify with metafields.
996
- #
997
- # Using this approach, properties like 'price.value' can be accessed in
998
- # both of the following examples:
999
- #
1000
- # ```
1001
- # [
1002
- # { 'name' => 'Item 1', 'price.price' => 40000 },
1003
- # { 'name' => 'Item 2', 'price' => { 'value' => 39900 } }
1004
- # ]
1005
- # ```
1006
- value = drop[property_or_keys]
1007
-
1008
- return value if !value.nil? || !property_or_keys.is_a?(String)
1009
-
1010
- keys = property_or_keys.split('.')
1011
- keys.reduce(drop) do |drop, key|
1012
- drop.respond_to?(:[]) ? drop[key] : drop
1013
- end
1014
- end
1015
-
1016
991
  def raise_property_error(property)
1017
992
  raise Liquid::ArgumentError, "cannot select the property '#{property}'"
1018
993
  end
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Liquid
5
- VERSION = "5.7.0"
5
+ VERSION = "5.7.2"
6
6
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: liquid
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.7.0
4
+ version: 5.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Lütke
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-01-17 00:00:00.000000000 Z
10
+ date: 2025-01-31 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: strscan
@@ -158,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
158
  - !ruby/object:Gem::Version
159
159
  version: 1.3.7
160
160
  requirements: []
161
- rubygems_version: 3.6.2
161
+ rubygems_version: 3.6.3
162
162
  specification_version: 4
163
163
  summary: A secure, non-evaling end user template engine with aesthetic markup.
164
164
  test_files: []