rails_bootstrap_form 0.9.7 → 0.9.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,59 +7,69 @@ module RailsBootstrapForm
7
7
  module Errors
8
8
  extend ActiveSupport::Concern
9
9
 
10
- def self.included(base_class)
11
- def is_invalid?(attribute)
12
- (attribute && object.respond_to?(:errors) && object.errors[attribute].any?) ||
13
- has_association_error?(attribute)
14
- end
10
+ private
15
11
 
16
- # def input_with_error(attribute, &block)
17
- # input = capture(&block)
18
- # input << generate_error(attribute)
19
- # input
20
- # end
12
+ def is_invalid?(attribute)
13
+ (attribute && object.respond_to?(:errors) && has_attribute_error?(attribute)) ||
14
+ has_association_error?(attribute)
15
+ end
21
16
 
22
- def generate_error(attribute)
23
- if is_invalid?(attribute)
24
- error_text = error_messages(attribute)
25
- error_klass = "invalid-feedback"
17
+ def generate_error(attribute)
18
+ if is_invalid?(attribute)
19
+ error_text = error_messages(attribute)
20
+ error_klass = "invalid-feedback"
26
21
 
27
- tag.div(error_text, class: error_klass)
28
- end
22
+ tag.div(error_text, class: error_klass)
29
23
  end
24
+ end
25
+
26
+ def error_messages(attribute)
27
+ messages = Array(attribute_error_messages(attribute))
28
+ messages << associated_error_messages(attribute)
30
29
 
31
- def has_association_error?(attribute)
32
- object.class.try(:reflections)&.any? do |association_name, association|
33
- next unless is_belongs_to_association?(association)
34
- next unless is_association_same?(attribute, association)
30
+ messages.flatten.to_sentence
31
+ end
32
+
33
+ def has_attribute_error?(attribute)
34
+ attribute_error_messages(attribute).any?
35
+ end
35
36
 
36
- object.errors[association_name].any?
37
- end
37
+ def has_association_error?(attribute)
38
+ object.class.try(:reflections)&.any? do |association_name, association|
39
+ has_errors_on_association?(attribute, association_name)
38
40
  end
41
+ end
39
42
 
40
- def error_messages(attribute)
41
- messages = object.errors[attribute]
43
+ def has_errors_on_association?(attribute, association_name)
44
+ return false unless is_belongs_to_association?(object.class.reflections[association_name])
45
+ return false unless is_association_same?(attribute, object.class.reflections[association_name])
42
46
 
43
- object.class.try(:reflections)&.each do |association_name, association|
44
- next unless is_belongs_to_association?(association)
45
- next unless is_association_same?(attribute, association)
47
+ object.errors[association_name].any?
48
+ end
46
49
 
47
- messages << object.errors[association_name]
48
- end
50
+ def attribute_error_messages(attribute)
51
+ object.errors[attribute]
52
+ end
49
53
 
50
- messages.flatten.to_sentence
51
- end
54
+ def associated_error_messages(attribute)
55
+ error_messages = []
52
56
 
53
- def is_belongs_to_association?(association)
54
- association.is_a?(ActiveRecord::Reflection::BelongsToReflection)
55
- end
57
+ object.class.try(:reflections)&.each do |association_name, association|
58
+ next unless is_belongs_to_association?(association)
59
+ next unless is_association_same?(attribute, association)
56
60
 
57
- def is_association_same?(attribute, association)
58
- (association.foreign_key == attribute.to_s)
61
+ error_messages << object.errors[association_name]
59
62
  end
60
63
 
61
- private :is_invalid?, :generate_error, :has_association_error?,
62
- :error_messages, :is_belongs_to_association?, :is_association_same?
64
+ error_messages
65
+ end
66
+
67
+ def is_belongs_to_association?(association)
68
+ association.is_a?(ActiveRecord::Reflection::BelongsToReflection)
69
+ end
70
+
71
+ def is_association_same?(attribute, association)
72
+ (association.foreign_key == attribute.to_s)
63
73
  end
64
74
  end
65
75
  end
@@ -7,46 +7,43 @@ module RailsBootstrapForm
7
7
  module HelpText
8
8
  extend ActiveSupport::Concern
9
9
 
