jsus 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +9 -0
- data/Manifest +8 -0
- data/Rakefile +2 -2
- data/bin/jsus +42 -8
- data/jsus.gemspec +6 -3
- data/lib/jsus.rb +1 -6
- data/lib/jsus/container.rb +25 -4
- data/lib/jsus/package.rb +21 -11
- data/lib/jsus/pool.rb +60 -7
- data/lib/jsus/source_file.rb +5 -5
- data/spec/data/ChainDependencies/app/javascripts/Class/Source/Class.js +13 -0
- data/spec/data/ChainDependencies/app/javascripts/Class/package.yml +8 -0
- data/spec/data/ChainDependencies/app/javascripts/Hash/Source/Hash.js +16 -0
- data/spec/data/ChainDependencies/app/javascripts/Hash/package.yml +8 -0
- data/spec/data/ChainDependencies/app/javascripts/Mash/Source/Mash.js +16 -0
- data/spec/data/ChainDependencies/app/javascripts/Mash/package.yml +8 -0
- data/spec/data/ExternalDependencies/app/javascripts/Orwik/Source/Test.js +17 -0
- data/spec/data/ExternalDependencies/app/javascripts/Orwik/package.yml +9 -0
- data/spec/lib/jsus/package_spec.rb +43 -3
- data/spec/lib/jsus/pool_spec.rb +62 -4
- data/spec/lib/jsus/source_file_spec.rb +19 -9
- metadata +25 -5
data/CHANGELOG
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
= Jsus Changelog
|
2
2
|
|
3
|
+
== Version 0.1.3
|
4
|
+
* Updated Pool class with dependency resolvers
|
5
|
+
* Added Package#include_external_dependencies!
|
6
|
+
* Included external dependencies won't show in its Package#dependencies
|
7
|
+
* Same for external provides
|
8
|
+
|
9
|
+
* Revamped command-line interface for jsus utility
|
10
|
+
* Added dependencies compilation
|
11
|
+
|
3
12
|
== Version 0.1.2
|
4
13
|
* Removed Bundler class which seemed like totally unneccessary
|
5
14
|
* jsus command-line utility now works in single-project mode
|
data/Manifest
CHANGED
@@ -19,6 +19,14 @@ spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.Color.js
|
|
19
19
|
spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.js
|
20
20
|
spec/data/Basic/app/javascripts/Orwik/Source/Widget/Widget.js
|
21
21
|
spec/data/Basic/app/javascripts/Orwik/package.yml
|
22
|
+
spec/data/ChainDependencies/app/javascripts/Class/Source/Class.js
|
23
|
+
spec/data/ChainDependencies/app/javascripts/Class/package.yml
|
24
|
+
spec/data/ChainDependencies/app/javascripts/Hash/Source/Hash.js
|
25
|
+
spec/data/ChainDependencies/app/javascripts/Hash/package.yml
|
26
|
+
spec/data/ChainDependencies/app/javascripts/Mash/Source/Mash.js
|
27
|
+
spec/data/ChainDependencies/app/javascripts/Mash/package.yml
|
28
|
+
spec/data/ExternalDependencies/app/javascripts/Orwik/Source/Test.js
|
29
|
+
spec/data/ExternalDependencies/app/javascripts/Orwik/package.yml
|
22
30
|
spec/data/OutsideDependencies/README
|
23
31
|
spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.Extras.js
|
24
32
|
spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.js
|
data/Rakefile
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
3
|
require 'echoe'
|
4
|
-
Echoe.new('jsus', '0.1.
|
4
|
+
Echoe.new('jsus', '0.1.3') do |g|
|
5
5
|
g.description = "Packager/compiler for js-files that resolves dependencies and can compile everything into one file, providing all the neccessary meta-info."
|
6
6
|
g.url = "http://github.com/markiz/jsus"
|
7
7
|
g.author = "Markiz, idea by Inviz (http://github.com/Inviz)"
|
8
8
|
g.email = "markizko@gmail.com"
|
9
9
|
g.ignore_pattern = ["nbproject/**/*", 'spec/*/public/**/*']
|
10
|
-
g.runtime_dependencies = ["activesupport", "json_pure", "rgl"]
|
10
|
+
g.runtime_dependencies = ["activesupport", "json_pure", "rgl", "optiflag"]
|
11
11
|
g.development_dependencies = ["rake"]
|
12
12
|
g.use_sudo = false
|
13
13
|
end
|
data/bin/jsus
CHANGED
@@ -1,13 +1,47 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'rubygems'
|
3
3
|
require 'jsus'
|
4
|
+
require 'optiflag'
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
module JsusCL
|
7
|
+
extend OptiFlagSet
|
8
|
+
|
9
|
+
flag "input_directory" do
|
10
|
+
alternate_forms "i"
|
11
|
+
description "Path to directory containing your package to compile."
|
12
|
+
end
|
13
|
+
|
14
|
+
flag "output_directory" do
|
15
|
+
alternate_forms "o"
|
16
|
+
description "Path to directory to output the compiled package."
|
17
|
+
end
|
18
|
+
|
19
|
+
optional_flag "dependencies" do
|
20
|
+
alternate_forms "d"
|
21
|
+
description "Path to directory containing packages this package relies on. " <<
|
22
|
+
"If set, all the packages will be compiled into a single file"
|
23
|
+
end
|
24
|
+
|
25
|
+
optional_flag "scripts_info" do
|
26
|
+
default "yes"
|
27
|
+
description "Generates scripts.json file with general info about your package"
|
28
|
+
value_in_set ["yes", "no"]
|
29
|
+
end
|
30
|
+
|
31
|
+
optional_flag "tree_info" do
|
32
|
+
default "yes"
|
33
|
+
description "Generates scripts.json file with tree structure of your package"
|
34
|
+
value_in_set ["yes", "no"]
|
35
|
+
end
|
36
|
+
|
37
|
+
and_process!
|
38
|
+
end
|
39
|
+
|
40
|
+
pool = if JsusCL.flags.dependencies?
|
41
|
+
Jsus::Pool.new(JsusCL.flags.dependencies)
|
13
42
|
end
|
43
|
+
package = Jsus::Package.new(JsusCL.flags.input_directory, :pool => pool)
|
44
|
+
package.include_dependencies! if JsusCL.flags.dependencies?
|
45
|
+
package.compile(JsusCL.flags.output_directory)
|
46
|
+
package.generate_scripts_info(JsusCL.flags.output_directory) if JsusCL.flags.scripts_info == "yes"
|
47
|
+
package.generate_tree(JsusCL.flags.output_directory) if JsusCL.flags.scripts_info == "yes"
|
data/jsus.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{jsus}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.3"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Markiz, idea by Inviz (http://github.com/Inviz)"]
|
9
|
-
s.date = %q{2010-06-
|
9
|
+
s.date = %q{2010-06-06}
|
10
10
|
s.default_executable = %q{jsus}
|
11
11
|
s.description = %q{Packager/compiler for js-files that resolves dependencies and can compile everything into one file, providing all the neccessary meta-info.}
|
12
12
|
s.email = %q{markizko@gmail.com}
|
13
13
|
s.executables = ["jsus"]
|
14
14
|
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "TODO", "bin/jsus", "lib/jsus.rb", "lib/jsus/container.rb", "lib/jsus/package.rb", "lib/jsus/packager.rb", "lib/jsus/pool.rb", "lib/jsus/source_file.rb", "lib/jsus/topsortable.rb"]
|
15
|
-
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "TODO", "bin/jsus", "jsus.gemspec", "lib/jsus.rb", "lib/jsus/container.rb", "lib/jsus/package.rb", "lib/jsus/packager.rb", "lib/jsus/pool.rb", "lib/jsus/source_file.rb", "lib/jsus/topsortable.rb", "spec/data/Basic/README", "spec/data/Basic/app/javascripts/Orwik/Source/Library/Color.js", "spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.Color.js", "spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.js", "spec/data/Basic/app/javascripts/Orwik/Source/Widget/Widget.js", "spec/data/Basic/app/javascripts/Orwik/package.yml", "spec/data/OutsideDependencies/README", "spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.Extras.js", "spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.js", "spec/data/OutsideDependencies/app/javascripts/Core/Source/Native/Hash.js", "spec/data/OutsideDependencies/app/javascripts/Core/package.yml", "spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Library/Color.js", "spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Input/Input.Color.js", "spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Input/Input.js", "spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Widget.js", "spec/data/OutsideDependencies/app/javascripts/Orwik/package.yml", "spec/data/bad_test_source_one.js", "spec/data/bad_test_source_two.js", "spec/data/test_source_one.js", "spec/lib/jsus/container_spec.rb", "spec/lib/jsus/package_spec.rb", "spec/lib/jsus/packager_spec.rb", "spec/lib/jsus/pool_spec.rb", "spec/lib/jsus/source_file_spec.rb", "spec/lib/jsus/topsortable_spec.rb", "spec/shared/class_stubs.rb", "spec/spec.opts", "spec/spec_helper.rb"]
|
15
|
+
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "TODO", "bin/jsus", "jsus.gemspec", "lib/jsus.rb", "lib/jsus/container.rb", "lib/jsus/package.rb", "lib/jsus/packager.rb", "lib/jsus/pool.rb", "lib/jsus/source_file.rb", "lib/jsus/topsortable.rb", "spec/data/Basic/README", "spec/data/Basic/app/javascripts/Orwik/Source/Library/Color.js", "spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.Color.js", "spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.js", "spec/data/Basic/app/javascripts/Orwik/Source/Widget/Widget.js", "spec/data/Basic/app/javascripts/Orwik/package.yml", "spec/data/ChainDependencies/app/javascripts/Class/Source/Class.js", "spec/data/ChainDependencies/app/javascripts/Class/package.yml", "spec/data/ChainDependencies/app/javascripts/Hash/Source/Hash.js", "spec/data/ChainDependencies/app/javascripts/Hash/package.yml", "spec/data/ChainDependencies/app/javascripts/Mash/Source/Mash.js", "spec/data/ChainDependencies/app/javascripts/Mash/package.yml", "spec/data/ExternalDependencies/app/javascripts/Orwik/Source/Test.js", "spec/data/ExternalDependencies/app/javascripts/Orwik/package.yml", "spec/data/OutsideDependencies/README", "spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.Extras.js", "spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.js", "spec/data/OutsideDependencies/app/javascripts/Core/Source/Native/Hash.js", "spec/data/OutsideDependencies/app/javascripts/Core/package.yml", "spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Library/Color.js", "spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Input/Input.Color.js", "spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Input/Input.js", "spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Widget.js", "spec/data/OutsideDependencies/app/javascripts/Orwik/package.yml", "spec/data/bad_test_source_one.js", "spec/data/bad_test_source_two.js", "spec/data/test_source_one.js", "spec/lib/jsus/container_spec.rb", "spec/lib/jsus/package_spec.rb", "spec/lib/jsus/packager_spec.rb", "spec/lib/jsus/pool_spec.rb", "spec/lib/jsus/source_file_spec.rb", "spec/lib/jsus/topsortable_spec.rb", "spec/shared/class_stubs.rb", "spec/spec.opts", "spec/spec_helper.rb"]
|
16
16
|
s.homepage = %q{http://github.com/markiz/jsus}
|
17
17
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Jsus", "--main", "README"]
|
18
18
|
s.require_paths = ["lib"]
|
@@ -28,17 +28,20 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
29
29
|
s.add_runtime_dependency(%q<json_pure>, [">= 0"])
|
30
30
|
s.add_runtime_dependency(%q<rgl>, [">= 0"])
|
31
|
+
s.add_runtime_dependency(%q<optiflag>, [">= 0"])
|
31
32
|
s.add_development_dependency(%q<rake>, [">= 0"])
|
32
33
|
else
|
33
34
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
34
35
|
s.add_dependency(%q<json_pure>, [">= 0"])
|
35
36
|
s.add_dependency(%q<rgl>, [">= 0"])
|
37
|
+
s.add_dependency(%q<optiflag>, [">= 0"])
|
36
38
|
s.add_dependency(%q<rake>, [">= 0"])
|
37
39
|
end
|
38
40
|
else
|
39
41
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
40
42
|
s.add_dependency(%q<json_pure>, [">= 0"])
|
41
43
|
s.add_dependency(%q<rgl>, [">= 0"])
|
44
|
+
s.add_dependency(%q<optiflag>, [">= 0"])
|
42
45
|
s.add_dependency(%q<rake>, [">= 0"])
|
43
46
|
end
|
44
47
|
end
|
data/lib/jsus.rb
CHANGED
@@ -11,13 +11,8 @@ require 'jsus/topsortable'
|
|
11
11
|
require 'jsus/source_file'
|
12
12
|
require 'jsus/container'
|
13
13
|
require 'jsus/packager'
|
14
|
-
require 'jsus/pool'
|
15
14
|
require 'jsus/package'
|
15
|
+
require 'jsus/pool'
|
16
16
|
|
17
17
|
module Jsus
|
18
|
-
# Shortcut for Bundler.new
|
19
|
-
def self.new(*args, &block)
|
20
|
-
Bundler.new(*args, &block)
|
21
|
-
end
|
22
|
-
|
23
18
|
end
|
data/lib/jsus/container.rb
CHANGED
@@ -8,18 +8,33 @@ module Jsus
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
+
|
12
|
+
# PRO TIP: #<< sorts upon every invokation
|
13
|
+
# #push doesn't
|
11
14
|
def <<(source)
|
15
|
+
push(source)
|
16
|
+
sort!
|
17
|
+
end
|
18
|
+
|
19
|
+
def push(source)
|
12
20
|
if source
|
13
21
|
if source.kind_of?(Array) || source.kind_of?(Container)
|
14
|
-
source.each {|s| self
|
22
|
+
source.each {|s| self.push(s) }
|
15
23
|
else
|
16
|
-
sources
|
17
|
-
sort!
|
24
|
+
sources.push(source)
|
18
25
|
end
|
19
26
|
end
|
20
27
|
self
|
21
28
|
end
|
22
29
|
|
30
|
+
def flatten
|
31
|
+
map {|item| item.respond_to?(:flatten) ? item.flatten : item }.flatten
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_a
|
35
|
+
sources
|
36
|
+
end
|
37
|
+
|
23
38
|
def sources
|
24
39
|
@sources ||= []
|
25
40
|
end
|
@@ -30,6 +45,7 @@ module Jsus
|
|
30
45
|
|
31
46
|
def sort!
|
32
47
|
self.sources = topsort(:sources)
|
48
|
+
self
|
33
49
|
end
|
34
50
|
|
35
51
|
def inspect
|
@@ -37,6 +53,11 @@ module Jsus
|
|
37
53
|
end
|
38
54
|
|
39
55
|
# delegate undefined methods to #sources
|
40
|
-
|
56
|
+
DELEGATED_METHODS = [
|
57
|
+
"==", "map", "map!", "each", "inject", "reject",
|
58
|
+
"detect", "size", "length", "[]", "empty?",
|
59
|
+
"index", "include?"
|
60
|
+
]
|
61
|
+
(DELEGATED_METHODS).each {|m| delegate m, :to => :sources }
|
41
62
|
end
|
42
63
|
end
|
data/lib/jsus/package.rb
CHANGED
@@ -5,15 +5,18 @@ module Jsus
|
|
5
5
|
attr_accessor :pool
|
6
6
|
# Constructors
|
7
7
|
def initialize(directory, options = {})
|
8
|
-
self.relative_directory = directory
|
8
|
+
self.relative_directory = directory
|
9
9
|
self.directory = File.expand_path(directory)
|
10
10
|
self.header = YAML.load_file(File.join(directory, 'package.yml'))
|
11
|
-
self.pool = options[:pool]
|
12
11
|
Dir.chdir(directory) do
|
13
12
|
files.each do |source|
|
14
13
|
source_files << SourceFile.from_file(source, :package => self)
|
15
14
|
end
|
16
15
|
end
|
16
|
+
if options[:pool]
|
17
|
+
self.pool = options[:pool]
|
18
|
+
self.pool << self
|
19
|
+
end
|
17
20
|
end
|
18
21
|
|
19
22
|
|
@@ -35,11 +38,8 @@ module Jsus
|
|
35
38
|
end
|
36
39
|
|
37
40
|
def provides
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
def provides!
|
42
|
-
source_files.map {|source| source.provides }.flatten
|
41
|
+
source_files.map {|source| source.provides(:short => true) }.flatten +
|
42
|
+
external_dependencies.map {|d| d.provides }.flatten
|
43
43
|
end
|
44
44
|
|
45
45
|
def files
|
@@ -49,11 +49,15 @@ module Jsus
|
|
49
49
|
alias_method :sources, :files
|
50
50
|
|
51
51
|
def dependencies
|
52
|
-
|
52
|
+
source_files.map {|source| source.dependencies(:short => true) }.flatten.compact.uniq - provides
|
53
|
+
end
|
54
|
+
|
55
|
+
def external_dependencies
|
56
|
+
@external_dependencies ||= Container.new
|
53
57
|
end
|
54
58
|
|
55
|
-
def
|
56
|
-
|
59
|
+
def external_dependencies=(new_value)
|
60
|
+
@external_dependencies = new_value
|
57
61
|
end
|
58
62
|
|
59
63
|
def description
|
@@ -61,7 +65,7 @@ module Jsus
|
|
61
65
|
end
|
62
66
|
|
63
67
|
def compile(directory = ".")
|
64
|
-
Packager.new(*source_files).pack(File.join(directory, filename))
|
68
|
+
Packager.new(*(source_files.to_a + external_dependencies.to_a)).pack(File.join(directory, filename))
|
65
69
|
end
|
66
70
|
|
67
71
|
def generate_tree(directory = ".", filename = "tree.json")
|
@@ -88,6 +92,12 @@ module Jsus
|
|
88
92
|
self.to_hash
|
89
93
|
end
|
90
94
|
|
95
|
+
def include_dependencies!
|
96
|
+
source_files.each do |source|
|
97
|
+
self.external_dependencies << pool.lookup_dependencies(source)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
91
101
|
|
92
102
|
def required_files
|
93
103
|
source_files.map {|s| s.filename }
|
data/lib/jsus/pool.rb
CHANGED
@@ -1,22 +1,75 @@
|
|
1
1
|
module Jsus
|
2
2
|
class Pool
|
3
|
+
|
4
|
+
def initialize(dir = nil)
|
5
|
+
if dir
|
6
|
+
Dir[File.join(dir, '**', 'package.yml')].each do |package_path|
|
7
|
+
Package.new(Pathname.new(package_path).parent.to_s, :pool => self)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def packages
|
13
|
+
@packages ||= []
|
14
|
+
@packages.uniq!
|
15
|
+
@packages
|
16
|
+
end
|
17
|
+
|
3
18
|
def sources
|
4
19
|
@sources ||= Container.new
|
5
20
|
end
|
6
21
|
|
7
|
-
def lookup(
|
8
|
-
|
22
|
+
def lookup(source_or_key)
|
23
|
+
case source_or_key
|
24
|
+
when String
|
25
|
+
provides_map[source_or_key]
|
26
|
+
when Jsus::SourceFile
|
27
|
+
source_or_key
|
28
|
+
else
|
29
|
+
raise "Illegal lookup query. Expected String or SourceFile, given #{source_or_key.class.name}."
|
30
|
+
end
|
9
31
|
end
|
10
32
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
33
|
+
def lookup_direct_dependencies(source_or_source_key)
|
34
|
+
source = lookup(source_or_source_key)
|
35
|
+
result = source.dependencies(:short => true).select {|d| d =~ %r(/)}.map {|d| lookup(d)}
|
36
|
+
Container.new(*result)
|
37
|
+
end
|
38
|
+
|
39
|
+
def lookup_dependencies(source_or_source_key)
|
40
|
+
source = lookup(source_or_source_key)
|
41
|
+
result = Container.new
|
42
|
+
dependencies = lookup_direct_dependencies(source).to_a
|
43
|
+
while !dependencies.empty?
|
44
|
+
dependencies.each { |d| result.push(d) }
|
45
|
+
dependencies = dependencies.map {|d| lookup_direct_dependencies(d).to_a }.flatten.compact.uniq
|
46
|
+
end
|
47
|
+
result.sort!
|
48
|
+
end
|
49
|
+
|
50
|
+
def <<(source_or_sources_or_package)
|
51
|
+
case
|
52
|
+
when source_or_sources_or_package.kind_of?(SourceFile)
|
53
|
+
source = source_or_sources_or_package
|
54
|
+
sources << source
|
55
|
+
source.provides.each {|p| provides_map[p] = source }
|
56
|
+
when source_or_sources_or_package.kind_of?(Package)
|
57
|
+
package = source_or_sources_or_package
|
58
|
+
packages << package
|
59
|
+
package.source_files.each {|s| self << s}
|
60
|
+
when source_or_sources_or_package.kind_of?(Array) || source_or_sources_or_package.kind_of?(Container)
|
61
|
+
sources = source_or_sources_or_package
|
62
|
+
sources.each {|s| self << s}
|
16
63
|
end
|
17
64
|
self
|
18
65
|
end
|
19
66
|
|
20
67
|
(Array.instance_methods - self.instance_methods).each {|m| delegate m, :to => :sources }
|
68
|
+
|
69
|
+
protected
|
70
|
+
|
71
|
+
def provides_map
|
72
|
+
@provides_map ||= {}
|
73
|
+
end
|
21
74
|
end
|
22
75
|
end
|
data/lib/jsus/source_file.rb
CHANGED
@@ -38,8 +38,8 @@ module Jsus
|
|
38
38
|
def dependencies(options = {})
|
39
39
|
header["requires"] = [header["requires"] || []].flatten
|
40
40
|
header["requires"].map! {|r| r.gsub(/^\//, "") }
|
41
|
-
if options[:
|
42
|
-
header["requires"].map {|r| "#{package.name}/#{r}"}
|
41
|
+
if !options[:short] && package
|
42
|
+
header["requires"].map {|r| r.index("/") ? r : "#{package.name}/#{r}"}
|
43
43
|
else
|
44
44
|
header["requires"]
|
45
45
|
end
|
@@ -48,7 +48,7 @@ module Jsus
|
|
48
48
|
|
49
49
|
def provides(options = {})
|
50
50
|
header["provides"] = [header["provides"] || []].flatten
|
51
|
-
if options[:
|
51
|
+
if !options[:short] && package
|
52
52
|
header["provides"].map {|p| "#{package.name}/#{p}"}
|
53
53
|
else
|
54
54
|
header["provides"]
|
@@ -62,8 +62,8 @@ module Jsus
|
|
62
62
|
def to_hash
|
63
63
|
{
|
64
64
|
"desc" => description,
|
65
|
-
"requires" => dependencies,
|
66
|
-
"provides" => provides
|
65
|
+
"requires" => dependencies(:short => true),
|
66
|
+
"provides" => provides(:short => true)
|
67
67
|
}
|
68
68
|
end
|
69
69
|
|
@@ -0,0 +1,9 @@
|
|
1
|
+
name: orwik
|
2
|
+
filename: orwik.js
|
3
|
+
web: http://orwik.com
|
4
|
+
description: Orwik widgets and essensial things
|
5
|
+
license: MIT-Style License, http://mootools.net/license
|
6
|
+
copyright: 2008-2010 Yaroslaff Fedin http://orwik.com/people/inviz
|
7
|
+
authors: Orwik team, http://developers.orwik.com
|
8
|
+
sources:
|
9
|
+
- "Source/Test.js"
|
@@ -16,9 +16,11 @@ describe Jsus::Package do
|
|
16
16
|
subject.filename.should == "orwik.js"
|
17
17
|
end
|
18
18
|
|
19
|
-
it "should pass pool in options" do
|
20
|
-
pool =
|
21
|
-
Jsus::Package.new(input_dir, :pool => pool)
|
19
|
+
it "should pass pool in options and register itself in the pool" do
|
20
|
+
pool = Jsus::Pool.new
|
21
|
+
package = Jsus::Package.new(input_dir, :pool => pool)
|
22
|
+
package.pool.should == pool
|
23
|
+
pool.packages.should include(package)
|
22
24
|
end
|
23
25
|
|
24
26
|
it "should set provided modules from source files" do
|
@@ -56,6 +58,29 @@ describe Jsus::Package do
|
|
56
58
|
info["provides"].should have_exactly(4).items
|
57
59
|
info["provides"].should include("Color", "Widget", "Input", "Input.Color")
|
58
60
|
end
|
61
|
+
|
62
|
+
context "when external dependencies are included" do
|
63
|
+
let(:lib_dir) { "spec/data/ChainDependencies/app/javascripts" }
|
64
|
+
let(:pool) { Jsus::Pool.new(lib_dir) }
|
65
|
+
subject { Jsus::Package.new("spec/data/ExternalDependencies/app/javascripts/Orwik", :pool => pool) }
|
66
|
+
|
67
|
+
it "should show included external dependencies as provided" do
|
68
|
+
subject.include_dependencies!
|
69
|
+
subject.generate_scripts_info(output_dir)
|
70
|
+
info = JSON.parse(IO.read("#{output_dir}/scripts.json"))
|
71
|
+
info = info["orwik"]
|
72
|
+
info["provides"].should have_exactly(4).items
|
73
|
+
info["provides"].should include("Test", "Hash/Hash", "Class/Class", 'Mash/Mash')
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should not show included external dependencies as required" do
|
77
|
+
subject.include_dependencies!
|
78
|
+
subject.generate_scripts_info(output_dir)
|
79
|
+
info = JSON.parse(IO.read("#{output_dir}/scripts.json"))
|
80
|
+
info = info["orwik"]
|
81
|
+
info["requires"].should == []
|
82
|
+
end
|
83
|
+
end
|
59
84
|
end
|
60
85
|
|
61
86
|
describe "#generate_tree" do
|
@@ -90,4 +115,19 @@ describe Jsus::Package do
|
|
90
115
|
color_index.should < input_color_index
|
91
116
|
end
|
92
117
|
end
|
118
|
+
|
119
|
+
describe "#include_dependencies!" do
|
120
|
+
let(:lib_dir) { "spec/data/ChainDependencies/app/javascripts" }
|
121
|
+
let(:pool) { Jsus::Pool.new(lib_dir) }
|
122
|
+
subject { Jsus::Package.new("spec/data/ExternalDependencies/app/javascripts/Orwik", :pool => pool) }
|
123
|
+
|
124
|
+
it "should include external dependencies into self" do
|
125
|
+
subject.include_dependencies!
|
126
|
+
subject.should have(3).external_dependencies
|
127
|
+
compiled = subject.compile
|
128
|
+
["Class", "Hash", "Mash"].each do |name|
|
129
|
+
compiled.should include(IO.read("#{lib_dir}/#{name}/Source/#{name}.js"))
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
93
133
|
end
|
data/spec/lib/jsus/pool_spec.rb
CHANGED
@@ -1,19 +1,77 @@
|
|
1
1
|
require 'spec/spec_helper'
|
2
2
|
describe Jsus::Pool do
|
3
|
-
let(:
|
3
|
+
let(:input_dir) { "spec/data/ChainDependencies/app/javascripts" }
|
4
|
+
let(:packages) {
|
5
|
+
[
|
6
|
+
Jsus::Package.new("#{input_dir}/Mash", :pool => subject),
|
7
|
+
Jsus::Package.new("#{input_dir}/Class", :pool => subject),
|
8
|
+
Jsus::Package.new("#{input_dir}/Hash", :pool => subject)
|
9
|
+
]
|
10
|
+
}
|
11
|
+
|
12
|
+
let(:sources) {
|
13
|
+
packages.map {|p| p.source_files[0] }
|
14
|
+
}
|
15
|
+
|
4
16
|
subject { Jsus::Pool.new }
|
5
17
|
|
6
|
-
|
7
|
-
|
18
|
+
context "initialization" do
|
19
|
+
context "without any arguments" do
|
20
|
+
subject { Jsus::Pool.new }
|
21
|
+
it "should be available" do
|
22
|
+
lambda {
|
23
|
+
subject
|
24
|
+
}.should_not raise_error
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "from directory" do
|
29
|
+
subject { Jsus::Pool.new(input_dir)}
|
30
|
+
it "should search for packages recursively and add them to itself" do
|
31
|
+
subject.should have_exactly(3).packages
|
32
|
+
subject.packages.map {|p| p.name }.should include("Mash", "Hash", "Class")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should add all the source files to pool" do
|
36
|
+
subject.should have_exactly(3).sources
|
37
|
+
subject.sources.map {|s| s.provides }.flatten.should include("Mash/Mash", "Hash/Hash", "Class/Class")
|
38
|
+
end
|
39
|
+
end
|
8
40
|
end
|
9
41
|
|
42
|
+
|
10
43
|
describe "#lookup" do
|
44
|
+
before(:each) do
|
45
|
+
packages.each {|package| subject << package.source_files }
|
46
|
+
end
|
47
|
+
|
11
48
|
it "should find a source file providing given full name" do
|
12
|
-
subject.lookup("
|
49
|
+
subject.lookup("Class/Class").should == sources[1]
|
13
50
|
end
|
14
51
|
|
15
52
|
it "should return nil if nothing could be found" do
|
16
53
|
subject.lookup("Core/WTF").should be_nil
|
17
54
|
end
|
18
55
|
end
|
56
|
+
|
57
|
+
describe "#lookup_direct_dependencies" do
|
58
|
+
before(:each) do
|
59
|
+
packages.each {|package| subject << package.source_files }
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should return a container with direct dependencies" do
|
63
|
+
subject.lookup_direct_dependencies("Mash/Mash").should be_a(Jsus::Container)
|
64
|
+
subject.lookup_direct_dependencies("Mash/Mash").should == [sources[2]]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#lookup_dependencies" do
|
69
|
+
before(:each) do
|
70
|
+
packages.each {|package| subject << package.source_files }
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should return a container with files and dependencies" do
|
74
|
+
subject.lookup_dependencies("Mash/Mash").should == [sources[1], sources[2]]
|
75
|
+
end
|
76
|
+
end
|
19
77
|
end
|
@@ -52,32 +52,42 @@ describe Jsus::SourceFile do
|
|
52
52
|
end
|
53
53
|
|
54
54
|
describe "#provides" do
|
55
|
-
it "should return the stuff it provides" do
|
56
|
-
subject.provides.should == ["Chain", "Events", "Options"]
|
55
|
+
it "should return the stuff it provides in full form" do
|
56
|
+
subject.provides.should == ["Core/Chain", "Core/Events", "Core/Options"]
|
57
57
|
end
|
58
58
|
|
59
|
-
it "should
|
60
|
-
subject.provides(:
|
59
|
+
it "should cut package prefix if asked for short-formed provides" do
|
60
|
+
subject.provides(:short => true).should == ["Chain", "Events", "Options"]
|
61
61
|
end
|
62
62
|
|
63
63
|
it "should work well when given single string instead of array" do
|
64
64
|
subject.header["provides"] = "Mash"
|
65
|
-
subject.provides.should == ["Mash"]
|
65
|
+
subject.provides.should == ["Core/Mash"]
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
69
|
describe "#dependencies" do
|
70
70
|
it "should truncate leading slash" do
|
71
|
-
subject.dependencies.should == ["Class"]
|
71
|
+
subject.dependencies.should == ["Core/Class"]
|
72
72
|
end
|
73
73
|
|
74
|
-
it "should
|
75
|
-
subject.dependencies(:
|
74
|
+
it "should cut package prefix if asked for short-formed dependencies" do
|
75
|
+
subject.dependencies(:short => true).should == ["Class"]
|
76
76
|
end
|
77
77
|
|
78
78
|
it "should work well when given single string instead of array" do
|
79
79
|
subject.header["requires"] = "Class"
|
80
|
-
subject.dependencies.should == ["Class"]
|
80
|
+
subject.dependencies.should == ["Core/Class"]
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should not truncate package name in short form for external dependencies" do
|
84
|
+
subject.header["requires"] = "Mash/Mash"
|
85
|
+
subject.dependencies(:short => true).should == ["Mash/Mash"]
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should not prepend package name in full form for external dependencies" do
|
89
|
+
subject.header["requires"] = "Mash/Mash"
|
90
|
+
subject.dependencies.should == ["Mash/Mash"]
|
81
91
|
end
|
82
92
|
end
|
83
93
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 3
|
9
|
+
version: 0.1.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Markiz, idea by Inviz (http://github.com/Inviz)
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-06-
|
17
|
+
date: 2010-06-06 00:00:00 +04:00
|
18
18
|
default_executable: jsus
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
type: :runtime
|
55
55
|
version_requirements: *id003
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
57
|
+
name: optiflag
|
58
58
|
prerelease: false
|
59
59
|
requirement: &id004 !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
@@ -63,8 +63,20 @@ dependencies:
|
|
63
63
|
segments:
|
64
64
|
- 0
|
65
65
|
version: "0"
|
66
|
-
type: :
|
66
|
+
type: :runtime
|
67
67
|
version_requirements: *id004
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: rake
|
70
|
+
prerelease: false
|
71
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
version: "0"
|
78
|
+
type: :development
|
79
|
+
version_requirements: *id005
|
68
80
|
description: Packager/compiler for js-files that resolves dependencies and can compile everything into one file, providing all the neccessary meta-info.
|
69
81
|
email: markizko@gmail.com
|
70
82
|
executables:
|
@@ -106,6 +118,14 @@ files:
|
|
106
118
|
- spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.js
|
107
119
|
- spec/data/Basic/app/javascripts/Orwik/Source/Widget/Widget.js
|
108
120
|
- spec/data/Basic/app/javascripts/Orwik/package.yml
|
121
|
+
- spec/data/ChainDependencies/app/javascripts/Class/Source/Class.js
|
122
|
+
- spec/data/ChainDependencies/app/javascripts/Class/package.yml
|
123
|
+
- spec/data/ChainDependencies/app/javascripts/Hash/Source/Hash.js
|
124
|
+
- spec/data/ChainDependencies/app/javascripts/Hash/package.yml
|
125
|
+
- spec/data/ChainDependencies/app/javascripts/Mash/Source/Mash.js
|
126
|
+
- spec/data/ChainDependencies/app/javascripts/Mash/package.yml
|
127
|
+
- spec/data/ExternalDependencies/app/javascripts/Orwik/Source/Test.js
|
128
|
+
- spec/data/ExternalDependencies/app/javascripts/Orwik/package.yml
|
109
129
|
- spec/data/OutsideDependencies/README
|
110
130
|
- spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.Extras.js
|
111
131
|
- spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.js
|