jbundle 0.0.9 → 0.0.10

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/Gemfile.lock CHANGED
@@ -1,20 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jbundle (0.0.8)
4
+ jbundle (0.0.10)
5
5
  closure-compiler
6
+ rack
7
+ thor
6
8
 
7
9
  GEM
8
10
  remote: http://rubygems.org/
9
11
  specs:
10
- closure-compiler (0.3.3)
12
+ closure-compiler (1.1.1)
13
+ rack (1.3.0)
11
14
  rspec (1.3.1)
15
+ thor (0.14.6)
12
16
 
13
17
  PLATFORMS
14
18
  ruby
15
19
 
16
20
  DEPENDENCIES
17
21
  bundler (>= 1.0.0)
18
- closure-compiler
19
22
  jbundle!
20
23
  rspec (= 1.3.1)
data/README.md CHANGED
@@ -155,7 +155,22 @@ If you want a prerelease not to overwrite the previous point release, suffix it
155
155
 
156
156
  version '1.0.1-pre'
157
157
 
158
+ ## Test server
158
159
 
160
+ JBundle command-line comes with a built-in Rack server that makes it easy to test you JavaScript bundles as you develop them.
161
+
162
+ jbundle server
163
+
164
+ Starting test server on http://localhost:5555. Available bundles:
165
+ - /foo.js
166
+
167
+ That serves bundles defined in your JFile in port 5555. Pass the -p option for a different port.
168
+
169
+ Learn more about the JBundle command-line with
170
+
171
+ jbundle help # all commands
172
+ jbundle help server # server command options
173
+
159
174
  ## TODO
160
175
 
161
176
  - DRY up stuff, better error handling for missing config
data/bin/jbundle CHANGED
@@ -1,10 +1,3 @@
1
1
  require 'jbundle'
2
2
 
3
- JBUNDLE_FILE = 'Jfile'
4
-
5
- begin
6
- JBundle.config_from_file(JBUNDLE_FILE)
7
- JBundle.write!
8
- rescue JBundle::NoJFileError => boom
9
- puts boom.message
10
- end
3
+ JBundle::CommandLine.start
data/jbundle.gemspec CHANGED
@@ -17,6 +17,8 @@ Gem::Specification.new do |s|
17
17
  s.add_development_dependency "bundler", ">= 1.0.0"
18
18
  s.add_development_dependency "rspec", '1.3.1'
19
19
  s.add_dependency 'closure-compiler'
20
+ s.add_dependency 'thor'
21
+ s.add_dependency 'rack'
20
22
 
21
23
  s.files = `git ls-files`.split("\n")
22
24
  s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
