jsus 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|