10
- def self.included(base_class)
11
- def help_text(attribute, bootstrap)
12
- return if bootstrap.help_text == false
10
+ private
13
11
 
14
- help_text = (bootstrap.help_text || scoped_help_text(attribute))
12
+ def help_text(attribute, bootstrap)
13
+ return if bootstrap.help_text == false
15
14
 
16
- tag.div(help_text, class: "form-text text-muted") if help_text.present?
17
- end
15
+ help_text = (bootstrap.help_text || scoped_help_text(attribute))
18
16
 
19
- def object_class
20
- if !object.class.is_a?(ActiveModel::Naming) &&
21
- object.respond_to?(:klass) && object.klass.is_a?(ActiveModel::Naming)
22
- object.klass
23
- else
24
- object.class
25
- end
26
- end
17
+ tag.div(help_text, class: "form-text text-muted") if help_text.present?
18
+ end
27
19
 
28
- def partial_scope
29
- if object_class.respond_to?(:model_name)
30
- object_class.model_name.name
31
- else
32
- object_class.name
33
- end
20
+ def object_class
21
+ if !object.class.is_a?(ActiveModel::Naming) &&
22
+ object.respond_to?(:klass) && object.klass.is_a?(ActiveModel::Naming)
23
+ object.klass
24
+ else
25
+ object.class
34
26
  end
27
+ end
35
28
 
36
- def scoped_help_text(attribute)
37
- translation_scope = "activerecord.help_texts.#{partial_scope.underscore}"
29
+ def partial_scope
30
+ if object_class.respond_to?(:model_name)
31
+ object_class.model_name.name
32
+ else
33
+ object_class.name
34
+ end
35
+ end
38
36
 
39
- help_text = translated_help_text(attribute, translation_scope).presence
37
+ def scoped_help_text(attribute)
38
+ translation_scope = "activerecord.help_texts.#{partial_scope.underscore}"
40
39
 
41
- help_text
42
- end
40
+ help_text = translated_help_text(attribute, translation_scope).presence
43
41
 
44
- def translated_help_text(attribute, scope)
45
- ActiveSupport::SafeBuffer.new(I18n.t(attribute, scope: scope, default: ""))
46
- end
42
+ help_text
43
+ end
47
44
 
48
- private :help_text, :partial_scope, :object_class, :scoped_help_text
49
- :translated_help_text
45
+ def translated_help_text(attribute, scope)
46
+ ActiveSupport::SafeBuffer.new(I18n.t(attribute, scope: scope, default: ""))
50
47
  end
51
48
  end
52
49
  end
@@ -7,47 +7,44 @@ module RailsBootstrapForm
7
7
  module Labels
8
8
  extend ActiveSupport::Concern
9
9
 
10
- def self.included(base_class)
11
- def draw_label(attribute, options, bootstrap)
12
- unless bootstrap.skip_label? && !bootstrap.floating?
13
- label_options = {
14
- class: label_classes(attribute, options, bootstrap)
15
- }
16
- label_options[:for] = options[:id] if options[:id].present?
17
- label_text = label_text(attribute, bootstrap)
18
-
19
- label(attribute, label_text, label_options)
20
- end
21
- end
10
+ private
22
11
 
23
- def label_classes(attribute, options, bootstrap)
24
- classes = []
25
- classes << label_layout_classes(bootstrap)
26
- classes << bootstrap.additional_label_class
27
- classes << bootstrap.hide_class if hide_class_required?(bootstrap)
28
- classes << "required" if is_field_required?(attribute, options)
29
- classes << "is-invalid" if is_invalid?(attribute)
30
- classes.flatten.compact
31
- end
12
+ def draw_label(attribute, options, bootstrap)
13
+ unless bootstrap.skip_label? && !bootstrap.floating?
14
+ label_options = {
15
+ class: label_classes(attribute, options, bootstrap)
16
+ }
17
+ label_options[:for] = options[:id] if options[:id].present?
18
+ label_text = label_text(attribute, bootstrap)
32
19
 
33
- def label_layout_classes(bootstrap)
34
- if bootstrap.layout_horizontal?
35
- [bootstrap.label_col_class, bootstrap.label_col_wrapper_class]
36
- else
37
- bootstrap.label_class
38
- end
20
+ label(attribute, label_text, label_options)
39
21
  end
22
+ end
40
23
 
41
- def label_text(attribute, bootstrap)
42
- bootstrap.label_text || object&.class.try(:human_attribute_name, attribute)
43
- end
24
+ def label_classes(attribute, options, bootstrap)
25
+ classes = []
26
+ classes << label_layout_classes(bootstrap)
27
+ classes << bootstrap.additional_label_class
28
+ classes << bootstrap.hide_class if hide_class_required?(bootstrap)
29
+ classes << "required" if is_field_required?(attribute, options)
30
+ classes << "is-invalid" if is_invalid?(attribute)
31
+ classes.flatten.compact
32
+ end
44
33
 
45
- def hide_class_required?(bootstrap)
46
- bootstrap.hide_label? || (bootstrap.layout_inline? && !bootstrap.floating?)
34
+ def label_layout_classes(bootstrap)
35
+ if bootstrap.layout_horizontal?
36
+ [bootstrap.label_col_class, bootstrap.label_col_wrapper_class]
37
+ else
38
+ bootstrap.label_class
47
39
  end
40
+ end
41
+
42
+ def label_text(attribute, bootstrap)
43
+ bootstrap.label_text || object&.class.try(:human_attribute_name, attribute)
44
+ end
48
45
 
49
- private :draw_label, :label_classes, :label_text, :label_layout_classes,
50
- :hide_class_required?
46
+ def hide_class_required?(bootstrap)
47
+ bootstrap.hide_label? || (bootstrap.layout_inline? && !bootstrap.floating?)
51
48
  end
52
49
  end
53
50
  end
@@ -7,57 +7,61 @@ module RailsBootstrapForm
7
7
  module RequiredField
8
8
  extend ActiveSupport::Concern
9
9
 
10
- def self.included(base_class)
11
- def is_field_required?(attribute, options)
12
- return false unless attribute
10
+ private
13
11
 
14
- if options.key?(:required)
15
- options[:required]
16
- else
17
- is_attribute_required?(attribute)
18
- end
12
+ def is_field_required?(attribute, options)
13
+ return false unless attribute
14
+
15
+ if options.key?(:required)
16
+ options[:required]
17
+ else
18
+ is_attribute_required?(attribute)
19
19
  end
20
+ end
20
21
 
21
- def required_field_options(attribute, options)
22
- required = is_field_required?(attribute, options)
22
+ def required_field_options(attribute, options)
23
+ required = is_field_required?(attribute, options)
23
24
 
24
- {}.tap do |option|
25
- option[:aria] = {required: true} if required
26
- option[:required] = required
27
- end
25
+ {}.tap do |option|
26
+ option[:aria] = {required: true} if required
27
+ option[:required] = required
28
28
  end
29
+ end
29
30
 
30
- def is_attribute_required?(attribute)
31
- return false unless attribute
31
+ def is_attribute_required?(attribute)
32
+ return false unless attribute
32
33
 
33
- target = object.instance_of?(Class) ? object : object.class
34
- return false unless target.respond_to?(:validators_on)
34
+ target = target_object(object)
35
+ return false unless target.respond_to?(:validators_on)
35
36
 
36
- has_presence_validator?(target_validators(target, attribute)) ||
37
- is_required_association?(target, attribute)
38
- end
37
+ has_presence_validator?(target_validators(target, attribute)) || is_required_association?(target, attribute)
38
+ end
39
39
 
40
- def target_validators(target, attribute)
41
- target.validators_on(attribute).map(&:class)
42
- end
40
+ def target_object(object)
41
+ object.instance_of?(Class) ? object : object.class
42
+ end
43
43
 
44
- def has_presence_validator?(target_validators)
45
- target_validators.include?(ActiveModel::Validations::PresenceValidator) ||
46
- (defined?(ActiveRecord::Validations::PresenceValidator) &&
47
- target_validators.include?(ActiveRecord::Validations::PresenceValidator))
48
- end
44
+ def target_validators(target, attribute)
45
+ target.validators_on(attribute).map(&:class)
46
+ end
49
47
 
50
- def is_required_association?(target, attribute)
51
- target.try(:reflections)&.find do |name, a|
52
- next unless a.is_a?(ActiveRecord::Reflection::BelongsToReflection)
53
- next unless a.foreign_key == attribute.to_s
48
+ def has_presence_validator?(target_validators)
49
+ target_validators.include?(ActiveModel::Validations::PresenceValidator) ||
50
+ (defined?(ActiveRecord::Validations::PresenceValidator) &&
51
+ target_validators.include?(ActiveRecord::Validations::PresenceValidator))
52
+ end
54
53
 
