Sha256: 94704861108625c6bcdf875750371aecf68aa997c58987f9e0ad54743e03e54f

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

require 'inch/language/elixir/provider/reader/object/function_parameter_object'

module Inch
  module Language
    module Elixir
      module Provider
        module Reader
          module Object
            # Proxy class for functions
            class FunctionObject < Base
              def name
                @hash['id']
              end

              def fullname
                @hash['module_id'] + '.' + @hash['id']
              end

              def method?
                true
              end

              def parameters
                names = FunctionSignature.new(name, @hash['signature']).parameter_names
                names.map do |name|
                  FunctionParameterObject.new(self, name)
                end
              end

              private

              class FunctionSignature < Struct.new(:fun_name, :signature)
                def parameter_names
                  base_name = fun_name.split('/').first
                  signature.gsub(/^(#{base_name}\()/, '').gsub(/(\))$/, '')
                    .gsub( /\([^\)]+\)/, '' )
                    .split(',')
                    .map do |param|
                      name = param.split("\\\\").first
                      name && name.strip
                    end.compact
                end
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
inch-0.5.0.rc9 lib/inch/language/elixir/provider/reader/object/function_object.rb