handlebars-amd-rails 1.0.0.rc.3 → 1.0.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/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ ## On Master
2
+
3
+ ## 1.0.0.rc.3 (2013-02-23)
4
+
5
+ * Update README.md
6
+ * Update handlebars-amd-rails.gemspec
7
+ * Bump version according to current handlebars version.
8
+ * Add require-js partial and template handler.
9
+ * Add config.
10
+ * Initial import.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Handlebars Amd Rails
2
2
 
3
- Use Handlebars templates wrapped in a AMD define block, with the asset pipeline in Rails 3.1+ applications.
3
+ Use Handlebars templates precompiled and wrapped in a AMD define block, with the asset pipeline in Rails 3.1+ applications.
4
4
 
5
5
  ## Installation
6
6
 
@@ -32,28 +32,45 @@ Require handlebars.js in your AMD config file
32
32
 
33
33
  Place individual Handlebars template file in their own file with template_name.{hbs, handlebars} extension.
34
34
 
35
+ ```html
36
+ <!-- app/assets/javascripts/templates/shared/header.hbs -->
37
+
38
+ <header>
39
+ A logo perhaps?
40
+ </header>
35
41
  ```
36
- /* app/assets/javascripts/templates/demo.hbs */
37
42
 
38
- Hello {{name}}! You have {{count}} new messages.
43
+ ```html
44
+ <!-- app/assets/javascripts/templates/demo/index.hbs -->
45
+
46
+ {{>shared/_header}}
47
+
48
+ <p class="welcome">
49
+ Hello {{name}}! You have {{count}} new messages.
50
+ </p>
39
51
  ```
40
52
 
41
53
  Which will be compiled and rendered as:
42
54
 
43
55
  ```javascript
44
- define(['handlebars'], function(Handlebars) {
45
- var templates = Handlebars.templates || (Handlebars.templates = {});
46
- return templates['demo'] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
47
- helpers = helpers || Handlebars.helpers; data = data || {};
48
- return "Hello {{name}}! You have {{count}} new messages.";
49
- });
56
+ define([
57
+ "handlebars",
58
+ "partial!shared/_header"
59
+ ], function(Handlebars) {
60
+ var templates = Handlebars.templates || (Handlebars.templates = {});
61
+ return templates['demo/index'] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
62
+ helpers = helpers || Handlebars.helpers; partials = partials || Handlebars.partials; data = data || {};
63
+ var buffer = "";
64
+ // …
65
+ return buffer;
66
+ });
50
67
  });
51
68
  ```
52
69
 
53
70
  You can take advantage of the asset pipeline by chaining your template through other processors like haml:
54
71
 
55
- ```
56
- /* app/assets/javascripts/templates/demo.hbs.haml */
72
+ ```haml
73
+ / app/assets/javascripts/templates/demo/index.hbs.haml
57
74
 
58
75
  %p.welcome
59
76
  Hello {{name}}! You have {{count}} new messages.
@@ -62,9 +79,11 @@ You can take advantage of the asset pipeline by chaining your template through o
62
79
  Which will be compiled and rendered as:
63
80
 
64
81
  ```javascript
65
- define(['handlebars'], function(Handlebars) {
82
+ define([
83
+ "handlebars"
84
+ ], function(Handlebars) {
66
85
  var templates = Handlebars.templates || (Handlebars.templates = {});
67
- return templates['demo'] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
86
+ return templates['demo/index'] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
68
87
  helpers = helpers || Handlebars.helpers; data = data || {};
69
88
  return "<p class='welcome'>Hello {{name}}! You have {{count}} new messages.</p>";
70
89
  });
@@ -84,36 +103,7 @@ Using templates:
84
103
  ```javascript
