webmachine-sprockets 0.1.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/Gemfile +7 -0
- data/README.md +45 -0
- data/Rakefile +8 -0
- data/lib/webmachine/sprockets/resource.rb +50 -0
- data/lib/webmachine/sprockets/version.rb +5 -0
- data/lib/webmachine/sprockets.rb +13 -0
- data/test/test_integration.rb +21 -0
- data/webmachine-sprockets.gemspec +25 -0
- metadata +119 -0
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
webmachine-sprockets
|
2
|
+
====================
|
3
|
+
|
4
|
+
Webmachine for Ruby: Sprockets integration
|
5
|
+
|
6
|
+
> Sprockets is a Ruby library for compiling and serving web assets. It features declarative dependency management for JavaScript and CSS assets, as well as a powerful preprocessor pipeline that allows you to write assets in languages like CoffeeScript, Sass, SCSS and LESS.
|
7
|
+
|
8
|
+
[github.com/sstephenson/sprockets](https://github.com/sstephenson/sprockets)
|
9
|
+
|
10
|
+
> webmachine-ruby is a port of Webmachine, which is written in Erlang. The goal of both projects is to expose interesting parts of the HTTP protocol to your application in a declarative way. This means that you are less concerned with handling requests directly and more with describing the behavior of the resources that make up your application. Webmachine is not a web framework per se, but more of a toolkit for building HTTP-friendly applications. For example, it does not provide a templating engine or a persistence layer; those choices are up to you.
|
11
|
+
|
12
|
+
[github.com/seancribbs/webmachine-ruby](https://github.com/seancribbs/webmachine-ruby)
|
13
|
+
|
14
|
+
|
15
|
+
Usage
|
16
|
+
-----
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
require 'webmachine'
|
20
|
+
require 'webmachine/sprockets'
|
21
|
+
|
22
|
+
MyApp = Webmachine::Application.new do |app|
|
23
|
+
sprockets = Sprockets::Environment.new
|
24
|
+
sprockets.append_path 'app/assets/javascripts'
|
25
|
+
|
26
|
+
resource = Webmachine::Sprockets.resource_for(sprockets)
|
27
|
+
app.add_route [ 'assets', '*' ], resource
|
28
|
+
end
|
29
|
+
```
|
30
|
+
|
31
|
+
|
32
|
+
Contributing
|
33
|
+
------------
|
34
|
+
|
35
|
+
1. Fork at [github.com/lgierth/webmachine-sprockets](https://github.com/lgierth/webmachine-sprockets)
|
36
|
+
2. Create a branch and add your commits
|
37
|
+
4. Open a Pull Request
|
38
|
+
|
39
|
+
You can also open an issue for discussion first, if you like.
|
40
|
+
|
41
|
+
|
42
|
+
License
|
43
|
+
-------
|
44
|
+
|
45
|
+
webmachine-sprockets is subject to an MIT-style license (see LICENSE file).
|
data/Rakefile
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
Enumerator = Enumerable::Enumerator unless Object.const_defined?(:Enumerator)
|
2
|
+
|
3
|
+
module Webmachine
|
4
|
+
module Sprockets
|
5
|
+
class Resource < ::Webmachine::Resource
|
6
|
+
class << self
|
7
|
+
attr_accessor :sprockets
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@rack_response = call_sprockets(rack_env)
|
12
|
+
end
|
13
|
+
|
14
|
+
def finish_request
|
15
|
+
response.code = @rack_response[0]
|
16
|
+
response.headers.clear
|
17
|
+
response.headers.merge!(@rack_response[1])
|
18
|
+
response.body = Enumerator.new(@rack_response[2]).to_a.join
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def call_sprockets(env)
|
24
|
+
self.class.sprockets.call(env)
|
25
|
+
end
|
26
|
+
|
27
|
+
def rack_env
|
28
|
+
env = {
|
29
|
+
'PATH_INFO' => '/' + logical_path,
|
30
|
+
'QUERY_STRING' => query_string
|
31
|
+
}
|
32
|
+
request.headers.each {|key, value| env[cgi_key(key)] = value }
|
33
|
+
env
|
34
|
+
end
|
35
|
+
|
36
|
+
def cgi_key(key)
|
37
|
+
key = key.upcase.gsub('-', '_')
|
38
|
+
key =~ /^Content-(Type|Length)$/ ? key : 'HTTP_' + key
|
39
|
+
end
|
40
|
+
|
41
|
+
def logical_path
|
42
|
+
request.path_tokens.join("/")
|
43
|
+
end
|
44
|
+
|
45
|
+
def query_string
|
46
|
+
request.uri.query.to_s
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'webmachine'
|
2
|
+
require 'sprockets'
|
3
|
+
|
4
|
+
require 'webmachine/sprockets/resource'
|
5
|
+
require 'webmachine/sprockets/version'
|
6
|
+
|
7
|
+
module Webmachine
|
8
|
+
module Sprockets
|
9
|
+
def self.resource_for(sprockets)
|
10
|
+
Resource.dup.tap {|r| r.sprockets = sprockets }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'webmachine'
|
2
|
+
require 'webmachine/adapters/rack'
|
3
|
+
require 'webmachine/sprockets'
|
4
|
+
|
5
|
+
require 'test_server'
|
6
|
+
|
7
|
+
class TestServer
|
8
|
+
def webmachine_app(env)
|
9
|
+
Webmachine::Application.new do |app|
|
10
|
+
assets = Webmachine::Sprockets.resource_for(env)
|
11
|
+
app.add_route [ 'assets', '*' ], assets
|
12
|
+
|
13
|
+
index = Webmachine::Sprockets.resource_for(env.index)
|
14
|
+
app.add_route [ 'cached', 'javascripts', '*' ], index
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def default_app
|
19
|
+
Webmachine::Adapters::Rack.new(nil, webmachine_app(@env).dispatcher)
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'webmachine/sprockets/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'webmachine-sprockets'
|
7
|
+
s.version = Webmachine::Sprockets::VERSION
|
8
|
+
s.date = Date.today.to_s
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.authors = ['Lars Gierth']
|
11
|
+
s.email = ['lars.gierth@gmail.com']
|
12
|
+
s.homepage = 'https://github.com/lgierth/webmachine-sprockets'
|
13
|
+
s.summary = %q{Webmachine for Ruby: Sprockets integration}
|
14
|
+
s.description = s.summary
|
15
|
+
|
16
|
+
s.add_dependency 'webmachine', '~> 1.0'
|
17
|
+
s.add_dependency 'sprockets', '~> 2.0'
|
18
|
+
|
19
|
+
s.add_development_dependency 'rspec'
|
20
|
+
s.add_development_dependency 'rack'
|
21
|
+
|
22
|
+
s.files = `git ls-files`.split("\n") - ['.gitignore', '.travis.yml']
|
23
|
+
s.test_files = `git ls-files -- test/*`.split("\n")
|
24
|
+
s.require_paths = ['lib']
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: webmachine-sprockets
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Lars Gierth
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-09-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: webmachine
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: sprockets
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '2.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: '2.0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rack
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: ! 'Webmachine for Ruby: Sprockets integration'
|
79
|
+
email:
|
80
|
+
- lars.gierth@gmail.com
|
81
|
+
executables: []
|
82
|
+
extensions: []
|
83
|
+
extra_rdoc_files: []
|
84
|
+
files:
|
85
|
+
- Gemfile
|
86
|
+
- README.md
|
87
|
+
- Rakefile
|
88
|
+
- lib/webmachine/sprockets.rb
|
89
|
+
- lib/webmachine/sprockets/resource.rb
|
90
|
+
- lib/webmachine/sprockets/version.rb
|
91
|
+
- test/test_integration.rb
|
92
|
+
- webmachine-sprockets.gemspec
|
93
|
+
homepage: https://github.com/lgierth/webmachine-sprockets
|
94
|
+
licenses: []
|
95
|
+
post_install_message:
|
96
|
+
rdoc_options: []
|
97
|
+
require_paths:
|
98
|
+
- lib
|
99
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
requirements: []
|
112
|
+
rubyforge_project:
|
113
|
+
rubygems_version: 1.8.24
|
114
|
+
signing_key:
|
115
|
+
specification_version: 3
|
116
|
+
summary: ! 'Webmachine for Ruby: Sprockets integration'
|
117
|
+
test_files:
|
118
|
+
- test/test_integration.rb
|
119
|
+
has_rdoc:
|