forme 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 13efa41ba160d80619b779cda0ad94581b37695e9fb8caedc696d26c91c92d87
4
- data.tar.gz: 6558cf408b4573b3822c566c8e48b856de47009c6293831e0cdcc3fed7f4ebc2
3
+ metadata.gz: 7427b1117f14a93c292826f8d5d25ceacc3d8948d720176a4a5c131b40875284
4
+ data.tar.gz: 8d992d583b50af76e3abf54ca3bcbd385f23bf3434d4d6bd761ee0c82ec75975
5
5
  SHA512:
6
- metadata.gz: 42d8dd057d905a8cb44610c9b3c20c9d055d0f0495b8ec94b020a637d0b10f5c1919ebc697e0b4f8970a29fcb511661cc56d622dc1d91eb8f347ab62fe36d7c4
7
- data.tar.gz: 10beb8c2109850be4c1fb5d0c46d13218269c8b65f604cda930024eab8ff3838f32ab70256696d93f5c17f3e011d5dad0450511051a6abda40e75e37c1bbf2eb
6
+ metadata.gz: a6fab6a2f89db35fea78cfa851bc6632d8c88d56bc683ebdd5af7f674325f71ab57efa8f327c00150afc5e24cdb7a39b8e4d2a734dafe228bca1794bf5a70514
7
+ data.tar.gz: fb11b777c89ac1ffdf18265ddc563d527cfd531505d23748957b233f87abd3e14ff5a52e43b335969ae41d71502e7bb5dec8fb12280bf3869ffc3159f7b688dc
data/CHANGELOG CHANGED
@@ -1,3 +1,13 @@
1
+ === 2.4.0 (2023-04-05)
2
+
3
+ * Support Sequel::Model#forme_use_required_abbr? to control whether to add abbr * tag for required inputs (jeremyevans) (#105)
4
+
5
+ * Make select input with option groups and a :value option correctly set selected attribute on options in all optgroups (v-kolesnikov) (#111, #110)
6
+
7
+ * Make Roda forme_set plugin only include metadata for inputs in the same form, and not inputs on other forms on the same page (jeremyevans) (#109)
8
+
9
+ * Use erb/escape for faster HTML escaping if available (jeremyevans)
10
+
1
11
  === 2.3.0 (2022-11-15)
2
12
 
3
13
  * Add forme/bs5 for Bootstrap 5 support (janko) (#106)
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011-2022 Jeremy Evans
1
+ Copyright (c) 2011-2023 Jeremy Evans
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to
data/README.rdoc CHANGED
@@ -53,7 +53,7 @@ This results in the following HTML:
53
53
  </label>
54
54
  </form>
55
55
 
56
- In addition to integrating with Sequel, Form also integrates into
56
+ In addition to integrating with Sequel, Forme also integrates into
57
57
  three separate web frameworks, Roda, Rails, and Sinatra, allowing
58
58
  use of forms inside templates. This is the most common usage of Forme.
59
59
 
@@ -417,6 +417,7 @@ module Forme
417
417
  return unless @opts[:options]
418
418
  process_select_options(@opts[:options], &block)
419
419
  end
420
+ @attr.delete(:value)
420
421
 
421
422
  if prompt = @opts[:add_blank]
422
423
  unless prompt.is_a?(String)
@@ -434,7 +435,7 @@ module Forme
434
435
  def process_select_options(os)
435
436
  vm = @opts[:value_method]
436
437
  tm = @opts[:text_method]
437
- sel = @opts[:selected] || @attr.delete(:value)
438
+ sel = @opts[:selected] || @attr[:value]
438
439
 
439
440
  if @opts[:multiple]
440
441
  sel = Array(sel)
@@ -7,7 +7,7 @@ module Forme
7
7
  class Helper
8
8
  Forme.register_transformer(:helper, :default, new)
9
9
 
10
- # Return tag with error message span tag after it.
10
+ # Return tag with help message span tag after it.
11
11
  def call(tag, input)
12
12
  attr = input.opts[:helper_attr]
13
13
  attr = attr ? attr.dup : {}
data/lib/forme/version.rb CHANGED
@@ -6,7 +6,7 @@ module Forme
6
6
  MAJOR = 2
7
7
 
8
8
  # The minor version of Forme, updated for new feature releases of Forme.
9
- MINOR = 3
9
+ MINOR = 4
10
10
 
11
11
  # The patch version of Forme, updated only for bug fixes from the last
12
12
  # feature release.
data/lib/forme.rb CHANGED
@@ -9,27 +9,32 @@ module Forme
9
9
  end
10
10
 
11
11
  begin
12
- require 'cgi/escape'
12
+ require 'erb/escape'
13
+ define_singleton_method(:h, ERB::Escape.instance_method(:html_escape))
13
14
  # :nocov:
14
- unless CGI.respond_to?(:escapeHTML) # work around for JRuby 9.1
15
- CGI = Object.new
16
- CGI.extend(defined?(::CGI::Escape) ? ::CGI::Escape : ::CGI::Util)
17
- end
18
- def self.h(value)
19
- CGI.escapeHTML(value.to_s)
20
- end
21
15
  rescue LoadError
22
- ESCAPE_TABLE = {'&' => '&amp;', '<' => '&lt;', '>' => '&gt;', '"' => '&quot;', "'" => '&#39;'}.freeze
23
- ESCAPE_TABLE.each_value(&:freeze)
24
- if RUBY_VERSION >= '1.9'
25
- # Escape the following characters with their HTML/XML
26
- # equivalents.
27
- def self.h(value)
28
- value.to_s.gsub(/[&<>"']/, ESCAPE_TABLE)
16
+ begin
17
+ require 'cgi/escape'
18
+ unless CGI.respond_to?(:escapeHTML) # work around for JRuby 9.1
19
+ CGI = Object.new
20
+ CGI.extend(defined?(::CGI::Escape) ? ::CGI::Escape : ::CGI::Util)
29
21
  end
30
- else
31
22
  def self.h(value)
32
- value.to_s.gsub(/[&<>"']/){|s| ESCAPE_TABLE[s]}
23
+ CGI.escapeHTML(value.to_s)
24
+ end
25
+ rescue LoadError
26
+ ESCAPE_TABLE = {'&' => '&amp;', '<' => '&lt;', '>' => '&gt;', '"' => '&quot;', "'" => '&#39;'}.freeze
27
+ ESCAPE_TABLE.each_value(&:freeze)
28
+ if RUBY_VERSION >= '1.9'
29
+ # Escape the following characters with their HTML/XML
30
+ # equivalents.
31
+ def self.h(value)
32
+ value.to_s.gsub(/[&<>"']/, ESCAPE_TABLE)
33
+ end
34
+ else
35
+ def self.h(value)
36
+ value.to_s.gsub(/[&<>"']/){|s| ESCAPE_TABLE[s]}
37
+ end
33
38
  end
34
39
  end
35
40
  end
@@ -37,6 +37,18 @@ class Roda
37
37
  }.freeze
38
38
 
39
39
  module InstanceMethods
40
+ # If a Sequel::Model object that supports forme_set is passed,
41
+ # isolate the inputs so that each form only includes metadata
42
+ # for inputs on the form, and not inputs for earlier forms on
43
+ # the same page.
44
+ def form(obj=nil, attr={}, opts={}, &block)
45
+ if obj.is_a?(Sequel::Plugins::FormeSet::InstanceMethods)
46
+ obj.isolate_forme_inputs{super}
47
+ else
48
+ super
49
+ end
50
+ end
51
+
40
52
  # Return hash based on submitted parameters, with :values key
41
53
  # being submitted values for the object, and :validations key
42
54
  # being a hash of validation metadata for the object.
@@ -207,7 +207,7 @@ module Sequel # :nodoc:
207
207
  # is required.
208
208
  def handle_label(f)
209
209
  opts[:label] = humanize(field) unless opts.has_key?(:label)
210
- opts[:label] = [opts[:label], form._tag(:abbr, {:title=>'required'}, '*')] if opts[:label] && opts[:required]
210
+ opts[:label] = [opts[:label], form._tag(:abbr, {:title=>'required'}, '*')] if opts[:label] && opts[:required] && obj.forme_use_required_abbr?
211
211
  end
212
212
 
213
213
  # Update the attributes and options for any recognized validations
@@ -492,6 +492,11 @@ module Sequel # :nodoc:
492
492
  'post'
493
493
  end
494
494
 
495
+ # Whether to set an abbr tag in labels for required inputs.
496
+ def forme_use_required_abbr?
497
+ true
498
+ end
499
+
495
500
  # Use the underscored model name as the default namespace.
496
501
  def forme_namespace
497
502
  model.send(:underscore, model.name)
@@ -24,6 +24,21 @@ module Sequel # :nodoc:
24
24
  @forme_inputs ||= {}
25
25
  end
26
26
 
27
+ # Temporarily reset forme_inputs to the empty hash before yielding to the block.
28
+ # Used by the Roda forme_set plugin to make sure each form only includes metadata
29
+ # for inputs in that form, and not metadata for inputs for earlier forms on the same page.
30
+ def isolate_forme_inputs
31
+ return yield if frozen?
32
+
33
+ forme_inputs = self.forme_inputs
34
+ begin
35
+ @forme_inputs = {}
36
+ yield
37
+ ensure
38
+ @forme_inputs = forme_inputs.merge(@forme_inputs)
39
+ end
40
+ end
41
+
27
42
  # Hash with column name symbol keys and <tt>[subset, allowed_values]</tt> values. +subset+
28
43
  # is a boolean flag, if true, the uploaded values should be a subset of the allowed values,
29
44
  # otherwise, there should be a single uploaded value that is a member of the allowed values.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forme
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-15 00:00:00.000000000 Z
11
+ date: 2023-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -225,7 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
225
  - !ruby/object:Gem::Version
226
226
  version: '0'
227
227
  requirements: []
228
- rubygems_version: 3.3.7
228
+ rubygems_version: 3.4.10
229
229
  signing_key:
230
230
  specification_version: 4
231
231
  summary: HTML forms library