class GoonModelGen::Golang::Packages

Public Class Methods

wrap(obj) click to toggle source
# 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

Public Instance Methods

add(*packages) click to toggle source
# 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) click to toggle source
# File lib/goon_model_gen/golang/packages.rb, line 48
def detect_by(name)
  detect{|pkg| pkg.name == name}
end
dup() click to toggle source
# File lib/goon_model_gen/golang/packages.rb, line 29
def dup
  Packages.new.add(*self)
end
find_by_path(path) click to toggle source
# 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) click to toggle source
# 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) click to toggle source

@param type_name [string] @param package_path [string] @param [Type]

# 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) click to toggle source

@param name [String] @param package_path [String] @param package_base_path [String] @param [Type]

# 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_map() click to toggle source
# 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) click to toggle source
# 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 = []) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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