sinatra-ember 0.0.1

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/.gitignore ADDED
@@ -0,0 +1 @@
1
+ .*.swp
data/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # Sinatra Ember
2
+
3
+ Helpers for serving an [Ember.js][ember] app from [Sinatra][sinatra].
4
+
5
+ - Pre-compile handlebars templates from separate view files rather than littering them throughout your html.
6
+
7
+
8
+ ## Installation
9
+
10
+ You can install Sinatra Ember as a Ruby gem. You can install it via `gem install`.
11
+
12
+ ``` console
13
+ $ gem install sinatra-ember
14
+ ```
15
+
16
+ ### Bundler users
17
+
18
+ If you use Bundler, add it to your *Gemfile.*
19
+
20
+ ``` ruby
21
+ gem 'sinatra-ember', :require => 'sinatra/ember'
22
+ ```
23
+
24
+
25
+ ## Setup
26
+
27
+ Install the plugin and add some options.
28
+
29
+ ``` ruby
30
+ require 'sinatra/ember'
31
+
32
+ class App < Sinatra::Base
33
+ register Sinatra::Ember
34
+ serve_templates '/js/templates.js'
35
+ end
36
+ ```
37
+
38
+ ## Sinatra AssetPack
39
+
40
+ If you're using the [sinatra-assetpack][assetpack] gem, add your served templates to a package.
41
+
42
+
43
+ [assetpack]: https://github.com/rstacruz/sinatra-assetpack
44
+ [ember]: http://emberjs.com
45
+ [sinatra]: http://sinatrarb.com
@@ -0,0 +1,83 @@
1
+ module Sinatra
2
+ module Ember
3
+ def self.version
4
+ "0.0.1"
5
+ end
6
+
7
+ def self.registered(app)
8
+ app.extend ClassMethods
9
+ end
10
+
11
+ module ClassMethods
12
+ # set ember options
13
+ def ember(&block)
14
+ @ember_options ||= Options.new(self, &block)
15
+ self.ember_init! if block_given?
16
+ @ember_options
17
+ end
18
+
19
+ def ember_init!
20
+ ember.template_packages.each do |route, globs|
21
+ get route do
22
+ mtime, output = @template_cache.fetch(route) do
23
+ # find all the template files
24
+ paths = globs.map do |glob|
25
+ glob = File.expand_path(File.join(settings.root, glob))
26
+ Dir[glob].map { |x| x.squeeze('/') }
27
+ end
28
+ paths = paths.flatten.uniq
29
+
30
+ # build up template hash
31
+ template_paths = {}
32
+ paths.each do |path|
33
+ template_paths[File.basename(path, '.hbs')] = path
34
+ end
35
+
36
+ # build up the javascript
37
+ templates = template_paths.map do |(name, path)|
38
+ content = File.read(path)
39
+ "Ember.TEMPLATES[#{name.inspect}] = Ember.Handlebars.compile(#{content.inspect});"
40
+ end
41
+
42
+ # wrap it up in a closure
43
+ output = %{
44
+ (function() {
45
+ #{templates.join("\n")}
46
+ })();
47
+ }
48
+ output = output.strip.gsub(/^ {16}/, '')
49
+
50
+ # compute the maximum mtime for all paths
51
+ mtime = paths.map do |path|
52
+ if File.file?(path)
53
+ File.mtime(path).to_i
54
+ end
55
+ end.compact.max
56
+
57
+ [mtime, output]
58
+ end
59
+
60
+ content_type :js
61
+ last_modified mtime
62
+ output
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ class Options
69
+ attr_reader :template_packages
70
+
71
+ def initialize(app, &block)
72
+ @app = app
73
+ @template_packages = {}
74
+
75
+ instance_eval(&block)
76
+ end
77
+
78
+ def templates(route, files=[])
79
+ @template_packages[route] = files
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,14 @@
1
+ require './lib/sinatra/ember'
2
+ Gem::Specification.new do |s|
3
+ s.name = 'sinatra-ember'
4
+ s.version = Sinatra::Ember.version
5
+ s.summary = 'Helpers for serving an Ember.js app from Sinatra.'
6
+ s.description = 'Serves Ember Handlebars pages.'
7
+ s.authors = ['Ben Scott']
8
+ s.email = ['gamepoet@gmail.com']
9
+ s.homepage = 'http://github.com/gamepoet/sinatra-ember'
10
+ s.files = `git ls-files`.strip.split("\n")
11
+ s.executables = Dir['bin/*'].map { |f| File.basename(f) }
12
+
13
+ s.add_dependency 'sinatra'
14
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinatra-ember
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ben Scott
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sinatra
16
+ requirement: &70219783856880 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70219783856880
25
+ description: Serves Ember Handlebars pages.
26
+ email:
27
+ - gamepoet@gmail.com
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - README.md
34
+ - lib/sinatra/ember.rb
35
+ - sinatra-ember.gemspec
36
+ homepage: http://github.com/gamepoet/sinatra-ember
37
+ licenses: []
38
+ post_install_message:
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 1.8.17
57
+ signing_key:
58
+ specification_version: 3
59
+ summary: Helpers for serving an Ember.js app from Sinatra.
60
+ test_files: []