Class: JavaHead::Package
- Inherits:
-
Object
- Object
- JavaHead::Package
- Defined in:
- lib/java_head.rb
Overview
The class to represent Java packages. Packages are immutable and duplicate package names are not allowed. To this end, the ::new method is private and packages are accessed using the ::get method which checks the class’s internal cache prior to creating a new object
Constant Summary collapse
- FORMAT =
The required format for all package names
/^([a-z][a-z0-9]*\.)*[a-z_][a-z0-9_]*$/.freeze
- @@stored =
Hash.new
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
getter methods for name, superpackage, path.
-
#path ⇒ Object
readonly
getter methods for name, superpackage, path.
-
#superpackage ⇒ Object
readonly
getter methods for name, superpackage, path.
Class Method Summary collapse
-
.get(name) ⇒ JavaHead::Package
Get the package that corresponds to name.
Instance Method Summary collapse
-
#class(name = nil) ⇒ JavaHead::Class
return a class within the current package.
-
#classes ⇒ Array<JavaHead::Class>
get all classes in the current package.
-
#compile ⇒ JavaHead::Package
compile all classes in the package.
-
#compiled? ⇒ Boolean
Check if all the classes in this package are compiled.
-
#fullname ⇒ String
(also: #to_s)
recursively compute fullname using superpackage fullname.
-
#initialize(name) ⇒ Package
constructor
Construct a package This method is private.
-
#inspect ⇒ String
print useful fully-qualified name and path of class.
-
#member(name) ⇒ JavaHead::Package, JavaHead::Class
(also: #>)
returns #class(name) or #subpackage(name) depending on the format of name.
-
#remove_class ⇒ JavaHead::Package
call #remove_class on all class files of the package.
-
#subpackage(name) ⇒ JavaHead::Package
return a subpackage of the current package.
Constructor Details
#initialize(name) ⇒ Package
Construct a package This method is private
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/java_head.rb', line 22 def initialize(name) raise PackageException, "Package #{name} already exists" if @@stored[name.intern] # Test name raise PackageException, "Invalid package name #{name}" unless name.match FORMAT names = name.split('.') # An array of the package names, we will be using this a lot CLASSPATH.each do |base| absolute = base.join(*names) @path = absolute.realpath if absolute.exist? and absolute.directory? end raise PackageException, "Could not find directory for package #{name}" unless @path # Set superpackage @name = names.pop.freeze if names.empty? @superpackage = nil else @superpackage = self.class.get(names.join('.')) end end |
Instance Attribute Details
#name ⇒ Object (readonly)
getter methods for name, superpackage, path
48 49 50 |
# File 'lib/java_head.rb', line 48 def name @name end |
#path ⇒ Object (readonly)
getter methods for name, superpackage, path
48 49 50 |
# File 'lib/java_head.rb', line 48 def path @path end |
#superpackage ⇒ Object (readonly)
getter methods for name, superpackage, path
48 49 50 |
# File 'lib/java_head.rb', line 48 def superpackage @superpackage end |
Class Method Details
.get(name) ⇒ JavaHead::Package
Get the package that corresponds to name
154 155 156 157 158 159 160 |
# File 'lib/java_head.rb', line 154 def get(name) sym = name.intern return @@stored[sym] if @@stored[sym] package = new(name) @@stored[sym] = package package end |
Instance Method Details
#class(name = nil) ⇒ JavaHead::Class
return a class within the current package
80 81 82 83 |
# File 'lib/java_head.rb', line 80 def class(name=nil) return super() if name.eql? nil Class.new("#{fullname}.#{name}") end |
#classes ⇒ Array<JavaHead::Class>
get all classes in the current package
88 89 90 91 92 93 94 |
# File 'lib/java_head.rb', line 88 def classes Dir.chdir(@path) do Dir.glob('*.java').map! do |filename| self.class( filename.match(/^([A-Z][A-Za-z0-9]*)\.java$/)[1] ) end end end |
#compile ⇒ JavaHead::Package
compile all classes in the package
99 100 101 102 |
# File 'lib/java_head.rb', line 99 def compile classes.each { |c| c.compile } self end |
#compiled? ⇒ Boolean
Check if all the classes in this package are compiled
107 108 109 110 111 112 |
# File 'lib/java_head.rb', line 107 def compiled? classes.each do |jclass| return false unless jclass.compiled? end true end |
#fullname ⇒ String Also known as: to_s
recursively compute fullname using superpackage fullname
53 54 55 56 |
# File 'lib/java_head.rb', line 53 def fullname return @name unless @superpackage "#{@superpackage.fullname}.#{@name}" end |
#inspect ⇒ String
print useful fully-qualified name and path of class
64 65 66 |
# File 'lib/java_head.rb', line 64 def inspect "[Java Package, name: #{fullname}, path: #{path}]" end |
#member(name) ⇒ JavaHead::Package, JavaHead::Class Also known as: >
returns #class(name) or #subpackage(name) depending on the format of name
128 129 130 131 132 133 134 135 |
# File 'lib/java_head.rb', line 128 def member(name) if name.match Class::FORMAT self.class(name) else subpackage(name) end end |
#remove_class ⇒ JavaHead::Package
call #remove_class on all class files of the package
117 118 119 120 |
# File 'lib/java_head.rb', line 117 def remove_class classes.each { |c| c.remove_class } self end |
#subpackage(name) ⇒ JavaHead::Package
return a subpackage of the current package
72 73 74 |
# File 'lib/java_head.rb', line 72 def subpackage(name) self.class.get("#{fullname}.#{name}") end |