@@ -0,0 +1,51 @@
1
+ require 'thor'
2
+ module JBundle
3
+
4
+ class CommandLine < Thor
5
+ default_task :bundle
6
+
7
+ map "s" => :server
8
+ map "-v" => :version
9
+
10
+ desc "bundle", "Minify and bundle bundle declarations into dist directory"
11
+ def bundle
12
+ begin
13
+ JBundle.config_from_file(JBundle::JFILE)
14
+ JBundle.write!
15
+ rescue JBundle::NoJFileError => boom
16
+ puts boom.message
17
+ end
18
+ end
19
+
20
+ desc 'server', 'Start test rack server on port 5555'
21
+ method_option :port, :default => "5555", :aliases => "-p"
22
+ def server
23
+ require 'rack'
24
+ JBundle.config_from_file(JBundle::JFILE)
25
+ puts "Starting test server on http://localhost:#{options[:port]}. Available bundles:"
26
+ JBundle.config.bundles_and_files.each do |f|
27
+ puts "- /#{f.name}"
28
+ end
29
+
30
+ handler = Rack::Handler.default
31
+ downward = false
32
+ ['INT', 'TERM', 'QUIT'].each do |signal|
33
+ trap(signal) do
34
+ exit! if downward
35
+ downward = true
36
+ handler.shutdown if handler.respond_to?(:shutdown)
37
+ Process.wait rescue nil
38
+ puts 'Shutting down test server'
39
+ exit!
40
+ end
41
+ end
42
+ handler.run JBundle::Server.new, {:Port => options[:port]}
43
+ end
44
+
45
+ desc 'version', 'Print installed JBundle version'
46
+ def version
47
+ puts JBundle::VERSION
48
+ end
49
+
50
+ end
51
+ end
@@ -0,0 +1,28 @@
1
+ module JBundle
2
+
3
+ class Server
4
+
5
+
6
+ def initialize(jfile = JBundle::JFILE)
7
+ @jfile = jfile
8
+ end
9
+
10
+ # Configure JBundle on every request.
11
+ # Expensive but allows for reloading changes to JFile
12
+ def call(env)
13
+ bundle_name = env['PATH_INFO'].sub('/', '')
14
+ begin
15
+ JBundle.config_from_file(@jfile)
16
+ [200, {'Content-Type' => 'application/x-javascript'}, [JBundle.build(bundle_name).src]]
17
+ rescue NoBundleError => boom
18
+ p = bundle_name == '' ? '[bundle_name].js' : bundle_name
19
+ [404, {'Content-Type' => 'text/plain'}, ["No bundle defined. Try defining /#{p} in your JFile"]]
20
+ rescue NoJFileError => boom
21
+ [404, {'Content-Type' => 'text/plain'}, [boom.message]]
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -1,3 +1,3 @@
1
1
  module JBundle
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
data/lib/jbundle.rb CHANGED
@@ -4,10 +4,16 @@ require 'jbundle/file'
4
4
  require 'jbundle/bundle'
5
5
  require 'jbundle/builder'
6
6
  require 'jbundle/writer'
7
+ require 'jbundle/command_line'
8
+ require 'jbundle/server'
9
+ require 'jbundle/version'
7
10
 
8
11
  module JBundle
9
12
 
13
+ JFILE = 'Jfile'
14
+
10
15
  class NoJFileError < StandardError;end
16
+ class NoBundleError < StandardError;end
11
17
 
12
18
  class << self
13
19
 
@@ -45,7 +51,7 @@ module JBundle
45
51
 
46
52
  def build(name)
47
53
  found = config.bundles_and_files.detect {|f| f.name == name}
48
- raise "No bundle or file found with name #{name}" unless found
54
+ raise NoBundleError, "No bundle or file found with name #{name}" unless found
49
55
  Builder.new(config).build_one found
50
56
  end
51
57
 
data/spec/jbundle_spec.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
  require 'fileutils'
3
3
 
4
- DIST = File.dirname(__FILE__)+'/dist'
5
-
6
4
  describe "JBundle" do
7
5
 
8
6
  before do
@@ -0,0 +1,41 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+
4
+ describe "JBundle::Server" do
5
+
6
+ before do
7
+ f = File.join(File.expand_path(File.dirname(__FILE__)), 'JFile')
8
+ @server = JBundle::Server.new(f)
9
+ end
10
+
11
+ describe '#call' do
12
+ before do
13
+ @response = @server.call({'PATH_INFO' => '/foo.js'})
14
+ end
15
+
16
+ it 'should be 404 if no JFile found' do
17
+ s = JBundle::Server.new("doesn-not-exist")
18
+ r = s.call({'PATH_INFO' => '/foo.js'})
19
+ r[0].should == 404
20
+ end
21
+
22
+ it 'should be 200 OK' do
23
+ @response[0].should == 200
24
+ end
25
+
26
+ it 'should be a javascript response' do
27
+ @response[1]['Content-Type'].should == 'application/x-javascript'
28
+ end
29
+
30
+ it 'should return content for given bundle' do
31
+ @response[2].should == [JBundle.build('foo.js').src]
32
+ end
33
+
34
+ it 'should be 404 when no bundle found' do
35
+ r = @server.call({'PATH_INFO' => '/nonexisting.js'})
36
+ r[0].should == 404
37
+ end
38
+
39
+ end
40
+
41
+ end
data/spec/spec_helper.rb CHANGED
@@ -4,6 +4,9 @@ Bundler.setup
4
4
 