55
- has_presence_validator?(target_validators(target, name))
56
- end
54
+ def is_required_association?(target, attribute)
55
+ target.try(:reflections)&.find do |name, reflection|
56
+ required_association?(reflection, attribute)
57
57
  end
58
+ end
59
+
60
+ def required_association?(reflection, attribute)
61
+ return false unless reflection.is_a?(ActiveRecord::Reflection::BelongsToReflection)
62
+ return false unless reflection.foreign_key == attribute.to_s
58
63
 
59
- private :is_field_required?, :required_field_options, :target_validators,
60
- :has_presence_validator?, :is_required_association?
64
+ has_presence_validator?(target_validators(reflection.active_record, reflection.name))
61
65
  end
62
66
  end
63
67
  end
@@ -21,37 +21,29 @@ module RailsBootstrapForm
21
21
  include Buttons
22
22
  include Choice
23
23
 
24
- def self.included(base_class)
25
- def sanitized_tag_name(attribute, value)
26
- # label's `for` attribute needs to match checkbox/radio button tag's id, IE sanitized value, IE
27
- # https://github.com/rails/rails/blob/5-0-stable/actionview/lib/action_view/helpers/tags/base.rb#L123-L125
28
- "#{@object_name}_#{attribute}_#{value.to_s.gsub(/\s/, "_").gsub(/[^-[[:word:]]]/, "").mb_chars.downcase}"
29
- end
30
-
31
- def control_specific_class(field_tag_name)
32
- "rails-bootstrap-forms-#{field_tag_name.to_s.tr("_", "-")}"
33
- end
34
-
35
- def is_size_valid?(bootstrap)
36
- bootstrap.size && %i(sm lg).include?(bootstrap.size)
37
- end
38
-
39
- def field_offset_class(label_col_wrapper_class)
40
- label_col_wrapper_class.gsub(/\bcol-(\w+)-(\d)\b/, 'offset-\1-\2')
41
- end
42
-
43
- def add_css_class!(options, css_class)
44
- the_class = [options[:class], css_class].compact
45
- options[:class] = the_class if the_class.present?
46
- end
47
-
48
- # def remove_css_class!(options, css_class)
49
- # the_class = options[:class].to_s.split(" ")
50
- # options[:class] = (the_class - [css_class]).compact.join(" ")
51
- # options.delete(:class) if options[:class].blank?
52
- # end
53
-
54
- private :control_specific_class, :is_size_valid?, :add_css_class!
24
+ private
25
+
26
+ def sanitized_tag_name(attribute, value)
27
+ # label's `for` attribute needs to match checkbox/radio button tag's id, IE sanitized value, IE
28
+ # https://github.com/rails/rails/blob/5-0-stable/actionview/lib/action_view/helpers/tags/base.rb#L123-L125
29
+ "#{@object_name}_#{attribute}_#{value.to_s.gsub(/\s/, "_").gsub(/[^-[[:word:]]]/, "").mb_chars.downcase}"
30
+ end
31
+
32
+ def field_offset_class(label_col_wrapper_class)
33
+ label_col_wrapper_class.gsub(/\bcol-(\w+)-(\d)\b/, 'offset-\1-\2')
34
+ end
35
+
36
+ def add_css_class!(options, css_class)
37
+ the_class = [options[:class], css_class].compact
38
+ options[:class] = the_class if the_class.present?
39
+ end
40
+
41
+ def control_specific_class(field_tag_name)
42
+ "rails-bootstrap-forms-#{field_tag_name.to_s.tr("_", "-")}"
43
+ end
44
+
45
+ def is_size_valid?(bootstrap)
46
+ bootstrap.size && %i(sm lg).include?(bootstrap.size)
55
47
  end
56
48
  end
57
49
  end
@@ -6,58 +6,55 @@ module RailsBootstrapForm
6
6
  module InputGroupBuilder
7
7
  extend ActiveSupport::Concern
8
8
 
