sinatra-ember 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +62 -4
- data/lib/sinatra/ember.rb +51 -14
- metadata +10 -5
data/README.md
CHANGED
@@ -2,12 +2,14 @@
|
|
2
2
|
|
3
3
|
Helpers for serving an [Ember.js][ember] app from [Sinatra][sinatra].
|
4
4
|
|
5
|
-
- Pre-compile handlebars templates from separate view files rather than
|
5
|
+
- Pre-compile handlebars templates from separate view files rather than
|
6
|
+
littering them throughout your html.
|
6
7
|
|
7
8
|
|
8
9
|
## Installation
|
9
10
|
|
10
|
-
You can install Sinatra Ember as a Ruby gem. You can install it via `gem
|
11
|
+
You can install Sinatra Ember as a Ruby gem. You can install it via `gem
|
12
|
+
install`.
|
11
13
|
|
12
14
|
``` console
|
13
15
|
$ gem install sinatra-ember
|
@@ -31,13 +33,69 @@ require 'sinatra/ember'
|
|
31
33
|
|
32
34
|
class App < Sinatra::Base
|
33
35
|
register Sinatra::Ember
|
34
|
-
|
36
|
+
ember {
|
37
|
+
templates '/js/templates.js', ['app/templates/**/*.hbs'], :relative_to => 'app/templates'
|
38
|
+
|
39
|
+
# optional; defaults to :path
|
40
|
+
template_name_style :path
|
41
|
+
}
|
35
42
|
end
|
36
43
|
```
|
37
44
|
|
45
|
+
|
46
|
+
## API reference
|
47
|
+
|
48
|
+
### ember.templates
|
49
|
+
|
50
|
+
Combines templates in the given paths into a single asset of those templates in
|
51
|
+
javascript form.
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
# Usage:
|
55
|
+
ember {
|
56
|
+
templates 'URI', [PATH, PATH, ...], OPTIONS_HASH
|
57
|
+
}
|
58
|
+
```
|
59
|
+
|
60
|
+
`URI`
|
61
|
+
> a string defining where the templates will be served.
|
62
|
+
|
63
|
+
`PATH`
|
64
|
+
> a string or glob pattern describing a file or files that should be included
|
65
|
+
|
66
|
+
#### Options
|
67
|
+
|
68
|
+
`:relative_to`
|
69
|
+
> a string describing a path relative to the Sinatra root from which the
|
70
|
+
> template names should be made relative to when using the `:path` template
|
71
|
+
> name style. For example, if `:relative_to` is `app/templates` and the `PATH`
|
72
|
+
> `app/templates/views/post.hbs` will be named `views/post`.
|
73
|
+
|
74
|
+
|
75
|
+
### ember.template\_name\_style
|
76
|
+
|
77
|
+
Defines the style by which template names will be derived from the paths.
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
# Usage:
|
81
|
+
ember {
|
82
|
+
template_name_style :basename
|
83
|
+
}
|
84
|
+
```
|
85
|
+
|
86
|
+
Valid options include:
|
87
|
+
|
88
|
+
`:path`
|
89
|
+
> the template will be named as a relative path to the template file
|
90
|
+
|
91
|
+
`:basename`
|
92
|
+
> the template will be named as the basename of the template file
|
93
|
+
|
94
|
+
|
38
95
|
## Sinatra AssetPack
|
39
96
|
|
40
|
-
If you're using the [sinatra-assetpack][assetpack] gem, add your served
|
97
|
+
If you're using the [sinatra-assetpack][assetpack] gem, add your served
|
98
|
+
templates to a package.
|
41
99
|
|
42
100
|
|
43
101
|
[assetpack]: https://github.com/rstacruz/sinatra-assetpack
|
data/lib/sinatra/ember.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Sinatra
|
2
2
|
module Ember
|
3
3
|
def self.version
|
4
|
-
"0.0.
|
4
|
+
"0.0.2"
|
5
5
|
end
|
6
6
|
|
7
7
|
def self.registered(app)
|
@@ -17,26 +17,39 @@ module Sinatra
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def ember_init!
|
20
|
-
ember.template_packages.each do |route,
|
20
|
+
ember.template_packages.each do |route, spec|
|
21
21
|
get route do
|
22
22
|
mtime, output = @template_cache.fetch(route) do
|
23
23
|
# find all the template files
|
24
|
-
paths = globs.map do |glob|
|
24
|
+
paths = spec.globs.map do |glob|
|
25
25
|
glob = File.expand_path(File.join(settings.root, glob))
|
26
26
|
Dir[glob].map { |x| x.squeeze('/') }
|
27
27
|
end
|
28
|
-
paths = paths.flatten.uniq
|
29
28
|
|
30
|
-
#
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
# define the portion of the path to remove
|
30
|
+
remove = settings.root
|
31
|
+
if spec.opts[:relative_to].empty?
|
32
|
+
remove = settings.root
|
33
|
+
else
|
34
|
+
remove = File.join(remove, spec.opts[:relative_to])
|
34
35
|
end
|
36
|
+
remove = File.expand_path(remove)
|
35
37
|
|
36
38
|
# build up the javascript
|
37
|
-
templates =
|
38
|
-
|
39
|
-
|
39
|
+
templates = paths.map do |files|
|
40
|
+
files.map do |file|
|
41
|
+
# derive the template name
|
42
|
+
tmpl_name = file.sub(/\.(handlebars|hbs|hjs)$/, '')
|
43
|
+
if settings.ember.template_name_style == :path
|
44
|
+
tmpl_name.sub!(/^#{Regexp.quote(remove)}\//, '')
|
45
|
+
else
|
46
|
+
tmpl_name = File.basename(tmpl_name)
|
47
|
+
end
|
48
|
+
|
49
|
+
# add the template content
|
50
|
+
content = File.read(file)
|
51
|
+
"Ember.TEMPLATES[#{tmpl_name.inspect}] = Ember.Handlebars.compile(#{content.inspect});"
|
52
|
+
end
|
40
53
|
end
|
41
54
|
|
42
55
|
# wrap it up in a closure
|
@@ -48,7 +61,7 @@ module Sinatra
|
|
48
61
|
output = output.strip.gsub(/^ {16}/, '')
|
49
62
|
|
50
63
|
# compute the maximum mtime for all paths
|
51
|
-
mtime = paths.map do |path|
|
64
|
+
mtime = paths.flatten.map do |path|
|
52
65
|
if File.file?(path)
|
53
66
|
File.mtime(path).to_i
|
54
67
|
end
|
@@ -70,13 +83,37 @@ module Sinatra
|
|
70
83
|
|
71
84
|
def initialize(app, &block)
|
72
85
|
@app = app
|
86
|
+
@template_name_style = :path
|
73
87
|
@template_packages = {}
|
74
88
|
|
75
89
|
instance_eval(&block)
|
76
90
|
end
|
77
91
|
|
78
|
-
def templates(route, files=[])
|
79
|
-
|
92
|
+
def templates(route, files=[], opts={})
|
93
|
+
opts_defaults = {
|
94
|
+
:relative_to => '',
|
95
|
+
}
|
96
|
+
opts = opts_defaults.merge(opts)
|
97
|
+
@template_packages[route] = TemplateSpec.new(route, files, opts)
|
98
|
+
end
|
99
|
+
|
100
|
+
def template_name_style(*args)
|
101
|
+
val = args.first
|
102
|
+
if not val.nil?
|
103
|
+
@template_name_style = val
|
104
|
+
end
|
105
|
+
return @template_name_style
|
106
|
+
end
|
107
|
+
alias :template_name_style= :template_name_style
|
108
|
+
end
|
109
|
+
|
110
|
+
class TemplateSpec
|
111
|
+
attr_accessor :route, :globs, :opts
|
112
|
+
|
113
|
+
def initialize(route, globs, opts)
|
114
|
+
@route = route
|
115
|
+
@globs = globs
|
116
|
+
@opts = opts
|
80
117
|
end
|
81
118
|
end
|
82
119
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-ember
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,12 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
description: Serves Ember Handlebars pages.
|
26
31
|
email:
|
27
32
|
- gamepoet@gmail.com
|
@@ -53,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
53
58
|
version: '0'
|
54
59
|
requirements: []
|
55
60
|
rubyforge_project:
|
56
|
-
rubygems_version: 1.8.
|
61
|
+
rubygems_version: 1.8.24
|
57
62
|
signing_key:
|
58
63
|
specification_version: 3
|
59
64
|
summary: Helpers for serving an Ember.js app from Sinatra.
|