curly-templates 2.4.0 → 2.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8f4fe4c21493bebaaa569720e2a43f78e2d80438
4
- data.tar.gz: 24606b4dc84bf910492ae70e9264c4887c463b6e
3
+ metadata.gz: 2f038cf925ee66f41bb273477733836d3be22594
4
+ data.tar.gz: 8d39cf352d8638c847154ce3fdccbcbfca9ae4a7
5
5
  SHA512:
6
- metadata.gz: 0213f00bcaf7842aa05ef052dd6ceb74b7b4c03b7ee7cfe546df3ba4e77cc73d57b2c5c5d46a89544567e6ec5fcfe98d2b9297953ffed8eb0a0abceb64aba96b
7
- data.tar.gz: 231542411d1447d7b2139f4637f1d40014e14ee19b1313bf2f05c65ff17608faf658f26750024373ff03d3cae179d57989c9716480dd43b836e36dca41652187
6
+ metadata.gz: 8616749a1fe10664053e2048059a19618ad2b5d6878fce96587b39cc7322565349099ece2e40737f55404ee84de4e041227270f0be18e02de0fd2a2627d42979
7
+ data.tar.gz: 59036f8b9086a6196ba1c99291e6701f2f99735cc45dbc23b80c00123662618b71ae7f233cd814a66a8ef93a15bdd70341ee2cafb463b46be8f9a39e4cec120c
data/Gemfile CHANGED
@@ -9,4 +9,6 @@ platform :ruby do
9
9
  gem 'github-markup'
10
10
  gem 'rails', '~> 4.2.0', require: false
11
11
  gem 'rspec-rails', require: false
12
+ gem 'benchmark-ips', require: false
13
+ gem 'stackprof', require: false
12
14
  end
data/README.md CHANGED
@@ -101,6 +101,10 @@ render comment
101
101
  render collection: post.comments
