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 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
@@ -11,4 +11,6 @@ group :development do
11
11
  gem "cucumber"
12
12
  gem "jeweler"
13
13
  gem "murdoc"
14
+ gem "ruby-debug19", :platforms => :ruby_19
15
+ gem "ruby-debug", :platforms => :ruby_18
14
16
  end
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
@@ -39,7 +39,7 @@ require 'cucumber/rake/task'
39
39
  Cucumber::Rake::Task.new(:features) do |t|
40
40
  end
41
41
 
42
- task :default => :spec
42
+ task :default => [:spec, :features]
43
43
 
44
44
  require 'rake/rdoctask'
45
45
  Rake::RDocTask.new do |rdoc|
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.4
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', '--input-directory [DIR]', '[DEPRECATED] path to output directory ') do |dir|
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.4"
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-02-20}
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
 
@@ -10,33 +10,25 @@ module Jsus
10
10
  #
11
11
  def initialize(*sources)
12
12
  sources.each do |source|
13
- self << source
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 *without sorting it*. Use with care.
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. Executed automatically by #<< .
48
+ # Performs a sort and returns self.
57
49
  def sort!
58
- self.sources = topsort
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 = self.sources
84
- items.each do |item|
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
- if required_item = provides_map[dependency]
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
- "==", "map", "map!", "each", "inject", "inject!",
105
- "reject", "reject!", "detect", "size", "length", "[]",
106
- "empty?", "index", "include?", "select", "-", "+", "|", "&"
107
- ] # :nodoc:
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 {|m| delegate m, :to => :sources }
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
@@ -16,7 +16,7 @@ module Jsus
16
16
  end
17
17
 
18
18
  def sources # :nodoc:
19
- container.sources
19
+ container
20
20
  end
21
21
 
22
22
  #
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. It is actually ordered in case you
42
- # want to include ALL the source files from the pool.
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 ||= Container.new
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.push(d); looked_up << d }
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
- result = if source
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) }
169
- else
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
  #
@@ -253,7 +253,7 @@ module Jsus
253
253
  end
254
254
 
255
255
  def eql?(other) # :nodoc:
256
- filename == other.filename
256
+ other.kind_of?(SourceFile) && filename == other.filename
257
257
  end
258
258
 
259
259
  def hash
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)
@@ -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
- container = Jsus::Container.new
22
- container << [simple_source, another_simple_source]
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
- container = Jsus::Container.new
28
- container << Jsus::Container.new(simple_source, another_simple_source)
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.sources.index(simple_source).should < subject.sources.index(dependant_source)
35
+ subject.index(simple_source).should < subject.sources.index(dependant_source)
38
36
  subject << another_simple_source
39
- subject.sources.index(simple_source).should < subject.sources.index(dependant_source)
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
@@ -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 a container with direct dependencies" do
84
- subject.lookup_direct_dependencies("Mash/Mash").should be_a(Jsus::Container)
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(Jsus::Container)
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
 
@@ -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
@@ -6,7 +6,7 @@ class Source
6
6
  attr_accessor :dependencies
7
7
  attr_accessor :content
8
8
  attr_accessor :filename
9
-
9
+ attr_accessor :replaces
10
10
  def initialize(options = {})
11
11
  options.each do |attr, value|
12
12
  send("#{attr}=", value)
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
- - 4
9
- version: 0.2.4
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-02-20 00:00:00 -05:00
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
- requirement: &id001 !ruby/object:Gem::Requirement
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
- requirement: &id002 !ruby/object:Gem::Requirement
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
- requirement: &id003 !ruby/object:Gem::Requirement
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
- type: :runtime
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
- requirement: &id004 !ruby/object:Gem::Requirement
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
- requirement: &id005 !ruby/object:Gem::Requirement
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
- requirement: &id006 !ruby/object:Gem::Requirement
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
- requirement: &id007 !ruby/object:Gem::Requirement
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
- requirement: &id008 !ruby/object:Gem::Requirement
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
- version_requirements: *id008
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: 1044450339509570766
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"