5
5
  $LOAD_PATH.unshift(File.dirname(__FILE__))
6
6
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+
8
+ DIST = File.dirname(__FILE__)+'/dist'
9
+
7
10
  require 'jbundle'
8
11
  begin
9
12
  require 'spec'
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jbundle
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 0
9
- - 9
10
- version: 0.0.9
4
+ prerelease:
5
+ version: 0.0.10
11
6
  platform: ruby
12
7
  authors:
13
8
  - Ismael Celis
@@ -15,7 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-04-15 00:00:00 +01:00
13
+ date: 2011-05-30 00:00:00 +01:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
@@ -26,11 +21,6 @@ dependencies:
26
21
  requirements:
27
22
  - - ">="
28
23
  - !ruby/object:Gem::Version
29
- hash: 23
30
- segments:
31
- - 1
32
- - 0
33
- - 0
34
24
  version: 1.0.0
35
25
  type: :development
36
26
  version_requirements: *id001
@@ -42,11 +32,6 @@ dependencies:
42
32
  requirements:
43
33
  - - "="
44
34
  - !ruby/object:Gem::Version
45
- hash: 25
46
- segments:
47
- - 1
48
- - 3
49
- - 1
50
35
  version: 1.3.1
51
36
  type: :development
52
37
  version_requirements: *id002
@@ -58,12 +43,31 @@ dependencies:
58
43
  requirements:
59
44
  - - ">="
60
45
  - !ruby/object:Gem::Version
61
- hash: 3
62
- segments:
63
- - 0
64
46
  version: "0"
65
47
  type: :runtime
66
48
  version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: thor
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :runtime
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: rack
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ type: :runtime
70
+ version_requirements: *id005
67
71
  description: Writes versioned, bundled and minified javascript files and dependencies
68
72
  email:
69
73
  - ismaelct@gmail.com
@@ -84,13 +88,16 @@ files:
84
88
  - lib/jbundle.rb
85
89
  - lib/jbundle/builder.rb
86
90
  - lib/jbundle/bundle.rb
91
+ - lib/jbundle/command_line.rb
87
92
  - lib/jbundle/config.rb
88
93
  - lib/jbundle/file.rb
94
+ - lib/jbundle/server.rb
89
95
  - lib/jbundle/version.rb
90
96
  - lib/jbundle/writer.rb
91
97
  - spec/.rspec
92
98
  - spec/JFile
93
99
  - spec/jbundle_spec.rb
100
+ - spec/server_spec.rb
94
101
  - spec/spec_helper.rb
95
102
  - spec/test_src/file1.js
96
103
  - spec/test_src/file2.js
@@ -114,25 +121,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
114
121
  requirements:
115
122
  - - ">="
116
123
  - !ruby/object:Gem::Version
117
- hash: 3
118
- segments:
119
- - 0
120
124
  version: "0"
121
125
  required_rubygems_version: !ruby/object:Gem::Requirement
122
126
  none: false
123
127
  requirements:
124
128
  - - ">="
125
129
  - !ruby/object:Gem::Version
126
- hash: 23
127
- segments:
128
- - 1
129
- - 3
130
- - 6
131
130
  version: 1.3.6
132
131
  requirements: []
133
132
 
134
133
  rubyforge_project: jbundle
135
- rubygems_version: 1.3.7
134
+ rubygems_version: 1.6.2
136
135
  signing_key:
137
136
  specification_version: 3
138
137
  summary: Good for releasing javascript libraries composed of many files. Writes files apt for deploying to CDNs.