Sha256: dc64c20fc2d75133bc15ce44dac68a077104bd9f857704a70ec458f2c9c785f9

Contents?: true

Size: 712 Bytes

Versions: 1

Compression:

Stored size: 712 Bytes

Contents

# frozen_string_literal: true

require 'attr_extras'
require 'active_support/core_ext/module'
require 'json'

class RavencoinRpc::Client::Request
  pattr_initialize %i[method! args] do
    @args ||= []
  end

  delegate :call, to: :data

  private

  def data
    -> { valid? ? prepare_data : error }
  end

  def valid?
    methods.include?(method)
  end

  def methods
    @methods ||= docs.keys
  end

  def docs
    @docs ||= JSON.parse(File.open('docs.json').read)
  end

  def error
    raise RavencoinRpc::Exceptions::NotFoundModule, 'method not included into methods list'
  end

  def prepare_data
    {
      jsonrpc: '2.0',
      id: rand(10),
      method: method,
      params: args
    }
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ravencoin_rpc_ruby-0.1.0 lib/ravencoin_rpc/client/request.rb