padrino-helpers 0.12.5 → 0.12.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/padrino-helpers.rb +0 -1
- data/lib/padrino-helpers/form_builder/abstract_form_builder.rb +13 -2
- data/lib/padrino-helpers/form_helpers.rb +4 -3
- data/lib/padrino/rendering.rb +28 -15
- data/lib/padrino/rendering/erb_template.rb +40 -0
- data/test/helper.rb +1 -1
- data/test/test_rendering.rb +35 -0
- metadata +18 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 228ed24dba7a04edaa171094b1a4b80fc755bb69
|
4
|
+
data.tar.gz: ccb711977c96a4543ffc80e2151a2575cf2bc89a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69fbd42b69b64106ce3845dc94411a0ec3d67d829085fe8fa5ec4920682ed0ac888703ac91c49179a2fe971a23867d1fdc3f034fe6562ec61d02bb51a83c0525
|
7
|
+
data.tar.gz: 3222dff475ea7f212338858a203d2fde7d8f2a44b72ba64235a85aa877317feae0efe88c126937aac4a909396e06accaa2c532fb45823933f4cb5f37b0692f0b
|
data/lib/padrino-helpers.rb
CHANGED
@@ -6,7 +6,6 @@ require 'active_support/core_ext/string/conversions' # to_date
|
|
6
6
|
require 'active_support/option_merger' # with_options
|
7
7
|
require 'active_support/core_ext/object/with_options' # with_options
|
8
8
|
require 'active_support/inflector' # humanize
|
9
|
-
require 'active_support/core_ext/hash/except' # Hash#except
|
10
9
|
require 'padrino/rendering'
|
11
10
|
|
12
11
|
FileSet.glob_require('padrino-helpers/**/*.rb', __FILE__)
|
@@ -37,7 +37,9 @@ module Padrino
|
|
37
37
|
def label(field, options={}, &block)
|
38
38
|
options[:id] ||= nil
|
39
39
|
options[:caption] ||= I18n.t("#{model_name}.attributes.#{field}", :count => 1, :default => field.to_s.humanize, :scope => :models) + ': '
|
40
|
-
|
40
|
+
defaults = default_options(field, options)
|
41
|
+
defaults.delete(:value)
|
42
|
+
@template.label_tag(field_id(field), defaults, &block)
|
41
43
|
end
|
42
44
|
|
43
45
|
def hidden_field(field, options={})
|
@@ -110,7 +112,9 @@ module Padrino
|
|
110
112
|
|
111
113
|
def file_field(field, options={})
|
112
114
|
self.multipart = true
|
113
|
-
|
115
|
+
defaults = default_options(field, options)
|
116
|
+
defaults.delete(:value)
|
117
|
+
@template.file_field_tag field_name(field), defaults
|
114
118
|
end
|
115
119
|
|
116
120
|
def submit(*args)
|
@@ -150,6 +154,13 @@ module Padrino
|
|
150
154
|
[:hidden_field, :text_field, :text_area, :password_field, :file_field, :radio_button, :check_box, :select]
|
151
155
|
end
|
152
156
|
|
157
|
+
##
|
158
|
+
# Returns the human name of the field. Look that use builtin I18n.
|
159
|
+
#
|
160
|
+
def field_human_name(field)
|
161
|
+
I18n.translate("#{object_model_name}.attributes.#{field}", :count => 1, :default => field.to_s.humanize, :scope => :models)
|
162
|
+
end
|
163
|
+
|
153
164
|
##
|
154
165
|
# Returns the name for the given field.
|
155
166
|
# field_name(:username) => "user[username]"
|
@@ -45,7 +45,9 @@ module Padrino
|
|
45
45
|
instance = builder_instance(object, options)
|
46
46
|
# this can erect instance.multipart flag if the block calls instance.file_field
|
47
47
|
html = capture_html(instance, &block)
|
48
|
-
options = { :multipart => instance.multipart }.update(options
|
48
|
+
options = { :multipart => instance.multipart }.update(options)
|
49
|
+
options.delete(:as)
|
50
|
+
options.delete(:namespace)
|
49
51
|
form_tag(url, options) { html }
|
50
52
|
end
|
51
53
|
|
@@ -398,8 +400,7 @@ module Padrino
|
|
398
400
|
#
|
399
401
|
def text_area_tag(name, options={})
|
400
402
|
inner_html = TagHelpers::NEWLINE + options.delete(:value).to_s
|
401
|
-
|
402
|
-
content_tag(:textarea, inner_html, options)
|
403
|
+
content_tag(:textarea, inner_html, { :name => name }.update(options))
|
403
404
|
end
|
404
405
|
|
405
406
|
##
|
data/lib/padrino/rendering.rb
CHANGED
@@ -34,6 +34,11 @@ module Padrino
|
|
34
34
|
/~$/ # This is for Gedit
|
35
35
|
] unless defined?(IGNORE_FILE_PATTERN)
|
36
36
|
|
37
|
+
##
|
38
|
+
# Defines common content-type alias mappings.
|
39
|
+
#
|
40
|
+
CONTENT_TYPE_ALIASES = { :htm => :html }
|
41
|
+
|
37
42
|
##
|
38
43
|
# Default options used in the resolve_template-method.
|
39
44
|
#
|
@@ -221,7 +226,7 @@ module Padrino
|
|
221
226
|
# This means that no engine was explicitly defined
|
222
227
|
data, engine = resolve_template(engine, options) if data.nil?
|
223
228
|
|
224
|
-
options[:layout] ||=
|
229
|
+
ensure_rendering_engine(engine) || (options[:layout] ||= @layout || false)
|
225
230
|
|
226
231
|
# Cleanup the template.
|
227
232
|
@current_engine, engine_was = engine, @current_engine
|
@@ -345,13 +350,14 @@ module Padrino
|
|
345
350
|
end
|
346
351
|
|
347
352
|
def select_template(templates, template_path, content_type, _locale)
|
348
|
-
|
353
|
+
symbol = content_type_symbol(content_type)
|
354
|
+
simple_content_type = [:html, :plain].include?(symbol)
|
349
355
|
target_path, target_engine = path_and_engine(template_path)
|
350
356
|
|
351
|
-
templates.find{ |file,_| file.to_s == "#{target_path}.#{locale}.#{
|
357
|
+
templates.find{ |file,_| file.to_s == "#{target_path}.#{locale}.#{symbol}" } ||
|
352
358
|
templates.find{ |file,_| file.to_s == "#{target_path}.#{locale}" && simple_content_type } ||
|
353
359
|
templates.find{ |file,engine| engine == target_engine || File.extname(file.to_s) == ".#{target_engine}" } ||
|
354
|
-
templates.find{ |file,_| file.to_s == "#{target_path}.#{
|
360
|
+
templates.find{ |file,_| file.to_s == "#{target_path}.#{symbol}" } ||
|
355
361
|
templates.find{ |file,_| file.to_s == "#{target_path}" && simple_content_type }
|
356
362
|
end
|
357
363
|
|
@@ -361,7 +367,24 @@ module Padrino
|
|
361
367
|
path = path.chomp(extname)
|
362
368
|
path.insert(0, '/') unless Pathname.new(path).absolute?
|
363
369
|
path = path.squeeze('/').sub(relative, '') if relative
|
364
|
-
[path.to_sym, engine]
|
370
|
+
[path.to_sym, engine.to_sym]
|
371
|
+
end
|
372
|
+
|
373
|
+
def ensure_rendering_engine(engine)
|
374
|
+
return true if settings.respond_to?(engine)
|
375
|
+
return nil unless engine == :erb
|
376
|
+
require 'erb'
|
377
|
+
rescue LoadError
|
378
|
+
else
|
379
|
+
require 'padrino/rendering/erb_template'
|
380
|
+
settings.set :erb, Padrino::Rendering.engine_configurations[:erb]
|
381
|
+
end
|
382
|
+
|
383
|
+
def content_type_symbol(type)
|
384
|
+
if defined?(::Rack::Mime::MIME_TYPES) && type.kind_of?(String)
|
385
|
+
type = ::Rack::Mime::MIME_TYPES.key(type).sub(/\./,'').to_sym
|
386
|
+
end
|
387
|
+
CONTENT_TYPE_ALIASES[type] || type
|
365
388
|
end
|
366
389
|
end
|
367
390
|
end
|
@@ -395,13 +418,3 @@ unless defined? Padrino::Rendering::SlimTemplate
|
|
395
418
|
require 'padrino/rendering/slim_template'
|
396
419
|
end
|
397
420
|
end
|
398
|
-
|
399
|
-
if Padrino::Rendering.engine_configurations.empty? && !defined?(Padrino::IGNORE_NO_RENDERING_ENGINE)
|
400
|
-
warn <<-EOT
|
401
|
-
WARNING: no supported rendering engine found. To use Padrino::Helpers and
|
402
|
-
Padrino::Rendering properly you should include `gem 'erubis'`, `gem 'haml'`
|
403
|
-
or `gem 'slim'` in your Gemfile. If you are confident about using
|
404
|
-
Padrino::Helpers without Padrino::Rendering, please define constant
|
405
|
-
`Padrino::IGNORE_NO_RENDERING_ENGINE = true` before `require 'padrino-helpers'`.
|
406
|
-
EOT
|
407
|
-
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Padrino
|
2
|
+
module Rendering
|
3
|
+
class SafeERB < ::ERB
|
4
|
+
def set_eoutvar(compiler, eoutvar = '_erbout')
|
5
|
+
compiler.put_cmd = "#{eoutvar}.safe_concat"
|
6
|
+
compiler.insert_cmd = "#{eoutvar}.concat"
|
7
|
+
compiler.pre_cmd = ["#{eoutvar} = ActiveSupport::SafeBuffer.new"]
|
8
|
+
compiler.post_cmd = ["#{eoutvar}.force_encoding(__ENCODING__)"]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class ERBTemplate < Tilt::ERBTemplate
|
13
|
+
def render(*args)
|
14
|
+
app = args.first
|
15
|
+
app_class = app.class
|
16
|
+
@is_padrino_app = (defined?(Padrino::Application) && app.kind_of?(Padrino::Application)) ||
|
17
|
+
(app_class.respond_to?(:erb) && app_class.erb[:safe_buffer])
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def prepare
|
22
|
+
@outvar = options[:outvar] || self.class.default_output_variable
|
23
|
+
options[:trim] = '<>' if !(options[:trim] == false) && (options[:trim].nil? || options[:trim] == true)
|
24
|
+
@engine = SafeERB.new(data, options[:safe], options[:trim], @outvar)
|
25
|
+
end
|
26
|
+
|
27
|
+
def precompiled_preamble(locals)
|
28
|
+
original = super
|
29
|
+
return original unless @is_padrino_app
|
30
|
+
"__in_erb_template = true\n" << original
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Tilt.prefer(Padrino::Rendering::ERBTemplate, :erb)
|
37
|
+
|
38
|
+
Padrino::Rendering.engine_configurations[:erb] = {
|
39
|
+
:safe_buffer => true
|
40
|
+
}
|
data/test/helper.rb
CHANGED
@@ -68,7 +68,7 @@ class MiniTest::Spec
|
|
68
68
|
path = "/views/#{name}"
|
69
69
|
path += ".#{options.delete(:locale)}" if options[:locale].present?
|
70
70
|
path += ".#{options[:format]}" if options[:format].present?
|
71
|
-
path += ".erb" unless options[:format].to_s =~ /erb|slim|haml|rss|atom|builder/
|
71
|
+
path += ".erb" unless options[:format].to_s =~ /erb|slim|haml|rss|atom|builder|liquid/
|
72
72
|
path += ".builder" if options[:format].to_s =~ /rss|atom/
|
73
73
|
file = File.dirname(__FILE__) + path
|
74
74
|
File.open(file, 'w') { |io| io.write content }
|
data/test/test_rendering.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
2
|
require 'slim'
|
3
|
+
require 'liquid'
|
3
4
|
|
4
5
|
describe "Rendering" do
|
5
6
|
def setup
|
@@ -87,6 +88,26 @@ describe "Rendering" do
|
|
87
88
|
assert_equal "js file", body
|
88
89
|
end
|
89
90
|
|
91
|
+
it 'should set and restore layout in controllers' do
|
92
|
+
create_layout :boo, "boo is a <%= yield %>"
|
93
|
+
create_layout :moo, "moo is a <%= yield %>"
|
94
|
+
create_view :foo, "liquid file", :format => :liquid
|
95
|
+
mock_app do
|
96
|
+
layout :boo
|
97
|
+
controller :moo do
|
98
|
+
layout :moo
|
99
|
+
get('/liquid') { render :foo }
|
100
|
+
end
|
101
|
+
controller :boo do
|
102
|
+
get('/liquid') { render :foo }
|
103
|
+
end
|
104
|
+
end
|
105
|
+
get "/moo/liquid"
|
106
|
+
assert_equal "moo is a liquid file", body
|
107
|
+
get "/boo/liquid"
|
108
|
+
assert_equal "boo is a liquid file", body
|
109
|
+
end
|
110
|
+
|
90
111
|
it 'should use correct layout for each format' do
|
91
112
|
create_layout :application, "this is an <%= yield %>"
|
92
113
|
create_layout :application, "document start <%= yield %> end", :format => :xml
|
@@ -116,6 +137,20 @@ describe "Rendering" do
|
|
116
137
|
assert_equal "html file", body
|
117
138
|
end
|
118
139
|
|
140
|
+
it 'should find proper templates when content_type is set by string' do
|
141
|
+
create_layout :error, "layout<%= yield %>"
|
142
|
+
create_view :e404, "404 file"
|
143
|
+
|
144
|
+
mock_app do
|
145
|
+
not_found do
|
146
|
+
content_type 'text/html'
|
147
|
+
render 'e404', :layout => :error
|
148
|
+
end
|
149
|
+
end
|
150
|
+
get '/missing'
|
151
|
+
assert_equal 'layout404 file', body
|
152
|
+
end
|
153
|
+
|
119
154
|
it 'should not use html file when DEFAULT_RENDERING_OPTIONS[:strict_format] == true' do
|
120
155
|
create_layout :foo, "html file", :format => :html
|
121
156
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: padrino-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.12.
|
4
|
+
version: 0.12.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Padrino Team
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2016-05-09 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: padrino-support
|
@@ -19,46 +19,46 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - '='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.12.
|
22
|
+
version: 0.12.6
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - '='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.12.
|
29
|
+
version: 0.12.6
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: tilt
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
|
-
- - ~>
|
34
|
+
- - "~>"
|
35
35
|
- !ruby/object:Gem::Version
|
36
36
|
version: 1.4.1
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- - ~>
|
41
|
+
- - "~>"
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: 1.4.1
|
44
44
|
- !ruby/object:Gem::Dependency
|
45
45
|
name: i18n
|
46
46
|
requirement: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
|
-
- - ~>
|
48
|
+
- - "~>"
|
49
49
|
- !ruby/object:Gem::Version
|
50
50
|
version: '0.6'
|
51
|
-
- -
|
51
|
+
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: 0.6.7
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
|
-
- - ~>
|
58
|
+
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '0.6'
|
61
|
-
- -
|
61
|
+
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: 0.6.7
|
64
64
|
description: Tag helpers, asset helpers, form helpers, form builders and many more
|
@@ -69,9 +69,9 @@ extensions: []
|
|
69
69
|
extra_rdoc_files:
|
70
70
|
- README.rdoc
|
71
71
|
files:
|
72
|
-
- .document
|
73
|
-
- .gitignore
|
74
|
-
- .yardopts
|
72
|
+
- ".document"
|
73
|
+
- ".gitignore"
|
74
|
+
- ".yardopts"
|
75
75
|
- LICENSE.txt
|
76
76
|
- README.rdoc
|
77
77
|
- Rakefile
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- lib/padrino-helpers/tag_helpers.rb
|
117
117
|
- lib/padrino-helpers/translation_helpers.rb
|
118
118
|
- lib/padrino/rendering.rb
|
119
|
+
- lib/padrino/rendering/erb_template.rb
|
119
120
|
- lib/padrino/rendering/erubis_template.rb
|
120
121
|
- lib/padrino/rendering/haml_template.rb
|
121
122
|
- lib/padrino/rendering/slim_template.rb
|
@@ -224,22 +225,22 @@ licenses:
|
|
224
225
|
metadata: {}
|
225
226
|
post_install_message:
|
226
227
|
rdoc_options:
|
227
|
-
- --charset=UTF-8
|
228
|
+
- "--charset=UTF-8"
|
228
229
|
require_paths:
|
229
230
|
- lib
|
230
231
|
required_ruby_version: !ruby/object:Gem::Requirement
|
231
232
|
requirements:
|
232
|
-
- -
|
233
|
+
- - ">="
|
233
234
|
- !ruby/object:Gem::Version
|
234
235
|
version: '0'
|
235
236
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
236
237
|
requirements:
|
237
|
-
- -
|
238
|
+
- - ">="
|
238
239
|
- !ruby/object:Gem::Version
|
239
240
|
version: 1.3.6
|
240
241
|
requirements: []
|
241
242
|
rubyforge_project: padrino-helpers
|
242
|
-
rubygems_version: 2.
|
243
|
+
rubygems_version: 2.4.8
|
243
244
|
signing_key:
|
244
245
|
specification_version: 4
|
245
246
|
summary: Helpers for padrino
|