9
- def self.included(base_class)
10
- def input_group_wrapper(attribute, bootstrap, &block)
11
- input = capture(&block) || ActiveSupport::SafeBuffer.new
9
+ private
12
10
 
13
- if input_group_required?(bootstrap)
14
- prepend = attach_input(bootstrap, :prepend)
15
- append = attach_input(bootstrap, :append)
11
+ def input_group_wrapper(attribute, bootstrap, &block)
12
+ input = capture(&block) || ActiveSupport::SafeBuffer.new
16
13
 
17
- input = prepend + input + append
18
- input += generate_error(attribute)
14
+ if input_group_required?(bootstrap)
15
+ prepend = attach_input(bootstrap, :prepend)
16
+ append = attach_input(bootstrap, :append)
19
17
 
20
- input = tag.div(input, class: input_group_classes(attribute, bootstrap))
21
- else
22
- input += generate_error(attribute)
23
- end
18
+ input = prepend + input + append
19
+ input += generate_error(attribute)
24
20
 
25
- input
21
+ input = tag.div(input, class: input_group_classes(attribute, bootstrap))
22
+ else
23
+ input += generate_error(attribute)
26
24
  end
27
25
 
28
- def input_group_classes(attribute, bootstrap)
29
- classes = Array("input-group") << bootstrap.additional_input_group_class
30
- if is_size_valid?(bootstrap)
31
- classes << "input-group-#{bootstrap.size}"
32
- end
33
- # Require `has-validation` class if field has errors.
34
- classes << "has-validation" if is_invalid?(attribute)
35
- classes.flatten.compact
36
- end
26
+ input
27
+ end
37
28
 
38
- def attach_input(bootstrap, key)
39
- tags = [*bootstrap.send(key)].map do |item|
40
- input_group_content(item)
41
- end
29
+ def input_group_classes(attribute, bootstrap)
30
+ classes = Array("input-group") << bootstrap.additional_input_group_class
31
+ if is_size_valid?(bootstrap)
32
+ classes << "input-group-#{bootstrap.size}"
33
+ end
34
+ # Require `has-validation` class if field has errors.
35
+ classes << "has-validation" if is_invalid?(attribute)
36
+ classes.flatten.compact
37
+ end
42
38
 
43
- ActiveSupport::SafeBuffer.new(tags.join)
39
+ def attach_input(bootstrap, key)
40
+ tags = [*bootstrap.send(key)].map do |item|
41
+ input_group_content(item)
44
42
  end
45
43
 
46
- def input_group_content(content)
47
- return content if /button|submit/.match?(content)
44
+ ActiveSupport::SafeBuffer.new(tags.join)
45
+ end
48
46
 
49
- tag.span(content.html_safe, class: "input-group-text")
50
- end
47
+ def input_group_content(content)
48
+ return content if /button|submit/.match?(content)
51
49
 
52
- def input_group_required?(bootstrap)
53
- [
54
- bootstrap.prepend,
55
- bootstrap.append
56
- ].any?(&:present?)
57
- end
50
+ tag.span(content.html_safe, class: "input-group-text")
51
+ end
58
52
 
59
- private :input_group_wrapper, :input_group_classes, :attach_input,
60
- :input_group_content, :input_group_required?
53
+ def input_group_required?(bootstrap)
54
+ [
55
+ bootstrap.prepend,
56
+ bootstrap.append
57
+ ].any?(&:present?)
61
58
  end
62
59
  end
63
60
  end
@@ -12,22 +12,8 @@ module RailsBootstrapForm
12
12
  inputs = ActiveSupport::SafeBuffer.new
13
13
 
14
14
  collection.each do |object|
15
- value = object.send(value_method)
16
-
17
- input_options = {
18
- bootstrap: {
19
- label_text: text_method.respond_to?(:call) ? text_method.call(object) : object.send(text_method),
20
- inline: (bootstrap.inline? || bootstrap.layout_inline?)
21
- },
22
- required: false,
23
- id: sanitized_tag_name(attribute, value)
24
- }.deep_merge!(options)
25
-
26
- if (checked = input_options[:checked])
27
- input_options[:checked] = collection_input_checked?(checked, object, value)
28
- end
29
-
30
- input_value = value_method.respond_to?(:call) ? value_method.call(object) : value
15
+ input_options = build_input_options(object, attribute, value_method, text_method, bootstrap, options)
16
+ input_value = resolve_input_value(object, value_method)
31
17
 
