effective_bootstrap 0.9.2 → 0.9.3

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: a09d2f8d91357f5486377ae6a31483533bf214f4c8f1ba536bc9061828529370
4
- data.tar.gz: e6a42b55fc5b377d7ccebf1b7418c41df907ed4b66de6ee58407690e46e82767
3
+ metadata.gz: 653ce4dc21d9961a88154cbfb0b3c59e4d4f85615e3edc4d89f774fbca7a0026
4
+ data.tar.gz: 724f3a374fe198d935fb72773e0e411c070bb9365c93228ca64c01bf93893a27
5
5
  SHA512:
6
- metadata.gz: 95b1495a52b26a3970754866ef7d35735be448daa675c3f21745ec8ff6298d893d8ecc912d37b28d1dd03ffad3fed29fa3adbcc26e6a278a050a6565bb052dbb
7
- data.tar.gz: 174be86ba9a4064b21a3dcdbe4c13787165a574a31f93773ac12de60d20212e37edea12793197afa360502f95f6f2fd8941281696f114f881c2aa61da6fea470
6
+ metadata.gz: d8d946e930a29d18016012f49f2df1b72a43da46504fdc7e0c943bc111c92d85d34f394fe77a708bb93a27b10bb25c0ef003024d3b29606449057c8d156546ef
7
+ data.tar.gz: 4d23bd8f9fb754f318a3115ae72ddd924714e9704bfad6d4e489510503dcbdead65f13abef5b0ab2867f18e2377700aa4c672fd7126e0d4889d6a21158d9b112
@@ -1,11 +1,25 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Effective
2
4
  class FormInput
3
5
  attr_accessor :name, :options
4
6
 
5
7
  BLANK = ''.html_safe
8
+ EMPTY_HASH = {}
9
+
6
10
  EXCLUSIVE_CLASS_PREFIXES = [] # None
7
11
  EXCLUSIVE_CLASS_SUFFIXES = ['-primary', '-secondary', '-success', '-danger', '-warning', '-info', '-light', '-dark']
8
12
 
13
+ DEFAULT_INPUT_GROUP_OPTIONS = { input_group: { class: 'input-group' }, prepend: false, append: false }
14
+
15
+ HORIZONTAL_LABEL_OPTIONS = { class: 'col-sm-2 col-form-label'}
16
+ INLINE_LABEL_OPTIONS = { class: 'sr-only' }
17
+
18
+ DEFAULT_FEEDBACK_OPTIONS = { valid: { class: 'valid-feedback' }, invalid: { class: 'invalid-feedback' } }
19
+
20
+ HORIZONTAL_WRAPPER_OPTIONS = { class: 'form-group row' }
21
+ VERTICAL_WRAPPER_OPTIONS = { class: 'form-group' }
22
+
9
23
  delegate :object, to: :@builder
10
24
  delegate :capture, :content_tag, :image_tag, :link_to, :icon, :asset_path, to: :@template
11
25
 
@@ -20,7 +34,7 @@ module Effective
20
34
  end
21
35
 
22
36
  def input_group_options
23
- { input_group: { class: 'input-group' }, prepend: false, append: false }
37
+ DEFAULT_INPUT_GROUP_OPTIONS
24
38
  end
25
39
 
26
40
  def input_html_options
@@ -28,17 +42,17 @@ module Effective
28
42
  end
29
43
 
30
44
  def input_js_options
31
- {}
45
+ EMPTY_HASH
32
46
  end
33
47
 
34
48
  def label_options
35
49
  case layout
36
50
  when :horizontal
37
- { class: 'col-sm-2 col-form-label'}
51
+ HORIZONTAL_LABEL_OPTIONS
38
52
  when :inline
39
- { class: 'sr-only' }
53
+ INLINE_LABEL_OPTIONS
40
54
  else
41
- { }
55
+ EMPTY_HASH
42
56
  end
43
57
  end
44
58
 
@@ -47,7 +61,7 @@ module Effective
47
61
  when :inline
48
62
  false
49
63
  else
50
- { valid: { class: 'valid-feedback' }, invalid: { class: 'invalid-feedback' } }
64
+ DEFAULT_FEEDBACK_OPTIONS
51
65
  end
52
66
  end
53
67
 
@@ -63,9 +77,9 @@ module Effective
63
77
  def wrapper_options
64
78
  case layout
65
79
  when :horizontal
66
- { class: 'form-group row' }
80
+ HORIZONTAL_WRAPPER_OPTIONS
67
81
  else
68
- { class: 'form-group' }
82
+ VERTICAL_WRAPPER_OPTIONS
69
83
  end
70
84
  end
71
85
 
@@ -166,7 +180,7 @@ module Effective
166
180
 
167
181
  invalid = object.errors[name].to_sentence.presence if object.respond_to?(:errors)
