module Terjira::Client::JQLBuilder

Constants

SEARCH_KEYS
STRICT_KEYS

Public Instance Methods

build_jql(options = {}) click to toggle source
# File lib/terjira/client/jql_builder.rb, line 7
def build_jql(options = {})
  search = options.select { |k, _v| SEARCH_KEYS.include?(k.to_s) }
  strict = options.select { |k, _v| STRICT_KEYS.include?(k.to_s) }

  query = [strict_matching(strict), search_matching(search)]
          .reject(&:blank?).join(' AND ')

  query
end

Private Instance Methods

search_matching(options = {}) click to toggle source
# File lib/terjira/client/jql_builder.rb, line 41
def search_matching(options = {})
  q_options = options.inject({}) do |memo, (k, v)|
    memo[k.to_s] = v
    memo
  end.slice(*SEARCH_KEYS)

  query = q_options.map do |key, value|
    "#{key}~\"#{value.key_value}\""
  end.reject(&:blank?).join(' AND ')

  query
end
strict_matching(options = {}) click to toggle source
# File lib/terjira/client/jql_builder.rb, line 19
def strict_matching(options = {})
  q_options = options.inject({}) do |memo, (k, v)|
    memo[k.to_s] = v
    memo
  end.slice(*STRICT_KEYS)

  query = q_options.map do |key, value|
    if value.is_a? Array
      values = value.map { |v| "\"#{v.key_value}\"" }.join(',')
      "#{key} IN (#{values})"
    else
      if value.key_value.to_s =~ /^\d+$/
        "#{key}=#{value.key_value}"
      else
        "#{key}=\"#{value.key_value}\""
      end
    end
  end.reject(&:blank?).join(' AND ')

  query
end