trenni-formatters 2.8.1 → 2.12.2
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/lib/trenni/formatters.rb +2 -0
- data/lib/trenni/formatters/formatter.rb +9 -7
- data/{spec/trenni/formatters/formatters_spec.rb → lib/trenni/formatters/html/accept_checkbox.rb} +42 -34
- data/lib/trenni/formatters/html/definition_list_form.rb +46 -36
- data/lib/trenni/formatters/html/form_formatter.rb +69 -52
- data/lib/trenni/formatters/html/label_form.rb +146 -0
- data/lib/trenni/formatters/html/option_select.rb +50 -47
- data/lib/trenni/formatters/html/radio_select.rb +38 -34
- data/lib/trenni/formatters/markdown.rb +7 -7
- data/lib/trenni/formatters/relative_time.rb +3 -1
- data/lib/trenni/formatters/truncated_text.rb +16 -12
- data/lib/trenni/formatters/version.rb +3 -1
- metadata +69 -49
- data/.gitignore +0 -17
- data/.rspec +0 -4
- data/.simplecov +0 -9
- data/.travis.yml +0 -8
- data/Gemfile +0 -12
- data/README.md +0 -77
- data/Rakefile +0 -8
- data/spec/trenni/formatters/html/form_formatter_spec.rb +0 -186
- data/spec/trenni/formatters/html/option_select_spec.rb +0 -129
- data/spec/trenni/formatters/html/radio_select_spec.rb +0 -49
- data/spec/trenni/formatters/markdown_spec.rb +0 -34
- data/spec/trenni/formatters/relative_time_spec.rb +0 -38
- data/spec/trenni/formatters/truncated_text_spec.rb +0 -32
- data/trenni-formatters.gemspec +0 -33
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7fc81bd7424d62a51946525bfadb198b184223b85f39924b090c4917866e4e07
         | 
| 4 | 
            +
              data.tar.gz: 2b68b00618ebff45b414dd7f4cd29eb770cdc4093ce0e80738a2b20dcba60377
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: bb61c211734823ed5d5c198532d892bd881309c90799cdd939d025e0edc59582fcc11b92292c8cbfeaf748fc60ea81c883967aaf58c0f46bcd9067ba5c362bbd
         | 
| 7 | 
            +
              data.tar.gz: 2fc540df7f46b5dd4209517143fbe50d603cfd9857000c86906bc50c2c0302d8ae467cdbc8758e00f6360ba3e6dd99ca79bb9b4a232af11e9ab8f9cacc18e6dd
         | 
    
        data/lib/trenni/formatters.rb
    CHANGED
    
    
| @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            # Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
         | 
| 2 4 | 
             
            # 
         | 
| 3 5 | 
             
            # Permission is hereby granted, free of charge, to any person obtaining a copy
         | 
| @@ -79,17 +81,17 @@ module Trenni | |
| 79 81 |  | 
| 80 82 | 
             
            			attr :options
         | 
| 81 83 |  | 
| 82 | 
            -
            			def format_unspecified(object, options)
         | 
| 84 | 
            +
            			def format_unspecified(object, **options)
         | 
| 83 85 | 
             
            				object.to_s
         | 
| 84 86 | 
             
            			end
         | 
