astro 0.1.1 → 0.2.0

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/README.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  Astro is your DIY asset distribution web service.
4
4
 
5
+ ## Usage
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'astro'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install astro
18
+
5
19
  ## TODOs
6
20
 
7
21
  - Asset versioning.
@@ -14,3 +28,12 @@ Astro is your DIY asset distribution web service.
14
28
  - Deploy to heroku.
15
29
  - Release on rubygems.
16
30
  - Make sure astro can be mounted within a rails app.
31
+ - Command-line tool.
32
+
33
+ ## Contributing
34
+
35
+ 1. Fork it
36
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
37
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
38
+ 4. Push to the branch (`git push origin my-new-feature`)
39
+ 5. Create new Pull Request
data/astro.gemspec CHANGED
@@ -18,15 +18,18 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'sinatra', '~> 1.4.3'
22
- spec.add_dependency 'sprockets', '~> 2.10.0'
21
+ spec.add_dependency 'sinatra', '~> 1.4.3'
22
+ spec.add_dependency 'sinatra-contrib', '~> 1.4.0'
23
+ spec.add_dependency 'sprockets', '~> 2.10.0'
23
24
 
24
25
  spec.add_development_dependency 'rake'
25
26
  spec.add_development_dependency 'bundler', '~> 1.3'
26
27
  spec.add_development_dependency 'rspec', '~> 2.13.0'
27
28
  spec.add_development_dependency 'rack-test', '~> 0.6.2'
28
- spec.add_development_dependency 'git-approvals', '~> 0.2.2'
29
+ spec.add_development_dependency 'git-approvals', '~> 0.4.0'
29
30
  spec.add_development_dependency 'uglifier', '~> 2.1.1'
31
+ spec.add_development_dependency 'awesome_print', '~> 1.1.0'
32
+ spec.add_development_dependency 'sass', '~> 3.2.9'
30
33
  spec.add_development_dependency 'guard-rspec', '~> 3.0.1'
31
34
  spec.add_development_dependency 'pry', '~> 0.9.12.2'
32
35
  end
@@ -0,0 +1,11 @@
1
+ /**
2
+ * ______ __
3
+ * /\ _ \ /\ \__ __
4
+ * \ \ \L\ \ ____\ \ ,_\ _ __ ___ /\_\ ____
5
+ * \ \ __ \ /',__\\ \ \/ /\`'__\/ __`\ \/\ \ /',__\
6
+ * \ \ \/\ \/\__, `\\ \ \_\ \ \//\ \L\ \__ \ \ \/\__, `\
7
+ * \ \_\ \_\/\____/ \ \__\\ \_\\ \____/\_\_\ \ \/\____/
8
+ * \/_/\/_/\/___/ \/__/ \/_/ \/___/\/_/\ \_\ \/___/
9
+ * \ \____/
10
+ * \/___/
11
+ */
data/lib/astro/assets.rb CHANGED
@@ -23,6 +23,7 @@ module Astro
23
23
  app.configure :development, :production do |app|
24
24
  app.before do
25
25
  assets.append_path 'app/assets/javascripts'
26
+ assets.append_path 'app/assets/stylesheets'
26
27
  end
27
28
  end
28
29
 
@@ -30,13 +31,12 @@ module Astro
30
31
  app.configure :test do |app|
31
32
  app.before do
32
33
  assets.append_path 'spec/assets/javascripts'
34
+ assets.append_path 'spec/assets/stylesheets'
33
35
  end
34
36
  end
35
37
 
36
38
  app.before do
37
- assets.register_preprocessor \
38
- 'application/javascript', :astro do |context, data|
39
-
39
+ processor = lambda do |context, data|
40
40
  ##
41
41
  # If we're processing the root asset, require all of
42
42
  # the assets in the assets list and return the data
@@ -50,6 +50,11 @@ module Astro
50
50
 
51
51
  data
52
52
  end
53
+
54
+ assets.register_preprocessor \
55
+ 'application/javascript', :astro, &processor
56
+ assets.register_preprocessor \
57
+ 'text/css', :astro, &processor
53
58
  end
54
59
 
55
60
  end
@@ -15,6 +15,7 @@ module Astro
15
15
  def call( env )
16
16
  sprockets = ::Sprockets::Environment.new
17
17
  sprockets.append_path 'lib/assets/javascripts'
18
+ sprockets.append_path 'lib/assets/stylesheets'
18
19
 
19
20
  env[ 'astro.sprockets' ] = sprockets
20
21
 
data/lib/astro/server.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  require 'sinatra/base'
2
+ require 'sinatra/respond_with'
2
3
 
3
4
  module Astro
4
5
  class Server < Sinatra::Base
5
6
 
6
7
  register Astro::Assets
8
+ register Sinatra::RespondWith
7
9
 
8
10
  use Astro::Middleware::QueryString
9
11
  use Astro::Middleware::Sprockets
@@ -11,17 +13,23 @@ module Astro
11
13
  ##
12
14
  # TODO docs
13
15
  error Sprockets::FileNotFound do
14
- halt 404, erb( :error )
16
+ status 404
17
+ respond_with :error
15
18
  end
16
19
 
17
20
  ##
18
21
  # TODO docs
19
22
  before( '/javascripts' ){ content_type 'application/javascript' }
23
+ before( '/stylesheets' ){ content_type 'text/css' }
20
24
 
21
25
  ##
22
26
  # TODO docs
23
27
  get( '/javascripts' ){ assets[ 'astro.js' ].to_s }
24
28
 
29
+ ##
30
+ # TODO docs
31
+ get( '/stylesheets' ){ assets[ 'astro.css' ].to_s }
32
+
25
33
  # TODO get /javascripts/:name
26
34
  # - display available versions?
27
35
  # - 3xx if found, 4xx if missing?
data/lib/astro/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Astro
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Astro.js <%= $!.to_s %>.
3
+ */
4
+ body { background : #f00; }
File without changes
@@ -0,0 +1,5 @@
1
+ /*
2
+ *= require foo
3
+ */
4
+
5
+ /* bar.css */
@@ -0,0 +1 @@
1
+ /* foo.css */
@@ -14,9 +14,12 @@ describe Astro::Middleware::Sprockets do
14
14
  subject { last_request.env[ 'astro.sprockets' ] }
15
15
 
16
16
  it { should be_a( Sprockets::Environment ) }
17
- it { should have( 1 ).paths }
17
+ it { should have( 2 ).paths }
18
18
 
19
- it 'has the correct paths' do
19
+ it 'has the javascripts directory in the path' do
20
20
  subject.paths[ 0 ].should =~ /lib\/assets\/javascripts$/
21
21
  end
22
+ it 'has the stylesheets directory in the path' do
23
+ subject.paths[ 1 ].should =~ /lib\/assets\/stylesheets$/
24
+ end
22
25
  end
@@ -14,29 +14,61 @@ describe Astro::Server do
14
14
  context 'empty' do
15
15
  before { get '/javascripts' }
16
16
  its( :status ){ should == 200 }
17
- example( 'headers' ){ verify { subject.headers } }
18
- example( 'body' ){ verify( :format => :js ){ subject.body } }
17
+ example( 'headers' ){ verify( :format => :txt ){ subject.headers } }
18
+ example( 'body' ){ verify( :format => :js ){ subject.body } }
19
19
  end
20
20
 
21
21
  context 'foo' do
22
22
  before { get '/javascripts?foo' }
23
23
  its( :status ){ should == 200 }
24
- example( 'headers' ){ verify { subject.headers } }
25
- example( 'body' ){ verify( :format => :js ){ subject.body } }
24
+ example( 'headers' ){ verify( :format => :txt ){ subject.headers } }
25
+ example( 'body' ){ verify( :format => :js ){ subject.body } }
26
26
  end
27
27
 
28
28
  context 'bar' do
29
29
  before { get '/javascripts?bar' }
30
30
  its( :status ){ should == 200 }
31
- example( 'headers' ){ verify { subject.headers } }
32
- example( 'body' ){ verify( :format => :js ){ subject.body } }
31
+ example( 'headers' ){ verify( :format => :txt ){ subject.headers } }
32
+ example( 'body' ){ verify( :format => :js ){ subject.body } }
33
33
  end
34
34
 
35
35
  context 'baz' do
36
36
  before { get '/javascripts?baz' }
37
37
  its( :status ){ should == 404 }
38
- example( 'headers' ){ verify { subject.headers } }
39
- example( 'body' ){ verify( :format => :js ){ subject.body } }
38
+ example( 'headers' ){ verify( :format => :txt ){ subject.headers } }
39
+ example( 'body' ){ verify( :format => :js ){ subject.body } }
40
+ end
41
+ end
42
+
43
+ describe 'stylesheets' do
44
+ subject { last_response }
45
+
46
+ context 'empty' do
47
+ before { get '/stylesheets' }
48
+ its( :status ){ should == 200 }
49
+ example( 'headers' ){ verify( :format => :txt ){ subject.headers } }
50
+ example( 'body' ){ verify( :format => :css ){ subject.body } }
51
+ end
52
+
53
+ context 'foo' do
54
+ before { get '/stylesheets?foo' }
55
+ its( :status ){ should == 200 }
56
+ example( 'headers' ){ verify( :format => :txt ){ subject.headers } }
57
+ example( 'body' ){ verify( :format => :css ){ subject.body } }
58
+ end
59
+
60
+ context 'bar' do
61
+ before { get '/stylesheets?bar' }
62
+ its( :status ){ should == 200 }
63
+ example( 'headers' ){ verify( :format => :txt ){ subject.headers } }
64
+ example( 'body' ){ verify( :format => :css ){ subject.body } }
65
+ end
66
+
67
+ context 'baz' do
68
+ before { get '/stylesheets?baz' }
69
+ its( :status ){ should == 404 }
70
+ example( 'headers' ){ verify( :format => :txt ){ subject.headers } }
71
+ example( 'body' ){ verify( :format => :css ){ subject.body } }
40
72
  end
41
73
  end
42
74
  end
@@ -0,0 +1,16 @@
1
+ /* foo.css */
2
+ /*
3
+
4
+ */
5
+ /* bar.css */
6
+ /**
7
+ * ______ __
8
+ * /\ _ \ /\ \__ __
9
+ * \ \ \L\ \ ____\ \ ,_\ _ __ ___ /\_\ ____
10
+ * \ \ __ \ /',__\ \ \/ /\`'__\/ __`\ \/\ \ /',__\
11
+ * \ \ \/\ \/\__, `\ \ \_\ \ \//\ \L\ \__ \ \ \/\__, `\
12
+ * \ \_\ \_\/\____/ \ \__\ \_\ \____/\_\_\ \ \/\____/
13
+ * \/_/\/_/\/___/ \/__/ \/_/ \/___/\/_/\ \_\ \/___/
14
+ * \ \____/
15
+ * \/___/
16
+ */
@@ -0,0 +1,5 @@
1
+ {
2
+ "Content-Type" => "text/css;charset=utf-8",
3
+ "Content-Length" => "516",
4
+ "X-Content-Type-Options" => "nosniff"
5
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Astro.js couldn't find file 'baz'.
3
+ */
4
+ body {
5
+ background: #f00;
6
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "Content-Type" => "text/css;charset=utf-8",
3
+ "Content-Length" => "74",
4
+ "X-Content-Type-Options" => "nosniff"
5
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * ______ __
3
+ * /\ _ \ /\ \__ __
4
+ * \ \ \L\ \ ____\ \ ,_\ _ __ ___ /\_\ ____
5
+ * \ \ __ \ /',__\ \ \/ /\`'__\/ __`\ \/\ \ /',__\
6
+ * \ \ \/\ \/\__, `\ \ \_\ \ \//\ \L\ \__ \ \ \/\__, `\
7
+ * \ \_\ \_\/\____/ \ \__\ \_\ \____/\_\_\ \ \/\____/
8
+ * \/_/\/_/\/___/ \/__/ \/_/ \/___/\/_/\ \_\ \/___/
9
+ * \ \____/
10
+ * \/___/
11
+ */
@@ -0,0 +1,5 @@
1
+ {
2
+ "Content-Type" => "text/css;charset=utf-8",
3
+ "Content-Length" => "477",
4
+ "X-Content-Type-Options" => "nosniff"
5
+ }
@@ -0,0 +1,12 @@
1
+ /* foo.css */
2
+ /**
3
+ * ______ __
4
+ * /\ _ \ /\ \__ __
5
+ * \ \ \L\ \ ____\ \ ,_\ _ __ ___ /\_\ ____
6
+ * \ \ __ \ /',__\ \ \/ /\`'__\/ __`\ \/\ \ /',__\
7
+ * \ \ \/\ \/\__, `\ \ \_\ \ \//\ \L\ \__ \ \ \/\__, `\
8
+ * \ \_\ \_\/\____/ \ \__\ \_\ \____/\_\_\ \ \/\____/
9
+ * \/_/\/_/\/___/ \/__/ \/_/ \/___/\/_/\ \_\ \/___/
10
+ * \ \____/
11
+ * \/___/
12
+ */
@@ -0,0 +1,5 @@
1
+ {
2
+ "Content-Type" => "text/css;charset=utf-8",
3
+ "Content-Length" => "492",
4
+ "X-Content-Type-Options" => "nosniff"
5
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: astro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-13 00:00:00.000000000 Z
12
+ date: 2013-06-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: 1.4.3
30
+ - !ruby/object:Gem::Dependency
31
+ name: sinatra-contrib
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.4.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.4.0
30
46
  - !ruby/object:Gem::Dependency
31
47
  name: sprockets
32
48
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +130,7 @@ dependencies:
114
130
  requirements:
115
131
  - - ~>
116
132
  - !ruby/object:Gem::Version
117
- version: 0.2.2
133
+ version: 0.4.0
118
134
  type: :development
119
135
  prerelease: false
120
136
  version_requirements: !ruby/object:Gem::Requirement
@@ -122,7 +138,7 @@ dependencies:
122
138
  requirements:
123
139
  - - ~>
124
140
  - !ruby/object:Gem::Version
125
- version: 0.2.2
141
+ version: 0.4.0
126
142
  - !ruby/object:Gem::Dependency
127
143
  name: uglifier
128
144
  requirement: !ruby/object:Gem::Requirement
@@ -139,6 +155,38 @@ dependencies:
139
155
  - - ~>
140
156
  - !ruby/object:Gem::Version
141
157
  version: 2.1.1
158
+ - !ruby/object:Gem::Dependency
159
+ name: awesome_print
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
164
+ - !ruby/object:Gem::Version
165
+ version: 1.1.0
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 1.1.0
174
+ - !ruby/object:Gem::Dependency
175
+ name: sass
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ~>
180
+ - !ruby/object:Gem::Version
181
+ version: 3.2.9
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ~>
188
+ - !ruby/object:Gem::Version
189
+ version: 3.2.9
142
190
  - !ruby/object:Gem::Dependency
143
191
  name: guard-rspec
144
192
  requirement: !ruby/object:Gem::Requirement
@@ -192,15 +240,19 @@ files:
192
240
  - astro.gemspec
193
241
  - config.ru
194
242
  - lib/assets/javascripts/astro.js
243
+ - lib/assets/stylesheets/astro.css
195
244
  - lib/astro.rb
196
245
  - lib/astro/assets.rb
197
246
  - lib/astro/middleware/query_string.rb
198
247
  - lib/astro/middleware/sprockets.rb
199
248
  - lib/astro/server.rb
200
249
  - lib/astro/version.rb
201
- - lib/astro/views/error.erb
250
+ - lib/astro/views/error.css.erb
251
+ - lib/astro/views/error.js.erb
202
252
  - spec/assets/javascripts/bar.js
203
253
  - spec/assets/javascripts/foo.js
254
+ - spec/assets/stylesheets/bar.css
255
+ - spec/assets/stylesheets/foo.css
204
256
  - spec/astro/middleware/query_string_spec.rb
205
257
  - spec/astro/middleware/sprockets_spec.rb
206
258
  - spec/astro/server_spec.rb
@@ -212,6 +264,14 @@ files:
212
264
  - spec/astro/server_spec/astro_server/javascripts/empty/headers.txt
213
265
  - spec/astro/server_spec/astro_server/javascripts/foo/body.js
214
266
  - spec/astro/server_spec/astro_server/javascripts/foo/headers.txt
267
+ - spec/astro/server_spec/astro_server/stylesheets/bar/body.css
268
+ - spec/astro/server_spec/astro_server/stylesheets/bar/headers.txt
269
+ - spec/astro/server_spec/astro_server/stylesheets/baz/body.css
270
+ - spec/astro/server_spec/astro_server/stylesheets/baz/headers.txt
271
+ - spec/astro/server_spec/astro_server/stylesheets/empty/body.css
272
+ - spec/astro/server_spec/astro_server/stylesheets/empty/headers.txt
273
+ - spec/astro/server_spec/astro_server/stylesheets/foo/body.css
274
+ - spec/astro/server_spec/astro_server/stylesheets/foo/headers.txt
215
275
  - spec/spec_helper.rb
216
276
  - spec/support/approvals.rb
217
277
  - spec/support/pry.rb
@@ -243,6 +303,8 @@ summary: Your DIY asset distribution web service.
243
303
  test_files:
244
304
  - spec/assets/javascripts/bar.js
245
305
  - spec/assets/javascripts/foo.js
306
+ - spec/assets/stylesheets/bar.css
307
+ - spec/assets/stylesheets/foo.css
246
308
  - spec/astro/middleware/query_string_spec.rb
247
309
  - spec/astro/middleware/sprockets_spec.rb
248
310
  - spec/astro/server_spec.rb
@@ -254,6 +316,14 @@ test_files:
254
316
  - spec/astro/server_spec/astro_server/javascripts/empty/headers.txt
255
317
  - spec/astro/server_spec/astro_server/javascripts/foo/body.js
256
318
  - spec/astro/server_spec/astro_server/javascripts/foo/headers.txt
319
+ - spec/astro/server_spec/astro_server/stylesheets/bar/body.css
320
+ - spec/astro/server_spec/astro_server/stylesheets/bar/headers.txt
321
+ - spec/astro/server_spec/astro_server/stylesheets/baz/body.css
322
+ - spec/astro/server_spec/astro_server/stylesheets/baz/headers.txt
323
+ - spec/astro/server_spec/astro_server/stylesheets/empty/body.css
324
+ - spec/astro/server_spec/astro_server/stylesheets/empty/headers.txt
325
+ - spec/astro/server_spec/astro_server/stylesheets/foo/body.css
326
+ - spec/astro/server_spec/astro_server/stylesheets/foo/headers.txt
257
327
  - spec/spec_helper.rb
258
328
  - spec/support/approvals.rb
259
329
  - spec/support/pry.rb