102
102
  ```
103
103
 
104
+ Curly _components_ are surrounded by curly brackets, e.g. `{{hello}}`. They always map to a
105
+ public method on the presenter class, in this case `#hello`. Methods ending in a question mark
106
+ can be used for [conditional blocks](#conditional-blocks), e.g. `{{#admin?}} ... {{/admin?}}`.
107
+
104
108
  ### Identifiers
105
109
 
106
110
  Curly components can specify an _identifier_ using the so-called dot notation: `{{x.y.z}}`.
@@ -4,8 +4,8 @@ Gem::Specification.new do |s|
4
4
  s.rubygems_version = '1.3.5'
5
5
 
6
6
  s.name = 'curly-templates'
7
- s.version = '2.4.0'
8
- s.date = '2015-02-24'
7
+ s.version = '2.4.1'
8
+ s.date = '2015-04-27'
9
9
 
10
10
  s.summary = "Free your views!"
11
11
  s.description = "A view layer for your Rails apps that separates structure and logic."
@@ -57,6 +57,9 @@ Gem::Specification.new do |s|
57
57
  lib/generators/curly/controller/templates/presenter.rb.erb
58
58
  lib/generators/curly/controller/templates/view.html.curly.erb
59
59
  lib/rails/projections.json
60
+ perf/compile_benchmark.rb
61
+ perf/compile_profile.rb
62
+ perf/component_benchmark.rb
60
63
  spec/attribute_scanner_spec.rb
61
64
  spec/collection_blocks_spec.rb
62
65
  spec/compiler/collections_spec.rb
data/lib/curly.rb CHANGED
@@ -25,7 +25,7 @@
25
25
  #
26
26
  # See Curly::Presenter for more information on presenters.
27
27
  module Curly
28
- VERSION = "2.4.0"
28
+ VERSION = "2.4.1"
29
29
 
30
30
  # Compiles a Curly template to Ruby code.
31
31
  #
@@ -211,8 +211,10 @@ module Curly
211
211
  #
212
212
  # Returns an Array of String component names.
213
213
  def available_components
214
- methods = public_instance_methods - Curly::Presenter.public_instance_methods
215
- methods.map(&:to_s)
214
+ @_available_components ||= begin
215
+ methods = public_instance_methods - Curly::Presenter.public_instance_methods
216
+ methods.map(&:to_s)
217
+ end
216
218
  end
217
219
 
218
220
  # The set of view paths that the presenter depends on.
@@ -311,6 +313,8 @@ module Curly
311
313
  self.presented_names = [].freeze
312
314
  self.default_values = {}.freeze
313
315
 
316
+ delegate :render, to: :@_context
317
+
314
318
  # Delegates private method calls to the current view context.
315
319
  #
316
320
  # The view context, an instance of ActionView::Base, is set by Rails.
@@ -0,0 +1,71 @@
1
+ require 'bundler/setup'
2
+ require 'benchmark/ips'
3
+
4
+ ENV["RAILS_ENV"] = "test"
5
+
6
+ require_relative '../spec/dummy/config/environment'
7
+
8
+ class TestPresenter < Curly::Presenter
9
+ def foo
10
+ end
11
+
12
+ def bar
13
+ end
14
+
15
+ def form(&block)
16
+ xcontent_tag :form, block.call
17
+ end
18
+
19
+ class FormPresenter < Curly::Presenter
20
+ def fields
21
+ %w[]
22
+ end
23
+
24
+ class FieldPresenter < Curly::Presenter
25
+ presents :field
26
+
27
+ def field_name
28
+ @field
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ # Build a huge template.
35
+ TEMPLATE = <<-CURLY
36
+ <h1>{{foo}}</h1>
37
+ <h2>{{bar}}</h2>
38
+
39
+ {{@form}}
40
+ {{*fields}}
41
+ <input name={{field_name}}><br>
42
+ {{/fields}}
43
+ {{*fields}}
44
+ <input name={{field_name}}><br>
45
+ {{/fields}}
46
+ {{*fields}}
47
+ <input name={{field_name}}><br>
48
+ {{/fields}}
49
+ {{*fields}}
50
+ <input name={{field_name}}><br>
51
+ {{/fields}}
52
+ {{*fields}}
53
+ <input name={{field_name}}><br>
54
+ {{/fields}}
55
+ {{*fields}}
56
+ <input name={{field_name}}><br>
57
+ {{/fields}}
58
+ {{/form}}
59
+ CURLY
60
+
61
+ Benchmark.ips do |x|
62
+ x.report "compiling a huge template" do
63
+ Curly::Compiler.compile(TEMPLATE * 100, TestPresenter)
64
+ end
65
+
66
+ x.report "compiling a normal template" do
67
+ Curly::Compiler.compile(TEMPLATE, TestPresenter)
68
+ end
69
+
70
+ x.compare!
71
+ end
@@ -0,0 +1,64 @@
1
+ require 'bundler/setup'
2
+ require 'benchmark/ips'
3
+ require 'stackprof'
4
+
5
+ ENV["RAILS_ENV"] = "test"
6
+
7
+ require_relative '../spec/dummy/config/environment'
8
+
9
+ class TestPresenter < Curly::Presenter
10
+ def foo
11
+ end
12
+
13
+ def bar
14
+ end
15
+
16
+ def form(&block)
17
+ xcontent_tag :form, block.call
18
+ end
19
+
20
+ class FormPresenter < Curly::Presenter
21
+ def fields
22
+ %w[]
23
+ end
24
+
25
+ class FieldPresenter < Curly::Presenter
26
+ presents :field
27
+
28
+ def field_name
29
+ @field
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ # Build a huge template.
36
+ TEMPLATE = <<-CURLY
37
+ <h1>{{foo}}</h1>
38
+ <h2>{{bar}}</h2>
39
+
40
+ {{@form}}
41
+ {{*fields}}
42
+ <input name={{field_name}}><br>
43
+ {{/fields}}
44
+ {{*fields}}
45
+ <input name={{field_name}}><br>
46
+ {{/fields}}
47
+ {{*fields}}
48
+ <input name={{field_name}}><br>
49
+ {{/fields}}
50
+ {{*fields}}
51
+ <input name={{field_name}}><br>
52
+ {{/fields}}
53
+ {{*fields}}
54
+ <input name={{field_name}}><br>
55
+ {{/fields}}
56
+ {{*fields}}
57
+ <input name={{field_name}}><br>
58
+ {{/fields}}
59
+ {{/form}}
60
+ CURLY
61
+
62
+ StackProf.run(mode: :cpu, out: "tmp/stackprof-cpu-compile.dump") do
63
+ Curly::Compiler.compile(TEMPLATE * 100, TestPresenter)
64
+ end
@@ -0,0 +1,41 @@
1
+ require 'bundler/setup'
2
+ require 'benchmark/ips'
3
+
4
+ ENV["RAILS_ENV"] = "test"
5
+
6
+ require_relative '../spec/dummy/config/environment'
7
+
8
+ class TestPresenter < Curly::Presenter
9
+ def hello_with_delegation
10
+ some_helper
11
+ end
12
+
13
+ def hello_without_delegation
14
+ not_some_helper
15
+ end
16
+
17
+ private
18
+
19
+ def not_some_helper
20
+ end
21
+ end
22
+
23
+ class TestContext
24
+ def some_helper
25
+ end
26
+ end
27
+
28
+ context = TestContext.new
29
+ presenter = TestPresenter.new(context)
30
+
31
+ Benchmark.ips do |x|
32
+ x.report "presenter method that delegates to the view context" do
33
+ presenter.hello_with_delegation
34
+ end
35
+
36
+ x.report "presenter method that doesn't delegate to the view context" do
37
+ presenter.hello_without_delegation
38
+ end
39
+
40
+ x.compare!
41
+ 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.4.0
4
+ version: 2.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Schierbeck
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-24 00:00:00.000000000 Z
11
+ date: 2015-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack
@@ -127,6 +127,9 @@ files:
127
127
  - lib/generators/curly/controller/templates/presenter.rb.erb
128
128
  - lib/generators/curly/controller/templates/view.html.curly.erb
129
129
  - lib/rails/projections.json
130
+ - perf/compile_benchmark.rb
131
+ - perf/compile_profile.rb
132
+ - perf/component_benchmark.rb
130
133
  - spec/attribute_scanner_spec.rb
131
134
  - spec/collection_blocks_spec.rb
132
135
  - spec/compiler/collections_spec.rb