jsus 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +4 -0
- data/LICENSE +0 -0
- data/Manifest +36 -0
- data/README +6 -0
- data/Rakefile +13 -0
- data/TODO +0 -0
- data/bin/jsus +10 -0
- data/jsus.gemspec +44 -0
- data/lib/jsus.rb +43 -0
- data/lib/jsus/bundler.rb +39 -0
- data/lib/jsus/package.rb +122 -0
- data/lib/jsus/source_file.rb +42 -0
- data/spec/data/Basic/README +10 -0
- data/spec/data/Basic/app/javascripts/Orwik/Source/Library/Color.js +16 -0
- data/spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.Color.js +20 -0
- data/spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.js +19 -0
- data/spec/data/Basic/app/javascripts/Orwik/Source/Widget/Widget.js +16 -0
- data/spec/data/Basic/app/javascripts/Orwik/package.yml +12 -0
- data/spec/data/OutsideDependencies/README +24 -0
- data/spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.Extras.js +16 -0
- data/spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.js +16 -0
- data/spec/data/OutsideDependencies/app/javascripts/Core/Source/Native/Hash.js +13 -0
- data/spec/data/OutsideDependencies/app/javascripts/Core/package.yml +12 -0
- data/spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Library/Color.js +16 -0
- data/spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Input/Input.Color.js +20 -0
- data/spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Input/Input.js +19 -0
- data/spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Widget.js +19 -0
- data/spec/data/OutsideDependencies/app/javascripts/Orwik/package.yml +12 -0
- data/spec/data/bad_test_source_one.js +3 -0
- data/spec/data/bad_test_source_two.js +1 -0
- data/spec/data/test_source_one.js +20 -0
- data/spec/lib/jsus/bundler_spec.rb +46 -0
- data/spec/lib/jsus/package_spec.rb +84 -0
- data/spec/lib/jsus/source_file_spec.rb +33 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +7 -0
- metadata +158 -0
data/CHANGELOG
ADDED
data/LICENSE
ADDED
File without changes
|
data/Manifest
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
CHANGELOG
|
2
|
+
LICENSE
|
3
|
+
Manifest
|
4
|
+
README
|
5
|
+
Rakefile
|
6
|
+
TODO
|
7
|
+
bin/jsus
|
8
|
+
jsus.gemspec
|
9
|
+
lib/jsus.rb
|
10
|
+
lib/jsus/bundler.rb
|
11
|
+
lib/jsus/package.rb
|
12
|
+
lib/jsus/source_file.rb
|
13
|
+
spec/data/Basic/README
|
14
|
+
spec/data/Basic/app/javascripts/Orwik/Source/Library/Color.js
|
15
|
+
spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.Color.js
|
16
|
+
spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.js
|
17
|
+
spec/data/Basic/app/javascripts/Orwik/Source/Widget/Widget.js
|
18
|
+
spec/data/Basic/app/javascripts/Orwik/package.yml
|
19
|
+
spec/data/OutsideDependencies/README
|
20
|
+
spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.Extras.js
|
21
|
+
spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.js
|
22
|
+
spec/data/OutsideDependencies/app/javascripts/Core/Source/Native/Hash.js
|
23
|
+
spec/data/OutsideDependencies/app/javascripts/Core/package.yml
|
24
|
+
spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Library/Color.js
|
25
|
+
spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Input/Input.Color.js
|
26
|
+
spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Input/Input.js
|
27
|
+
spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Widget.js
|
28
|
+
spec/data/OutsideDependencies/app/javascripts/Orwik/package.yml
|
29
|
+
spec/data/bad_test_source_one.js
|
30
|
+
spec/data/bad_test_source_two.js
|
31
|
+
spec/data/test_source_one.js
|
32
|
+
spec/lib/jsus/bundler_spec.rb
|
33
|
+
spec/lib/jsus/package_spec.rb
|
34
|
+
spec/lib/jsus/source_file_spec.rb
|
35
|
+
spec/spec.opts
|
36
|
+
spec/spec_helper.rb
|
data/README
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
Echoe.new('jsus', '0.1.0') do |g|
|
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
|
+
g.url = "http://github.com/markiz/jsus"
|
7
|
+
g.author = "Markiz, idea by Inviz (http://github.com/Inviz)"
|
8
|
+
g.email = "markizko@gmail.com"
|
9
|
+
g.ignore_pattern = ["nbproject/**/*", 'spec/*/public/**/*']
|
10
|
+
g.runtime_dependencies = ["activesupport", "json_pure", "rgl"]
|
11
|
+
g.development_dependencies = ["rake"]
|
12
|
+
g.use_sudo = false
|
13
|
+
end
|
data/TODO
ADDED
File without changes
|
data/bin/jsus
ADDED
data/jsus.gemspec
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{jsus}
|
5
|
+
s.version = "0.1.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Markiz, idea by Inviz (http://github.com/Inviz)"]
|
9
|
+
s.date = %q{2010-06-03}
|
10
|
+
s.default_executable = %q{jsus}
|
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
|
+
s.email = %q{markizko@gmail.com}
|
13
|
+
s.executables = ["jsus"]
|
14
|
+
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "TODO", "bin/jsus", "lib/jsus.rb", "lib/jsus/bundler.rb", "lib/jsus/package.rb", "lib/jsus/source_file.rb"]
|
15
|
+
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "TODO", "bin/jsus", "lib/jsus.rb", "lib/jsus/bundler.rb", "lib/jsus/package.rb", "lib/jsus/source_file.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/bundler_spec.rb", "spec/lib/jsus/package_spec.rb", "spec/lib/jsus/source_file_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "jsus.gemspec"]
|
16
|
+
s.homepage = %q{http://github.com/markiz/jsus}
|
17
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Jsus", "--main", "README"]
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
s.rubyforge_project = %q{jsus}
|
20
|
+
s.rubygems_version = %q{1.3.6}
|
21
|
+
s.summary = %q{Packager/compiler for js-files that resolves dependencies and can compile everything into one file, providing all the neccessary meta-info.}
|
22
|
+
|
23
|
+
if s.respond_to? :specification_version then
|
24
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
|
+
s.specification_version = 3
|
26
|
+
|
27
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
29
|
+
s.add_runtime_dependency(%q<json_pure>, [">= 0"])
|
30
|
+
s.add_runtime_dependency(%q<rgl>, [">= 0"])
|
31
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
32
|
+
else
|
33
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
34
|
+
s.add_dependency(%q<json_pure>, [">= 0"])
|
35
|
+
s.add_dependency(%q<rgl>, [">= 0"])
|
36
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
37
|
+
end
|
38
|
+
else
|
39
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
40
|
+
s.add_dependency(%q<json_pure>, [">= 0"])
|
41
|
+
s.add_dependency(%q<rgl>, [">= 0"])
|
42
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
43
|
+
end
|
44
|
+
end
|
data/lib/jsus.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'pathname'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'json'
|
5
|
+
require 'active_support/ordered_hash'
|
6
|
+
require 'rgl/adjacency'
|
7
|
+
require 'rgl/topsort'
|
8
|
+
|
9
|
+
require 'jsus/source_file'
|
10
|
+
require 'jsus/package'
|
11
|
+
require 'jsus/bundler'
|
12
|
+
|
13
|
+
module Jsus
|
14
|
+
# Shortcut for Bundler.new
|
15
|
+
def self.new(*args, &block)
|
16
|
+
Bundler.new(*args, &block)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Topological sort for packages and source files
|
20
|
+
def self.topsort(items)
|
21
|
+
graph = RGL::DirectedAdjacencyGraph.new
|
22
|
+
provides_hash = {}
|
23
|
+
# init vertices
|
24
|
+
items.each do |item|
|
25
|
+
graph.add_vertex(item)
|
26
|
+
item.provides.each do |provides|
|
27
|
+
provides_hash[provides] = item
|
28
|
+
end
|
29
|
+
end
|
30
|
+
# init edges
|
31
|
+
items.each do |item|
|
32
|
+
item.dependencies.each do |dependency|
|
33
|
+
if required_item = provides_hash[dependency]
|
34
|
+
graph.add_edge(required_item, item)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
result = []
|
39
|
+
graph.topsort_iterator.each { |item| result << item }
|
40
|
+
result
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/lib/jsus/bundler.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Jsus
|
2
|
+
class Bundler
|
3
|
+
def initialize(directory)
|
4
|
+
Dir[File.join(directory, "**", "package.yml")].each do |package_name|
|
5
|
+
path = Pathname.new(package_name)
|
6
|
+
Dir.chdir path.parent.parent.to_s do
|
7
|
+
package = Package.new(path.parent.relative_path_from(path.parent.parent).to_s)
|
8
|
+
self.packages << package
|
9
|
+
end
|
10
|
+
end
|
11
|
+
calculate_requirement_order
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
attr_writer :packages
|
16
|
+
def packages
|
17
|
+
@packages ||= []
|
18
|
+
end
|
19
|
+
|
20
|
+
attr_accessor :required_files
|
21
|
+
|
22
|
+
def compile(directory)
|
23
|
+
FileUtils.mkdir_p(directory)
|
24
|
+
Dir.chdir directory do
|
25
|
+
packages.each do |package|
|
26
|
+
package.compile(package.relative_directory)
|
27
|
+
package.generate_tree(package.relative_directory)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
protected
|
34
|
+
def calculate_requirement_order
|
35
|
+
@packages = Jsus.topsort(packages)
|
36
|
+
@required_files = @packages.map {|p| p.required_files }.flatten
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/jsus/package.rb
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
module Jsus
|
2
|
+
class Package
|
3
|
+
# Constructors
|
4
|
+
def initialize(directory)
|
5
|
+
self.relative_directory = Pathname.new(directory).relative_path_from(Pathname.new(".")).to_s
|
6
|
+
self.directory = File.expand_path(directory)
|
7
|
+
self.header = YAML.load_file(File.join(directory, 'package.yml'))
|
8
|
+
Dir.chdir(directory) do
|
9
|
+
files.each do |source|
|
10
|
+
source_files << SourceFile.from_file(source)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
calculate_requirement_order
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
# Public API
|
18
|
+
attr_accessor :relative_directory
|
19
|
+
attr_accessor :directory
|
20
|
+
|
21
|
+
attr_writer :header
|
22
|
+
def header
|
23
|
+
@header ||= {}
|
24
|
+
end
|
25
|
+
|
26
|
+
def name
|
27
|
+
header["name"] ||= ""
|
28
|
+
end
|
29
|
+
|
30
|
+
def filename
|
31
|
+
header["filename"] ||= name + ".js"
|
32
|
+
end
|
33
|
+
|
34
|
+
def provides
|
35
|
+
@provides ||= provides!
|
36
|
+
end
|
37
|
+
|
38
|
+
def provides!
|
39
|
+
source_files.map {|source| source.provides }.flatten
|
40
|
+
end
|
41
|
+
|
42
|
+
def files
|
43
|
+
header["files"] = header["sources"] || header["files"] || []
|
44
|
+
end
|
45
|
+
|
46
|
+
alias_method :sources, :files
|
47
|
+
|
48
|
+
def dependencies
|
49
|
+
@dependencies ||= dependencies!
|
50
|
+
end
|
51
|
+
|
52
|
+
def dependencies!
|
53
|
+
source_files.map {|source| source.dependencies }.flatten.compact.uniq - provides!
|
54
|
+
end
|
55
|
+
|
56
|
+
def description
|
57
|
+
header["description"] ||= ""
|
58
|
+
end
|
59
|
+
|
60
|
+
attr_accessor :required_files
|
61
|
+
|
62
|
+
def compile(directory = ".")
|
63
|
+
FileUtils.mkdir_p directory
|
64
|
+
Dir.chdir(directory) do
|
65
|
+
File.open(filename, "w") do |resulting_file|
|
66
|
+
required_files.each do |required_file|
|
67
|
+
resulting_file.puts(IO.read(required_file))
|
68
|
+
end
|
69
|
+
end
|
70
|
+
generate_scripts_info(".")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def generate_tree(directory = ".", filename = "tree.json")
|
75
|
+
FileUtils.mkdir_p(directory)
|
76
|
+
result = ActiveSupport::OrderedHash.new
|
77
|
+
source_files.each do |source|
|
78
|
+
components = File.dirname(source.relative_filename).split(File::SEPARATOR)
|
79
|
+
components.delete("Source")
|
80
|
+
components << File.basename(source.filename, ".js")
|
81
|
+
node = result
|
82
|
+
components.each do |component|
|
83
|
+
node[component] ||= ActiveSupport::OrderedHash.new
|
84
|
+
node = node[component]
|
85
|
+
end
|
86
|
+
node["desc"] = source.description
|
87
|
+
node["requires"] = source.dependencies
|
88
|
+
node["provides"] = source.provides
|
89
|
+
end
|
90
|
+
Dir.chdir(directory) do
|
91
|
+
File.open(filename, "w") { |resulting_file| resulting_file << JSON.pretty_generate(result) }
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def generate_scripts_info(directory = ".", filename = "scripts.json")
|
96
|
+
Dir.chdir(directory) do
|
97
|
+
result = {}
|
98
|
+
result[name] = {}
|
99
|
+
result[name]["desc"] = description
|
100
|
+
result[name]["requires"] = dependencies
|
101
|
+
result[name]["provides"] = provides
|
102
|
+
File.open(filename, "w") { |resulting_file| resulting_file << JSON.pretty_generate(result) }
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
protected
|
107
|
+
|
108
|
+
attr_writer :source_files
|
109
|
+
def source_files
|
110
|
+
@source_files ||= []
|
111
|
+
@source_files.compact!
|
112
|
+
@source_files
|
113
|
+
end
|
114
|
+
|
115
|
+
def calculate_requirement_order
|
116
|
+
self.source_files = Jsus.topsort(source_files)
|
117
|
+
self.required_files = source_files.map {|f| f.filename}
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Jsus
|
2
|
+
class SourceFile
|
3
|
+
attr_accessor :header
|
4
|
+
attr_accessor :relative_filename
|
5
|
+
attr_accessor :filename
|
6
|
+
# constructors
|
7
|
+
|
8
|
+
def self.from_file(filename)
|
9
|
+
if File.exists?(filename)
|
10
|
+
source = File.read(filename) # TODO: read only first several lines of file
|
11
|
+
yaml_data = source.match(%r(^/\*\s*(---.*?)\*/)m)
|
12
|
+
if (yaml_data && yaml_data[1] && header = YAML.load(yaml_data[1]))
|
13
|
+
result = new
|
14
|
+
result.header = header
|
15
|
+
result.relative_filename = filename
|
16
|
+
result.filename = File.expand_path(filename)
|
17
|
+
result
|
18
|
+
else
|
19
|
+
# puts "WARNING: file #{filename} has invalid format (should be YAML)"
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
else
|
23
|
+
# puts "WARNING: file #{filename} does not exist"
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Public API
|
29
|
+
def dependencies
|
30
|
+
header["requires"] ||= []
|
31
|
+
end
|
32
|
+
|
33
|
+
def provides
|
34
|
+
header["provides"] ||= []
|
35
|
+
end
|
36
|
+
|
37
|
+
def description
|
38
|
+
header["description"] ||= ""
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
SUMMARY:
|
2
|
+
A basic example of packing up a single package.
|
3
|
+
|
4
|
+
LOGIC:
|
5
|
+
Everything compiles into one file.
|
6
|
+
Two additional files are created: scripts.json (contains information about packed file) and tree.json (full per-file description)
|
7
|
+
|
8
|
+
SYNTAX:
|
9
|
+
bundle Orwik -i app/javascripts/ -o public/javascripts
|
10
|
+
#=> [public/javascripts/Orwik/Source/orwik.js, public/javascripts/Orwik/Source/scripts.js, public/javascripts/Orwik/Source/tree.js]
|
@@ -0,0 +1,20 @@
|
|
1
|
+
/*
|
2
|
+
---
|
3
|
+
|
4
|
+
script: Input.Color.js
|
5
|
+
|
6
|
+
description: Cool colorpicker for everyone to enjoy
|
7
|
+
|
8
|
+
license: MIT-style license
|
9
|
+
|
10
|
+
authors:
|
11
|
+
- Yaroslaff Fedin
|
12
|
+
|
13
|
+
requires:
|
14
|
+
- Input
|
15
|
+
- Color
|
16
|
+
|
17
|
+
provides: [Input.Color]
|
18
|
+
|
19
|
+
...
|
20
|
+
*/
|
@@ -0,0 +1,12 @@
|
|
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/Widget/Widget.js"
|
10
|
+
- "Source/Widget/Input/Input.js"
|
11
|
+
- "Source/Widget/Input/Input.Color.js" #Files are unsorted. Figure out the order please
|
12
|
+
- "Source/Library/Color.js"
|
@@ -0,0 +1,24 @@
|
|
1
|
+
SUMMARY:
|
2
|
+
Example of a package having dependencies in another package.
|
3
|
+
Includes sample results for two ways of handling the situation:
|
4
|
+
|
5
|
+
SEPARATE PACKAGES
|
6
|
+
SYNTAX:
|
7
|
+
bundle Orwik -i app/javascripts/ -o public/javascripts
|
8
|
+
#=> [public/javascripts/Orwik/Source/orwik.js, public/javascripts/Orwik/Source/tree.json, public/javascripts/Orwik/Source/scripts.json]
|
9
|
+
|
10
|
+
bundle Core -i app/javascripts/ -o public/javascripts
|
11
|
+
#=> [public/javascripts/Core/Source/orwik.js, public/javascripts/Core/Source/tree.json, public/javascripts/Core/Source/scripts.json]
|
12
|
+
|
13
|
+
LOGIC:
|
14
|
+
Each of the packages gets compiled in its own directory.
|
15
|
+
Resulting file of orwik package retains all dependencies to Core package.
|
16
|
+
|
17
|
+
ONE-FILE COMPILATION
|
18
|
+
SYNTAX:
|
19
|
+
bundle Orwik -i app/javascripts/ -o public/javascripts --with-dependencies
|
20
|
+
#=> [public/javascripts/Orwik/Compiled/orwik.js, public/javascripts/Orwik/Compiled/tree.json, public/javascripts/Orwik/Compiled/scripts.json]
|
21
|
+
|
22
|
+
LOGIC:
|
23
|
+
All files from Core that Orwik needs are compiled into resulting file.
|
24
|
+
Dependencies are resolved and removed from the tree.
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/*
|
2
|
+
---
|
3
|
+
|
4
|
+
script: Class.Extras.js
|
5
|
+
|
6
|
+
description: Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks.
|
7
|
+
|
8
|
+
license: MIT-style license.
|
9
|
+
|
10
|
+
requires:
|
11
|
+
- /Class
|
12
|
+
|
13
|
+
provides: [Chain, Events, Options]
|
14
|
+
|
15
|
+
...
|
16
|
+
*/
|
@@ -0,0 +1,12 @@
|
|
1
|
+
name: "core"
|
2
|
+
exports: "mootools-core.js"
|
3
|
+
web: "[mootools.net](http://mootools.net)"
|
4
|
+
description: "MooTools, The JavaScript framework"
|
5
|
+
license: "[MIT License](http://mootools.net/license.txt)"
|
6
|
+
copyright: "© [MooTools](http://mootools.net)"
|
7
|
+
authors: "[The MooTools development team](http://mootools.net/developers)"
|
8
|
+
version: "1.2.4"
|
9
|
+
files:
|
10
|
+
- "Source/Source/Class/Class.js"
|
11
|
+
- "Source/Source/Class/Class.Extras.js"
|
12
|
+
- "Source/Source/Native/Hash.js"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
/*
|
2
|
+
---
|
3
|
+
|
4
|
+
script: Input.Color.js
|
5
|
+
|
6
|
+
description: Cool colorpicker for everyone to enjoy
|
7
|
+
|
8
|
+
license: MIT-style license
|
9
|
+
|
10
|
+
authors:
|
11
|
+
- Yaroslaff Fedin
|
12
|
+
|
13
|
+
requires:
|
14
|
+
- Input
|
15
|
+
- Color
|
16
|
+
|
17
|
+
provides: [Input.Color]
|
18
|
+
|
19
|
+
...
|
20
|
+
*/
|
@@ -0,0 +1,12 @@
|
|
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
|
+
files:
|
9
|
+
- "Source/Widget/Widget.js"
|
10
|
+
- "Source/Widget/Input/Input.js"
|
11
|
+
- "Source/Widget/Input/Input.Color.js" #Files are unsorted. Figure out the order please
|
12
|
+
- "Source/Library/Color.js"
|
@@ -0,0 +1 @@
|
|
1
|
+
// Something for nothing, lol
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
|
3
|
+
describe Jsus::Bundler do
|
4
|
+
subject { Jsus::Bundler.new(input_dir) }
|
5
|
+
let(:input_dir) { "spec/data/Basic/app/javascripts" }
|
6
|
+
let(:output_dir) { "spec/data/Basic/public/javascripts" }
|
7
|
+
before(:each) { cleanup }
|
8
|
+
after(:all) { cleanup }
|
9
|
+
context "initialization" do
|
10
|
+
context "from a directory" do
|
11
|
+
subject { Jsus::Bundler.new("spec/data/Basic/") }
|
12
|
+
it "should load packages" do
|
13
|
+
subject.packages.map {|p| p.name}.should == ["orwik"]
|
14
|
+
subject.packages.map {|p| p.relative_directory }.should == ["Orwik"]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#required_files" do
|
20
|
+
it "should return an array with correctly sorted required files" do
|
21
|
+
files = subject.required_files
|
22
|
+
color_index = files.find_index {|f| f =~ /\/Color.js/}
|
23
|
+
input_index = files.find_index {|f| f =~ /\/Input.js/}
|
24
|
+
input_color_index = files.find_index {|f| f =~ /\/Input.Color.js/}
|
25
|
+
color_index.should < input_color_index
|
26
|
+
input_index.should < input_color_index
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#compile" do
|
31
|
+
it "should generate scripts.json file with all the dependencies and provides for each package" do
|
32
|
+
subject.compile(output_dir)
|
33
|
+
File.exists?("#{output_dir}/Orwik/scripts.json").should be_true
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should generate js file for each package" do
|
37
|
+
subject.compile(output_dir)
|
38
|
+
File.exists?("#{output_dir}/Orwik/orwik.js").should be_true
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should generate tree.json file for each package" do
|
42
|
+
subject.compile(output_dir)
|
43
|
+
File.exists?("#{output_dir}/Orwik/tree.json").should be_true
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
describe Jsus::Package do
|
5
|
+
subject { Jsus::Package.new(input_dir) }
|
6
|
+
let(:input_dir) { "spec/data/Basic/app/javascripts/Orwik"}
|
7
|
+
let(:output_dir) { "spec/data/Basic/public/javascripts/Orwik" }
|
8
|
+
before(:each) { cleanup }
|
9
|
+
after(:all) { cleanup }
|
10
|
+
context "initialization" do
|
11
|
+
let(:input_dir) { "spec/data/OutsideDependencies/app/javascripts/Orwik" }
|
12
|
+
let(:output_dir) { "spec/data/OutsideDependencies/public/javascripts/Orwik" }
|
13
|
+
context "from a directory" do
|
14
|
+
it "should load header from package.yml" do
|
15
|
+
subject.name.should == "orwik"
|
16
|
+
subject.filename.should == "orwik.js"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should set provided modules from source files" do
|
20
|
+
subject.provides.should have_exactly(4).items
|
21
|
+
subject.provides.should include("Color", "Input", "Input.Color", "Widget")
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should set up outside dependencies" do
|
25
|
+
subject.dependencies.should == ['core/Class']
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should set directory and relative directory fields" do
|
29
|
+
subject.directory.should == File.expand_path(input_dir)
|
30
|
+
subject.relative_directory.should == input_dir
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should set up required files in correct order" do
|
34
|
+
required_files = subject.required_files
|
35
|
+
input_index = required_files.index {|s| s=~ /\/Input.js$/}
|
36
|
+
color_index = required_files.index {|s| s=~ /\/Color.js$/}
|
37
|
+
input_color_index = required_files.index {|s| s=~ /\/Input.Color.js$/}
|
38
|
+
input_index.should < input_color_index
|
39
|
+
color_index.should < input_color_index
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#compile" do
|
45
|
+
it "should create a merged js package from given files" do
|
46
|
+
subject.compile(output_dir)
|
47
|
+
File.exists?("#{output_dir}/orwik.js").should be_true
|
48
|
+
compiled_content = IO.read("#{output_dir}/orwik.js")
|
49
|
+
required_files = Dir["#{input_dir}/**/*.js"].map {|f| IO.read(f) }
|
50
|
+
required_files.each {|f| compiled_content.should include(f)}
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should create scripts.json file containing all the info about the package" do
|
54
|
+
subject.compile(output_dir)
|
55
|
+
File.exists?("#{output_dir}/scripts.json").should be_true
|
56
|
+
info = JSON.parse(IO.read("#{output_dir}/scripts.json"))
|
57
|
+
info = info["orwik"]
|
58
|
+
info["provides"].should have_exactly(4).items
|
59
|
+
info["provides"].should include("Color", "Widget", "Input", "Input.Color")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "#generate_tree" do
|
64
|
+
it "should create a json file containing tree information and dependencies" do
|
65
|
+
subject.generate_tree(output_dir)
|
66
|
+
File.exists?("#{output_dir}/tree.json").should be_true
|
67
|
+
tree = JSON.parse(IO.read("#{output_dir}/tree.json"))
|
68
|
+
tree["Library"]["Color"]["provides"].should == ["Color"]
|
69
|
+
tree["Widget"]["Widget"]["provides"].should == ["Widget"]
|
70
|
+
tree["Widget"]["Input"]["Input"]["requires"].should == ["Widget"]
|
71
|
+
tree["Widget"]["Input"]["Input"]["provides"].should == ["Input"]
|
72
|
+
tree["Widget"]["Input"]["Input.Color"]["requires"].should have_exactly(2).elements
|
73
|
+
tree["Widget"]["Input"]["Input.Color"]["requires"].should include("Input", "Color")
|
74
|
+
tree["Widget"]["Input"]["Input.Color"]["provides"].should == ["Input.Color"]
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should allow different filenames" do
|
78
|
+
subject.generate_tree(output_dir, "structure.json")
|
79
|
+
File.exists?("#{output_dir}/structure.json").should be_true
|
80
|
+
tree = JSON.parse(IO.read("#{output_dir}/structure.json"))
|
81
|
+
tree["Library"]["Color"]["provides"].should == ["Color"]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
|
3
|
+
describe Jsus::SourceFile do
|
4
|
+
before(:each) { cleanup }
|
5
|
+
after(:all) { cleanup }
|
6
|
+
context "initialization" do
|
7
|
+
context "from file" do
|
8
|
+
subject { Jsus::SourceFile.from_file('spec/data/test_source_one.js') }
|
9
|
+
it "should parse json header" do
|
10
|
+
subject.dependencies.should == []
|
11
|
+
subject.provides.should == ["Color"]
|
12
|
+
subject.description.should == "A library to work with colors"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should set filename field to expanded file name" do
|
16
|
+
subject.filename.should == File.expand_path("spec/data/test_source_one.js")
|
17
|
+
end
|
18
|
+
|
19
|
+
context "when format is invalid" do
|
20
|
+
it "should return nil" do
|
21
|
+
Jsus::SourceFile.from_file('spec/data/bad_test_source_one.js').should == nil
|
22
|
+
Jsus::SourceFile.from_file('spec/data/bad_test_source_two.js').should == nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "when file does not exist" do
|
27
|
+
it "should return nil" do
|
28
|
+
Jsus::SourceFile.from_file('spec/data/non-existant-file.js').should == nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jsus
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Markiz, idea by Inviz (http://github.com/Inviz)
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-06-03 00:00:00 +04:00
|
18
|
+
default_executable: jsus
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: activesupport
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: json_pure
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :runtime
|
43
|
+
version_requirements: *id002
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: rgl
|
46
|
+
prerelease: false
|
47
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
segments:
|
52
|
+
- 0
|
53
|
+
version: "0"
|
54
|
+
type: :runtime
|
55
|
+
version_requirements: *id003
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: rake
|
58
|
+
prerelease: false
|
59
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
66
|
+
type: :development
|
67
|
+
version_requirements: *id004
|
68
|
+
description: Packager/compiler for js-files that resolves dependencies and can compile everything into one file, providing all the neccessary meta-info.
|
69
|
+
email: markizko@gmail.com
|
70
|
+
executables:
|
71
|
+
- jsus
|
72
|
+
extensions: []
|
73
|
+
|
74
|
+
extra_rdoc_files:
|
75
|
+
- CHANGELOG
|
76
|
+
- LICENSE
|
77
|
+
- README
|
78
|
+
- TODO
|
79
|
+
- bin/jsus
|
80
|
+
- lib/jsus.rb
|
81
|
+
- lib/jsus/bundler.rb
|
82
|
+
- lib/jsus/package.rb
|
83
|
+
- lib/jsus/source_file.rb
|
84
|
+
files:
|
85
|
+
- CHANGELOG
|
86
|
+
- LICENSE
|
87
|
+
- Manifest
|
88
|
+
- README
|
89
|
+
- Rakefile
|
90
|
+
- TODO
|
91
|
+
- bin/jsus
|
92
|
+
- lib/jsus.rb
|
93
|
+
- lib/jsus/bundler.rb
|
94
|
+
- lib/jsus/package.rb
|
95
|
+
- lib/jsus/source_file.rb
|
96
|
+
- spec/data/Basic/README
|
97
|
+
- spec/data/Basic/app/javascripts/Orwik/Source/Library/Color.js
|
98
|
+
- spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.Color.js
|
99
|
+
- spec/data/Basic/app/javascripts/Orwik/Source/Widget/Input/Input.js
|
100
|
+
- spec/data/Basic/app/javascripts/Orwik/Source/Widget/Widget.js
|
101
|
+
- spec/data/Basic/app/javascripts/Orwik/package.yml
|
102
|
+
- spec/data/OutsideDependencies/README
|
103
|
+
- spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.Extras.js
|
104
|
+
- spec/data/OutsideDependencies/app/javascripts/Core/Source/Class/Class.js
|
105
|
+
- spec/data/OutsideDependencies/app/javascripts/Core/Source/Native/Hash.js
|
106
|
+
- spec/data/OutsideDependencies/app/javascripts/Core/package.yml
|
107
|
+
- spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Library/Color.js
|
108
|
+
- spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Input/Input.Color.js
|
109
|
+
- spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Input/Input.js
|
110
|
+
- spec/data/OutsideDependencies/app/javascripts/Orwik/Source/Widget/Widget.js
|
111
|
+
- spec/data/OutsideDependencies/app/javascripts/Orwik/package.yml
|
112
|
+
- spec/data/bad_test_source_one.js
|
113
|
+
- spec/data/bad_test_source_two.js
|
114
|
+
- spec/data/test_source_one.js
|
115
|
+
- spec/lib/jsus/bundler_spec.rb
|
116
|
+
- spec/lib/jsus/package_spec.rb
|
117
|
+
- spec/lib/jsus/source_file_spec.rb
|
118
|
+
- spec/spec.opts
|
119
|
+
- spec/spec_helper.rb
|
120
|
+
- jsus.gemspec
|
121
|
+
has_rdoc: true
|
122
|
+
homepage: http://github.com/markiz/jsus
|
123
|
+
licenses: []
|
124
|
+
|
125
|
+
post_install_message:
|
126
|
+
rdoc_options:
|
127
|
+
- --line-numbers
|
128
|
+
- --inline-source
|
129
|
+
- --title
|
130
|
+
- Jsus
|
131
|
+
- --main
|
132
|
+
- README
|
133
|
+
require_paths:
|
134
|
+
- lib
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
segments:
|
140
|
+
- 0
|
141
|
+
version: "0"
|
142
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
segments:
|
147
|
+
- 1
|
148
|
+
- 2
|
149
|
+
version: "1.2"
|
150
|
+
requirements: []
|
151
|
+
|
152
|
+
rubyforge_project: jsus
|
153
|
+
rubygems_version: 1.3.6
|
154
|
+
signing_key:
|
155
|
+
specification_version: 3
|
156
|
+
summary: Packager/compiler for js-files that resolves dependencies and can compile everything into one file, providing all the neccessary meta-info.
|
157
|
+
test_files: []
|
158
|
+
|