Class: GoonModelGen::Golang::Packages
- Inherits:
-
Array
- Object
- Array
- GoonModelGen::Golang::Packages
- Defined in:
- lib/goon_model_gen/golang/packages.rb
Class Method Summary collapse
Instance Method Summary collapse
- #add(*packages) ⇒ Object
- #detect_by(name) ⇒ Object
- #dup ⇒ Object
- #find_by_path(path) ⇒ Object
- #find_or_new(path) ⇒ Object
- #lookup(type_name, package_path = nil) ⇒ Object
- #lookup_by(name: nil, package_path: nil, package_base_path: nil) ⇒ Object
- #name_to_type_map ⇒ Object
- #new_package(path) ⇒ Object
- #resolve_type_names(extra_packages = []) ⇒ Object
- #select_by(name) ⇒ Object
- #type_by(name: nil, package_path: nil, package_base_path: nil) ⇒ Object
- #type_for(expression, package_path = nil) ⇒ Object
Class Method Details
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 |
#dup ⇒ Object
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
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
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_map ⇒ Object
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 |