dasel icon indicating copy to clipboard operation
dasel copied to clipboard

contains/includes

Open vogler opened this issue 1 year ago • 2 comments

It would be nice to have some higher level functions like includes(x) = filter(equal(.,x))

$ echo '[[1,2,3],[1,3]]' | dasel -r json 'all().filter(all().filter(equal(.,2)))'
[
  1,
  2,
  3
]

vogler avatar Aug 28 '23 16:08 vogler

I am looking for the same, however I can't get it to work even with the verbose example in this file:

{
  "plugins": [
    [
      "@semantic-release/git",
      {
        "assets": ["README.md", "here/is/some-other-file.yml"],
      }
    ],
    "@semantic-release/gitlab"
  ]
}

I would expect the following to return README.md

dasel -f .releaserc -r json '.plugins.all().filter(equal(type(),array)).[1].as
sets.all().filter(equal(.,"README.md"))'

But it returns nothing.

The goal is to figure out if in this case README.md is in that list or not.

rhtenhove avatar Jan 12 '24 13:01 rhtenhove

@rhtenhove This is pretty convoluted but does what you need. I do want to include some functionality to simplify this a lot.

orDefault(plugins.all().filter(equal(type(),array)).all().filter(equal(type(),object)).assets?.all().filter(equal(.,README.md)).count(),0).moreThan(.,0)

Essentially filter out any non README.md items, count the items and then check if that's more than 0. I'm wrapping the README.md discovery in a call to orDefault to get around the fact that it may return no rows if no array/object/README items are found.

TomWright avatar Jan 15 '24 14:01 TomWright