mustache_rails3 0.1.2
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/LICENSE +23 -0
- data/config/initializers/mustache.rb +6 -0
- data/lib/generators/mustache.rb +9 -0
- data/lib/generators/mustache/controller/controller_generator.rb +39 -0
- data/lib/generators/mustache/controller/templates/view.html.mustache.erb +0 -0
- data/lib/generators/mustache/controller/templates/view.rb.erb +3 -0
- data/lib/generators/mustache/install/install_generator.rb +14 -0
- data/lib/generators/mustache/install/templates/config/initializers/mustache.rb +6 -0
- data/lib/generators/mustache/scaffold/scaffold_generator.rb +38 -0
- data/lib/generators/mustache/scaffold/templates/_form.html.mustache.erb +4 -0
- data/lib/generators/mustache/scaffold/templates/edit.html.mustache.erb +10 -0
- data/lib/generators/mustache/scaffold/templates/edit.rb.erb +53 -0
- data/lib/generators/mustache/scaffold/templates/index.html.mustache.erb +13 -0
- data/lib/generators/mustache/scaffold/templates/index.rb.erb +18 -0
- data/lib/generators/mustache/scaffold/templates/new.html.mustache.erb +11 -0
- data/lib/generators/mustache/scaffold/templates/new.rb.erb +50 -0
- data/lib/generators/mustache/scaffold/templates/show.html.mustache.erb +7 -0
- data/lib/generators/mustache/scaffold/templates/show.rb.erb +18 -0
- data/lib/mustache_rails.rb +123 -0
- data/readme.md +35 -0
- metadata +83 -0
data/LICENSE
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
The MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2010 Michael Harrison mh@michaelharrison.ws
|
4
|
+
Paul Barry
|
5
|
+
Martin Gamsjaeger
|
6
|
+
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
+
of this software and associated documentation files (the "Software"), to deal
|
9
|
+
in the Software without restriction, including without limitation the rights
|
10
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
+
copies of the Software, and to permit persons to whom the Software is
|
12
|
+
furnished to do so, subject to the following conditions:
|
13
|
+
|
14
|
+
The above copyright notice and this permission notice shall be included in
|
15
|
+
all copies or substantial portions of the Software.
|
16
|
+
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
+
THE SOFTWARE.
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'generators/mustache'
|
2
|
+
require 'rails/generators/named_base'
|
3
|
+
|
4
|
+
class Mustache
|
5
|
+
module Generators
|
6
|
+
class ControllerGenerator < ::Rails::Generators::NamedBase
|
7
|
+
extend TemplatePath
|
8
|
+
|
9
|
+
argument :actions, :type => :array, :default => [], :banner => "action action"
|
10
|
+
|
11
|
+
def create_view_files
|
12
|
+
model_path = File.join(class_path, file_name)
|
13
|
+
|
14
|
+
base_mustache_view_path = File.join("app/views", model_path)
|
15
|
+
empty_directory base_mustache_view_path
|
16
|
+
|
17
|
+
base_mustache_template_path = File.join("app/templates", model_path)
|
18
|
+
empty_directory base_mustache_template_path
|
19
|
+
|
20
|
+
actions.each do |action|
|
21
|
+
@action = action
|
22
|
+
mustache_view_path = File.join(base_mustache_view_path,
|
23
|
+
"#{action}.rb")
|
24
|
+
mustache_template_path = File.join(base_mustache_template_path,
|
25
|
+
"#{action}.html.mustache")
|
26
|
+
|
27
|
+
template "view.rb.erb", mustache_view_path
|
28
|
+
template "view.html.mustache.erb", mustache_template_path
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
def handler
|
35
|
+
:haml
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
File without changes
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'generators/mustache'
|
2
|
+
|
3
|
+
class Mustache
|
4
|
+
module Generators
|
5
|
+
class InstallGenerator < ::Rails::Generators::Base
|
6
|
+
extend TemplatePath
|
7
|
+
|
8
|
+
def copy_initializer_files
|
9
|
+
copy_file "config/initializers/mustache.rb", "config/initializers/mustache.rb"
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'generators/mustache'
|
2
|
+
require 'rails/generators/erb/scaffold/scaffold_generator'
|
3
|
+
|
4
|
+
class Mustache
|
5
|
+
module Generators
|
6
|
+
class ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
|
7
|
+
extend TemplatePath
|
8
|
+
|
9
|
+
# TODO Layout files? snusnu claims his template engine supports layouts:
|
10
|
+
# http://github.com/defunkt/mustache/issues/#issue/3/comment/263445
|
11
|
+
|
12
|
+
def copy_view_files
|
13
|
+
views = available_views
|
14
|
+
views.delete("index") if options[:singleton]
|
15
|
+
|
16
|
+
views.each do |view|
|
17
|
+
template "#{view}.rb.erb",
|
18
|
+
File.join("app/views", controller_file_path, "#{view}.rb")
|
19
|
+
template "#{view}.html.mustache.erb",
|
20
|
+
File.join("app/templates",
|
21
|
+
controller_file_path,
|
22
|
+
"#{view}.html.mustache")
|
23
|
+
end
|
24
|
+
template "_form.html.mustache.erb",
|
25
|
+
File.join("app/templates",
|
26
|
+
controller_file_path,
|
27
|
+
"_form.html.mustache")
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def available_views
|
33
|
+
%w(index edit show new)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
class <%= plural_name.camelize %>::Edit < Mustache::Rails
|
2
|
+
|
3
|
+
<%# TODO: extract errors_display settings to to module methods -%>
|
4
|
+
def errors_display_div
|
5
|
+
return "" unless <%= singular_name %>.errors.any?
|
6
|
+
content_tag("div", :id=>"errorExplanation", :class=>"errorExplanation") do
|
7
|
+
content_tag("h2", error_header) + content_tag("ul") do
|
8
|
+
<%= singular_name %>.errors.full_messages.inject("") do |memo,msg|
|
9
|
+
memo += content_tag("li", msg)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def <%= singular_name %>_form_tag
|
16
|
+
form_tag(update_path, :class => "<%= singular_name %>_form", :method => :put, :id => "edit_<%= singular_name %>_#{<%= singular_name %>.id}_form")
|
17
|
+
end
|
18
|
+
|
19
|
+
<% for attribute in attributes -%>
|
20
|
+
def <%= attribute.name %>_label
|
21
|
+
label :<%= singular_name %>, :<%= attribute.name %>
|
22
|
+
end
|
23
|
+
<%# TODO: Different fields for different attribute types -%>
|
24
|
+
|
25
|
+
def <%= attribute.name %>_text_field
|
26
|
+
text_field(:<%= singular_name %>, :<%= attribute.name %>, :id => "<%= attribute.name %>_text_field")
|
27
|
+
end
|
28
|
+
|
29
|
+
<% end -%>
|
30
|
+
|
31
|
+
def form_submit
|
32
|
+
submit_tag "Update"
|
33
|
+
end
|
34
|
+
|
35
|
+
def show_path
|
36
|
+
<%= singular_name %>_path(<%= singular_name %>)
|
37
|
+
end
|
38
|
+
|
39
|
+
def index_path
|
40
|
+
<%= plural_name %>_path
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def update_path
|
46
|
+
<%= singular_name %>_path(<%= singular_name %>)
|
47
|
+
end
|
48
|
+
|
49
|
+
def error_header
|
50
|
+
"u r dong it rong"
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<p>Listing <%= plural_name.capitalize %></p>
|
2
|
+
|
3
|
+
{{#listing}}
|
4
|
+
|
5
|
+
<p>
|
6
|
+
<% attributes.collect do |attribute| -%>
|
7
|
+
<b><%= attribute.human_name %></b>: {{<%= attribute.name %>}}
|
8
|
+
<% end.join(" | ") -%>
|
9
|
+
| <a href="{{show_path}}">Details</a></p>
|
10
|
+
|
11
|
+
{{/listing}}
|
12
|
+
|
13
|
+
<p><a href="{{new_path}}">New</a></p>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class <%= plural_name.camelize %>::Index < Mustache::Rails
|
2
|
+
|
3
|
+
def new_path
|
4
|
+
new_<%= singular_name %>_path()
|
5
|
+
end
|
6
|
+
|
7
|
+
def listing
|
8
|
+
<%= plural_name %>.collect do |record|
|
9
|
+
{
|
10
|
+
<% for attribute in attributes -%>
|
11
|
+
:<%= attribute.name %> => record.<%= attribute.name %>,
|
12
|
+
<% end -%>
|
13
|
+
:show_path => <%= singular_name %>_path(record)
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class <%= plural_name.camelize %>::New < Mustache::Rails
|
2
|
+
|
3
|
+
<%# TODO: extract errors_display settings to to module methods -%>
|
4
|
+
def errors_display_div
|
5
|
+
return "" unless <%= singular_name %>.errors.any?
|
6
|
+
content_tag("div", :id=>"errorExplanation", :class=>"errorExplanation") do
|
7
|
+
content_tag("h2", error_header) + content_tag("ul") do
|
8
|
+
<%= singular_name %>.errors.full_messages.inject("") do |memo,msg|
|
9
|
+
memo += content_tag("li", msg)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def <%= singular_name %>_form_tag
|
16
|
+
form_tag(create_path, :class => "<%= singular_name %>_form", :id => "edit_<%= singular_name %>_#{<%= singular_name %>.id}_form")
|
17
|
+
end
|
18
|
+
|
19
|
+
<% for attribute in attributes -%>
|
20
|
+
def <%= attribute.name %>_label
|
21
|
+
label :<%= singular_name %>, :<%= attribute.name %>
|
22
|
+
end
|
23
|
+
<%# TODO: Different fields for different attribute types -%>
|
24
|
+
|
25
|
+
def <%= attribute.name %>_text_field
|
26
|
+
text_field(:<%= singular_name %>, :<%= attribute.name %>, :id => "<%= attribute.name %>_text_field")
|
27
|
+
end
|
28
|
+
|
29
|
+
<% end -%>
|
30
|
+
|
31
|
+
def form_submit
|
32
|
+
submit_tag "Create"
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
def index_path
|
37
|
+
<%= plural_name %>_path
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def create_path
|
43
|
+
<%= plural_name %>_path
|
44
|
+
end
|
45
|
+
|
46
|
+
def error_header
|
47
|
+
"u r dong it rong"
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class <%= plural_name.camelize %>::Show < Mustache::Rails
|
2
|
+
|
3
|
+
<% for attribute in attributes -%>
|
4
|
+
def <%= attribute.name %>
|
5
|
+
<%= singular_name %>.<%= attribute.name %>
|
6
|
+
end
|
7
|
+
|
8
|
+
<% end -%>
|
9
|
+
|
10
|
+
def edit_path
|
11
|
+
edit_<%= singular_name %>_path(@<%= singular_name %>)
|
12
|
+
end
|
13
|
+
|
14
|
+
def index_path
|
15
|
+
<%= plural_name %>_path
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'action_view'
|
2
|
+
require 'active_support'
|
3
|
+
require 'mustache'
|
4
|
+
|
5
|
+
class Mustache
|
6
|
+
|
7
|
+
# Remember to use {{{yield}}} (3 mustaches) to skip escaping HTML
|
8
|
+
# Using {{{tag}}} will skip escaping HTML so if your mustache methods return
|
9
|
+
# HTML, be sure to interpolate them using 3 mustaches.
|
10
|
+
|
11
|
+
class Rails < Mustache
|
12
|
+
attr_accessor :view
|
13
|
+
|
14
|
+
def method_missing(method, *args, &block)
|
15
|
+
view.send(method, *args, &block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def respond_to?(method, include_private=false)
|
19
|
+
super(method, include_private) || view.respond_to?(method, include_private)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Redefine where Mustache::Rails templates locate their partials:
|
23
|
+
#
|
24
|
+
# (1) in the same directory as the current template file.
|
25
|
+
# (2) in the shared templates path (can be configured via Config.shared_path=(value))
|
26
|
+
#
|
27
|
+
def partial(name)
|
28
|
+
partial_name = "_#{name}.#{Config.template_extension}"
|
29
|
+
template_dir = Pathname.new(self.class.template_file).dirname
|
30
|
+
partial_path = File.expand_path("#{template_dir}/#{partial_name}")
|
31
|
+
unless File.file?(partial_path)
|
32
|
+
partial_path = "#{Config.shared_path}/#{partial_name}"
|
33
|
+
end
|
34
|
+
File.read(partial_path)
|
35
|
+
end
|
36
|
+
|
37
|
+
# You can change these defaults in, say, a Rails initializer or
|
38
|
+
# environment.rb, e.g.:
|
39
|
+
#
|
40
|
+
# Mustache::Rails::Config.template_base_path = Rails.root.join('app', 'templates')
|
41
|
+
module Config
|
42
|
+
def self.template_base_path
|
43
|
+
@template_base_path ||= ::Rails.root.join('app', 'templates')
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.template_base_path=(value)
|
47
|
+
@template_base_path = value
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.template_extension
|
51
|
+
@template_extension ||= 'html.mustache'
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.template_extension=(value)
|
55
|
+
@template_extension = value
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.shared_path
|
59
|
+
@shared_path ||= ::Rails.root.join('app', 'templates', 'shared')
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.shared_path=(value)
|
63
|
+
@shared_path = value
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class TemplateHandler < ActionView::Template::Handler
|
68
|
+
|
69
|
+
include ActionView::Template::Handlers::Compilable
|
70
|
+
|
71
|
+
self.default_format = :mustache
|
72
|
+
|
73
|
+
# @return [String] its evaled in the context of the action view
|
74
|
+
# hence the hack below
|
75
|
+
#
|
76
|
+
# @param [ActionView::Template]
|
77
|
+
def compile(template)
|
78
|
+
mustache_class = mustache_class_from_template(template)
|
79
|
+
mustache_class.template_file = mustache_template_file(template)
|
80
|
+
|
81
|
+
<<-MUSTACHE
|
82
|
+
mustache = ::#{mustache_class}.new
|
83
|
+
mustache.view = self
|
84
|
+
mustache[:yield] = content_for(:layout)
|
85
|
+
mustache.context.update(local_assigns)
|
86
|
+
variables = controller.instance_variable_names
|
87
|
+
variables -= %w[@template]
|
88
|
+
|
89
|
+
if controller.respond_to?(:protected_instance_variables)
|
90
|
+
variables -= controller.protected_instance_variables
|
91
|
+
end
|
92
|
+
|
93
|
+
variables.each do |name|
|
94
|
+
mustache.instance_variable_set(name, controller.instance_variable_get(name))
|
95
|
+
end
|
96
|
+
|
97
|
+
# Declaring an +attr_reader+ for each instance variable in the
|
98
|
+
# Mustache::Rails subclass makes them available to your templates.
|
99
|
+
mustache.class.class_eval do
|
100
|
+
attr_reader *variables.map { |name| name.sub(/^@/, '').to_sym }
|
101
|
+
end
|
102
|
+
|
103
|
+
mustache.render
|
104
|
+
MUSTACHE
|
105
|
+
end
|
106
|
+
|
107
|
+
private
|
108
|
+
|
109
|
+
def mustache_class_from_template(template)
|
110
|
+
const_name = ActiveSupport::Inflector.camelize(template.virtual_path.to_s)
|
111
|
+
defined?(const_name) ? const_name.constantize : Mustache
|
112
|
+
end
|
113
|
+
|
114
|
+
def mustache_template_file(template)
|
115
|
+
"#{Config.template_base_path}/#{template.virtual_path}.#{Config.template_extension}"
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
::ActiveSupport::Dependencies.load_paths << Rails.root.join("app", "views")
|
123
|
+
::ActionView::Template.register_template_handler(:rb, Mustache::Rails::TemplateHandler)
|
data/readme.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
## Mustache support for Rails 3
|
2
|
+
|
3
|
+
This generator and template handler for Mustache in Rails 3 is based on the
|
4
|
+
work of Paul Barry, Louis T., and Martin Gamsjaeger. I am indebted to them for allowing me to stand on their shoulders.
|
5
|
+
|
6
|
+
Subclass Mustache::Rails for your view files. Place view files in
|
7
|
+
app/views/:controller/:action.rb.
|
8
|
+
|
9
|
+
Mustache::Rails registers a TemplateHandler for ".rb" files. Templates go in
|
10
|
+
app/templates/:controller/:action.format.mustache
|
11
|
+
|
12
|
+
This is also available as a [rubygem](http://rubygems.org/gems/mustache_rails3).
|
13
|
+
|
14
|
+
I'm just getting started. This really is a low-numbered prerelease. :-) I have asked for comments on [the mustache project's Rails Support issue ticket](http://github.com/defunkt/mustache/issues/#issue/3/comment/294928). Please leave feedback there, and thanks.
|
15
|
+
|
16
|
+
### Instructions
|
17
|
+
|
18
|
+
A Rails 3 reminder: be sure to add
|
19
|
+
gem 'mustache'
|
20
|
+
to your project's Gemfile before running any generators or starting the server.
|
21
|
+
If you're using the mustache_rails3 gem, be sure to also add
|
22
|
+
gem 'mustache_rails3'
|
23
|
+
|
24
|
+
You can enable the mustache template handler by running
|
25
|
+
rails g mustache:install
|
26
|
+
in your project directory.
|
27
|
+
|
28
|
+
### TODO:
|
29
|
+
|
30
|
+
* Enable mustache layout usage (uses default application.erb for now)
|
31
|
+
* Add controller-retrofit generator to build default mustache views for existing controllers
|
32
|
+
* Generate different fields for different attribute types
|
33
|
+
* Think about allowing to overwrite layout methods in subclassing views:
|
34
|
+
http://github.com/defunkt/mustache/blob/master/lib/mustache/sinatra.rb#L79-82
|
35
|
+
http://github.com/defunkt/mustache/blob/master/lib/mustache/sinatra.rb#L96-102
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mustache_rails3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 2
|
9
|
+
version: 0.1.2
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Michael Harrison
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-06-28 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Mustache_rails3 is intended to add Rails 3 support to the existing mustache templating system for Ruby. It provides a template handler for Rails 3 and generators. The source code is maintained at http://github.com/goodmike/mustache_rails3, and I welcome comments and forks.
|
22
|
+
email: mh@michaelharrison.ws
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files: []
|
28
|
+
|
29
|
+
files:
|
30
|
+
- readme.md
|
31
|
+
- LICENSE
|
32
|
+
- config/initializers/mustache.rb
|
33
|
+
- lib/generators/mustache.rb
|
34
|
+
- lib/generators/mustache/controller/controller_generator.rb
|
35
|
+
- lib/generators/mustache/controller/templates/view.html.mustache.erb
|
36
|
+
- lib/generators/mustache/controller/templates/view.rb.erb
|
37
|
+
- lib/generators/mustache/install/install_generator.rb
|
38
|
+
- lib/generators/mustache/install/templates/config/initializers/mustache.rb
|
39
|
+
- lib/generators/mustache/scaffold/scaffold_generator.rb
|
40
|
+
- lib/generators/mustache/scaffold/templates/_form.html.mustache.erb
|
41
|
+
- lib/generators/mustache/scaffold/templates/edit.html.mustache.erb
|
42
|
+
- lib/generators/mustache/scaffold/templates/edit.rb.erb
|
43
|
+
- lib/generators/mustache/scaffold/templates/index.html.mustache.erb
|
44
|
+
- lib/generators/mustache/scaffold/templates/index.rb.erb
|
45
|
+
- lib/generators/mustache/scaffold/templates/new.html.mustache.erb
|
46
|
+
- lib/generators/mustache/scaffold/templates/new.rb.erb
|
47
|
+
- lib/generators/mustache/scaffold/templates/show.html.mustache.erb
|
48
|
+
- lib/generators/mustache/scaffold/templates/show.rb.erb
|
49
|
+
- lib/mustache_rails.rb
|
50
|
+
has_rdoc: true
|
51
|
+
homepage: http://github.com/goodmike/mustache_rails3
|
52
|
+
licenses: []
|
53
|
+
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
segments:
|
65
|
+
- 0
|
66
|
+
version: "0"
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
segments:
|
73
|
+
- 0
|
74
|
+
version: "0"
|
75
|
+
requirements: []
|
76
|
+
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 1.3.7
|
79
|
+
signing_key:
|
80
|
+
specification_version: 3
|
81
|
+
summary: Mustache_rails3 provides a template handler and generators for Rails 3.
|
82
|
+
test_files: []
|
83
|
+
|