hanami-helpers 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +1 -1
- data/hanami-helpers.gemspec +2 -2
- data/lib/hanami/helpers/form_helper/form_builder.rb +42 -19
- data/lib/hanami/helpers/form_helper/values.rb +15 -8
- data/lib/hanami/helpers/number_formatting_helper.rb +1 -1
- data/lib/hanami/helpers/routing_helper.rb +2 -2
- data/lib/hanami/helpers/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e1a90723c16139a6a3c5fdd84e0d85f732ed886
|
4
|
+
data.tar.gz: 1edccf5044d1185147cf0d0e51fe863d78467e03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98e536f514a1e3d152ab3f16b059592f0d8c1b7b2f83688cedf3641a397c8db506fbefd6855fc5acb9b0feeadf991501d9dc9f62e9c3e2f555837b9085f5aa6c
|
7
|
+
data.tar.gz: fac6a702eb642517b6e5c31d3a1bdbf784ebccf5ed7938665ed0dfb7234205074fae945f42ce2f343ebfc2b254ddb4e90fe5032f8472308378d688e303b8aefa
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
# Hanami::Helpers
|
2
2
|
View helpers for Ruby web applications
|
3
3
|
|
4
|
+
## v0.5.0 - 2016-11-15
|
5
|
+
### Added
|
6
|
+
- [Marion Duprey] Allow `select` form helper to generate a multiple select (via `multiple: true` option)
|
7
|
+
|
8
|
+
### Fixed
|
9
|
+
- [Luca Guidi] Ensure `form_for` to be compatible with params passed as `Hash`. This is useful for unit tests.
|
10
|
+
|
11
|
+
### Changed
|
12
|
+
- [Luca Guidi] Official support for Ruby: MRI 2.3+ and JRuby 9.1.5.0+
|
13
|
+
|
4
14
|
## v0.4.0 - 2016-07-22
|
5
15
|
### Added
|
6
16
|
- [Luca Guidi] Allow `link_to` to be concat with other helpers. Eg `link_to(...) + link_to(...)`, `span(...) + link_to(...)`.
|
data/README.md
CHANGED
data/hanami-helpers.gemspec
CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ['lib']
|
21
|
-
spec.required_ruby_version = '>= 2.
|
21
|
+
spec.required_ruby_version = '>= 2.3.0'
|
22
22
|
|
23
|
-
spec.add_dependency 'hanami-utils', '~> 0.
|
23
|
+
spec.add_dependency 'hanami-utils', '~> 0.9'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
26
26
|
spec.add_development_dependency 'rake', '~> 11'
|
@@ -56,14 +56,6 @@ module Hanami
|
|
56
56
|
# @see Hanami::Helpers::FormHelper::FormBuilder#_input_id
|
57
57
|
INPUT_ID_REPLACEMENT = '-\k<token>'.freeze
|
58
58
|
|
59
|
-
# Replacement for input value interpolation
|
60
|
-
#
|
61
|
-
# @since 0.2.0
|
62
|
-
# @api private
|
63
|
-
#
|
64
|
-
# @see Hanami::Helpers::FormHelper::FormBuilder#_value
|
65
|
-
INPUT_VALUE_REPLACEMENT = '.\k<token>'.freeze
|
66
|
-
|
67
59
|
# Default value for unchecked check box
|
68
60
|
#
|
69
61
|
# @since 0.2.0
|
@@ -780,9 +772,22 @@ module Hanami
|
|
780
772
|
# # <option value="it" selected="selected">Italy</option>
|
781
773
|
# # <option value="us">United States</option>
|
782
774
|
# # </select>
|
775
|
+
#
|
776
|
+
# @example Multiple select
|
777
|
+
# <%=
|
778
|
+
# # ...
|
779
|
+
# values = Hash['it' => 'Italy', 'us' => 'United States']
|
780
|
+
# select :stores, values, multiple: true
|
781
|
+
# %>
|
782
|
+
#
|
783
|
+
# # Output:
|
784
|
+
# # <select name="book[store][]" id="book-store" multiple="multiple">
|
785
|
+
# # <option value="it">Italy</option>
|
786
|
+
# # <option value="us">United States</option>
|
787
|
+
# # </select>
|
783
788
|
def select(name, values, attributes = {}) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
784
789
|
options = attributes.delete(:options) { {} }
|
785
|
-
attributes = { name:
|
790
|
+
attributes = { name: _select_input_name(name, attributes[:multiple]), id: _input_id(name) }.merge(attributes)
|
786
791
|
prompt = options.delete(:prompt)
|
787
792
|
selected = options.delete(:selected)
|
788
793
|
|
@@ -790,7 +795,7 @@ module Hanami
|
|
790
795
|
option(prompt) unless prompt.nil?
|
791
796
|
|
792
797
|
values.each do |content, value|
|
793
|
-
if
|
798
|
+
if _select_option_selected?(value, selected, _value(name), attributes[:multiple])
|
794
799
|
option(content, { value: value, selected: SELECTED }.merge(options))
|
795
800
|
else
|
796
801
|
option(content, { value: value }.merge(options))
|
@@ -977,8 +982,9 @@ module Hanami
|
|
977
982
|
# @api private
|
978
983
|
# @since 0.2.0
|
979
984
|
def _value(name)
|
980
|
-
|
981
|
-
|
985
|
+
@values.get(
|
986
|
+
*_input_name(name).split(/[\[\]]+/).map(&:to_sym)
|
987
|
+
)
|
982
988
|
end
|
983
989
|
|
984
990
|
# Input <tt>for</tt> HTML attribute
|
@@ -1001,13 +1007,13 @@ module Hanami
|
|
1001
1007
|
#
|
1002
1008
|
# @see Hanami::Helpers::FormHelper::FormBuilder#check_box
|
1003
1009
|
def _hidden_field_for_check_box(name, attributes)
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
)
|
1010
|
-
|
1010
|
+
return unless attributes[:value].nil? || !attributes[:unchecked_value].nil?
|
1011
|
+
|
1012
|
+
input(
|
1013
|
+
type: :hidden,
|
1014
|
+
name: attributes[:name] || _input_name(name),
|
1015
|
+
value: attributes.delete(:unchecked_value) || DEFAULT_UNCHECKED_VALUE
|
1016
|
+
)
|
1011
1017
|
end
|
1012
1018
|
|
1013
1019
|
# HTML attributes for check box
|
@@ -1030,6 +1036,23 @@ module Hanami
|
|
1030
1036
|
|
1031
1037
|
attributes
|
1032
1038
|
end
|
1039
|
+
|
1040
|
+
def _select_input_name(name, multiple)
|
1041
|
+
select_name = _input_name(name)
|
1042
|
+
select_name = "#{select_name}[]" if multiple
|
1043
|
+
select_name
|
1044
|
+
end
|
1045
|
+
|
1046
|
+
# TODO: this has to be refactored
|
1047
|
+
#
|
1048
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
1049
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
1050
|
+
def _select_option_selected?(value, selected, input_value, multiple)
|
1051
|
+
value == selected || (multiple && (selected.is_a?(Array) && selected.include?(value))) ||
|
1052
|
+
value == input_value || (multiple && (input_value.is_a?(Array) && input_value.include?(value)))
|
1053
|
+
end
|
1054
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
1055
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
1033
1056
|
end
|
1034
1057
|
end
|
1035
1058
|
end
|
@@ -18,27 +18,34 @@ module Hanami
|
|
18
18
|
# @since 0.2.0
|
19
19
|
# @api private
|
20
20
|
def initialize(values, params)
|
21
|
-
@values = Utils::Hash.new(values).
|
21
|
+
@values = Utils::Hash.new(values || {}).symbolize!
|
22
22
|
@params = params
|
23
23
|
end
|
24
24
|
|
25
|
-
# Returns the value for the given key
|
25
|
+
# Returns the value (if present) for the given key.
|
26
|
+
# Nested values are expressed with an array if symbols.
|
26
27
|
#
|
27
28
|
# @since 0.2.0
|
28
29
|
# @api private
|
29
|
-
def get(
|
30
|
-
|
30
|
+
def get(*keys)
|
31
|
+
_get_from_params(*keys) || _get_from_values(*keys)
|
31
32
|
end
|
32
33
|
|
33
34
|
private
|
34
35
|
|
36
|
+
# @since 0.5.0
|
37
|
+
# @api private
|
38
|
+
def _get_from_params(*keys)
|
39
|
+
@params.dig(*keys)
|
40
|
+
end
|
41
|
+
|
35
42
|
# @since 0.2.0
|
36
43
|
# @api private
|
37
|
-
def _get_from_values(
|
38
|
-
|
39
|
-
result
|
44
|
+
def _get_from_values(*keys)
|
45
|
+
head, *tail = *keys
|
46
|
+
result = @values[head]
|
40
47
|
|
41
|
-
|
48
|
+
tail.each do |k|
|
42
49
|
break if result.nil?
|
43
50
|
|
44
51
|
result = if result.respond_to?(k) # rubocop:disable Style/IfUnlessModifier
|
@@ -5,7 +5,7 @@ module Hanami
|
|
5
5
|
# Routing helper for full stack Hanami web applications.
|
6
6
|
#
|
7
7
|
# For a given application called <tt>Web::Application</tt>, at runtime
|
8
|
-
# Hanami creates a routes factory called <tt>Web
|
8
|
+
# Hanami creates a routes factory called <tt>Web.routes</tt>.
|
9
9
|
#
|
10
10
|
# By including this module in a view, it makes that factory avaliable as
|
11
11
|
# <tt>routes</tt>.
|
@@ -41,7 +41,7 @@ module Hanami
|
|
41
41
|
# # <%= link_to_home %>
|
42
42
|
module RoutingHelper
|
43
43
|
def self.included(base)
|
44
|
-
factory = "#{Utils::String.new(base).namespace}
|
44
|
+
factory = "#{Utils::String.new(base).namespace}.routes"
|
45
45
|
|
46
46
|
base.class_eval <<-END_EVAL, __FILE__, __LINE__
|
47
47
|
def routes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanami-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-
|
13
|
+
date: 2016-11-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: hanami-utils
|
@@ -18,14 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '0.
|
21
|
+
version: '0.9'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: '0.
|
28
|
+
version: '0.9'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: bundler
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,7 +110,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
110
110
|
requirements:
|
111
111
|
- - ">="
|
112
112
|
- !ruby/object:Gem::Version
|
113
|
-
version: 2.
|
113
|
+
version: 2.3.0
|
114
114
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
116
|
- - ">="
|