Skip to content

Commit

Permalink
fix: contains regression (#677)
Browse files Browse the repository at this point in the history
* fix: `contains` regression on string-like objects, #675

* chore: fix build docs on macos
  • Loading branch information
harttle authored Mar 21, 2024
1 parent 01029ab commit 05223c4
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 14 deletions.
15 changes: 3 additions & 12 deletions bin/build-changelog.sh
Original file line number Diff line number Diff line change
@@ -1,17 +1,8 @@
#!/usr/bin/env bash

# Run `sed` in a way that's compatible with both macOS (BSD) and Linux (GNU)
sedi() {
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' "$@"
else
sed -i "$@"
fi
}

cd docs
cp ../CHANGELOG.md source/tutorials/changelog.md
sedi \
sed -i \
-e 's/{%/{% raw %}{%{% endraw %}/g' \
-e 's/{{/{% raw %}{{{% endraw %}/g' \
-e '1 s/"/\"/g' \
Expand All @@ -20,7 +11,7 @@ sedi \
source/tutorials/changelog.md
cp source/tutorials/changelog.md source/zh-cn/tutorials/changelog.md

sedi -e '1i\
sed -i -e '1i\
---\ntitle: Changelog\nauto: true\n---\n' source/tutorials/changelog.md
sedi -e '1i\
sed -i -e '1i\
---\ntitle: 更新日志\nauto: true\n---\n' source/zh-cn/tutorials/changelog.md
4 changes: 2 additions & 2 deletions src/render/operator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { isComparable } from '../drop/comparable'
import { Context } from '../context'
import { toValue } from '../util'
import { isFalsy, isTruthy } from '../render/boolean'
import { isArray, isString } from '../util/underscore'
import { isArray, isFunction } from '../util/underscore'

export type UnaryOperatorHandler = (operand: any, ctx: Context) => boolean;
export type BinaryOperatorHandler = (lhs: any, rhs: any, ctx: Context) => boolean;
Expand Down Expand Up @@ -35,7 +35,7 @@ export const defaultOperators: Operators = {
'contains': (l: any, r: any) => {
l = toValue(l)
if (isArray(l)) return l.some((i) => equal(i, r))
if (isString(l)) return l.indexOf(toValue(r)) > -1
if (isFunction(l?.indexOf)) return l.indexOf(toValue(r)) > -1
return false
},
'not': (v: any, ctx: Context) => isFalsy(toValue(v), ctx),
Expand Down
14 changes: 14 additions & 0 deletions test/e2e/issues.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -485,4 +485,18 @@ describe('Issues', function () {
'{% endif %}', {})
expect(result).toEqual('show')
})
it('#675 10.10.1 Operator: contains regression', () => {
const engine = new Liquid()
class StrictStringForLiquid {
constructor (private value: string) {}
indexOf (other: unknown) {
return this.value.indexOf(String(other))
}
}
const result = engine.parseAndRenderSync('{{ str contains sub }}', {
str: new StrictStringForLiquid('string'),
sub: 'str'
})
expect(result).toEqual('true')
})
})

0 comments on commit 05223c4

Please sign in to comment.