85
104
  require([
86
105
  'jquery',
87
- 'template!demo'
88
- ], function ($, template) {
89
- $('body').html(template({
90
- name: 'Joe', count: 10
91
- }))
92
- });
93
- ```
94
-
95
- If the template renders partials, partial files need to be required:
96
-
97
- ```
98
- /* app/assets/javascripts/templates/demo.hbs */
99
-
100
- {{>_header}}
101
-
102
- Hello {{name}}! You have {{count}} new messages.
103
- ```
104
-
105
- ```
106
- /* app/assets/javascripts/templates/_header.hbs */
107
-
108
- %header
109
- Hola!
110
- ```
111
-
112
- ```javascript
113
- require([
114
- 'jquery',
115
- 'template!demo',
116
- 'partial!_header',
106
+ 'template!demo/index'
117
107
  ], function ($, template) {
118
108
  $('body').html(template({
119
109
  name: 'Joe', count: 10
@@ -8,8 +8,8 @@ Gem::Specification.new do |gem|
8
8
  gem.version = Handlebars::Amd::Rails::VERSION
9
9
  gem.authors = ["Steffen Leistner"]
10
10
  gem.email = ["sleistner@gmail.com"]
11
- gem.summary = %q{Use Handlebars templates wrapped in a AMD define block with rails.}
12
- gem.description = %q{Use Handlebars templates wrapped in a AMD define block, with the asset pipeline in Rails 3.1+ applications.}
11
+ gem.summary = %q{Use Handlebars templates precompiled and wrapped in a AMD define block with rails.}
12
+ gem.description = %q{Use Handlebars templates precompiled and wrapped in a AMD define block, with the asset pipeline in Rails 3.1+ applications.}
13
13
  gem.homepage = "https://github.com/sleistner/handlebars-amd-rails"
14
14
 
15
15
  gem.rubyforge_project = "handlebars-amd-rails"
@@ -48,7 +48,7 @@ module Handlebars
48
48
 
49
49
  def interpolate(template)
50
50
  unindent <<-JS
51
- define(['handlebars'], function(Handlebars) {
51
+ define(#{requirements}, function(Handlebars) {
52
52
  var templates = Handlebars.templates || (Handlebars.templates = {});
53
53
  return templates['#{template_name}'] = Handlebars.template(#{template});
54
54
  });
@@ -62,6 +62,16 @@ module Handlebars
62
62
  end
63
63
  end
64
64
 
65
+ def requirements
66
+ JSON.pretty_generate(['handlebars'] + detect_partials)
67
+ end
68
+
69
+ def detect_partials
70
+ data.scan(/\{\{>\s*([^\s]*)\s*\}\}/).flatten.uniq.map do |partial|
71
+ "partial!#{partial}"
72
+ end
73
+ end
74
+
65
75
  end
66
76
  end
67
77
  end
@@ -1,7 +1,7 @@
1
1
  module Handlebars
2
2
  module Amd
3
3
  module Rails
4
- VERSION = "1.0.0.rc.3"
4
+ VERSION = "1.0.0"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,4 @@
1
+ {{>shared/header}}
2
+ hello {name}!
3
+ {{> contact/business_card}}
4
+ {{> shared/footer }}
@@ -2,9 +2,6 @@ require_relative './spec_helper'
2
2
 
3
3
  describe Handlebars::Amd::Rails::Template do
4
4
 
5
- subject do
6
- Handlebars::Amd::Rails::Template.new(fixture_path('demo.hbs'))
7
- end
8
5
 
9
6
  describe '#evaluate' do
10
7
 
@@ -13,16 +10,48 @@ describe Handlebars::Amd::Rails::Template do
13
10
  Handlebars::Amd::Rails::Source.stub(:path).and_return(helper('handlebars.js'))
14
11
  end
15
12
 
16
- it 'compiles a template wrapped in a define block' do
17
- expected = unindent <<-JS
18
- define(['handlebars'], function(Handlebars) {
19
- var templates = Handlebars.templates || (Handlebars.templates = {});
20
- return templates['demo'] = Handlebars.template("Precompiled!");
21
- });
22
- JS
23
- subject.evaluate(nil, nil).should == expected
13
+ context('without partials') do
14
+
15
+ subject do
16
+ Handlebars::Amd::Rails::Template.new(fixture_path('demo.hbs'))
17
+ end
18
+
19
+ it 'compiles a template wrapped in a define block' do
20
+ expected = unindent <<-JS
21
+ define([
22
+ "handlebars"
23
+ ], function(Handlebars) {
24
+ var templates = Handlebars.templates || (Handlebars.templates = {});
25
+ return templates['demo'] = Handlebars.template("Precompiled!");
26
+ });
27
+ JS
28
+ subject.evaluate(nil, nil).should == expected
24
29
  end
25
30
 
31
+ describe('with partials') do
32
+
33
+ subject do
34
+ Handlebars::Amd::Rails::Template.new(fixture_path('demo-with-partials.hbs'))
35
+ end
36
+
37
+ it 'compiles a template wrapped in a define block with partial requirements' do
38
+ expected = unindent <<-JS
39
+ define([
40
+ "handlebars",
41
+ "partial!shared/header",
42
+ "partial!contact/business_card",
43
+ "partial!shared/footer"
44
+ ], function(Handlebars) {
45
+ var templates = Handlebars.templates || (Handlebars.templates = {});
46
+ return templates['demo-with-partials'] = Handlebars.template("Precompiled!");
47
+ });
48
+ JS
49
+ subject.evaluate(nil, nil).should == expected
50
+ end
51
+ end
52
+
53
+ end
54
+
26
55
  end
27
56
 
28
57
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: handlebars-amd-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc.3
5
- prerelease: 6
4
+ version: 1.0.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Steffen Leistner
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-23 00:00:00.000000000 Z
12
+ date: 2013-03-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -59,8 +59,8 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
- description: Use Handlebars templates wrapped in a AMD define block, with the asset
63
- pipeline in Rails 3.1+ applications.
62
+ description: Use Handlebars templates precompiled and wrapped in a AMD define block,
63
+ with the asset pipeline in Rails 3.1+ applications.
64
64
  email:
65
65
  - sleistner@gmail.com
66
66
  executables: []
@@ -70,6 +70,7 @@ files:
70
70
  - .gitignore
71
71
  - .jshintrc
72
72
  - .rspec
73
+ - CHANGELOG.md
73
74
  - Gemfile
74
75
  - LICENSE.txt
75
76
  - README.md
@@ -80,6 +81,7 @@ files:
80
81
  - lib/handlebars-amd-rails/rails/railtie.rb
81
82
  - lib/handlebars-amd-rails/rails/template.rb
82
83
  - lib/handlebars-amd-rails/version.rb
84
+ - spec/fixtures/demo-with-partials.hbs
83
85
  - spec/fixtures/demo.hbs
84
86
  - spec/handlebars_spec.rb
85
87
  - spec/helper/handlebars.js
@@ -101,19 +103,27 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
103
  - - ! '>='
102
104
  - !ruby/object:Gem::Version
103
105
  version: '0'
106
+ segments:
107
+ - 0
108
+ hash: -1073423435357479313
104
109
  required_rubygems_version: !ruby/object:Gem::Requirement
105
110
  none: false
106
111
  requirements:
107
- - - ! '>'
112
+ - - ! '>='
108
113
  - !ruby/object:Gem::Version
109
- version: 1.3.1
114
+ version: '0'
115
+ segments:
116
+ - 0
117
+ hash: -1073423435357479313
110
118
  requirements: []
111
119
  rubyforge_project: handlebars-amd-rails
112
120
  rubygems_version: 1.8.23
113
121
  signing_key:
114
122
  specification_version: 3
115
- summary: Use Handlebars templates wrapped in a AMD define block with rails.
123
+ summary: Use Handlebars templates precompiled and wrapped in a AMD define block with
124
+ rails.
116
125
  test_files:
126
+ - spec/fixtures/demo-with-partials.hbs
117
127
  - spec/fixtures/demo.hbs
118
128
  - spec/handlebars_spec.rb
119
129
  - spec/helper/handlebars.js