| 85 87 |  | 
| 86 | 
            -
            			def format(object, options | 
| 88 | 
            +
            			def format(object, **options)
         | 
| 87 89 | 
             
            				method_name = self.method_for_mapping(object)
         | 
| 88 90 |  | 
| 89 91 | 
             
            				if self.respond_to?(method_name)
         | 
| 90 | 
            -
            					self.send(method_name, object, options)
         | 
| 92 | 
            +
            					self.send(method_name, object, **options)
         | 
| 91 93 | 
             
            				else
         | 
| 92 | 
            -
            					format_unspecified(object, options)
         | 
| 94 | 
            +
            					format_unspecified(object, **options)
         | 
| 93 95 | 
             
            				end
         | 
| 94 96 | 
             
            			end
         | 
| 95 97 |  | 
| @@ -99,15 +101,15 @@ module Trenni | |
| 99 101 | 
             
            				@options[key]
         | 
| 100 102 | 
             
            			end
         | 
| 101 103 |  | 
| 102 | 
            -
            			map(String) do |object, options|
         | 
| 104 | 
            +
            			map(String) do |object, **options|
         | 
| 103 105 | 
             
            				object
         | 
| 104 106 | 
             
            			end
         | 
| 105 107 |  | 
| 106 | 
            -
            			map(NilClass) do |object, options|
         | 
| 108 | 
            +
            			map(NilClass) do |object, **options|
         | 
| 107 109 | 
             
            				options[:blank] || @options[:blank] || ""
         | 
| 108 110 | 
             
            			end
         | 
| 109 111 |  | 
| 110 | 
            -
            			map(TrueClass, FalseClass, *Mapping.lookup_descendants(Numeric)) do |object, options|
         | 
| 112 | 
            +
            			map(TrueClass, FalseClass, *Mapping.lookup_descendants(Numeric)) do |object, **options|
         | 
| 111 113 | 
             
            				object.to_s
         | 
| 112 114 | 
             
            			end
         | 
| 113 115 | 
             
            		end
         | 
    
        data/{spec/trenni/formatters/formatters_spec.rb → lib/trenni/formatters/html/accept_checkbox.rb}
    RENAMED
    
    | @@ -1,4 +1,6 @@ | |
| 1 | 
            -
            #  | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Copyright, 2020, by Samuel G. D. Williams. <http://www.codeotaku.com>
         | 
| 2 4 | 
             
            # 
         | 
| 3 5 | 
             
            # Permission is hereby granted, free of charge, to any person obtaining a copy
         | 
| 4 6 | 
             
            # of this software and associated documentation files (the "Software"), to deal
         | 
| @@ -18,40 +20,46 @@ | |
| 18 20 | 
             
            # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
         | 
| 19 21 | 
             
            # THE SOFTWARE.
         | 
| 20 22 |  | 
| 21 | 
            -
            require 'trenni/ | 
| 23 | 
            +
            require 'trenni/builder'
         | 
| 22 24 |  | 
| 23 | 
            -
            module Trenni | 
| 24 | 
            -
            	 | 
| 25 | 
            -
            		 | 
| 26 | 
            -
            			 | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 25 | 
            +
            module Trenni
         | 
| 26 | 
            +
            	module Formatters
         | 
| 27 | 
            +
            		module HTML
         | 
| 28 | 
            +
            			class AcceptCheckbox
         | 
| 29 | 
            +
            				def self.call(formatter, builder, **options, &block)
         | 
| 30 | 
            +
            					instance = self.new(formatter, builder, **options)
         | 
| 31 | 
            +
            					
         | 
| 32 | 
            +
            					instance.call(&block)
         | 
| 33 | 
            +
            				end
         | 
| 34 | 
            +
            				
         | 
| 35 | 
            +
            				def initialize(formatter, builder, **options)
         | 
| 36 | 
            +
            					@formatter = formatter
         | 
| 37 | 
            +
            					@builder = builder
         | 
| 38 | 
            +
            					@options = options
         | 
| 39 | 
            +
            				end
         | 
| 40 | 
            +
            				
         | 
| 41 | 
            +
            				def name_for(**options)
         | 
| 42 | 
            +
            					@formatter.name_for(**options)
         | 
| 43 | 
            +
            				end
         | 
| 44 | 
            +
            				
         | 
| 45 | 
            +
            				def checkbox_attributes_for(**options)
         | 
| 46 | 
            +
            					@formatter.checkbox_attributes_for(**options)
         | 
| 47 | 
            +
            				end
         | 
| 48 | 
            +
            				
         | 
| 49 | 
            +
            				def call(&block)
         | 
| 50 | 
            +
            					Builder.fragment(@builder) do |builder|
         | 
| 51 | 
            +
            						builder.inline('span') do
         | 
| 52 | 
            +
            							builder.inline :input, type: :hidden, name: name_for(**@options), value: 'false'
         | 
| 53 | 
            +
            							
         | 
| 54 | 
            +
            							builder.tag :input, checkbox_attributes_for(**@options)
         | 
| 55 | 
            +
            							
         | 
| 56 | 
            +
            							builder.text " "
         | 
| 57 | 
            +
            							
         | 
| 58 | 
            +
            							builder.capture(self, &block)
         | 
| 59 | 
            +
            						end
         | 
| 60 | 
            +
            					end
         | 
| 61 | 
            +
            				end
         | 
| 62 | 
            +
            			end
         | 
| 55 63 | 
             
            		end
         | 
| 56 64 | 
             
            	end
         | 
| 57 65 | 
             
            end
         | 
| @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            # Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
         | 
| 2 4 | 
             
            # 
         | 
| 3 5 | 
             
            # Permission is hereby granted, free of charge, to any person obtaining a copy
         | 
| @@ -30,109 +32,117 @@ module Trenni | |
| 30 32 | 
             
            				include FormFormatter
         | 
| 31 33 |  | 
| 32 34 | 
             
            				# An input field (single line text).
         | 
| 33 | 
            -
            				def input(options | 
| 34 | 
            -
            					options = @options.merge(options)
         | 
| 35 | 
            +
            				def input(**options)
         | 
| 36 | 
            +
            					options = @options.merge(**options)
         | 
| 35 37 |  | 
| 36 38 | 
             
            					Builder.fragment do |builder|
         | 
| 37 39 | 
             
            						builder.inline(:dt) do
         | 
| 38 | 
            -
            							builder.text title_for(options)
         | 
| 40 | 
            +
            							builder.text title_for(**options)
         | 
| 39 41 | 
             
            						end
         | 
| 40 42 |  | 
| 41 43 | 
             
            						builder.inline(:dd) do
         | 
| 42 | 
            -
            							builder.tag :input, input_attributes_for(options)
         | 
| 44 | 
            +
            							builder.tag :input, input_attributes_for(**options)
         | 
| 43 45 |  | 
| 44 | 
            -
            							if details = details_for(options)
         | 
| 45 | 
            -
            								builder.inline(:small, class: 'details') { | 
| 46 | 
            +
            							if details = details_for(**options)
         | 
| 47 | 
            +
            								builder.inline(:small, class: 'details') {builder.text details}
         | 
| 46 48 | 
             
            							end
         | 
| 47 49 | 
             
            						end
         | 
| 48 50 | 
             
            					end
         | 
| 49 51 | 
             
            				end
         | 
| 50 52 |  | 
| 51 53 | 
             
            				# An output field for the result of a computation.
         | 
| 52 | 
            -
            				def output(options | 
| 53 | 
            -
            					options = @options.merge(options)
         | 
| 54 | 
            +
            				def output(**options)
         | 
| 55 | 
            +
            					options = @options.merge(**options)
         | 
| 54 56 |  | 
| 55 57 | 
             
            					Builder.fragment do |builder|
         | 
| 56 | 
            -
            						builder.inline(:dt) { | 
| 58 | 
            +
            						builder.inline(:dt) {builder.text title_for(**options)}
         | 
| 57 59 |  | 
| 58 60 | 
             
            						builder.inline(:dd) do
         | 
| 59 | 
            -
            							builder.inline :output, output_attributes_for(options) do
         | 
| 60 | 
            -
            								builder.text value_for(options)
         | 
| 61 | 
            +
            							builder.inline :output, output_attributes_for(**options) do
         | 
| 62 | 
            +
            								builder.text value_for(**options)
         | 
| 61 63 | 
             
            							end
         | 
| 62 64 | 
             
            						end
         | 
| 63 65 | 
             
            					end
         | 
| 64 66 | 
             
            				end
         | 
| 65 67 |  | 
| 66 68 | 
             
            				# A textarea field (multi-line text).
         | 
| 67 | 
            -
            				def textarea(options | 
| 68 | 
            -
            					options = @options.merge(options)
         | 
| 69 | 
            +
            				def textarea(**options)
         | 
| 70 | 
            +
            					options = @options.merge(**options)
         | 
| 69 71 |  | 
| 70 72 | 
             
            					Builder.fragment do |builder|
         | 
| 71 73 | 
             
            						builder.tag(:dt) do
         | 
| 72 | 
            -
            								builder.text title_for(options)
         | 
| 74 | 
            +
            								builder.text title_for(**options)
         | 
| 73 75 |  | 
| 74 | 
            -
            								if details = details_for(options)
         | 
| 75 | 
            -
            									builder.inline(:small, class: 'details') { | 
| 76 | 
            +
            								if details = details_for(**options)
         | 
| 77 | 
            +
            									builder.inline(:small, class: 'details') {builder.text details}
         | 
| 76 78 | 
             
            								end
         | 
| 77 79 | 
             
            						end
         | 
| 78 80 |  | 
| 79 81 | 
             
            						builder.inline(:dd) do
         | 
| 80 | 
            -
            							builder.tag :textarea, textarea_attributes_for(options) do
         | 
| 81 | 
            -
            								builder.text value_for(options)
         | 
| 82 | 
            +
            							builder.tag :textarea, textarea_attributes_for(**options) do
         | 
| 83 | 
            +
            								builder.text value_for(**options)
         | 
| 82 84 | 
             
            							end
         | 
| 83 85 | 
             
            						end
         | 
| 84 86 | 
             
            					end
         | 
| 85 87 | 
             
            				end
         | 
| 86 88 |  | 
| 87 89 | 
             
            				# A checkbox field.
         | 
| 88 | 
            -
            				def checkbox(options)
         | 
| 89 | 
            -
            					options = @options.merge(options)
         | 
| 90 | 
            +
            				def checkbox(**options)
         | 
| 91 | 
            +
            					options = @options.merge(**options)
         | 
| 90 92 |  | 
| 91 93 | 
             
            					Builder.fragment do |builder|
         | 
| 92 94 | 
             
            						builder.tag(:dd) do
         | 
| 93 | 
            -
            							builder.tag :input, :type => :hidden, :name => name_for(options), :value => 'false'
         | 
| 95 | 
            +
            							builder.tag :input, :type => :hidden, :name => name_for(**options), :value => 'false'
         | 
| 94 96 |  | 
| 95 97 | 
             
            							builder.inline(:label) do
         | 
| 96 | 
            -
            								builder.tag :input, checkbox_attributes_for(options)
         | 
| 98 | 
            +
            								builder.tag :input, checkbox_attributes_for(**options)
         | 
| 97 99 | 
             
            								# We would like a little bit of whitespace between the checkbox and the title.
         | 
| 98 | 
            -
            								builder.text " " + title_for(options)
         | 
| 100 | 
            +
            								builder.text " " + title_for(**options)
         | 
| 99 101 | 
             
            							end
         | 
| 100 102 |  | 
| 101 | 
            -
            							if details = details_for(options)
         | 
| 102 | 
            -
            								builder.inline(:small, class: 'details') { | 
| 103 | 
            +
            							if details = details_for(**options)
         | 
| 104 | 
            +
            								builder.inline(:small, class: 'details') {builder.text details}
         | 
| 103 105 | 
             
            							end
         | 
| 104 106 | 
             
            						end
         | 
| 105 107 | 
             
            					end
         | 
| 106 108 | 
             
            				end
         | 
| 107 109 |  | 
| 108 110 | 
             
            				# A submission button
         | 
| 109 | 
            -
            				def submit(options | 
| 110 | 
            -
            					options = @options.merge(options)
         | 
| 111 | 
            -
            					options[:title] ||= submit_title_for(options)
         | 
| 111 | 
            +
            				def submit(**options)
         | 
| 112 | 
            +
            					options = @options.merge(**options)
         | 
| 113 | 
            +
            					options[:title] ||= submit_title_for(**options)
         | 
| 112 114 |  | 
| 113 115 | 
             
            					Builder.fragment do |builder|
         | 
| 114 | 
            -
            						builder.tag :input, submit_attributes_for(options)
         | 
| 116 | 
            +
            						builder.tag :input, submit_attributes_for(**options)
         | 
| 115 117 | 
             
            					end
         | 
| 116 118 | 
             
            				end
         | 
| 117 | 
            -
             | 
| 118 | 
            -
            				def element(klass, options | 
| 119 | 
            -
            					options = @options.merge(options)
         | 
| 119 | 
            +
            				
         | 
| 120 | 
            +
            				def element(klass, **options, &block)
         | 
| 121 | 
            +
            					options = @options.merge(**options)
         | 
| 120 122 | 
             
            					buffer = Trenni::Template.buffer(block.binding)
         | 
| 121 123 |  | 
| 122 124 | 
             
            					buffer << Builder.fragment do |builder|
         | 
| 123 125 | 
             
            						builder.inline(:dt) do
         | 
| 124 | 
            -
            							builder.text title_for(options)
         | 
| 126 | 
            +
            							builder.text title_for(**options)
         | 
| 125 127 | 
             
            						end
         | 
| 126 128 |  | 
| 127 129 | 
             
            						builder.tag(:dd) do
         | 
| 128 | 
            -
            							klass.call(self,  | 
| 130 | 
            +
            							klass.call(self, builder, **options, &block)
         | 
| 129 131 |  | 
| 130 | 
            -
            							if details = details_for(options)
         | 
| 131 | 
            -
            								builder.inline(:small, class: 'details') { | 
| 132 | 
            +
            							if details = details_for(**options)
         | 
| 133 | 
            +
            								builder.inline(:small, class: 'details') {builder.text details}
         | 
| 132 134 | 
             
            							end
         | 
| 133 135 | 
             
            						end
         | 
| 134 136 | 
             
            					end
         | 
| 135 137 | 
             
            				end
         | 
| 138 | 
            +
            				
         | 
| 139 | 
            +
            				def fieldset(**options, &block)
         | 
| 140 | 
            +
            					super do |builder|
         | 
| 141 | 
            +
            						builder.tag(:dl) do
         | 
| 142 | 
            +
            							yield(builder)
         | 
| 143 | 
            +
            						end
         | 
| 144 | 
            +
            					end
         | 
| 145 | 
            +
            				end
         | 
| 136 146 | 
             
            			end
         | 
| 137 147 | 
             
            		end
         | 
| 138 148 | 
             
            	end
         | 
| @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            # Copyright, 2012, by Samuel G. D. Williams. <http://www.codeotaku.com>
         | 
| 2 4 | 
             
            # 
         | 
| 3 5 | 
             
            # Permission is hereby granted, free of charge, to any person obtaining a copy
         | 
| @@ -30,83 +32,83 @@ module Trenni | |
| 30 32 | 
             
            				end
         | 
| 31 33 |  | 
| 32 34 | 
             
            				# Any additional details relating to a field (e.g. explanation text)
         | 
| 33 | 
            -
            				def details_for(options)
         | 
| 35 | 
            +
            				def details_for(**options)
         | 
| 34 36 | 
             
            					options[:details]
         | 
| 35 37 | 
             
            				end
         | 
| 36 38 |  | 
| 37 | 
            -
            				def field_for(options)
         | 
| 39 | 
            +
            				def field_for(**options)
         | 
| 38 40 | 
             
            					options[:field]
         | 
| 39 41 | 
             
            				end
         | 
| 40 42 |  | 
| 41 43 | 
             
            				# A title is a text string that will be displayed next to or on top of the control to describe it or its value:
         | 
| 42 | 
            -
            				def title_for(options)
         | 
| 44 | 
            +
            				def title_for(**options)
         | 
| 43 45 | 
             
            					if title = options[:title]
         | 
| 44 46 | 
             
            						return title
         | 
| 45 47 | 
             
            					end
         | 
| 46 48 |  | 
| 47 49 | 
             
            					# Generate a title from a field name:
         | 
| 48 | 
            -
            					if field_name = field_for(options)
         | 
| 50 | 
            +
            					if field_name = field_for(**options)
         | 
| 49 51 | 
             
            						# Remove postfix "_id" or "_ids":
         | 
| 50 52 | 
             
            						return Strings::to_title(field_name.to_s.sub(/_ids?/, ''))
         | 
| 51 53 | 
             
            					end
         | 
| 52 54 | 
             
            				end
         | 
| 53 55 |  | 
| 54 | 
            -
            				def object_value_for(options)
         | 
| 55 | 
            -
            					if object = options[:object] and field = field_for(options)
         | 
| 56 | 
            +
            				def object_value_for(**options)
         | 
| 57 | 
            +
            					if object = options[:object] and field = field_for(**options)
         | 
| 56 58 | 
             
            						object.send(field)
         | 
| 57 59 | 
             
            					end
         | 
| 58 60 | 
             
            				end
         | 
| 59 61 |  | 
| 60 | 
            -
            				def raw_value_for(options)
         | 
| 61 | 
            -
            					value = options.fetch(:value) { | 
| 62 | 
            +
            				def raw_value_for(**options)
         | 
| 63 | 
            +
            					value = options.fetch(:value) {object_value_for(**options)}
         | 
| 62 64 |  | 
| 63 65 | 
             
            					# Allow to specify a default value if the value given, usually from an object, is nil.
         | 
| 64 66 | 
             
            					value || options[:default]
         | 
| 65 67 | 
             
            				end
         | 
| 66 68 |  | 
| 67 69 | 
             
            				# The value of the field.
         | 
| 68 | 
            -
            				def value_for(options)
         | 
| 69 | 
            -
            					if value = raw_value_for(options)
         | 
| 70 | 
            -
            						self.format(value, options)
         | 
| 70 | 
            +
            				def value_for(**options)
         | 
| 71 | 
            +
            					if value = raw_value_for(**options)
         | 
| 72 | 
            +
            						self.format(value, **options)
         | 
| 71 73 | 
             
            					end
         | 
| 72 74 | 
             
            				end
         | 
| 73 75 |  | 
| 74 | 
            -
            				def pattern_for(options)
         | 
| 76 | 
            +
            				def pattern_for(**options)
         | 
| 75 77 | 
             
            					options[:pattern]
         | 
| 76 78 | 
             
            				end
         | 
| 77 79 |  | 
| 78 | 
            -
            				def placeholder_for(options)
         | 
| 80 | 
            +
            				def placeholder_for(**options)
         | 
| 79 81 | 
             
            					options[:placeholder]
         | 
| 80 82 | 
             
            				end
         | 
| 81 83 |  | 
| 82 | 
            -
            				def input_attributes_for(options)
         | 
| 84 | 
            +
            				def input_attributes_for(**options)
         | 
| 83 85 | 
             
            					attributes = {
         | 
| 84 86 | 
             
            						:type => options[:type],
         | 
| 85 | 
            -
            						:name => name_for(options),
         | 
| 87 | 
            +
            						:name => name_for(**options),
         | 
| 86 88 | 
             
            						:id => options[:id],
         | 
| 87 89 | 
             
            						:class => options[:class],
         | 
| 88 | 
            -
            						:value => value_for(options),
         | 
| 90 | 
            +
            						:value => value_for(**options),
         | 
| 89 91 | 
             
            						:required => options[:required],
         | 
| 90 92 | 
             
            						:disabled => options[:disabled],
         | 
| 91 93 | 
             
            						:readonly => options[:readonly],
         | 
| 92 | 
            -
            						:pattern => pattern_for(options),
         | 
| 93 | 
            -
            						:placeholder => placeholder_for(options),
         | 
| 94 | 
            +
            						:pattern => pattern_for(**options),
         | 
| 95 | 
            +
            						:placeholder => placeholder_for(**options),
         | 
| 94 96 | 
             
            						# for <input type="range|number">
         | 
| 95 | 
            -
            						:min => options[:min],
         | 
| 96 | 
            -
            						:max => options[:max],
         | 
| 97 | 
            +
            						:min => options[:minimum] || options[:min],
         | 
| 98 | 
            +
            						:max => options[:maximum] || options[:max],
         | 
| 97 99 | 
             
            						:step => options[:step],
         | 
| 98 100 | 
             
            						# for <input type="text">
         | 
| 99 | 
            -
            						:minlength => options[:minlength],
         | 
| 100 | 
            -
            						:maxlength => options[:maxlength],
         | 
| 101 | 
            +
            						:minlength => options[:minimum] || options[:minlength],
         | 
| 102 | 
            +
            						:maxlength => options[:maximum] || options[:maxlength],
         | 
| 101 103 | 
             
            						:data => options[:data],
         | 
| 102 104 | 
             
            					}
         | 
| 103 105 |  | 
| 104 106 | 
             
            					return attributes
         | 
| 105 107 | 
             
            				end
         | 
| 106 108 |  | 
| 107 | 
            -
            				def output_attributes_for(options)
         | 
| 109 | 
            +
            				def output_attributes_for(**options)
         | 
| 108 110 | 
             
            					attributes = {
         | 
| 109 | 
            -
            						:name => name_for(options),
         | 
| 111 | 
            +
            						:name => name_for(**options),
         | 
| 110 112 | 
             
            						:id => options[:id],
         | 
| 111 113 | 
             
            						:class => options[:class],
         | 
| 112 114 | 
             
            						:for => options[:for],
         | 
| @@ -117,30 +119,30 @@ module Trenni | |
| 117 119 | 
             
            					return attributes
         | 
| 118 120 | 
             
            				end
         | 
| 119 121 |  | 
| 120 | 
            -
            				def textarea_attributes_for(options)
         | 
| 122 | 
            +
            				def textarea_attributes_for(**options)
         | 
| 121 123 | 
             
            					return {
         | 
| 122 | 
            -
            						:name => name_for(options),
         | 
| 124 | 
            +
            						:name => name_for(**options),
         | 
| 123 125 | 
             
            						:id => options[:id],
         | 
| 124 126 | 
             
            						:class => options[:class],
         | 
| 125 127 | 
             
            						:required => options[:required],
         | 
| 126 128 | 
             
            						:disabled => options[:disabled],
         | 
| 127 129 | 
             
            						:readonly => options[:readonly],
         | 
| 128 | 
            -
            						:pattern => pattern_for(options),
         | 
| 129 | 
            -
            						:placeholder => placeholder_for(options),
         | 
| 130 | 
            +
            						:pattern => pattern_for(**options),
         | 
| 131 | 
            +
            						:placeholder => placeholder_for(**options),
         | 
| 130 132 | 
             
            						:minlength => options[:minlength],
         | 
| 131 133 | 
             
            						:maxlength => options[:maxlength],
         | 
| 132 134 | 
             
            						:data => options[:data],
         | 
| 133 135 | 
             
            					}
         | 
| 134 136 | 
             
            				end
         | 
| 135 137 |  | 
| 136 | 
            -
            				def checkbox_attributes_for(options)
         | 
| 138 | 
            +
            				def checkbox_attributes_for(**options)
         | 
| 137 139 | 
             
            					return {
         | 
| 138 140 | 
             
            						:type => options[:type] || 'checkbox',
         | 
| 139 141 | 
             
            						:id => options[:id],
         | 
| 140 142 | 
             
            						:class => options[:class],
         | 
| 141 | 
            -
            						:name => name_for(options),
         | 
| 143 | 
            +
            						:name => name_for(**options),
         | 
| 142 144 | 
             
            						:value => 'true',
         | 
| 143 | 
            -
            						:checked => raw_value_for(options),
         | 
| 145 | 
            +
            						:checked => raw_value_for(**options),
         | 
| 144 146 | 
             
            						:required => options[:required],
         | 
| 145 147 | 
             
            						:disabled => options[:disabled],
         | 
| 146 148 | 
             
            						:readonly => options[:readonly],
         | 
| @@ -148,71 +150,86 @@ module Trenni | |
| 148 150 | 
             
            					}
         | 
| 149 151 | 
             
            				end
         | 
| 150 152 |  | 
| 151 | 
            -
            				def submit_attributes_for(options)
         | 
| 153 | 
            +
            				def submit_attributes_for(**options)
         | 
| 152 154 | 
             
            					return {
         | 
| 153 155 | 
             
            						:type => options[:type] || 'submit',
         | 
| 154 | 
            -
            						:name => name_for(options),
         | 
| 156 | 
            +
            						:name => name_for(**options),
         | 
| 155 157 | 
             
            						:id => options[:id],
         | 
| 156 158 | 
             
            						:class => options[:class],
         | 
| 157 159 | 
             
            						:disabled => options[:disabled],
         | 
| 158 | 
            -
            						:value => title_for(options),
         | 
| 160 | 
            +
            						:value => title_for(**options),
         | 
| 159 161 | 
             
            						:data => options[:data],
         | 
| 160 162 | 
             
            					}
         | 
| 161 163 | 
             
            				end
         | 
| 162 164 |  | 
| 163 | 
            -
            				def submit_title_for(options)
         | 
| 164 | 
            -
            					title_for(options) || (new_record? ? 'Create' : 'Update')
         | 
| 165 | 
            +
            				def submit_title_for(**options)
         | 
| 166 | 
            +
            					title_for(**options) || (new_record? ? 'Create' : 'Update')
         | 
| 165 167 | 
             
            				end
         | 
| 166 168 |  | 
| 167 | 
            -
            				def hidden_attributes_for(options)
         | 
| 169 | 
            +
            				def hidden_attributes_for(**options)
         | 
| 168 170 | 
             
            					return {
         | 
| 169 171 | 
             
            						:type => options[:type] || 'hidden',
         | 
| 170 172 | 
             
            						:id => options[:id],
         | 
| 171 173 | 
             
            						:class => options[:class],
         | 
| 172 | 
            -
            						:name => name_for(options),
         | 
| 173 | 
            -
            						:value => value_for(options),
         | 
| 174 | 
            +
            						:name => name_for(**options),
         | 
| 175 | 
            +
            						:value => value_for(**options),
         | 
| 174 176 | 
             
            						:data => options[:data],
         | 
| 175 177 | 
             
            					}
         | 
| 176 178 | 
             
            				end
         | 
| 177 179 |  | 
| 178 180 | 
             
            				# A hidden field.
         | 
| 179 | 
            -
            				def hidden(options | 
| 180 | 
            -
            					options = @options.merge(options)
         | 
| 181 | 
            +
            				def hidden(**options)
         | 
| 182 | 
            +
            					options = @options.merge(**options)
         | 
| 181 183 |  | 
| 182 184 | 
             
            					Builder.fragment do |builder|
         | 
| 183 | 
            -
            						builder.tag :input, hidden_attributes_for(options)
         | 
| 185 | 
            +
            						builder.tag :input, hidden_attributes_for(**options)
         | 
| 184 186 | 
             
            					end
         | 
| 185 187 | 
             
            				end
         | 
| 186 188 |  | 
| 187 | 
            -
            				def button_attributes_for(options)
         | 
| 189 | 
            +
            				def button_attributes_for(**options)
         | 
| 188 190 | 
             
            					return {
         | 
| 189 191 | 
             
            						:type => options[:type] || 'submit',
         | 
| 190 | 
            -
            						:name => name_for(options),
         | 
| 192 | 
            +
            						:name => name_for(**options),
         | 
| 191 193 | 
             
            						:id => options[:id],
         | 
| 192 194 | 
             
            						:class => options[:class],
         | 
| 193 195 | 
             
            						:disabled => options[:disabled],
         | 
| 194 | 
            -
            						:value => value_for(options),
         | 
| 196 | 
            +
            						:value => value_for(**options),
         | 
| 195 197 | 
             
            						:data => options[:data],
         | 
| 196 198 | 
             
            					}
         | 
| 197 199 | 
             
            				end
         | 
| 198 200 |  | 
| 199 | 
            -
            				def button_title_for(options)
         | 
| 201 | 
            +
            				def button_title_for(**options)
         | 
| 200 202 | 
             
            					type = options.fetch(:type, 'submit').to_sym
         | 
| 201 203 |  | 
| 202 204 | 
             
            					if type == :submit
         | 
| 203 | 
            -
            						submit_title_for(options)
         | 
| 205 | 
            +
            						submit_title_for(**options)
         | 
| 204 206 | 
             
            					else
         | 
| 205 | 
            -
            						title_for(options) || Strings::to_title(type.to_s)
         | 
| 207 | 
            +
            						title_for(**options) || Strings::to_title(type.to_s)
         | 
| 206 208 | 
             
            					end
         | 
| 207 209 | 
             
            				end
         | 
| 208 210 |  | 
| 209 211 | 
             
            				# A hidden field.
         | 
| 210 | 
            -
            				def button(options | 
| 211 | 
            -
            					options = @options.merge(options)
         | 
| 212 | 
            +
            				def button(**options)
         | 
| 213 | 
            +
            					options = @options.merge(**options)
         | 
| 212 214 |  | 
| 213 215 | 
             
            					Builder.fragment do |builder|
         | 
| 214 | 
            -
            						builder.inline :button, button_attributes_for(options) do
         | 
| 215 | 
            -
            							builder.text button_title_for(options)
         | 
| 216 | 
            +
            						builder.inline :button, button_attributes_for(**options) do
         | 
| 217 | 
            +
            							builder.text button_title_for(**options)
         | 
| 218 | 
            +
            						end
         | 
| 219 | 
            +
            					end
         | 
| 220 | 
            +
            				end
         | 
| 221 | 
            +
            				
         | 
| 222 | 
            +
            				def fieldset(**options, &block)
         | 
| 223 | 
            +
            					options = @options.merge(**options)
         | 
| 224 | 
            +
            					buffer = Trenni::Template.buffer(block.binding)
         | 
| 225 | 
            +
            					
         | 
| 226 | 
            +
            					Builder.fragment(buffer) do |builder|
         | 
| 227 | 
            +
            						builder.tag('fieldset') do
         | 
| 228 | 
            +
            							builder.inline('legend') do
         | 
| 229 | 
            +
            								builder.text title_for(**options)
         | 
| 230 | 
            +
            							end
         | 
| 231 | 
            +
            							
         | 
| 232 | 
            +
            							yield(builder)
         | 
| 216 233 | 
             
            						end
         | 
| 217 234 | 
             
            					end
         | 
| 218 235 | 
             
            				end
         |