hanami-helpers 0.4.0 → 0.5.0
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 +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
|
- - ">="
|