# Ruby syntax

**URL:** <https://discuss.elastic.co/t/ruby-syntax/171899>\
**Category:** Logstash\
**Created:** [March 12, 2019, 9:22am UTC](https://discuss.elastic.co/t/ruby-syntax/171899 "2019-03-12T09:22:38Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![fedwe](https://avatars.discourse-cdn.com/v4/letter/f/a88e4f/32.png) [@fedwe](https://discuss.elastic.co/u/fedwe)\
**Post date:** [March 12, 2019, 9:22am UTC](https://discuss.elastic.co/t/ruby-syntax/171899/1 "2019-03-12T09:22:39Z")

</div>

How do i write the else if in Ruby. I tried elsif but it didnt work

---

<div class="post-metadata">

**Author:** ![guyboertje](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/guyboertje/32/31592_2.png) [@guyboertje](https://discuss.elastic.co/u/guyboertje)\
**Post date:** [March 12, 2019, 10:45am UTC](https://discuss.elastic.co/t/ruby-syntax/171899/2 "2019-03-12T10:45:22Z")

</div>

It is `elsif`.  
Check the LS logs for Ruby Filter exception messages. Perhaps you don't have a syntax error at all - some other error?

```auto
input {
  generator {
    message => '{"an_object":{"name":"foo","value":"bar"},"a_number":42,"a_string":"some text","an_array":["foo","bar","baz"],"a_boolean":false}'
    count => 1
  }
}

filter {
  json {
    source => "message"
  }
  if "_jsonparsefailure" not in [tags] {
    ruby {
      code => '
        event.to_hash.each do |k,v|
          next if k == "@timestamp"
          if v.is_a?(Hash) || v.is_a?(Array)
            event.set(k, v.inspect)
          elsif !v.is_a?(String)
            event.set(k, v.to_s)
          end
        end
      '
    }
  }
}

output {
  stdout {
    codec => rubydebug
  }
}

```

Gives:

```auto
{
      "@version" => "1",
      "an_array" => "[\"foo\", \"bar\", \"baz\"]",
     "an_object" => "{\"value\"=>\"bar\", \"name\"=>\"foo\"}",
       "message" => "{\"an_object\":{\"name\":\"foo\",\"value\":\"bar\"},\"a_number\":42,\"a_string\":\"some text\",\"an_array\":[\"foo\",\"bar\",\"baz\"],\"a_boolean\":false}",
      "sequence" => "0",
    "@timestamp" => 2019-03-12T10:41:52.924Z,
          "host" => "Elastics-MacBook-Pro.local",
      "a_string" => "some text",
     "a_boolean" => "false",
      "a_number" => "42"
}

```

---

<div class="post-metadata">

**Author:** ![fedwe](https://avatars.discourse-cdn.com/v4/letter/f/a88e4f/32.png) [@fedwe](https://discuss.elastic.co/u/fedwe)\
**Post date:** [March 12, 2019, 12:42pm UTC](https://discuss.elastic.co/t/ruby-syntax/171899/3 "2019-03-12T12:42:25Z")

</div>

oh so the elsif doesn't need an independent end  
i was using :  
if expression  
code  
end  
elsif expression  
code  
end  
else  
end

---

<div class="post-metadata">

**Author:** ![guyboertje](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/guyboertje/32/31592_2.png) [@guyboertje](https://discuss.elastic.co/u/guyboertje)\
**Post date:** [March 12, 2019, 12:45pm UTC](https://discuss.elastic.co/t/ruby-syntax/171899/4 "2019-03-12T12:45:14Z")

</div>

Exactly.  
it is

```auto
if <condition>
  <code>
elsif <condition>
  <code>
elsif <condition>
 <code>
else
  <code>
end

```

with as many `elsif <condition>` as needed.

---

<div class="post-metadata">

**Author:** ![fedwe](https://avatars.discourse-cdn.com/v4/letter/f/a88e4f/32.png) [@fedwe](https://discuss.elastic.co/u/fedwe)\
**Post date:** [March 12, 2019, 12:48pm UTC](https://discuss.elastic.co/t/ruby-syntax/171899/5 "2019-03-12T12:48:34Z")

</div>

thank you so much!

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [April 9, 2019, 12:48pm UTC](https://discuss.elastic.co/t/ruby-syntax/171899/6 "2019-04-09T12:48:34Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
