module Line
  module Bot
    module Event
      class Postback
        attr_reader :action, :params

        def initialize(src)
          super
          set_instance_variables
        end

        private

        # dataプロパティからインスタンス変数に設定する。
        #
        # action 'path/to/command'
        # params '{product_id: 1, order_num: 3}'
        def set_instance_variables
          data =
            postback.data
                    .split('&')
                    .map { |s| s.split('=') }
                    .each_with_object({}) { |(key, val), hash| hash[key.to_sym] = val }

          @action = data.delete :action
          @params = data
        end
      end
    end
  end
end