class Kintone::Client::Middleware::Record

Public Class Methods

new(app, options = {}) click to toggle source
Calls superclass method
# File lib/kintone/client/middleware/record.rb, line 3
def initialize(app, options = {})
  super(app)
  @options = options
end

Public Instance Methods

call(env) click to toggle source
# File lib/kintone/client/middleware/record.rb, line 8
def call(env)
  match_content_type(env) do
    env[:body] = expand_body(env[:body])
  end

  @app.call env
end

Private Instance Methods

expand_body(body) click to toggle source
# File lib/kintone/client/middleware/record.rb, line 31
def expand_body(body)
  body = JSON.parse(body)

  if body['record']
    body['record'] = expand_record(body['record'])
  elsif body['requests']
    if_has_record(body['requests']) do |request|
      record = request['payload']['record']
      next unless record
      request['payload']['record'] = expand_record(record)
    end
  end

  JSON.dump(body)
end
expand_record(record) click to toggle source
# File lib/kintone/client/middleware/record.rb, line 47
def expand_record(record)
  expanded = {}

  record.each do |key, value|
    case value
    when Array, Hash
      expanded[key] = value
    else
      expanded[key] = {
        'value' => value.to_s
      }
    end
  end

  expanded
end
if_has_record(requests) { |request| ... } click to toggle source
# File lib/kintone/client/middleware/record.rb, line 64
def if_has_record(requests)
  if requests[0]['payload']['record']
    requests.each do |request|
      yield(request)
    end
  end
rescue
  # nothing to do
end
match_content_type(env) { || ... } click to toggle source
# File lib/kintone/client/middleware/record.rb, line 18
def match_content_type(env)
  content_type = env[:request_headers]['Content-Type']

  return unless content_type

  content_type = content_type.split(';').first.strip
  opt_content_type = @options[:content_type] || /.*/

  if env[:body] and opt_content_type =~ content_type
    yield
  end
end