Module: KRPC::Gen

Defined in:
lib/krpc/gen.rb

Defined Under Namespace

Modules: RPCMethodGenerator Classes: ClassBase

Class Method Summary collapse

Class Method Details

.add_rpc_method(cls, service_name, proc, **options) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/krpc/gen.rb', line 30

def add_rpc_method(cls, service_name, proc, **options)
  method_name = proc.member_name.underscore
  method_name += '=' if proc.setter?

  param_names, param_types, param_default, return_type = parse_procedure(proc)
  is_static = proc.type == :class_static_method || proc.type == :plain_procedure
  prepend_self_to_args = proc.class_member? && proc.type != :class_static_method
  args = [cls, method_name, param_default, param_names, param_types, prepend_self_to_args, proc, return_type, service_name]

  define_rpc_method(*args)
  define_static_rpc_method(*args) if is_static
  add_stream_constructing_proc(*args) unless proc.setter?
  Doc.add_docstring_info(is_static, cls, method_name, options[:doc_service_name] || service_name, proc.name, param_names, param_types, param_default, return_type: return_type, xmldoc: proc.documentation)
end

.generate_class(service_name, class_name) ⇒ Object



13
14
15
16
17
18
19
20
21
# File 'lib/krpc/gen.rb', line 13

def generate_class(service_name, class_name)
  mod = service_gen_module(service_name)
  mod.const_get_or_create(class_name) do
    Class.new(ClassBase) do
      @service_name = service_name
      class << self; attr_reader :service_name end
    end
  end
end

.generate_enum(service_name, enum_name, values) ⇒ Object



23
24
25
26
27
28
# File 'lib/krpc/gen.rb', line 23

def generate_enum(service_name, enum_name, values)
  mod = service_gen_module(service_name)
  mod.const_get_or_create(enum_name) do
    values.map{|ev| [ev.name.underscore.to_sym, ev.value]}.to_h
  end
end

.service_gen_module(service_name) ⇒ Object



9
10
11
# File 'lib/krpc/gen.rb', line 9

def service_gen_module(service_name)
  const_get_or_create(service_name, Module.new)
end

.transform_exceptions(method_owner, method_name, prepend_self_to_args, &block) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/krpc/gen.rb', line 45

def transform_exceptions(method_owner, method_name, prepend_self_to_args, &block)
  begin
    block.call
  rescue ArgumentsNumberErrorSig => err
    err = err.with_signature(Doc.docstring_for_method(method_owner, method_name, false))
    if prepend_self_to_args then raise err.with_arguments_count_incremented_by(-1)
    elsif method_owner.is_a?(Class) then raise err.with_arguments_count_incremented_by(1)
    else raise err end
  rescue ArgumentErrorSig => err
    raise err.with_signature(Doc.docstring_for_method(method_owner, method_name, false))
  end
end