Class: RbsRails::DependencyBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/rbs_rails/dependency_builder.rb,
sig/rbs_rails/dependency_builder.rbs

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDependencyBuilder

: void



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rbs_rails/dependency_builder.rb', line 6

def initialize #: void
  @deps = []
  @done = Set.new([
    'ActiveRecord',
    'ActiveRecord::Associations',
    'ActiveRecord::Associations::CollectionProxy',
    'ActiveRecord::Base',
    'ActiveRecord::Relation',
    'ActiveStorage',
    'ActiveStorage::Attachment',
    'ActiveStorage::Blob',
    'ActiveStorage::Record',
    'Object'
  ])
end

Instance Attribute Details

#depsArray[String] (readonly)

: Array

Returns:

  • (Array[String])


3
4
5
# File 'lib/rbs_rails/dependency_builder.rb', line 3

def deps
  @deps
end

#doneSet[String] (readonly)

: Set

Returns:

  • (Set[String])


4
5
6
# File 'lib/rbs_rails/dependency_builder.rb', line 4

def done
  @done
end

Instance Method Details

#<<(name) ⇒ Array[String]

Parameters:

  • name (String)

Returns:

  • (Array[String])


23
24
25
# File 'lib/rbs_rails/dependency_builder.rb', line 23

def <<(name) #: Array[String]
  deps << name
end

#buildString?

: String | nil

Returns:

  • (String, nil)


27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/rbs_rails/dependency_builder.rb', line 27

def build #: String | nil
  dep_rbs = +""
  deps.uniq!
  while dep = shift
    next unless done.add?(dep)

    case dep_object = Object.const_get(dep)
    when Class
      superclass = dep_object.superclass or raise
      super_name = Util.module_name(superclass, abs: false)
      deps << super_name
      dep_rbs << "class ::#{dep} < ::#{super_name} end\n"
    when Module
      dep_rbs << "module ::#{dep} end\n"
    else
      raise
    end

    # push namespaces
    namespaces = dep.split('::')
    namespaces.pop
    namespaces.inject('') do |base, name|
      full_name = base.empty? ? name : [base, name].join('::')
      deps << full_name
      full_name
    end
  end

  unless dep_rbs.empty?
    Util.format_rbs(dep_rbs)
  end
end