jsus 0.2.4 → 0.2.5

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