32
18
  inputs << yield(attribute, input_value, input_options)
33
19
  end
@@ -66,6 +52,36 @@ module RailsBootstrapForm
66
52
  end
67
53
  end
68
54
  end
55
+
56
+ private
57
+
58
+ def build_input_options(object, attribute, value_method, text_method, bootstrap, options)
59
+ input_options = {
60
+ bootstrap: {
61
+ label_text: resolve_label_text(text_method, object),
62
+ inline: (bootstrap.inline? || bootstrap.layout_inline?)
63
+ },
64
+ required: false,
65
+ id: sanitized_tag_name(attribute, object.send(value_method))
66
+ }.deep_merge!(options)
67
+
68
+ input_options[:checked] = resolve_checked_option(input_options[:checked], object, value_method)
69
+
70
+ input_options
71
+ end
72
+
73
+ def resolve_label_text(text_method, object)
74
+ text_method.respond_to?(:call) ? text_method.call(object) : object.send(text_method)
75
+ end
76
+
77
+ def resolve_input_value(object, value_method)
78
+ value_method.respond_to?(:call) ? value_method.call(object) : object.send(value_method)
79
+ end
80
+
81
+ def resolve_checked_option(checked_option, object, value_method)
82
+ return collection_input_checked?(checked_option, object, object.send(value_method)) if checked_option
83
+ false
84
+ end
69
85
  end
70
86
  end
71
87
  end
@@ -12,20 +12,10 @@ module RailsBootstrapForm
12
12
  bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
13
13
  return super if bootstrap.disabled?
14
14
 
15
- check_box_html = tag.div(class: choice_wrapper_classes(bootstrap)) do
16
- concat(bootstrap_check_box(attribute, checked_value, options, bootstrap))
17
- concat(help_text(attribute, bootstrap))
18
- concat(generate_error(attribute)) if is_invalid?(attribute)
19
- end
15
+ check_box_html = build_check_box_html(attribute, checked_value, bootstrap, options)
20
16
 
21
17
  if bootstrap.wrapper
22
- tag.div(**field_wrapper_options(bootstrap)) do
23
- if bootstrap.layout_horizontal?
24
- tag.div(class: choice_container_classes(bootstrap)) { check_box_html }
25
- else
26
- check_box_html
27
- end
28
- end
18
+ build_wrapped_check_box_html(bootstrap, check_box_html)
29
19
  else
30
20
  check_box_html
31
21
  end
@@ -12,20 +12,10 @@ module RailsBootstrapForm
12
12
  bootstrap = bootstrap_form_options.scoped(options.delete(:bootstrap))
13
13
  return super if bootstrap.disabled?
14
14
 
15
- radio_button_html = tag.div(class: choice_wrapper_classes(bootstrap)) do
16
- concat(bootstrap_radio_button(attribute, value, options, bootstrap))
17
- concat(help_text(attribute, bootstrap))
18
- concat(generate_error(attribute)) if is_invalid?(attribute)
19
- end
15
+ radio_button_html = build_radio_button_html(attribute, value, bootstrap, options)
20
16
 
21
17
  if bootstrap.wrapper
22
- tag.div(**field_wrapper_options(bootstrap)) do
23
- if bootstrap.layout_horizontal?
24
- tag.div(class: choice_container_classes(bootstrap)) { radio_button_html }
25
- else
26
- radio_button_html
27
- end
28
- end
18
+ build_wrapped_radio_button_html(bootstrap, radio_button_html)
29
19
  else
30
20
  radio_button_html
31
21
  end
@@ -3,6 +3,6 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  module RailsBootstrapForm
6
- VERSION = "0.9.7".freeze
6
+ VERSION = "0.9.9".freeze
7
7
  REQUIRED_RAILS_VERSION = "~> 7.0".freeze
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_bootstrap_form
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.7
4
+ version: 0.9.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harshal LADHE (shivam091)
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-06-26 00:00:00.000000000 Z
11
+ date: 2023-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: generator_spec
@@ -60,6 +60,7 @@ executables: []
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
+ - ".codeclimate.yml"
63
64
  - ".rspec"
64
65
  - CHANGELOG.md
65
66
  - CODE_OF_CONDUCT.md