Class: Jsus::Package
- Inherits:
-
Object
- Object
- Jsus::Package
- Defined in:
- lib/jsus/package.rb
Overview
Package is a (self-contained) unit with all the info required to build a javascript package.
Instance Attribute Summary collapse
-
#directory ⇒ Object
directory which this package resides in (full path).
-
#pool ⇒ Object
an instance of Jsus::Pool.
Instance Method Summary collapse
-
#compile(directory = ".") ⇒ String
Compiles source files and linked external source files into a given category.
-
#dependencies ⇒ Array
An array of unresolved dependencies' tags for the package.
-
#dependencies_names ⇒ Array
An array of unresolved dependencies' names.
-
#description ⇒ String
A package description.
-
#extensions ⇒ Jsus::Container
Container with extensions (they aren't compiled or included into #reqired_files list).
-
#external_dependencies ⇒ Array
An array of external dependencies' tags (including resolved ones).
-
#external_dependencies_names ⇒ Array
An array of external dependencies' names (including resolved ones).
-
#filename ⇒ String
A filename for compiled package.
-
#files ⇒ Array
(also: #sources)
A list of sources filenames.
-
#generate_scripts_info(directory = ".", filename = "scripts.json") ⇒ Hash
Generates info about resulting compiled package into a json file.
-
#generate_tree(directory = ".", filename = "tree.json") ⇒ Hash
Generates tree structure for files in package into a json file.
-
#header ⇒ Hash
Parsed package header.
- #header=(new_header) ⇒ Object private
-
#include_dependencies! ⇒ Object
Looks up all the external dependencies in the pool.
-
#include_extensions! ⇒ Object
Executes #include_extensions for all the source files.
-
#initialize(directory, options = {}) ⇒ Package
constructor
Creates a package from given directory.
-
#linked_external_dependencies ⇒ Jsus::Container
Source files with external dependencies in correct order.
- #linked_external_dependencies=(new_value) ⇒ Object private
-
#name ⇒ String
A package name.
-
#provides ⇒ Array
An array of provided tags including those provided by linked external dependencies.
-
#provides_names ⇒ Array
An array of provided tags names including those provided by linked external dependencies.
-
#required_files ⇒ Array
Lists the required files for the package.
-
#source_files ⇒ Jsus::Container
Container with source files.
-
#to_hash ⇒ Object
Hash representation of the package.
Constructor Details
#initialize(directory, options = {}) ⇒ Package
Creates a package from given directory.
file with meta info.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/jsus/package.rb', line 23 def initialize(directory, = {}) self.directory = File.(directory) if File.exists?(File.join(directory, 'package.yml')) self.header = YAML.load_file(File.join(directory, 'package.yml')) elsif File.exists?(File.join(directory, 'package.json')) self.header = JSON.load(File.open(File.join(directory, 'package.json'), 'r:utf-8') {|f| f.read }) else Jsus.logger.fatal "Directory #{directory} does not contain a valid package.yml / package.json file!" raise "Directory #{directory} does not contain a valid package.yml / package.json file!" end Dir.chdir(directory) do files.each do |source| source_file = SourceFile.from_file(source, :package => self) if source_file if source_file.extension? extensions << source_file else source_files << source_file end else Jsus.logger.warn "#{source} is not found for #{name}" end end end if [:pool] self.pool = [:pool] self.pool << self end end |
Instance Attribute Details
#directory ⇒ Object
directory which this package resides in (full path)
8 9 10 |
# File 'lib/jsus/package.rb', line 8 def directory @directory end |
#pool ⇒ Object
an instance of Jsus::Pool
10 11 12 |
# File 'lib/jsus/package.rb', line 10 def pool @pool end |
Instance Method Details
#compile(directory = ".") ⇒ String
Compiles source files and linked external source files into a given category.
137 138 139 140 |
# File 'lib/jsus/package.rb', line 137 def compile(directory = ".") fn = directory ? File.join(directory, filename) : nil Packager.new(*(source_files.to_a + linked_external_dependencies.to_a)).pack(fn) end |
#dependencies ⇒ Array
Returns an array of unresolved dependencies' tags for the package.
102 103 104 105 106 107 |
# File 'lib/jsus/package.rb', line 102 def dependencies result = source_files.map {|source| source.dependencies }.flatten result |= linked_external_dependencies.map {|d| d.dependencies}.flatten result -= provides result end |
#dependencies_names ⇒ Array
Returns an array of unresolved dependencies' names.
111 112 113 |
# File 'lib/jsus/package.rb', line 111 def dependencies_names dependencies.map {|d| d.name(:short => true) } end |
#description ⇒ String
Returns a package description.
70 71 72 |
# File 'lib/jsus/package.rb', line 70 def description header["description"] ||= "" end |
#extensions ⇒ Jsus::Container
Container with extensions (they aren't compiled or included into #reqired_files list)
225 226 227 |
# File 'lib/jsus/package.rb', line 225 def extensions @extensions ||= Container.new end |
#external_dependencies ⇒ Array
Returns an array of external dependencies' tags (including resolved ones).
117 118 119 |
# File 'lib/jsus/package.rb', line 117 def external_dependencies source_files.map {|s| s.external_dependencies }.flatten end |
#external_dependencies_names ⇒ Array
Returns an array of external dependencies' names (including resolved ones).
123 124 125 |
# File 'lib/jsus/package.rb', line 123 def external_dependencies_names external_dependencies.map {|d| d.name } end |
#filename ⇒ String
Returns a filename for compiled package.
76 77 78 |
# File 'lib/jsus/package.rb', line 76 def filename header["filename"] ||= Jsus::Util::Inflection.snake_case(name) + ".js" end |
#files ⇒ Array Also known as: sources
Returns a list of sources filenames.
82 83 84 |
# File 'lib/jsus/package.rb', line 82 def files header["files"] = header["files"] || header["sources"] || [] end |
#generate_scripts_info(directory = ".", filename = "scripts.json") ⇒ Hash
Generates info about resulting compiled package into a json file.
170 171 172 173 174 |
# File 'lib/jsus/package.rb', line 170 def generate_scripts_info(directory = ".", filename = "scripts.json") FileUtils.mkdir_p directory File.open(File.join(directory, filename), "w") { |resulting_file| resulting_file << JSON.pretty_generate(self.to_hash) } self.to_hash end |
#generate_tree(directory = ".", filename = "tree.json") ⇒ Hash
Generates tree structure for files in package into a json file.
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/jsus/package.rb', line 147 def generate_tree(directory = ".", filename = "tree.json") FileUtils.mkdir_p(directory) result = ActiveSupport::OrderedHash.new source_files.each do |source| components = File.dirname(source.relative_filename).split(File::SEPARATOR) # deleting source dir by convention components.delete("Source") node = result components.each do |component| node[component] ||= ActiveSupport::OrderedHash.new node = node[component] end node[File.basename(source.filename, ".js")] = source.to_hash end File.open(File.join(directory, filename), "w") { |resulting_file| resulting_file << JSON.pretty_generate(result) } result end |
#header ⇒ Hash
Returns parsed package header.
58 59 60 |
# File 'lib/jsus/package.rb', line 58 def header @header ||= {} end |
#header=(new_header) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
234 235 236 |
# File 'lib/jsus/package.rb', line 234 def header=(new_header) @header = new_header end |
#include_dependencies! ⇒ Object
Looks up all the external dependencies in the pool.
178 179 180 181 182 183 184 185 |
# File 'lib/jsus/package.rb', line 178 def include_dependencies! source_files.each do |source| if pool deps = pool.lookup_dependencies(source).to_a - @source_files.to_a linked_external_dependencies << deps end end end |
#include_extensions! ⇒ Object
Executes #include_extensions for all the source files.
189 190 191 192 193 |
# File 'lib/jsus/package.rb', line 189 def include_extensions! source_files.each do |source| source.include_extensions! end end |
#linked_external_dependencies ⇒ Jsus::Container
Returns source files with external dependencies in correct order.
129 130 131 |
# File 'lib/jsus/package.rb', line 129 def linked_external_dependencies @linked_external_dependencies ||= Container.new end |
#linked_external_dependencies=(new_value) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
240 241 242 |
# File 'lib/jsus/package.rb', line 240 def linked_external_dependencies=(new_value) @linked_external_dependencies = new_value end |
#name ⇒ String
Returns a package name.
64 65 66 |
# File 'lib/jsus/package.rb', line 64 def name header["name"] ||= "" end |
#provides ⇒ Array
Returns an array of provided tags including those provided by linked external dependencies.
89 90 91 |
# File 'lib/jsus/package.rb', line 89 def provides source_files.map {|s| s.provides }.flatten | linked_external_dependencies.map {|d| d.provides }.flatten end |
#provides_names ⇒ Array
Returns an array of provided tags names including those provided by linked external dependencies.
95 96 97 98 |
# File 'lib/jsus/package.rb', line 95 def provides_names source_files.map {|s| s.provides_names(:short => true) }.flatten | linked_external_dependencies.map {|d| d.provides_names }.flatten end |
#required_files ⇒ Array
Lists the required files for the package.
198 199 200 |
# File 'lib/jsus/package.rb', line 198 def required_files source_files.map {|s| s.required_files }.flatten end |
#source_files ⇒ Jsus::Container
Container with source files
218 219 220 |
# File 'lib/jsus/package.rb', line 218 def source_files @source_files ||= Container.new end |
#to_hash ⇒ Object
Hash representation of the package.
204 205 206 207 208 209 210 211 212 |
# File 'lib/jsus/package.rb', line 204 def to_hash { name => { :desc => description, :provides => provides_names, :requires => dependencies_names } } end |