curly-templates 2.6.2 → 2.6.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c7936d9f7b610b08d39f205d39e383330d073e7
4
- data.tar.gz: 62b85323de2cb0ba149a07a708d43eba6d178337
3
+ metadata.gz: 02f8a17dc3592cc9292a69436aa2f807b8f6a6fa
4
+ data.tar.gz: 138af0504cf764736976934eaa4d3d7b33786d70
5
5
  SHA512:
6
- metadata.gz: f0ec5a70f80f7b0c349b04a5384fd0c1c25fbf5bc3900b08097d4f38aa71e95ade00edc5ef2830b55dafaf1dedcdc118ba77433aff5a0c93b71de6f4b3c60a91
7
- data.tar.gz: 0615e22a27dc665b83e2a683e97d44a88ab4c467dc07f93f676fd0b60d0311cf438f930cffe482ce8feb7736c31adc7f433db11f53893fe592bbcc34ff77c76d
6
+ metadata.gz: 61567465adf49ea5b16e0cfe00414dda312019f723d83fba402ce07243a98c2f22f2345057bfcacb4c86180072cfa88be00f90ae70fca3987698c20d0d5c816e
7
+ data.tar.gz: 797cbdf8ebbea0e4842f27838f561e7e79f2121efcffc6494bdce2c72c6045ef994e21116d6d565d8b5d48090fd7f4580d0c2bdfe418e0fa3d1059c5b5b10a15
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  ### Unreleased
2
2
 
3
+ ### Curly 2.6.3 (March 24, 2017)
4
+
5
+ * Added generator for Rails' built in scaffold command.
6
+ * Added `curly:install` generator for creating layout files.
7
+
8
+ *Jack M*
9
+
3
10
  ### Curly 2.6.2 (December 22, 2016)
4
11
 
5
12
  * Change `DependencyTracker.call` to returns array, for compatibility with
data/README.md CHANGED
@@ -36,6 +36,13 @@ using Bundler to manage your dependencies, add this to your Gemfile
36
36
  gem 'curly-templates'
