Class: GoonModelGen::Golang::Packages

Inherits:
Array
  • Object
show all
Defined in:
lib/goon_model_gen/golang/packages.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.wrap(obj) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/goon_model_gen/golang/packages.rb', line 13

def wrap(obj)
  case obj
  when Packages then obj
  when Package then Packages.new.add(obj)
  when Array then Packages.new.add(*obj)
  else raise "Unsupported obj for #{self.name}.wrap #{obj.inspect}"
  end
end

Instance Method Details

#add(*packages) ⇒ Object



33
34
35
36
37
38
39
40
41
42
# File 'lib/goon_model_gen/golang/packages.rb', line 33

def add(*packages)
  packages.flatten.each do |i|
    if pkg = find_by_path(i.path)
      pkg.merge!(i)
    else
      self << i
    end
  end
  self
end

#detect_by(name) ⇒ Object



48
49
50
# File 'lib/goon_model_gen/golang/packages.rb', line 48

def detect_by(name)
  detect{|pkg| pkg.name == name}
end

#dupObject



29
30
31
# File 'lib/goon_model_gen/golang/packages.rb', line 29

def dup
  Packages.new.add(*self)
end

#find_by_path(path) ⇒ Object



52
53
54
# File 'lib/goon_model_gen/golang/packages.rb', line 52

def find_by_path(path)
  detect{|pkg| pkg.path == path}
end

#find_or_new(path) ⇒ Object



56
57
58
# File 'lib/goon_model_gen/golang/packages.rb', line 56

def find_or_new(path)
  find_by_path(path) || new_package(path)
end

#lookup(type_name, package_path = nil) ⇒ Object

Parameters:

  • type_name (string)
  • package_path (string) (defaults to: nil)
  • (Type)


75
76
77
# File 'lib/goon_model_gen/golang/packages.rb', line 75

def lookup(type_name, package_path = nil)
  lookup_by(name: type_name, package_path: package_path)
end

#lookup_by(name: nil, package_path: nil, package_base_path: nil) ⇒ Object

Parameters:

  • name (String) (defaults to: nil)
  • package_path (String) (defaults to: nil)
  • package_base_path (String) (defaults to: nil)
  • (Type)


83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/goon_model_gen/golang/packages.rb', line 83

def lookup_by(name: nil, package_path: nil, package_base_path: nil)
  pkg_name, type_name = name.include?('.') ? name.split('.', 2) : [nil, name]
  if package_path.present?
    pkg = find_by_path(package_path) || raise("Package not found #{package_path.inspect} for type #{name.inspect}")
    return pkg.lookup(type_name)
  end

  pkgs =
    package_base_path.blank? ? self :
      self.class.wrap(select{|pkg| pkg.path ? pkg.path.include?(package_base_path) : false})
  if pkg_name.present?
    pkgs = pkgs.select_by(pkg_name)
    raise("Package not found #{pkg_name.inspect} for type #{name.inspect}") if pkgs.empty?
    return self.class.wrap(pkgs).lookup(type_name)
  end

  each do |pkg|
    t = pkg.lookup(type_name)
    return t if t
  end
  return nil
end

#name_to_type_mapObject



23
24
25
26
27
# File 'lib/goon_model_gen/golang/packages.rb', line 23

def name_to_type_map
  each_with_object({}) do |pkg, d|
    d.update(pkg.name_to_type_map)
  end
end

#new_package(path) ⇒ Object



44
45
46
# File 'lib/goon_model_gen/golang/packages.rb', line 44

def new_package(path)
  Package.new(path).tap{|pkg| add(pkg)}
end

#resolve_type_names(extra_packages = []) ⇒ Object



64
65
66
67
68
69
70
# File 'lib/goon_model_gen/golang/packages.rb', line 64

def resolve_type_names(extra_packages = [])
  candidates = dup.add(*extra_packages)
  map(&:types).flatten.each do |t|
    t.resolve(candidates)
  end
  return self
end

#select_by(name) ⇒ Object



60
61
62
# File 'lib/goon_model_gen/golang/packages.rb', line 60

def select_by(name)
  select{|pkg| pkg.name == name}
end

#type_by(name: nil, package_path: nil, package_base_path: nil) ⇒ Object



113
114
115
116
117
118
# File 'lib/goon_model_gen/golang/packages.rb', line 113

def type_by(name: nil, package_path: nil, package_base_path: nil)
  return nil if name.blank?
  Modifier.parse(name) do |type_name|
    lookup_by(name: type_name, package_path: package_path, package_base_path: package_base_path)
  end
end

#type_for(expression, package_path = nil) ⇒ Object



106
107
108
109
110
111
# File 'lib/goon_model_gen/golang/packages.rb', line 106

def type_for(expression, package_path = nil)
  return nil if expression.blank?
  Modifier.parse(expression) do |name|
    lookup(name, package_path)
  end
end