jsus 0.2.4 → 0.2.5
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/Gemfile +2 -0
- data/Gemfile.lock +22 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/jsus +1 -1
- data/jsus.gemspec +8 -2
- data/lib/jsus/container.rb +99 -33
- data/lib/jsus/package.rb +1 -0
- data/lib/jsus/packager.rb +1 -1
- data/lib/jsus/pool.rb +15 -19
- data/lib/jsus/source_file.rb +1 -1
- data/lib/jsus/tree.rb +6 -0
- data/spec/jsus/container_spec.rb +35 -10
- data/spec/jsus/pool_spec.rb +3 -3
- data/spec/jsus/tree_spec.rb +21 -0
- data/spec/shared/class_stubs.rb +1 -1
- metadata +66 -28
data/CHANGELOG
CHANGED
@@ -1,4 +1,13 @@
|
|
1
1
|
= Jsus Changelog
|
2
|
+
== Version 0.2.5
|
3
|
+
* Fixed Container#sort not dealing with wildcards, which made it slower but
|
4
|
+
at least made it work
|
5
|
+
* Reduced a whole ton of Container creation calls wherever they didn't seem
|
6
|
+
appropriate
|
7
|
+
* Container sorting routine is now lazily evaluated
|
8
|
+
|
9
|
+
All in all, this resulted in 70% speedups on complex cases.
|
10
|
+
|
2
11
|
== Version 0.2.4
|
3
12
|
* Replacements feature
|
4
13
|
* Postprocessing feature
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -2,7 +2,9 @@ GEM
|
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
4
|
activesupport (3.0.3)
|
5
|
+
archive-tar-minitar (0.5.2)
|
5
6
|
builder (3.0.0)
|
7
|
+
columnize (0.3.2)
|
6
8
|
cucumber (0.10.0)
|
7
9
|
builder (>= 2.1.2)
|
8
10
|
diff-lcs (~> 1.1.2)
|
@@ -20,6 +22,9 @@ GEM
|
|
20
22
|
rake
|
21
23
|
json (1.4.6)
|
22
24
|
json_pure (1.4.6)
|
25
|
+
linecache (0.43)
|
26
|
+
linecache19 (0.5.11)
|
27
|
+
ruby_core_source (>= 0.1.4)
|
23
28
|
murdoc (0.1.5)
|
24
29
|
haml (~> 3.0.0)
|
25
30
|
haml (~> 3.0.0)
|
@@ -38,6 +43,21 @@ GEM
|
|
38
43
|
rspec-expectations (2.4.0)
|
39
44
|
diff-lcs (~> 1.1.2)
|
40
45
|
rspec-mocks (2.4.0)
|
46
|
+
ruby-debug (0.10.4)
|
47
|
+
columnize (>= 0.1)
|
48
|
+
ruby-debug-base (~> 0.10.4.0)
|
49
|
+
ruby-debug-base (0.10.4)
|
50
|
+
linecache (>= 0.3)
|
51
|
+
ruby-debug-base19 (0.11.24)
|
52
|
+
columnize (>= 0.3.1)
|
53
|
+
linecache19 (>= 0.5.11)
|
54
|
+
ruby_core_source (>= 0.1.4)
|
55
|
+
ruby-debug19 (0.11.6)
|
56
|
+
columnize (>= 0.3.1)
|
57
|
+
linecache19 (>= 0.5.11)
|
58
|
+
ruby-debug-base19 (>= 0.11.19)
|
59
|
+
ruby_core_source (0.1.4)
|
60
|
+
archive-tar-minitar (>= 0.5.2)
|
41
61
|
stream (0.5)
|
42
62
|
term-ansicolor (1.0.5)
|
43
63
|
|
@@ -53,3 +73,5 @@ DEPENDENCIES
|
|
53
73
|
murdoc
|
54
74
|
rgl
|
55
75
|
rspec
|
76
|
+
ruby-debug
|
77
|
+
ruby-debug19
|
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.5
|
data/bin/jsus
CHANGED
@@ -22,7 +22,7 @@ cli = OptionParser.new do |opts|
|
|
22
22
|
options[:input_dir] = dir
|
23
23
|
end
|
24
24
|
|
25
|
-
opts.on('-o', '--
|
25
|
+
opts.on('-o', '--output-directory [DIR]', '[DEPRECATED] path to output directory ') do |dir|
|
26
26
|
$stderr.puts "DEPRECATION NOTICE: please do not use -o command-line argument"
|
27
27
|
options[:output_dir] = dir
|
28
28
|
end
|
data/jsus.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{jsus}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Mark Abramov"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-03-04}
|
13
13
|
s.default_executable = %q{jsus}
|
14
14
|
s.description = %q{Javascript packager and dependency resolver}
|
15
15
|
s.email = %q{markizko@gmail.com}
|
@@ -207,6 +207,8 @@ Gem::Specification.new do |s|
|
|
207
207
|
s.add_development_dependency(%q<cucumber>, [">= 0"])
|
208
208
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
209
209
|
s.add_development_dependency(%q<murdoc>, [">= 0"])
|
210
|
+
s.add_development_dependency(%q<ruby-debug19>, [">= 0"])
|
211
|
+
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
210
212
|
else
|
211
213
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
212
214
|
s.add_dependency(%q<json_pure>, [">= 0"])
|
@@ -216,6 +218,8 @@ Gem::Specification.new do |s|
|
|
216
218
|
s.add_dependency(%q<cucumber>, [">= 0"])
|
217
219
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
218
220
|
s.add_dependency(%q<murdoc>, [">= 0"])
|
221
|
+
s.add_dependency(%q<ruby-debug19>, [">= 0"])
|
222
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
219
223
|
end
|
220
224
|
else
|
221
225
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
@@ -226,6 +230,8 @@ Gem::Specification.new do |s|
|
|
226
230
|
s.add_dependency(%q<cucumber>, [">= 0"])
|
227
231
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
228
232
|
s.add_dependency(%q<murdoc>, [">= 0"])
|
233
|
+
s.add_dependency(%q<ruby-debug19>, [">= 0"])
|
234
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
229
235
|
end
|
230
236
|
end
|
231
237
|
|
data/lib/jsus/container.rb
CHANGED
@@ -10,33 +10,25 @@ module Jsus
|
|
10
10
|
#
|
11
11
|
def initialize(*sources)
|
12
12
|
sources.each do |source|
|
13
|
-
|
13
|
+
push(source)
|
14
14
|
end
|
15
15
|
end
|
16
|
-
|
17
|
-
# Public API
|
18
16
|
|
19
|
-
#
|
20
|
-
# Pushes an item to container and sorts container.
|
21
|
-
#
|
22
|
-
# When given an array or another container, enumerates its contents.
|
23
|
-
#
|
24
|
-
def <<(source)
|
25
|
-
push(source)
|
26
|
-
sort!
|
27
|
-
end
|
17
|
+
# Public API
|
28
18
|
|
29
|
-
# Pushes an item to container
|
19
|
+
# Pushes an item to container
|
30
20
|
def push(source)
|
31
21
|
if source
|
32
22
|
if source.kind_of?(Array) || source.kind_of?(Container)
|
33
23
|
source.each {|s| self.push(s) }
|
34
24
|
else
|
35
|
-
sources.push(source)
|
25
|
+
sources.push(source) unless sources.include?(source)
|
36
26
|
end
|
37
27
|
end
|
28
|
+
clear_cache!
|
38
29
|
self
|
39
30
|
end
|
31
|
+
alias_method :<<, :push
|
40
32
|
|
41
33
|
# Flattens the container items.
|
42
34
|
def flatten
|
@@ -48,20 +40,30 @@ module Jsus
|
|
48
40
|
@sources ||= []
|
49
41
|
end
|
50
42
|
alias_method :to_a, :sources
|
51
|
-
|
43
|
+
|
52
44
|
def sources=(new_value) # :nodoc:
|
53
45
|
@sources = new_value
|
54
46
|
end
|
55
47
|
|
56
|
-
# Performs a sort and returns self.
|
48
|
+
# Performs a sort and returns self.
|
57
49
|
def sort!
|
58
|
-
|
50
|
+
unless sorted?
|
51
|
+
remove_replaced_files!
|
52
|
+
self.sources = topsort
|
53
|
+
@sorted = true
|
54
|
+
end
|
59
55
|
self
|
60
56
|
end
|
61
57
|
|
58
|
+
# Returns whether collection is sorted already
|
59
|
+
def sorted?
|
60
|
+
!!@sorted
|
61
|
+
end
|
62
|
+
|
62
63
|
# Lists all the required files (dependencies and extensions) for
|
63
|
-
# the sources in the container.
|
64
|
+
# the sources in the container.
|
64
65
|
def required_files(root = nil)
|
66
|
+
sort!
|
65
67
|
files = sources.map {|s| s.required_files }.flatten
|
66
68
|
if root
|
67
69
|
root = Pathname.new(File.expand_path(root))
|
@@ -75,22 +77,17 @@ module Jsus
|
|
75
77
|
end
|
76
78
|
|
77
79
|
# Private API
|
78
|
-
|
80
|
+
|
79
81
|
def topsort # :nodoc:
|
80
82
|
graph = RGL::DirectedAdjacencyGraph.new
|
81
|
-
provides_map = {}
|
82
83
|
# init vertices
|
83
|
-
items =
|
84
|
-
items.each
|
85
|
-
graph.add_vertex(item)
|
86
|
-
item.provides.each do |provides|
|
87
|
-
provides_map[provides] = item
|
88
|
-
end
|
89
|
-
end
|
84
|
+
items = sources
|
85
|
+
items.each {|item| graph.add_vertex(item) }
|
90
86
|
# init edges
|
91
87
|
items.each do |item|
|
92
88
|
item.dependencies.each do |dependency|
|
93
|
-
|
89
|
+
cache[dependency] ||= provides_tree.glob("/" + dependency.to_s).map {|node| node.value }
|
90
|
+
cache[dependency].each do |required_item|
|
94
91
|
graph.add_edge(required_item, item)
|
95
92
|
end
|
96
93
|
end
|
@@ -100,12 +97,81 @@ module Jsus
|
|
100
97
|
result
|
101
98
|
end
|
102
99
|
|
100
|
+
def cache # :nodoc:
|
101
|
+
@cache ||= {}
|
102
|
+
end
|
103
|
+
|
104
|
+
def provides_tree # :nodoc:
|
105
|
+
@provides_tree ||= provides_tree!
|
106
|
+
end
|
107
|
+
|
108
|
+
def provides_tree! # :nodoc:
|
109
|
+
tree = Tree.new
|
110
|
+
# Provisions
|
111
|
+
sources.each do |file|
|
112
|
+
file.provides.each do |tag|
|
113
|
+
tree["/#{tag}"] = file
|
114
|
+
end
|
115
|
+
end
|
116
|
+
# Replacements
|
117
|
+
sources.each do |file|
|
118
|
+
if file.replaces
|
119
|
+
tree["/#{file.replaces}"] = file
|
120
|
+
end
|
121
|
+
end
|
122
|
+
tree
|
123
|
+
end
|
124
|
+
|
125
|
+
def remove_replaced_files!
|
126
|
+
sources.reject! do |sf|
|
127
|
+
!sf.provides.empty? && sf.provides.any? { |tag|
|
128
|
+
replacements_tree["/#{tag}"] &&
|
129
|
+
replacements_tree["/#{tag}"].value &&
|
130
|
+
replacements_tree["/#{tag}"].value != sf
|
131
|
+
}
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def replacements_tree
|
136
|
+
@replacements_tree ||= replacements_tree!
|
137
|
+
end
|
138
|
+
|
139
|
+
def replacements_tree!
|
140
|
+
tree = Tree.new
|
141
|
+
sources.each do |file|
|
142
|
+
if file.replaces
|
143
|
+
tree["/#{file.replaces}"] = file
|
144
|
+
end
|
145
|
+
end
|
146
|
+
tree
|
147
|
+
end
|
148
|
+
|
149
|
+
def clear_cache! # :nodoc:
|
150
|
+
@provides_tree = nil
|
151
|
+
@replacements_tree = nil
|
152
|
+
@cache = nil
|
153
|
+
@sorted = nil
|
154
|
+
end
|
155
|
+
|
156
|
+
|
157
|
+
CACHE_CLEAR_METHODS = [
|
158
|
+
"map!", "reject!", "inject!"
|
159
|
+
] # :nodoc:
|
160
|
+
|
103
161
|
DELEGATED_METHODS = [
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
162
|
+
"==", "to_a", "map", "map!", "each", "inject", "inject!",
|
163
|
+
"reject", "reject!", "detect", "size", "length", "[]",
|
164
|
+
"empty?", "index", "include?", "select", "-", "+", "|", "&"
|
165
|
+
] # :nodoc:
|
108
166
|
# delegates most Enumerable methods to #sources
|
109
|
-
(DELEGATED_METHODS).each
|
167
|
+
(DELEGATED_METHODS).each do |m|
|
168
|
+
class_eval <<-EVAL
|
169
|
+
def #{m}(*args, &block)
|
170
|
+
sort!
|
171
|
+
#{"clear_cache!" if CACHE_CLEAR_METHODS.include?(m)}
|
172
|
+
self.sources.send(:#{m}, *args, &block)
|
173
|
+
end
|
174
|
+
EVAL
|
175
|
+
end
|
110
176
|
end
|
111
177
|
end
|
data/lib/jsus/package.rb
CHANGED
@@ -25,6 +25,7 @@ module Jsus
|
|
25
25
|
elsif File.exists?(File.join(directory, 'package.json'))
|
26
26
|
self.header = JSON.load(IO.read(File.join(directory, 'package.json')))
|
27
27
|
else
|
28
|
+
raise "Directory #{directory} does not contain a valid package.yml / package.json file!"
|
28
29
|
end
|
29
30
|
Dir.chdir(directory) do
|
30
31
|
files.each do |source|
|
data/lib/jsus/packager.rb
CHANGED
data/lib/jsus/pool.rb
CHANGED
@@ -38,11 +38,11 @@ module Jsus
|
|
38
38
|
end
|
39
39
|
|
40
40
|
#
|
41
|
-
# Container with all the sources in the pool.
|
42
|
-
#
|
41
|
+
# Container with all the sources in the pool.
|
42
|
+
# Attention: the sources are no more ordered.
|
43
43
|
#
|
44
44
|
def sources
|
45
|
-
@sources ||=
|
45
|
+
@sources ||= []
|
46
46
|
end
|
47
47
|
|
48
48
|
#
|
@@ -69,7 +69,7 @@ module Jsus
|
|
69
69
|
#
|
70
70
|
# Looks up for dependencies for given file recursively.
|
71
71
|
#
|
72
|
-
# Returns an instance of Container which contains needed files sorted.
|
72
|
+
# Returns an instance of Container which contains the needed files sorted.
|
73
73
|
#
|
74
74
|
def lookup_dependencies(source_or_source_key)
|
75
75
|
source = lookup(source_or_source_key)
|
@@ -78,12 +78,11 @@ module Jsus
|
|
78
78
|
if source
|
79
79
|
dependencies = lookup_direct_dependencies(source)
|
80
80
|
while !((dependencies - looked_up).empty?)
|
81
|
-
dependencies.each { |d| result
|
81
|
+
dependencies.each { |d| result << d; looked_up << d }
|
82
82
|
dependencies = dependencies.map {|d| lookup_direct_dependencies(d).to_a }.flatten.uniq
|
83
83
|
end
|
84
|
-
result.sort!
|
85
84
|
end
|
86
|
-
result
|
85
|
+
result.sort!
|
87
86
|
end
|
88
87
|
|
89
88
|
#
|
@@ -158,18 +157,15 @@ module Jsus
|
|
158
157
|
# Performs the actual lookup for #lookup_direct_dependencies
|
159
158
|
#
|
160
159
|
def lookup_direct_dependencies!(source)
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
[]
|
171
|
-
end
|
172
|
-
Container.new(*result)
|
160
|
+
return [] unless source
|
161
|
+
|
162
|
+
source.dependencies.map do |dependency|
|
163
|
+
result = provides_tree.glob("/#{dependency}").map {|node| node.value }
|
164
|
+
if (!result || (result.is_a?(Array) && result.empty?)) && Jsus.verbose?
|
165
|
+
puts "#{source.filename} is missing #{dependency.is_a?(SourceFile) ? dependency.filename : dependency.to_s}"
|
166
|
+
end
|
167
|
+
result
|
168
|
+
end.flatten.map {|tag| lookup(tag) }
|
173
169
|
end
|
174
170
|
|
175
171
|
#
|
data/lib/jsus/source_file.rb
CHANGED
data/lib/jsus/tree.rb
CHANGED
@@ -95,6 +95,7 @@ module Jsus
|
|
95
95
|
node.value = value
|
96
96
|
node
|
97
97
|
end
|
98
|
+
alias_method :[]=, :insert
|
98
99
|
|
99
100
|
def traverse(all_nodes = false)
|
100
101
|
node_list = [root]
|
@@ -105,6 +106,11 @@ module Jsus
|
|
105
106
|
end
|
106
107
|
end
|
107
108
|
|
109
|
+
def leaves(only_with_value = true)
|
110
|
+
result = []
|
111
|
+
traverse {|node| result << node if !only_with_value || node.value }
|
112
|
+
result
|
113
|
+
end
|
108
114
|
|
109
115
|
|
110
116
|
def create_all_nodes_if_needed(full_path)
|
data/spec/jsus/container_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe Jsus::Container do
|
|
5
5
|
let(:simple_source) { Source.new(:provides => [0], :dependencies => [], :content => "// simple", :filename => "/home/jsus/simple.js") }
|
6
6
|
let(:another_simple_source) { Source.new(:provides => [1], :dependencies => [], :content => "// simple 2", :filename => "/home/jsus/other/simple2.js") }
|
7
7
|
let(:dependant_source) { Source.new(:provides => [3], :dependencies => [0], :content => "// simple 3", :filename => "/home/dependencies/simple3.js") }
|
8
|
-
|
8
|
+
let(:replacement_source) { Source.new(:provides => [0,4,6], :dependencies => [], :replaces => 0, :content => "// simple replaced", :filename => "/home/jsus/simple_replaced.js") }
|
9
9
|
let(:simple_container) { Jsus::Container.new(simple_source, another_simple_source) }
|
10
10
|
let(:container_with_dependency) { Jsus::Container.new(dependant_source, simple_source) }
|
11
11
|
|
@@ -17,26 +17,24 @@ describe Jsus::Container do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
describe "#<<" do
|
20
|
+
subject { Jsus::Container.new }
|
20
21
|
it "should allow multiple items via arrays" do
|
21
|
-
|
22
|
-
|
23
|
-
container.should have_exactly(2).sources
|
22
|
+
subject << [simple_source, another_simple_source]
|
23
|
+
subject.should have_exactly(2).sources
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should allow multiple items via containers" do
|
27
|
-
|
28
|
-
|
29
|
-
container.should have_exactly(2).sources
|
27
|
+
subject << Jsus::Container.new(simple_source, another_simple_source)
|
28
|
+
subject.should have_exactly(2).sources
|
30
29
|
end
|
31
|
-
|
32
30
|
end
|
33
31
|
|
34
32
|
describe "#sources" do
|
35
33
|
subject { container_with_dependency }
|
36
34
|
it "should always be sorted" do
|
37
|
-
subject.
|
35
|
+
subject.index(simple_source).should < subject.sources.index(dependant_source)
|
38
36
|
subject << another_simple_source
|
39
|
-
subject.
|
37
|
+
subject.index(simple_source).should < subject.sources.index(dependant_source)
|
40
38
|
end
|
41
39
|
|
42
40
|
it "should not allow duplicates" do
|
@@ -64,4 +62,31 @@ describe Jsus::Container do
|
|
64
62
|
subject.required_files("/home/jsus").should == ["simple.js", "../dependencies/simple3.js"]
|
65
63
|
end
|
66
64
|
end
|
65
|
+
|
66
|
+
context "lazy sorting" do
|
67
|
+
subject { container_with_dependency.sort! }
|
68
|
+
|
69
|
+
it "should remove replaced files" do
|
70
|
+
subject << replacement_source
|
71
|
+
subject.should include(replacement_source)
|
72
|
+
subject.should_not include(simple_source)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should only call topsort when it's needed" do
|
76
|
+
subject.should_not_receive(:topsort)
|
77
|
+
subject.sort!
|
78
|
+
subject.each {|source| } # no-op
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should not call topsort when adding resources" do
|
82
|
+
subject.should_not_receive(:topsort)
|
83
|
+
subject << simple_source
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should call topsort for kicker methods" do
|
87
|
+
subject << simple_source
|
88
|
+
subject.should_receive(:topsort)
|
89
|
+
subject.each {|source| }
|
90
|
+
end
|
91
|
+
end
|
67
92
|
end
|
data/spec/jsus/pool_spec.rb
CHANGED
@@ -80,10 +80,10 @@ describe Jsus::Pool do
|
|
80
80
|
packages.each {|package| subject << package.source_files }
|
81
81
|
end
|
82
82
|
|
83
|
-
it "should return
|
84
|
-
subject.lookup_direct_dependencies("Mash/Mash").should
|
83
|
+
it "should return an array with direct dependencies" do
|
84
|
+
subject.lookup_direct_dependencies("Mash/Mash").should be_an(Array)
|
85
85
|
subject.lookup_direct_dependencies("Mash/Mash").should == [sources[2]]
|
86
|
-
subject.lookup_direct_dependencies(Jsus::Tag["Mash/Mash"]).should be_a(
|
86
|
+
subject.lookup_direct_dependencies(Jsus::Tag["Mash/Mash"]).should be_a(Array)
|
87
87
|
subject.lookup_direct_dependencies(Jsus::Tag["Mash/Mash"]).should == [sources[2]]
|
88
88
|
end
|
89
89
|
|
data/spec/jsus/tree_spec.rb
CHANGED
@@ -169,4 +169,25 @@ describe Jsus::Tree do
|
|
169
169
|
end
|
170
170
|
end
|
171
171
|
|
172
|
+
describe "#leaves" do
|
173
|
+
subject { Jsus::Tree.new }
|
174
|
+
let(:nodes) { [] }
|
175
|
+
before(:each) do
|
176
|
+
nodes << subject.insert("/hello/world/one", 1) <<
|
177
|
+
subject.insert("/hello/world/two", 2) <<
|
178
|
+
subject.insert("/hello/three", nil) <<
|
179
|
+
subject.insert("/hello/four", 4)
|
180
|
+
end
|
181
|
+
|
182
|
+
it "should return only the leaves with content by default" do
|
183
|
+
subject.leaves.should =~ [nodes[0], nodes[1], nodes[3]]
|
184
|
+
end
|
185
|
+
|
186
|
+
|
187
|
+
it "should return all the leaves if asked" do
|
188
|
+
subject.leaves(false).should =~ nodes
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
192
|
+
|
172
193
|
end
|
data/spec/shared/class_stubs.rb
CHANGED
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
9
|
+
- 5
|
10
|
+
version: 0.2.5
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Mark Abramov
|
@@ -14,113 +15,149 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2011-
|
18
|
+
date: 2011-03-04 00:00:00 -05:00
|
18
19
|
default_executable: jsus
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
21
24
|
name: activesupport
|
22
|
-
|
25
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
26
|
none: false
|
24
27
|
requirements:
|
25
28
|
- - ">="
|
26
29
|
- !ruby/object:Gem::Version
|
30
|
+
hash: 3
|
27
31
|
segments:
|
28
32
|
- 0
|
29
33
|
version: "0"
|
34
|
+
requirement: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
30
36
|
type: :runtime
|
31
37
|
prerelease: false
|
32
|
-
version_requirements: *id001
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
38
|
name: json_pure
|
35
|
-
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
36
40
|
none: false
|
37
41
|
requirements:
|
38
42
|
- - ">="
|
39
43
|
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
40
45
|
segments:
|
41
46
|
- 0
|
42
47
|
version: "0"
|
48
|
+
requirement: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
43
50
|
type: :runtime
|
44
51
|
prerelease: false
|
45
|
-
version_requirements: *id002
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
52
|
name: rgl
|
48
|
-
|
53
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
49
54
|
none: false
|
50
55
|
requirements:
|
51
56
|
- - ">="
|
52
57
|
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
53
59
|
segments:
|
54
60
|
- 0
|
55
61
|
version: "0"
|
56
|
-
|
57
|
-
prerelease: false
|
58
|
-
version_requirements: *id003
|
62
|
+
requirement: *id003
|
59
63
|
- !ruby/object:Gem::Dependency
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
60
66
|
name: bundler
|
61
|
-
|
67
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
62
68
|
none: false
|
63
69
|
requirements:
|
64
70
|
- - ">="
|
65
71
|
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
66
73
|
segments:
|
67
74
|
- 0
|
68
75
|
version: "0"
|
76
|
+
requirement: *id004
|
77
|
+
- !ruby/object:Gem::Dependency
|
69
78
|
type: :development
|
70
79
|
prerelease: false
|
71
|
-
version_requirements: *id004
|
72
|
-
- !ruby/object:Gem::Dependency
|
73
80
|
name: rspec
|
74
|
-
|
81
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
75
82
|
none: false
|
76
83
|
requirements:
|
77
84
|
- - ">="
|
78
85
|
- !ruby/object:Gem::Version
|
86
|
+
hash: 3
|
79
87
|
segments:
|
80
88
|
- 0
|
81
89
|
version: "0"
|
90
|
+
requirement: *id005
|
91
|
+
- !ruby/object:Gem::Dependency
|
82
92
|
type: :development
|
83
93
|
prerelease: false
|
84
|
-
version_requirements: *id005
|
85
|
-
- !ruby/object:Gem::Dependency
|
86
94
|
name: cucumber
|
87
|
-
|
95
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
88
96
|
none: false
|
89
97
|
requirements:
|
90
98
|
- - ">="
|
91
99
|
- !ruby/object:Gem::Version
|
100
|
+
hash: 3
|
92
101
|
segments:
|
93
102
|
- 0
|
94
103
|
version: "0"
|
104
|
+
requirement: *id006
|
105
|
+
- !ruby/object:Gem::Dependency
|
95
106
|
type: :development
|
96
107
|
prerelease: false
|
97
|
-
version_requirements: *id006
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
108
|
name: jeweler
|
100
|
-
|
109
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
101
110
|
none: false
|
102
111
|
requirements:
|
103
112
|
- - ">="
|
104
113
|
- !ruby/object:Gem::Version
|
114
|
+
hash: 3
|
105
115
|
segments:
|
106
116
|
- 0
|
107
117
|
version: "0"
|
118
|
+
requirement: *id007
|
119
|
+
- !ruby/object:Gem::Dependency
|
108
120
|
type: :development
|
109
121
|
prerelease: false
|
110
|
-
version_requirements: *id007
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
122
|
name: murdoc
|
113
|
-
|
123
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
114
124
|
none: false
|
115
125
|
requirements:
|
116
126
|
- - ">="
|
117
127
|
- !ruby/object:Gem::Version
|
128
|
+
hash: 3
|
118
129
|
segments:
|
119
130
|
- 0
|
120
131
|
version: "0"
|
132
|
+
requirement: *id008
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
name: ruby-debug19
|
137
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
hash: 3
|
143
|
+
segments:
|
144
|
+
- 0
|
145
|
+
version: "0"
|
146
|
+
requirement: *id009
|
147
|
+
- !ruby/object:Gem::Dependency
|
121
148
|
type: :development
|
122
149
|
prerelease: false
|
123
|
-
|
150
|
+
name: ruby-debug
|
151
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
152
|
+
none: false
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
hash: 3
|
157
|
+
segments:
|
158
|
+
- 0
|
159
|
+
version: "0"
|
160
|
+
requirement: *id010
|
124
161
|
description: Javascript packager and dependency resolver
|
125
162
|
email: markizko@gmail.com
|
126
163
|
executables:
|
@@ -299,7 +336,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
299
336
|
requirements:
|
300
337
|
- - ">="
|
301
338
|
- !ruby/object:Gem::Version
|
302
|
-
hash:
|
339
|
+
hash: 3
|
303
340
|
segments:
|
304
341
|
- 0
|
305
342
|
version: "0"
|
@@ -308,6 +345,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
308
345
|
requirements:
|
309
346
|
- - ">="
|
310
347
|
- !ruby/object:Gem::Version
|
348
|
+
hash: 3
|
311
349
|
segments:
|
312
350
|
- 0
|
313
351
|
version: "0"
|