168
182
  invalid ||= options[:feedback][:invalid].delete(:text).presence
169
- invalid ||= [("can't be blank" if options[:input][:required]), ('must be valid' if validated?(name))].compact.join(' and ').presence
183
+ invalid ||= [("can't be blank" if options[:input][:required]), ('must be valid' if validated?(name))].tap(&:compact!).join(' and ').presence
170
184
  invalid ||= "can't be blank or is invalid"
171
185
 
172
186
  valid = options[:feedback][:valid].delete(:text) || 'Looks good!'
@@ -268,7 +282,7 @@ module Effective
268
282
  item_value = (item.send(value_method).to_s.parameterize.presence rescue nil)
269
283
  end
270
284
 
271
- [tag_id, item_value, object_id].compact.join('_')
285
+ [tag_id, item_value, object_id].tap(&:compact!).join('_')
272
286
  end
273
287
 
274
288
  private
@@ -282,7 +296,7 @@ module Effective
282
296
  # effective_bootstrap specific options
283
297
  layout = options.delete(:layout) # Symbol
284
298
  wrapper = options.delete(:wrapper) # Hash
285
- input_group = { append: options.delete(:append), prepend: options.delete(:prepend), input_group: options.delete(:input_group) }.compact
299
+ input_group = { append: options.delete(:append), prepend: options.delete(:prepend), input_group: options.delete(:input_group) }.tap(&:compact!)
286
300
 
287
301
  feedback = options.delete(:feedback) # Hash
288
302
  label = options.delete(:label) # String or Hash
@@ -317,11 +331,11 @@ module Effective
317
331
  # Server side validation
318
332
  if has_error?
319
333
  if has_error?(name)
320
- options[:input][:class] = [options[:input][:class], 'is-invalid'].compact.join(' ')
334
+ options[:input][:class] = (options[:input][:class] ? "#{options[:input][:class]} is-invalid" : 'is-invalid')
321
335
  elsif reset_feedback?
322
336
  # Nothing
323
337
  else
324
- options[:input][:class] = [options[:input][:class], 'is-valid'].compact.join(' ')
338
+ options[:input][:class] = (options[:input][:class] ? "#{options[:input][:class]} is-valid" : 'is-valid')
325
339
  end
326
340
  end
327
341
 
@@ -333,7 +347,7 @@ module Effective
333
347
  options[:input][:readonly] = 'readonly'
334
348
 
335
349
  unless options[:input][:class].to_s.include?('form-control-plaintext')
336
- options[:input][:class] = options[:input][:class].to_s.sub('form-control', 'form-control-plaintext')
350
+ options[:input][:class] = (options[:input][:class] || '').sub('form-control', 'form-control-plaintext')
337
351
  end
338
352
  end
339
353
 
@@ -347,17 +361,17 @@ module Effective
347
361
  end
348
362
 
349
363
  def merge_defaults!(obj, defaults)
350
- defaults = {} if defaults.nil?
364
+ defaults = EMPTY_HASH if defaults.nil?
351
365
 
352
366
  case obj
353
367
  when false
354
368
  false
355
369
  when nil, true
356
- defaults
370
+ defaults.dup
357
371
  when String
358
372
  defaults.merge(text: obj)
359
373
  when Hash
360
- html_classes = (obj[:class].to_s.split(' ') + defaults[:class].to_s.split(' ')).uniq
374
+ html_classes = ((obj[:class] || '').split(' ') + (defaults[:class] || '').split(' ')).uniq
361
375
 
362
376
  # Try to smart merge bootstrap classes
363
377
  if (exclusive = html_classes.select { |c| c.include?('-') }).length > 1
@@ -421,11 +435,11 @@ module Effective
421
435
  end
422
436
 
423
437
  def sanitized_object_name
424
- @builder.object_name.to_s.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
438
+ @sanitized_object_name ||= @builder.object_name.to_s.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
425
439
  end
426
440
 
427
441
  def sanitized_method_name
428
- name.to_s.sub(/\?$/, "")
442
+ @sanitized_method_name ||= name.to_s.sub(/\?$/, "")
429
443
  end
430
444
 
431
445
  def input_js_options_method_name
@@ -34,7 +34,7 @@ module Effective
34
34
  end
35
35
 
36
36
  def input_js_options
37
- { 'data-input-js-options' => JSON.generate({method_name: input_js_options_method_name}.merge(logic_options)) }
37
+ { 'data-input-js-options' => JSON.generate({method_name: input_js_options_method_name}.merge!(logic_options)) }
38
38
  end
39
39
 
40
40
  def input_js_options_method_name
@@ -1,3 +1,3 @@
1
1
  module EffectiveBootstrap
2
- VERSION = '0.9.2'.freeze
2
+ VERSION = '0.9.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_bootstrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect