Day 30 – Detecting Empty Pick

Many times I need to be able to know if my pick statement returns nothing or something so I can react differently. I finally figured out a good way to do this.

ruleset a60x526 {
  meta {
    name "hash-pick-detect"
    description <<
    author "Mike Grace"
    logging on

  global {
    dataHash = {
      "one": {
        "name": "Mike"
      }, // number
      "two": {
        "random": 8
      }, // number
      "three": {
        "name": "Alex"
      } // number

    }; // dataHash

  } // global

  rule detect_the_pick {
    select when pageview ".*"
    foreach dataHash setting (key, value)
    pre {
      userName = value.pick("$.name", true);
      length = userName.length();
    if (length > 0) then {
      notify("Key: #{key}","Name: #{userName}<br/>Length: #{length}") with sticky = true;
    notfired {
      raise explicit event empty_pick
        with pickedKey = key;

  rule empty_pick_found {
    select when explicit empty_pick
    pre {
      pickedKey = event:param("pickedKey");
      results =<<
        Key: #{pickedKey}<br/>
        doesn't have a name associated with it to pick from
      >>; //' fixing syntax highlighting
      notify("An empty pick was detected",results) with sticky = true;
  • 12-23 hash to pick from
  • 29 iterate through top level hash elements
  • 31 pick name from hash element and ALWAYS return results in an array – second optional parameter of pick tells it to always return an array
  • 32 get length of array returned from pick
  • 34 if the length is greater than 0 then we know it found something to pick from the hash
  • 37 if the action block didn’t fire because data wasn’t found to pick then raise explicit event to process that situation

App run on with bookmarklet

Get the bookmarklet to try it out yourself!

Gratuitous day 30 Grace face

This entry was posted in Kynetx. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s