bootstrap_form 5.1.0 → 5.2.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.
Files changed (168) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +21 -8
  3. data/.gitignore +4 -2
  4. data/.rubocop.yml +2 -1
  5. data/.yarnrc +5 -0
  6. data/CHANGELOG.md +11 -3
  7. data/CONTRIBUTING.md +101 -14
  8. data/Dangerfile +4 -4
  9. data/Dockerfile +5 -5
  10. data/Gemfile +5 -21
  11. data/README.md +68 -21
  12. data/RELEASING.md +12 -1
  13. data/Rakefile +7 -6
  14. data/bootstrap_form.gemspec +6 -8
  15. data/docker-compose.yml +6 -24
  16. data/gemfiles/6.0.gemfile +1 -1
  17. data/gemfiles/6.1.gemfile +1 -1
  18. data/gemfiles/7.0.gemfile +2 -3
  19. data/gemfiles/common.gemfile +28 -0
  20. data/gemfiles/edge.gemfile +3 -2
  21. data/lib/bootstrap_form/components/labels.rb +3 -9
  22. data/lib/bootstrap_form/components/validation.rb +36 -19
  23. data/lib/bootstrap_form/form_builder.rb +3 -0
  24. data/lib/bootstrap_form/form_group.rb +9 -6
  25. data/lib/bootstrap_form/form_group_builder.rb +10 -7
  26. data/lib/bootstrap_form/helpers/bootstrap.rb +7 -8
  27. data/lib/bootstrap_form/helpers/field.rb +26 -0
  28. data/lib/bootstrap_form/helpers.rb +1 -0
  29. data/lib/bootstrap_form/inputs/check_box.rb +22 -6
  30. data/lib/bootstrap_form/inputs/radio_button.rb +3 -3
  31. data/lib/bootstrap_form/version.rb +2 -1
  32. data/lib/bootstrap_form.rb +1 -1
  33. metadata +14 -146
  34. data/demo/.postcssrc.yml +0 -3
  35. data/demo/.ruby-version +0 -1
  36. data/demo/Gemfile +0 -80
  37. data/demo/Gemfile.lock +0 -261
  38. data/demo/Procfile.dev +0 -2
  39. data/demo/README.md +0 -17
  40. data/demo/Rakefile +0 -6
  41. data/demo/app/assets/builds/.keep +0 -0
  42. data/demo/app/assets/builds/application.js.LICENSE.txt +0 -9
  43. data/demo/app/assets/config/manifest.js +0 -2
  44. data/demo/app/assets/stylesheets/actiontext.css +0 -31
  45. data/demo/app/assets/stylesheets/actiontext.scss +0 -38
  46. data/demo/app/assets/stylesheets/application.scss +0 -1
  47. data/demo/app/controllers/application_controller.rb +0 -2
  48. data/demo/app/controllers/bootstrap_controller.rb +0 -29
  49. data/demo/app/controllers/users_controller.rb +0 -9
  50. data/demo/app/helpers/bootstrap_helper.rb +0 -27
  51. data/demo/app/javascript/application.js +0 -3
  52. data/demo/app/javascript/channels/consumer.js +0 -6
  53. data/demo/app/javascript/channels/index.js +0 -5
  54. data/demo/app/javascript/packs/application.js +0 -11
  55. data/demo/app/models/address.rb +0 -3
  56. data/demo/app/models/application_record.rb +0 -3
  57. data/demo/app/models/faux_user.rb +0 -9
  58. data/demo/app/models/skill.rb +0 -15
  59. data/demo/app/models/super_user.rb +0 -2
  60. data/demo/app/models/user.rb +0 -25
  61. data/demo/app/views/active_storage/blobs/_blob.html.erb +0 -14
  62. data/demo/app/views/bootstrap/form.html.erb +0 -67
  63. data/demo/app/views/layouts/action_text/contents/_content.html.erb +0 -3
  64. data/demo/app/views/layouts/application.html.erb +0 -76
  65. data/demo/bin/bundle +0 -3
  66. data/demo/bin/dev +0 -9
  67. data/demo/bin/rails +0 -4
  68. data/demo/bin/rake +0 -4
  69. data/demo/bin/setup +0 -36
  70. data/demo/bin/update +0 -31
  71. data/demo/bin/webpack +0 -15
  72. data/demo/bin/webpack-dev-server +0 -15
  73. data/demo/bin/yarn +0 -11
  74. data/demo/config/application.rb +0 -21
  75. data/demo/config/boot.rb +0 -5
  76. data/demo/config/database.yml +0 -21
  77. data/demo/config/environment.rb +0 -5
  78. data/demo/config/environments/development.rb +0 -60
  79. data/demo/config/environments/production.rb +0 -48
  80. data/demo/config/environments/test.rb +0 -46
  81. data/demo/config/initializers/application_controller_renderer.rb +0 -8
  82. data/demo/config/initializers/backtrace_silencers.rb +0 -7
  83. data/demo/config/initializers/cookies_serializer.rb +0 -5
  84. data/demo/config/initializers/filter_parameter_logging.rb +0 -4
  85. data/demo/config/initializers/inflections.rb +0 -16
  86. data/demo/config/initializers/mime_types.rb +0 -4
  87. data/demo/config/initializers/wrap_parameters.rb +0 -14
  88. data/demo/config/locales/en.yml +0 -33
  89. data/demo/config/puma.rb +0 -56
  90. data/demo/config/routes.rb +0 -6
  91. data/demo/config/spring.rb +0 -6
  92. data/demo/config/storage.yml +0 -35
  93. data/demo/config/webpack/development.js +0 -5
  94. data/demo/config/webpack/environment.js +0 -3
  95. data/demo/config/webpack/production.js +0 -5
  96. data/demo/config/webpack/test.js +0 -5
  97. data/demo/config/webpacker.yml +0 -92
  98. data/demo/config.ru +0 -5
  99. data/demo/db/schema.rb +0 -84
  100. data/demo/doc/screenshots/bootstrap/index/00_horizontal_form.png +0 -0
  101. data/demo/doc/screenshots/bootstrap/index/01_with_validation_error.png +0 -0
  102. data/demo/doc/screenshots/bootstrap/index/02_inline_form.png +0 -0
  103. data/demo/doc/screenshots/bootstrap/index/03_simple_action_text_example.png +0 -0
  104. data/demo/doc/screenshots/bootstrap/index/04_floating_labels.png +0 -0
  105. data/demo/doc/screenshots/bootstrap/readme/00_example.png +0 -0
  106. data/demo/doc/screenshots/bootstrap/readme/01_example.png +0 -0
  107. data/demo/doc/screenshots/bootstrap/readme/02_example.png +0 -0
  108. data/demo/doc/screenshots/bootstrap/readme/03_example.png +0 -0
  109. data/demo/doc/screenshots/bootstrap/readme/04_example.png +0 -0
  110. data/demo/doc/screenshots/bootstrap/readme/05_example.png +0 -0
  111. data/demo/doc/screenshots/bootstrap/readme/06_example.png +0 -0
  112. data/demo/doc/screenshots/bootstrap/readme/07_example.png +0 -0
  113. data/demo/doc/screenshots/bootstrap/readme/08_example.png +0 -0
  114. data/demo/doc/screenshots/bootstrap/readme/09_example.png +0 -0
  115. data/demo/doc/screenshots/bootstrap/readme/10_example.png +0 -0
  116. data/demo/doc/screenshots/bootstrap/readme/11_example.png +0 -0
  117. data/demo/doc/screenshots/bootstrap/readme/12_example.png +0 -0
  118. data/demo/doc/screenshots/bootstrap/readme/13_example.png +0 -0
  119. data/demo/doc/screenshots/bootstrap/readme/14_example.png +0 -0
  120. data/demo/doc/screenshots/bootstrap/readme/15_example.png +0 -0
  121. data/demo/doc/screenshots/bootstrap/readme/16_example.png +0 -0
  122. data/demo/doc/screenshots/bootstrap/readme/17_example.png +0 -0
  123. data/demo/doc/screenshots/bootstrap/readme/18_example.png +0 -0
  124. data/demo/doc/screenshots/bootstrap/readme/19_example.png +0 -0
  125. data/demo/doc/screenshots/bootstrap/readme/20_example.png +0 -0
  126. data/demo/doc/screenshots/bootstrap/readme/21_example.png +0 -0
  127. data/demo/doc/screenshots/bootstrap/readme/22_example.png +0 -0
  128. data/demo/doc/screenshots/bootstrap/readme/23_example.png +0 -0
  129. data/demo/doc/screenshots/bootstrap/readme/24_example.png +0 -0
  130. data/demo/doc/screenshots/bootstrap/readme/25_example.png +0 -0
  131. data/demo/doc/screenshots/bootstrap/readme/26_example.png +0 -0
  132. data/demo/doc/screenshots/bootstrap/readme/27_example.png +0 -0
  133. data/demo/doc/screenshots/bootstrap/readme/28_example.png +0 -0
  134. data/demo/doc/screenshots/bootstrap/readme/29_example.png +0 -0
  135. data/demo/doc/screenshots/bootstrap/readme/30_example.png +0 -0
  136. data/demo/doc/screenshots/bootstrap/readme/31_example.png +0 -0
  137. data/demo/doc/screenshots/bootstrap/readme/32_example.png +0 -0
  138. data/demo/doc/screenshots/bootstrap/readme/33_example.png +0 -0
  139. data/demo/doc/screenshots/bootstrap/readme/34_example.png +0 -0
  140. data/demo/doc/screenshots/bootstrap/readme/35_example.png +0 -0
  141. data/demo/doc/screenshots/bootstrap/readme/36_example.png +0 -0
  142. data/demo/doc/screenshots/bootstrap/readme/37_example.png +0 -0
  143. data/demo/doc/screenshots/bootstrap/readme/38_example.png +0 -0
  144. data/demo/doc/screenshots/bootstrap/readme/39_example.png +0 -0
  145. data/demo/doc/screenshots/bootstrap/readme/40_example.png +0 -0
  146. data/demo/doc/screenshots/bootstrap/readme/41_example.png +0 -0
  147. data/demo/doc/screenshots/bootstrap/readme/42_example.png +0 -0
  148. data/demo/doc/screenshots/bootstrap/readme/43_example.png +0 -0
  149. data/demo/doc/screenshots/bootstrap/readme/44_example.png +0 -0
  150. data/demo/doc/screenshots/bootstrap/readme/45_example.png +0 -0
  151. data/demo/doc/screenshots/bootstrap/readme/46_example.png +0 -0
  152. data/demo/doc/screenshots/bootstrap/readme/47_example.png +0 -0
  153. data/demo/doc/screenshots/bootstrap/readme/48_example.png +0 -0
  154. data/demo/doc/screenshots/bootstrap/readme/49_example.png +0 -0
  155. data/demo/doc/screenshots/bootstrap/readme/50_example.png +0 -0
  156. data/demo/log/.keep +0 -0
  157. data/demo/package.json +0 -21
  158. data/demo/public/favicon.ico +0 -0
  159. data/demo/test/application_system_test_case.rb +0 -8
  160. data/demo/test/controllers/bootstrap_controller_test.rb +0 -8
  161. data/demo/test/controllers/users_controller_test.rb +0 -13
  162. data/demo/test/fixtures/action_text/rich_texts.yml +0 -4
  163. data/demo/test/fixtures/users.yml +0 -2
  164. data/demo/test/system/bootstrap_test.rb +0 -84
  165. data/demo/test/test_helper.rb +0 -10
  166. data/demo/webpack.config.js +0 -20
  167. data/demo/yarn.lock +0 -7176
  168. data/gemfiles/5.2.gemfile +0 -4
