Sha256: af9a2798680f373757bc33a66f703adead4eeaebd6f8b15616829a3fbf0ed703
Contents?: true
Size: 1010 Bytes
Versions: 5
Compression:
Stored size: 1010 Bytes
Contents
require "json" require "delegate" module GlassOctopus module Middleware class JsonParser def initialize(app, options={}) @app = app @klass = options.delete(:class) @encoding = options.delete(:encoding) @options = options end def call(ctx) message = parse(ensure_encoding(ctx.message.value)) ctx = ContextWithJsonParsedMessage.new(ctx, message) @app.call(ctx) end private def parse(str) hash = JSON.parse(str, { :create_additions => false }.merge(@options)) @klass ? @klass.new(hash) : hash end def ensure_encoding(value) return value unless @encoding value.encode(@encoding, invalid: :replace, undef: :replace, replace: '') end class ContextWithJsonParsedMessage < SimpleDelegator attr_reader :params def initialize(wrapped_ctx, params) super(wrapped_ctx) @params = params end end end end end
Version data entries
5 entries across 5 versions & 1 rubygems