37
37
  ```
38
38
 
39
+ Curly can also install an application layout file, replacing the .erb file commonly
40
+ created by Rails. If you wish to use this, run the `curly:install` generator.
41
+
42
+ ```sh
43
+ $ rails generate curly:install
44
+ ```
45
+
39
46
 
40
47
  How to use Curly
41
48
  ----------------
data/lib/curly/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Curly
2
- VERSION = "2.6.2"
2
+ VERSION = "2.6.3"
3
3
  end
@@ -0,0 +1,17 @@
1
+ require "rails/generators/named_base"
2
+
3
+ module Curly # :nodoc:
4
+ module Generators # :nodoc:
5
+ class Base < Rails::Generators::NamedBase #:nodoc:
6
+ private
7
+
8
+ def format
9
+ :html
10
+ end
11
+
12
+ def handler
13
+ :curly
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ require "rails/generators/resource_helpers"
2
+
3
+ module Curly # :nodoc:
4
+ module Generators # :nodoc:
5
+ class InstallGenerator < Rails::Generators::Base # :nodoc:
6
+
7
+ source_root File.expand_path("../templates", __FILE__)
8
+
9
+ attr_reader :app_name
10
+
11
+ def generate_layout
12
+ app = ::Rails.application
13
+ @app_name = app.class.to_s.split("::").first
14
+ remove_file 'app/views/layouts/application.html.erb'
15
+ template "layout.html.curly.erb", "app/views/layouts/application.html.curly"
16
+ template "layout_presenter.rb.erb", "app/presenters/layouts/application_presenter.rb"
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= app_name.titleize %></title>
5
+ {{csrf_meta_tags}}
6
+
7
+ {{stylesheet_links}}
8
+ {{javascript_links}}
9
+ </head>
10
+
11
+ <body>
12
+ {{yield}}
13
+ </body>
14
+ </html>
@@ -0,0 +1,25 @@
1
+ class Layouts::ApplicationPresenter < Curly::Presenter
2
+ # If you need to assign variables to the presenter, you can use the
3
+ # `presents` method.
4
+ #
5
+ # presents :foo, :bar
6
+ #
7
+ # Any public method defined in a presenter class will be available
8
+ # to the Curly template as a variable. Consider making these methods
9
+ # idempotent.
10
+ exposes_helper :csrf_meta_tags
11
+
12
+ def yield
13
+ yield
14
+ end
15
+
16
+ def stylesheet_links
17
+ stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload'
18
+ end
19
+
20
+ def javascript_links
21
+ javascript_include_tag 'application', 'data-turbolinks-track': 'reload'
22
+ end
23
+
24
+
25
+ end
@@ -0,0 +1,43 @@
1
+ require "rails/generators/resource_helpers"
2
+ require "generators/curly"
3
+
4
+ module Curly # :nodoc:
5
+ module Generators # :nodoc:
6
+ class ScaffoldGenerator < Base # :nodoc:
7
+ include Rails::Generators::ResourceHelpers
8
+
9
+ source_root File.expand_path("../templates", __FILE__)
10
+
11
+ argument :attributes, type: :array, default: [], banner: "field:type field:type"
12
+
13
+ def create_root_folder
14
+ empty_directory File.join("app/views", controller_file_path)
15
+ empty_directory File.join("app/presenters", controller_file_path)
16
+ end
17
+
18
+ def copy_view_files
19
+ available_views.each do |view|
20
+ # Useful in the presenters.
21
+ @view_name = presenter_view(view)
22
+ # Example: posts/index.html.curly
23
+ view_file = "#{view}.#{format}.curly"
24
+ template "#{view_file}.erb", File.join("app/views", controller_file_path, view_file)
25
+ # Example: posts/index_presenter.rb
26
+ presenter_file = "#{@view_name}_presenter.rb"
27
+ template "#{presenter_file}.erb", File.join("app/presenters", controller_file_path, presenter_file)
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ # Hack for _form view.
34
+ def presenter_view(view)
35
+ view.gsub(/^_/, '')
36
+ end
37
+
38
+ def available_views
39
+ %w(index show edit _form new)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,30 @@
1
+ {{@<%= singular_table_name %>_form}}
2
+ {{#<%= singular_table_name %>_errors:any?}}
3
+ <div id="error_explanation">
4
+ <h2>{{header}}</h2>
5
+ <ul>
6
+ {{*error_messages}}
7
+ <li>{{message}}</li>
8
+ {{/error_messages}}
9
+ </ul>
10
+ </div>
11
+ {{/<%= singular_table_name %>_errors:any?}}
12
+ <% attributes.each do |attribute| -%>
13
+ <div class="field">
14
+ <% if attribute.password_digest? -%>
15
+ {{label.password}}
16
+ {{field field_type="password_field" field_name="password"}}
17
+ </div>
18
+
19
+ <div class="field">
20
+ {{label field_name="password_confirmation"}}
21
+ {{field field_type="password_field" field_name="password_confirmation"}}
22
+ <% else -%>
23
+ {{label.<%= attribute.column_name %>}}
24
+ {{field field_type="<%= attribute.field_type %>" field_name="<%= attribute.column_name %>"}}
25
+ <% end -%>
26
+ </div>
27
+ <% end -%>
28
+
29
+ {{submit}}
30
+ {{/<%= singular_table_name %>_form}}
@@ -0,0 +1,5 @@
1
+ <h1>Editing <%= singular_table_name.titleize %></h1>
2
+
3
+ {{<%= singular_table_name %>_form}}
4
+
5
+ {{<%= index_helper %>_link}}
@@ -0,0 +1,24 @@
1
+ class <%= plural_table_name.capitalize %>::<%= @view_name.capitalize %>Presenter < Curly::Presenter
2
+ # If you need to assign variables to the presenter, you can use the
3
+ # `presents` method.
4
+ #
5
+ # presents :foo, :bar
6
+ #
7
+ # Any public method defined in a presenter class will be available
8
+ # to the Curly template as a variable. Consider making these methods
9
+ # idempotent.
10
+ presents :<%= singular_table_name %>
11
+
12
+ def <%= singular_table_name %>
13
+ @<%= singular_table_name %>
14
+ end
15
+
16
+ def <%= singular_table_name %>_form
17
+ render 'form', <%= singular_table_name %>: @<%= singular_table_name %>
18
+ end
19
+
20
+ def <%= index_helper %>_link
21
+ link_to 'Back', <%= index_helper %>_path
22
+ end
23
+
24
+ end
@@ -0,0 +1,66 @@
1
+ class <%= plural_table_name.capitalize %>::<%= @view_name.capitalize %>Presenter < Curly::Presenter
2
+ # If you need to assign variables to the presenter, you can use the
3
+ # `presents` method.
4
+ #
5
+ # presents :foo, :bar
6
+ #
7
+ # Any public method defined in a presenter class will be available
8
+ # to the Curly template as a variable. Consider making these methods
9
+ # idempotent.
10
+ presents :<%= singular_table_name %>
11
+
12
+ def post_errors
13
+ @post.errors
14
+ end
15
+
16
+ def <%= singular_table_name %>
17
+ @<%= singular_table_name %>
18
+ end
19
+
20
+ def <%= singular_table_name %>_form(&block)
21
+ form_for(@<%= singular_table_name %>, &block)
22
+ end
23
+
24
+ class <%= singular_table_name.capitalize %>FormPresenter < Curly::Presenter
25
+ presents :<%= singular_table_name %>_form, :<%= singular_table_name %>
26
+
27
+ def <%= singular_table_name %>_errors(&block)
28
+ block.call(@post.errors)
29
+ end
30
+
31
+ def label(field_name)
32
+ @<%= singular_table_name %>_form.label field_name.to_sym
33
+ end
34
+
35
+ def field(field_type: nil, field_name: nil)
36
+ @<%= singular_table_name %>_form.send field_type.to_sym, field_name.to_sym
37
+ end
38
+
39
+ def submit
40
+ @<%= singular_table_name %>_form.submit
41
+ end
42
+
43
+ class <%= singular_table_name.capitalize %>ErrorsPresenter < Curly::Presenter
44
+ presents :<%= singular_table_name %>_errors
45
+
46
+ def any?
47
+ @<%= singular_table_name %>_errors.any?
48
+ end
49
+
50
+ def header
51
+ "#{pluralize(@<%= singular_table_name %>_errors.count, "error")} prohibited this <%= singular_table_name %> from being saved:"
52
+ end
53
+
54
+ def error_messages(&block)
55
+ @<%= singular_table_name %>_errors.full_messages
56
+ end
57
+
58
+ class ErrorMessagePresenter < Curly::Presenter
59
+ presents :error_message
60
+ def message
61
+ @error_message
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,31 @@
1
+ <p id="notice">{{notice_text}}</p>
2
+
3
+ <h1><%= plural_table_name.titleize %></h1>
4
+
5
+ <table>
6
+ <thead>
7
+ <tr>
8
+ <% attributes.reject(&:password_digest?).each do |attribute| -%>
9
+ <th><%= attribute.human_name %></th>
10
+ <% end -%>
11
+ <th colspan="3"></th>
12
+ </tr>
13
+ </thead>
14
+
15
+ <tbody>
16
+ {{*<%= plural_table_name %>}}
17
+ <tr>
18
+ <% attributes.reject(&:password_digest?).each do |attribute| -%>
19
+ <td>{{<%= attribute.name %>}}</td>
20
+ <% end -%>
21
+ <td>{{show_link}}</td>
22
+ <td>{{edit_link}}</td>
23
+ <td>{{destroy_link}}</td>
24
+ </tr>
25
+ {{/<%= plural_table_name %>}}
26
+ </tbody>
27
+ </table>
28
+
29
+ <br>
30
+
31
+ {{create_link}}
@@ -0,0 +1,46 @@
1
+ class <%= plural_table_name.capitalize %>::<%= @view_name.capitalize %>Presenter < Curly::Presenter
2
+ # If you need to assign variables to the presenter, you can use the
3
+ # `presents` method.
4
+ #
5
+ # presents :foo, :bar
6
+ #
7
+ # Any public method defined in a presenter class will be available
8
+ # to the Curly template as a variable. Consider making these methods
9
+ # idempotent.
10
+ presents :<%= plural_table_name %>
11
+
12
+ def <%= plural_table_name %>
13
+ @<%= plural_table_name %>
14
+ end
15
+
16
+ def notice_text
17
+ notice
18
+ end
19
+
20
+ def create_link
21
+ link_to 'New <%= singular_table_name.titleize %>', new_<%= singular_table_name %>_path
22
+ end
23
+
24
+ class <%= singular_table_name.capitalize %>Presenter < Curly::Presenter
25
+ presents :<%= singular_table_name %>
26
+
27
+ <% attributes.reject(&:password_digest?).each do |attribute| -%>
28
+ def <%= attribute.name %>
29
+ @<%= singular_table_name %>.<%= attribute.name %>
30
+ end
31
+ <% end -%>
32
+
33
+ def show_link
34
+ link_to 'Show', @<%= singular_table_name %>
35
+ end
36
+
37
+ def edit_link
38
+ link_to 'Edit', edit_<%= singular_table_name %>_path(@<%= singular_table_name %>)
39
+ end
40
+
41
+ def destroy_link
42
+ link_to 'Destroy', @<%= singular_table_name %>, method: :delete, data: { confirm: 'Are you sure?' }
43
+ end
44
+ end
45
+
46
+ end
@@ -0,0 +1,5 @@
1
+ <h1>New <%= singular_table_name.titleize %></h1>
2
+
3
+ {{<%= singular_table_name %>_form}}
4
+
5
+ {{<%= index_helper %>_link}}
@@ -0,0 +1,20 @@
1
+ class <%= plural_table_name.capitalize %>::<%= @view_name.capitalize %>Presenter < Curly::Presenter
2
+ # If you need to assign variables to the presenter, you can use the
3
+ # `presents` method.
4
+ #
5
+ # presents :foo, :bar
6
+ #
7
+ # Any public method defined in a presenter class will be available
8
+ # to the Curly template as a variable. Consider making these methods
9
+ # idempotent.
10
+ presents :<%= singular_table_name %>
11
+
12
+ def <%= singular_table_name %>_form
13
+ render 'form', <%= singular_table_name %>: @<%= singular_table_name %>
14
+ end
15
+
16
+ def <%= index_helper %>_link
17
+ link_to 'Back', <%= index_helper %>_path
18
+ end
19
+
20
+ end
@@ -0,0 +1,12 @@
1
+ <p id="notice">{{notice_text}}</p>
2
+
3
+ {{*<%= singular_table_name %>}}
4
+ <% attributes.reject(&:password_digest?).each do |attribute| -%>
5
+ <p>
6
+ <strong><%= attribute.human_name %>:</strong>
7
+ {{<%= attribute.name %>}}
8
+ </p>
9
+ <% end -%>
10
+ {{edit_link}}
11
+ {{/<%= singular_table_name %>}}
12
+ {{<%= index_helper %>_link}}
@@ -0,0 +1,46 @@
1
+ class <%= plural_table_name.capitalize %>::<%= @view_name.capitalize %>Presenter < Curly::Presenter
2
+ # If you need to assign variables to the presenter, you can use the
3
+ # `presents` method.
4
+ #
5
+ # presents :foo, :bar
6
+ #
7
+ # Any public method defined in a presenter class will be available
8
+ # to the Curly template as a variable. Consider making these methods
9
+ # idempotent.
10
+ presents :<%= singular_table_name %>
11
+
12
+ def <%= singular_table_name %>
13
+ @<%= singular_table_name %>
14
+ end
15
+
16
+ def notice_text
17
+ notice
18
+ end
19
+
20
+ def <%= index_helper %>_link
21
+ link_to 'Back', <%= index_helper %>_path
22
+ end
23
+
24
+ class <%= singular_table_name.capitalize %>Presenter < Curly::Presenter
25
+ presents :<%= singular_table_name %>
26
+
27
+ <% attributes.reject(&:password_digest?).each do |attribute| -%>
28
+ def <%= attribute.name %>
29
+ @<%= singular_table_name %>.<%= attribute.name %>
30
+ end
31
+ <% end -%>
32
+
33
+ def show_link
34
+ link_to 'Show', @<%= singular_table_name %>
35
+ end
36
+
37
+ def edit_link
38
+ link_to 'Edit', edit_<%= singular_table_name %>_path(@<%= singular_table_name %>)
39
+ end
40
+
41
+ def destroy_link
42
+ link_to 'Destroy', @<%= singular_table_name %>, method: :delete, data: { confirm: 'Are you sure?' }
43
+ end
44
+ end
45
+
46
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curly-templates
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.2
4
+ version: 2.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Schierbeck
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-22 00:00:00.000000000 Z
11
+ date: 2017-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -144,9 +144,24 @@ files:
144
144
  - lib/curly/syntax_error.rb
145
145
  - lib/curly/template_handler.rb
146
146
  - lib/curly/version.rb
147
+ - lib/generators/curly.rb
147
148
  - lib/generators/curly/controller/controller_generator.rb
148
149
  - lib/generators/curly/controller/templates/presenter.rb.erb
149
150
  - lib/generators/curly/controller/templates/view.html.curly.erb
151
+ - lib/generators/curly/install/install_generator.rb
152
+ - lib/generators/curly/install/templates/layout.html.curly.erb
153
+ - lib/generators/curly/install/templates/layout_presenter.rb.erb
154
+ - lib/generators/curly/scaffold/scaffold_generator.rb
155
+ - lib/generators/curly/scaffold/templates/_form.html.curly.erb
156
+ - lib/generators/curly/scaffold/templates/edit.html.curly.erb
157
+ - lib/generators/curly/scaffold/templates/edit_presenter.rb.erb
158
+ - lib/generators/curly/scaffold/templates/form_presenter.rb.erb
159
+ - lib/generators/curly/scaffold/templates/index.html.curly.erb
160
+ - lib/generators/curly/scaffold/templates/index_presenter.rb.erb
161
+ - lib/generators/curly/scaffold/templates/new.html.curly.erb
162
+ - lib/generators/curly/scaffold/templates/new_presenter.rb.erb
163
+ - lib/generators/curly/scaffold/templates/show.html.curly.erb
164
+ - lib/generators/curly/scaffold/templates/show_presenter.rb.erb
150
165
  - lib/rails/projections.json
151
166
  homepage: https://github.com/zendesk/curly
152
167
  licenses:
@@ -169,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
184
  version: '0'
170
185
  requirements: []
171
186
  rubyforge_project:
172
- rubygems_version: 2.5.2
187
+ rubygems_version: 2.4.5.1
173
188
  signing_key:
174
189
  specification_version: 2
175
190
  summary: Free your views!