data/demo/log/.keep DELETED
File without changes
data/demo/package.json DELETED
@@ -1,21 +0,0 @@
1
- {
2
- "name": "dummy",
3
- "private": true,
4
- "dependencies": {
5
- "@rails/actioncable": "^6.1.0",
6
- "@rails/actiontext": "^6.1.0",
7
- "@rails/activestorage": "^6.1.0",
8
- "@rails/ujs": "^6.1.0",
9
- "@rails/webpacker": "^5.0.0",
10
- "trix": "^1.0.0",
11
- "turbolinks": "^5.2.0"
12
- },
13
- "version": "0.1.0",
14
- "devDependencies": {
15
- "webpack-dev-server": "^4.0.0"
16
- },
17
- "scripts": {
18
- "build": "webpack --config webpack.config.js",
19
- "build:css": "webpack --config webpack.config.js"
20
- }
21
- }
File without changes
@@ -1,8 +0,0 @@
1
- require "test_helper"
2
-
3
- class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
4
- include Capybara::Screenshot::Diff
5
- driven_by :selenium, using: :headless_chrome, screen_size: [960, 720] do |capabilities|
6
- capabilities.add_argument "force-device-scale-factor=1"
7
- end
8
- end
@@ -1,8 +0,0 @@
1
- require "test_helper"
2
-
3
- class BootstrapControllerTest < ActionDispatch::IntegrationTest
4
- test "should get form" do
5
- get root_path
6
- assert_response :success
7
- end
8
- end
@@ -1,13 +0,0 @@
1
- require "test_helper"
2
-
3
- class UsersControllerTest < ActionDispatch::IntegrationTest
4
- test "should post create" do
5
- post users_url
6
- assert_redirected_to root_path
7
- end
8
-
9
- test "should patch update" do
10
- patch user_url(users(:one))
11
- assert_redirected_to root_path
12
- end
13
- end
@@ -1,4 +0,0 @@
1
- # one:
2
- # record: name_of_fixture (ClassOfFixture)
3
- # name: content
4
- # body: <p>In a <i>million</i> stars!</p>
@@ -1,2 +0,0 @@
1
- one:
2
- email: one@test.com
@@ -1,84 +0,0 @@
1
- require "application_system_test_case"
2
-
3
- class BootstrapTest < ApplicationSystemTestCase
4
- setup { screenshot_section :bootstrap }
5
-
6
- test "visiting the index" do
7
- screenshot_group :index
8
- visit root_url
9
-
10
- all(".toggle").each { |btn| execute_script "arguments[0].remove()", btn }
11
-
12
- all("h3").each do |header|
13
- example = header.first(:xpath, "./following-sibling::div")
14
- scroll_to example
15
- sleep 0.5
16
- screenshot header.text.downcase.tr(" ", "_"), crop: bounds(example), color_distance_limit: 2
17
- end
18
- end
19
-
20
- HEADERS = ["Generated HTML", "This generates", "Which outputs", "will be rendered as"].join("|").freeze
21
- REGEXP =
22
- /(?:!\[[^\]]*\]\([^)]+\)\s*)?```erb\n(.*?)\n```\s*((?:#{HEADERS}).*?$)?\s*(```html\n(?:.*?)\n```\s*)?/mi
23
- .freeze
24
- test "readme examples" do
25
- screenshot_group :readme
26
-
27
- readme = File.read(File.expand_path("../../../README.md", __dir__))
28
- augmented_readme = readme.gsub(REGEXP) do |_|
29
- erb = Regexp.last_match(1)
30
- header = Regexp.last_match(2)
31
- unless /\A<%= bootstrap[^>]*>\n\s*...\s*<% end %>\z/.match? erb
32
- wrapped_erb = erb.starts_with?("<%= bootstrap") ? erb : <<~ERB
33
- <%= bootstrap_form_with model: @user do |f| %>
34
- #{erb}
35
- <% end %>
36
- ERB
37
-
38
- visit fragment_path erb: wrapped_erb
39
- wrapper = find(".p-3")
40
- i = @screenshot_counter
41
- screenshot :example, crop: bounds(wrapper)
42
- wrapper = wrapper.find("form") if wrapped_erb != erb
43
- html = wrapper["innerHTML"].strip.gsub("><", ">\n<")
44
- assert html.present?, erb
45
- doc = Nokogiri::HTML.fragment(html)
46
- doc.traverse do |node|
47
- if node.is_a?(Nokogiri::XML::Element)
48
- node.attributes.sort_by(&:first).each do |name, value|
49
- node.delete(name)
50
- node[name] = value
51
- end
52
- end
53
- end
54
- html = doc.to_html
55
- image = <<~MD
56
- ![Example #{i}](demo/doc/screenshots/bootstrap/readme/#{format('%02i', i)}_example.png "Example #{i}")
57
- MD
58
- html = <<~MD
59
-
60
- #{header || 'Generated HTML:'}
61
-
62
- ```html
63
- #{HtmlBeautifier.beautify(html)}
64
- ```
65
- MD
66
- end
67
- <<~MD
68
- #{image}```erb
69
- #{erb}
70
- ```
71
- #{html}
72
- MD
73
- end
74
- augmented_readme.gsub!(/127.0.0.1:\d+/, "test.host")
75
- File.write(File.expand_path("../../../README.md", __dir__), augmented_readme)
76
- end
77
-
78
- private
79
-
80
- def bounds(node)
81
- client_rect = evaluate_script("arguments[0].getBoundingClientRect()", node.native)
82
- [client_rect["left"].floor, client_rect["top"].floor, client_rect["right"].ceil, client_rect["bottom"].ceil]
83
- end
84
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ENV["RAILS_ENV"] = "test"
4
-
5
- require_relative "../config/environment"
6
- require "rails/test_help"
7
-
8
- class ActiveSupport::TestCase
9
- fixtures :all
10
- end
@@ -1,20 +0,0 @@
1
- const path = require("path")
2
- const webpack = require("webpack")
3
-
4
- module.exports = {
5
- mode: "production",
6
- devtool: "source-map",
7
- entry: {
8
- application: "./app/javascript/application.js"
9
- },
10
- output: {
11
- filename: "[name].js",
12
- sourceMapFilename: "[name].js.map",
13
- path: path.resolve(__dirname, "app/assets/builds"),
14
- },
15
- plugins: [
16
- new webpack.optimize.LimitChunkCountPlugin({
17
- maxChunks: 1
18
- })
19
- ]
20
- }