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