bootstrap-form 3.0.0 → 4.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 4cb6996ec4cc2d005a0dc8681393b0594ee19d66
4
- data.tar.gz: 45a663caea08520d1662a0a9ef1cdf69aac337e3
2
+ SHA256:
3
+ metadata.gz: 259a8933965fa3b7337aaf29853e24319b83eee8deae7c1639ef0807ea099b97
4
+ data.tar.gz: 18395ffb31d0c1c35010865f439cc3c074288ea30a0ce67617ce50a5cf570bed
5
5
  SHA512:
6
- metadata.gz: 8d990bbe874c77b39f809a747b0f3d39f45263b120fddb6e4db0f07d1f93128883e8c44c0bf3d04e48b4bc23fc5f864b283093865af2f5878d7d89ce701e118b
7
- data.tar.gz: ed8cf4b13c4a3382417f7a9e7dacf2eeb227b8c9bbe9026e29f0f5420e6ca07a89ec6b468de9ac58c78ab8f1e08350ae1aa0bab55bd0e5062201b11d4e2f1fa4
6
+ metadata.gz: 9bdab671f48b5d4d156108f5b2f7c7efc5ed8689df584628e2a71ac5bde8b74d1eb8b84cf9757a6a14c76ba33503e5dec7e29de22f6f79ca83c9f5936685e59b
7
+ data.tar.gz: e7ef6c7735974ba293184faac1a7db8b2ee47eb1a89aec09337b73b7a1ef66ab14ae73207be4308c0a997907f6ca86fe6678812e5d72ac3cc287ed9c038518de
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ Gemfile.*.lock
@@ -0,0 +1,21 @@
1
+ image: "ruby:2.5"
2
+
3
+ cache:
4
+ paths:
5
+ - vendor/ruby
6
+
7
+ before_script:
8
+ - ruby -v # Print out ruby version for debugging
9
+ - bundle install -j $(nproc) --path vendor
10
+
11
+ rails.5:
12
+ variables:
13
+ BUNDLE_GEMFILE: "Gemfile.rails.5.0"
14
+ script:
15
+ - bundle exec rspec
16
+
17
+ rails.6:
18
+ variables:
19
+ BUNDLE_GEMFILE: "Gemfile.rails.6.0"
20
+ script:
21
+ - bundle exec rspec
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper
@@ -1,6 +1,9 @@
1
+ language: ruby
2
+ cache: bundler
3
+
1
4
  rvm:
2
- - 1.9.3
3
- - 2.0.0
5
+ - 2.2.4
6
+ - 2.3.0
4
7
  gemfile:
5
- - Gemfile.rails.3.2
6
8
  - Gemfile.rails.4.0
9
+ - Gemfile.rails.5.0
@@ -3,5 +3,5 @@ source "http://rubygems.org"
3
3
  # Specify your gem's dependencies in bootstrap-form.gemspec
4
4
  gemspec
5
5
 
6
- gem 'railties', '~> 3.2'
7
- gem 'actionpack', '~> 3.2'
6
+ gem 'railties', '~> 5.0.0'
7
+ gem 'actionpack', '~> 5.0.0'
@@ -3,5 +3,5 @@ source "http://rubygems.org"
3
3
  # Specify your gem's dependencies in bootstrap-form.gemspec
4
4
  gemspec
5
5
 
6
- gem 'railties', '4.0.0'
7
- gem 'actionpack', '4.0.0'
6
+ gem 'railties', '~> 6.0.0'
7
+ gem 'actionpack', '~> 6.0.0'
data/LICENSE CHANGED
@@ -1,3 +1,5 @@
1
+ MIT License
2
+
1
3
  Copyright (c) 2013 David Padilla
2
4
 
3
5
  Permission is hereby granted, free of charge, to any person obtaining
data/README.md CHANGED
@@ -1,14 +1,12 @@
1
1
  # Bootstrap Form
2
2
 
3
- [![Build Status](https://travis-ci.org/dabit/bootstrap-form.png?branch=master)](https://travis-ci.org/dabit/bootstrap-form)
4
-
5
- Form Helpers to make your form inputs [look like this](http://twitter.github.io/bootstrap/base-css.html#forms).
3
+ Form Helpers to make your form inputs [look like this](https://getbootstrap.com/docs/4.3/components/forms/).
6
4
 
7
5
  Helps you to create beautiful mocks really quickly.
8
6
 
9
- Works with Bootstrap 3 and Rails 3.2+ (including Rails 4)
7
+ Works with Bootstrap 4 and Rails 5+.
10
8
 
11
- For older versions of Bootstrap use version 1.0.x of this gem.
9
+ For older versions of Bootstrap and Rails use older versions of this gem.
12
10
 
13
11
  ## Usage
14
12
 
@@ -20,11 +18,6 @@ Bundle install
20
18
 
21
19
  bundle install
22
20
 
23
- To make them look even better, I recommend you add this to your
24
- application.rb
25
-
26
- ActionView::Base.field_error_proc = proc { |input, instance| input }
27
-
28
21
  ## Example
29
22
 
30
23
  You write this:
@@ -49,7 +42,7 @@ You can specify a custom label for the input by setting the label
49
42
  option:
50
43
 
51
44
  form_for @account do |f|
52
- f.bootstrap_text_field :name, :label => 'A custom label'
45
+ f.bootstrap_text_field :name, label: 'A custom label'
53
46
  end
54
47
 
55
48
  Then, you get something like this:
@@ -71,11 +64,6 @@ Then, you get something like this:
71
64
 
72
65
  ## Error handling
73
66
 
74
- All fields will automatically add the classes to show errors with Twitter
75
- bootstrap styles.
76
-
77
- ## TODO
78
-
79
- Coming soon:
67
+ All fields will automatically add the classes to show errors with
68
+ bootstrap styling.
80
69
 
81
- * More form inputs
@@ -6,10 +6,11 @@ Gem::Specification.new do |s|
6
6
  s.name = "bootstrap-form"
7
7
  s.version = Bootstrap::Form::VERSION
8
8
  s.authors = ["David Padilla"]
9
- s.email = ["david@crowdint.com"]
10
- s.homepage = ""
11
- s.summary = %q{Twitter Bootstrap Form helpers}
12
- s.description = %q{Twitter Bootstrap Form helpers}
9
+ s.email = ["david@padilla.io"]
10
+ s.homepage = "https://rubygems.org/gems/bootstrap-form"
11
+ s.summary = %q{Bootstrap Form helpers}
12
+ s.description = %q{Bootstrap Form helpers}
13
+ s.license = 'MIT'
13
14
 
14
15
  s.rubyforge_project = "bootstrap-form"
15
16
 
@@ -18,10 +19,10 @@ Gem::Specification.new do |s|
18
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
20
  s.require_paths = ["lib"]
20
21
 
22
+ s.add_dependency 'railties', '> 5.0'
23
+ s.add_dependency 'actionpack', '> 5.0'
21
24
 
22
- s.add_dependency 'railties', '> 3.2'
23
- s.add_dependency 'actionpack', '> 3.2'
24
-
25
- s.add_development_dependency "minitest", "~> 4.7.5"
26
- s.add_development_dependency "rr"
25
+ s.add_development_dependency "rspec-rails"
26
+ s.add_development_dependency "rspec-html-matchers"
27
+ s.add_development_dependency "pry"
27
28
  end
@@ -1,3 +1,6 @@
1
1
  require "bootstrap-form/version"
2
2
  require "bootstrap-form/form_helper"
3
3
 
4
+ ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
5
+ html_tag.html_safe
6
+ end
@@ -5,55 +5,57 @@ module ActionView
5
5
  BOOTSTRAP_OPTIONS = [:label, :hint].freeze
6
6
 
7
7
  def bootstrap_text_field(object_name, method, options={})
8
- options[:class] = (options[:class] ? options[:class] + " form-control" : "form-control")
8
+ options[:class] = control_class(options[:class], options[:object].errors[method])
9
9
  bootstrap_control_group_wrap(object_name, method, text_field(object_name, method, extract_input_options(options)), options)
10
10
  end
11
11
 
12
12
  def bootstrap_email_field(object_name, method, options={})
13
- options[:class] = (options[:class] ? options[:class] + " form-control" : "form-control")
13
+ options[:class] = control_class(options[:class], options[:object].errors[method])
14
14
  bootstrap_control_group_wrap(object_name, method, email_field(object_name, method, extract_input_options(options)), options)
15
15
  end
16
16
 
17
17
  def bootstrap_password_field(object_name, method, options={})
18
- options[:class] = (options[:class] ? options[:class] + " form-control" : "form-control")
18
+ options[:class] = control_class(options[:class], options[:object].errors[method])
19
19
  bootstrap_control_group_wrap(object_name, method, password_field(object_name, method, extract_input_options(options)), options)
20
20
  end
21
21
 
22
22
  def bootstrap_collection_select(object_name, method, collection, value_method, text_method, options = {}, html_options = {})
23
- html_options[:class] = (html_options[:class] ? html_options[:class] + " form-control" : "form-control")
23
+ html_options[:class] = control_class(html_options[:class], options[:object].errors[method])
24
24
  bootstrap_control_group_wrap(object_name, method, collection_select(object_name, method, collection, value_method, text_method, extract_input_options(options), html_options), options)
25
25
  end
26
26
 
27
27
  def bootstrap_select(object_name, method, choices, options={}, html_options={})
28
- html_options[:class] = (html_options[:class] ? html_options[:class] + " form-control" : "form-control")
28
+ html_options[:class] = control_class(html_options[:class], options[:object].errors[method])
29
29
  bootstrap_control_group_wrap(object_name, method, select(object_name, method, choices, extract_input_options(options), html_options), options)
30
30
  end
31
31
 
32
32
  def bootstrap_file_field(object_name, method, options={})
33
- options[:class] = (options[:class] ? options[:class] + " form-control" : "form-control")
33
+ options[:class] = control_class(options[:class], options[:object].errors[method], " form-control-file")
34
34
  bootstrap_control_group_wrap(object_name, method, file_field(object_name, method, extract_input_options(options)), options)
35
35
  end
36
36
 
37
37
  def bootstrap_text_area(object_name, method, options={})
38
- options[:class] = (options[:class] ? options[:class] + " form-control" : "form-control")
38
+ options[:class] = control_class(options[:class], options[:object].errors[method])
39
39
  bootstrap_control_group_wrap(object_name, method, text_area(object_name, method, extract_input_options(options)), options)
40
40
  end
41
41
 
42
42
  def bootstrap_control_group_wrap(object_name, method, content, options={})
43
43
  error_messages = options[:object].errors[method]
44
- control_group_tag = error_messages.blank? ? 'form-group' : 'form-group has-error'
45
- inline_help = inline_help_tag(error_messages.presence || options[:hint])
44
+ error_block = inline_help_tag(error_messages.presence)
45
+ hint_block = content_tag(:small, class: "text-muted") do
46
+ options[:hint]
47
+ end if !error_messages.presence && options[:hint]
46
48
 
47
49
  content_tag(:div, label(object_name, method, options[:label], :class => 'control-label') +
48
- content + inline_help,
49
- :class => control_group_tag)
50
+ content + error_block + hint_block,
51
+ class: 'form-group')
50
52
  end
51
53
 
52
54
  def inline_help_tag(messages)
53
55
  messages = Array.wrap(messages)
54
56
  return '' if messages.empty?
55
57
  message_span = ActiveSupport::SafeBuffer.new(" #{messages.to_sentence}")
56
- content_tag(:span, message_span, :class => 'help-block')
58
+ content_tag(:div, message_span, class: 'invalid-feedback')
57
59
  end
58
60
 
59
61
  private
@@ -61,6 +63,13 @@ module ActionView
61
63
  def extract_input_options(options)
62
64
  options.except(*BOOTSTRAP_OPTIONS)
63
65
  end
66
+
67
+ def control_class(current_class, errors=[], bootstrap_class=" form-control")
68
+ css_class = current_class || ""
69
+ css_class << bootstrap_class
70
+ css_class << " is-invalid" if errors.any?
71
+ css_class
72
+ end
64
73
  end
65
74
  end
66
75
  end
@@ -1,5 +1,5 @@
1
1
  module Bootstrap
2
2
  module Form
3
- VERSION = "3.0.0"
3
+ VERSION = "4.0.0"
4
4
  end
5
5
  end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe '#bootstrap_control_group_wrap', type: :helper do
4
+ let(:errors) { {} }
5
+ let(:object) { double(errors: errors) }
6
+ let(:options) { { object: object } }
7
+ let(:content) do
8
+ ::ActiveSupport::SafeBuffer.new('content')
9
+ end
10
+
11
+ subject do
12
+ helper.bootstrap_control_group_wrap(:post, :name, content, options)
13
+ end
14
+
15
+ it do
16
+ is_expected.to have_tag('div.form-group') do
17
+ with_tag('label.control-label') do
18
+ with_text 'Name'
19
+ end
20
+ end
21
+ end
22
+
23
+ context 'with option label: "Custom Label"' do
24
+ let(:options) { { object: object, label: 'Custom Label' } }
25
+
26
+ it do
27
+ is_expected.to have_tag('div.form-group') do
28
+ with_tag('label.control-label') do
29
+ with_text 'Custom Label'
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ context 'with errors' do
36
+ let(:errors) { { name: ["has already been taken", "is reserved", "must be odd"] } }
37
+
38
+ it do
39
+ is_expected.to have_tag('div.form-group') do
40
+ with_tag('div.invalid-feedback') do
41
+ with_text " has already been taken, is reserved, and must be odd"
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ context 'with option hint: "format matters"' do
48
+ let(:options) { { object: object, hint: 'format matters' } }
49
+
50
+ it do
51
+ is_expected.to have_tag('div.form-group') do
52
+ with_tag('small.text-muted') do
53
+ with_text "format matters"
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ context 'with errors and option hint: "format matters"' do
60
+ let(:errors) { { name: ["has already been taken", "is reserved", "must be odd"] } }
61
+ let(:options) { { object: object, hint: 'format matters' } }
62
+
63
+ it do
64
+ is_expected.to have_tag('div.form-group') do
65
+ with_tag('div.invalid-feedback') do
66
+ with_text " has already been taken, is reserved, and must be odd"
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'bootstrap helpers', type: :helper do
4
+ let(:errors) { { name: [], attachment: [] } }
5
+ let(:object) { double("object", errors: errors, name: 'object-name') }
6
+ let(:options) { { object: object } }
7
+
8
+ RSpec.shared_examples "an input with type" do |type|
9
+ it { is_expected.to have_tag("input.form-control[type=#{type}]") }
10
+
11
+ context 'with errors' do
12
+ let(:errors) { { name: ['is invalid'], attachment: ['is invalid'] } }
13
+
14
+ it { is_expected.to have_tag("input.is-invalid[type=#{type}]") }
15
+ end
16
+ end
17
+
18
+ RSpec.shared_examples "a select element" do
19
+ it do
20
+ is_expected.to have_tag('select.form-control') do
21
+ with_tag('option[value=1]') do
22
+ with_text 'One'
23
+ end
24
+ end
25
+ end
26
+
27
+ context 'with errors' do
28
+ let(:errors) { { name: ['is invalid'] } }
29
+ it { is_expected.to have_tag("select.is-invalid") }
30
+ end
31
+ end
32
+
33
+ describe 'text_field' do
34
+ subject do
35
+ bootstrap_text_field(:post, :name, options)
36
+ end
37
+
38
+ it_behaves_like "an input with type", "text"
39
+ end
40
+
41
+ describe 'email_field' do
42
+ subject do
43
+ bootstrap_email_field(:post, :name, options)
44
+ end
45
+
46
+ it_behaves_like "an input with type", "email"
47
+ end
48
+
49
+ describe 'password_field' do
50
+ subject do
51
+ bootstrap_password_field(:post, :name, options)
52
+ end
53
+
54
+ it_behaves_like "an input with type", "password"
55
+ end
56
+
57
+ describe 'file_field' do
58
+ subject do
59
+ bootstrap_file_field(:post, :attachment, options)
60
+ end
61
+
62
+ it do
63
+ is_expected.to have_tag('input[type="file"].form-control-file')
64
+ end
65
+ end
66
+
67
+ describe 'select' do
68
+ let(:options_for_select) { [["One", 1]] }
69
+
70
+ subject do
71
+ bootstrap_select(:post, :name, options_for_select, options, {})
72
+ end
73
+
74
+ it_behaves_like "a select element"
75
+ end
76
+
77
+ describe 'collection_select' do
78
+ let(:collection) { [double(id: 1, name: 'One')] }
79
+ subject do
80
+ bootstrap_collection_select(:post, :name, collection, :id ,:name, options)
81
+ end
82
+
83
+ it_behaves_like "a select element"
84
+ end
85
+
86
+ describe 'text_area' do
87
+ subject do
88
+ bootstrap_text_area(:post, :name, options)
89
+ end
90
+
91
+ it do
92
+ is_expected.to have_tag('textarea.form-control')
93
+ end
94
+
95
+ context 'with errors' do
96
+ let(:errors) { { name: ['is invalid'] } }
97
+
98
+ it do
99
+ is_expected.to have_tag('textarea.is-invalid')
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,114 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+
7
+ ENV["RAILS_ENV"] = "test"
8
+
9
+ require 'rails'
10
+ require 'action_controller'
11
+ require 'action_view'
12
+
13
+ Bundler.require(:default, :development)
14
+
15
+ require 'rspec/rails'
16
+
17
+ module BootstrapForm
18
+ class Application < Rails::Application ; end
19
+ end
20
+
21
+ BootstrapForm::Application.routes.draw do
22
+ get '/:controller(/:action(/:id))'
23
+ end
24
+ BootstrapForm::Application.config.secret_key_base = 'bootstrap'
25
+
26
+ ActionController::Base.send :include, BootstrapForm::Application.routes.url_helpers
27
+
28
+ RSpec.configure do |config|
29
+ config.include RSpecHtmlMatchers
30
+
31
+ # rspec-expectations config goes here. You can use an alternate
32
+ # assertion/expectation library such as wrong or the stdlib/minitest
33
+ # assertions if you prefer.
34
+ config.expect_with :rspec do |expectations|
35
+ # This option will default to `true` in RSpec 4. It makes the `description`
36
+ # and `failure_message` of custom matchers include text for helper methods
37
+ # defined using `chain`, e.g.:
38
+ # be_bigger_than(2).and_smaller_than(4).description
39
+ # # => "be bigger than 2 and smaller than 4"
40
+ # ...rather than:
41
+ # # => "be bigger than 2"
42
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
43
+ end
44
+
45
+ # rspec-mocks config goes here. You can use an alternate test double
46
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
47
+ config.mock_with :rspec do |mocks|
48
+ # Prevents you from mocking or stubbing a method that does not exist on
49
+ # a real object. This is generally recommended, and will default to
50
+ # `true` in RSpec 4.
51
+ mocks.verify_partial_doubles = true
52
+ end
53
+
54
+ # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
55
+ # have no way to turn it off -- the option exists only for backwards
56
+ # compatibility in RSpec 3). It causes shared context metadata to be
57
+ # inherited by the metadata hash of host groups and examples, rather than
58
+ # triggering implicit auto-inclusion in groups with matching metadata.
59
+ config.shared_context_metadata_behavior = :apply_to_host_groups
60
+
61
+ # The settings below are suggested to provide a good initial experience
62
+ # with RSpec, but feel free to customize to your heart's content.
63
+ =begin
64
+ # This allows you to limit a spec run to individual examples or groups
65
+ # you care about by tagging them with `:focus` metadata. When nothing
66
+ # is tagged with `:focus`, all examples get run. RSpec also provides
67
+ # aliases for `it`, `describe`, and `context` that include `:focus`
68
+ # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
69
+ config.filter_run_when_matching :focus
70
+
71
+ # Allows RSpec to persist some state between runs in order to support
72
+ # the `--only-failures` and `--next-failure` CLI options. We recommend
73
+ # you configure your source control system to ignore this file.
74
+ config.example_status_persistence_file_path = "spec/examples.txt"
75
+
76
+ # Limits the available syntax to the non-monkey patched syntax that is
77
+ # recommended. For more details, see:
78
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
79
+ # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
80
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
81
+ config.disable_monkey_patching!
82
+
83
+ # This setting enables warnings. It's recommended, but in some cases may
84
+ # be too noisy due to issues in dependencies.
85
+ config.warnings = true
86
+
87
+ # Many RSpec users commonly either run the entire suite or an individual
88
+ # file, and it's useful to allow more verbose output when running an
89
+ # individual spec file.
90
+ if config.files_to_run.one?
91
+ # Use the documentation formatter for detailed output,
92
+ # unless a formatter has already been configured
93
+ # (e.g. via a command-line flag).
94
+ config.default_formatter = "doc"
95
+ end
96
+
97
+ # Print the 10 slowest examples and example groups at the
98
+ # end of the spec run, to help surface which specs are running
99
+ # particularly slow.
100
+ config.profile_examples = 10
101
+
102
+ # Run specs in random order to surface order dependencies. If you find an
103
+ # order dependency and want to debug it, you can fix the order by providing
104
+ # the seed, which is printed after each run.
105
+ # --seed 1234
106
+ config.order = :random
107
+
108
+ # Seed global randomization in this process using the `--seed` CLI option.
109
+ # Setting this allows you to use `--seed` to deterministically reproduce
110
+ # test failures related to randomization by passing the same `--seed` value
111
+ # as the one that triggered the failure.
112
+ Kernel.srand config.seed
113
+ =end
114
+ end
metadata CHANGED
@@ -1,94 +1,112 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootstrap-form
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Padilla
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-02 00:00:00.000000000 Z
11
+ date: 2019-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>'
17
+ - - ">"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.2'
19
+ version: '5.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>'
24
+ - - ">"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.2'
26
+ version: '5.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: actionpack
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>'
31
+ - - ">"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.2'
33
+ version: '5.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>'
38
+ - - ">"
39
39
  - !ruby/object:Gem::Version
40
- version: '3.2'
40
+ version: '5.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest
42
+ name: rspec-rails
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 4.7.5
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 4.7.5
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-html-matchers
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: rr
70
+ name: pry
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - '>='
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - '>='
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
- description: Twitter Bootstrap Form helpers
83
+ description: Bootstrap Form helpers
70
84
  email:
71
- - david@crowdint.com
85
+ - david@padilla.io
72
86
  executables: []
73
87
  extensions: []
74
88
  extra_rdoc_files: []
75
89
  files:
76
- - .gitignore
77
- - .travis.yml
90
+ - ".gitignore"
91
+ - ".gitlab-ci.yml"
92
+ - ".rspec"
93
+ - ".travis.yml"
78
94
  - Gemfile
79
- - Gemfile.rails.3.2
80
- - Gemfile.rails.4.0
95
+ - Gemfile.rails.5.0
96
+ - Gemfile.rails.6.0
81
97
  - LICENSE
82
98
  - README.md
83
99
  - Rakefile
84
- - bootsrap-form.gemspec
100
+ - bootstrap-form.gemspec
85
101
  - lib/bootstrap-form.rb
86
102
  - lib/bootstrap-form/form_helper.rb
87
103
  - lib/bootstrap-form/version.rb
88
- - test/lib/action_view/helpers/form_helper_test.rb
89
- - test/test_helper.rb
90
- homepage: ''
91
- licenses: []
104
+ - spec/helpers/bootstrap_control_group_wrap_spec.rb
105
+ - spec/helpers/form_helper_spec.rb
106
+ - spec/spec_helper.rb
107
+ homepage: https://rubygems.org/gems/bootstrap-form
108
+ licenses:
109
+ - MIT
92
110
  metadata: {}
93
111
  post_install_message:
94
112
  rdoc_options: []
@@ -96,20 +114,20 @@ require_paths:
96
114
  - lib
97
115
  required_ruby_version: !ruby/object:Gem::Requirement
98
116
  requirements:
99
- - - '>='
117
+ - - ">="
100
118
  - !ruby/object:Gem::Version
101
119
  version: '0'
102
120
  required_rubygems_version: !ruby/object:Gem::Requirement
103
121
  requirements:
104
- - - '>='
122
+ - - ">="
105
123
  - !ruby/object:Gem::Version
106
124
  version: '0'
107
125
  requirements: []
108
- rubyforge_project: bootstrap-form
109
- rubygems_version: 2.0.3
126
+ rubygems_version: 3.0.3
110
127
  signing_key:
111
128
  specification_version: 4
112
- summary: Twitter Bootstrap Form helpers
129
+ summary: Bootstrap Form helpers
113
130
  test_files:
114
- - test/lib/action_view/helpers/form_helper_test.rb
115
- - test/test_helper.rb
131
+ - spec/helpers/bootstrap_control_group_wrap_spec.rb
132
+ - spec/helpers/form_helper_spec.rb
133
+ - spec/spec_helper.rb
@@ -1,151 +0,0 @@
1
- require 'test_helper'
2
-
3
- class FormHelperTest < ActionView::TestCase
4
- def test_bootstrap_control_group_wrap
5
- object = mock
6
- errors = { :name => [] }
7
- options = { :object => object }
8
- content = ::ActiveSupport::SafeBuffer.new('content')
9
- stub(object).errors { errors }
10
- stub(object).name { 'Object Name' }
11
-
12
- expected_code = %{<div class="form-group"><label class="control-label" for="post_name">Name</label>content</div>}
13
- assert_equal expected_code, bootstrap_control_group_wrap(:post, :name, content, options)
14
- end
15
-
16
- def test_bootstrap_control_group_wrap_with_label
17
- object = mock
18
- errors = { :name => [] }
19
- options = { :object => object, :label => "Custom" }
20
- content = ::ActiveSupport::SafeBuffer.new('content')
21
- stub(object).errors { errors }
22
- stub(object).name { 'Object Name' }
23
-
24
- expected_code = %{<div class="form-group"><label class="control-label" for="post_name">Custom</label>content</div>}
25
- assert_equal expected_code, bootstrap_control_group_wrap(:post, :name, content, options)
26
- end
27
-
28
- def test_bootstrap_control_group_wrap_with_errors
29
- object = mock
30
- errors = { :name => ["can't be blank"] }
31
- options = { :object => object }
32
- content = ::ActiveSupport::SafeBuffer.new('content')
33
- stub(object).errors { errors }
34
- stub(object).name { 'Object Name' }
35
-
36
- expected_code = %{<div class="form-group has-error"><label class="control-label" for="post_name">Name</label>content<span class="help-block"> can't be blank</span></div>}
37
- assert_equal expected_code, bootstrap_control_group_wrap(:post, :name, content, options)
38
- end
39
-
40
- def test_bootstrap_control_group_wrap_with_many_errors
41
- object = mock
42
- errors = { :name => ["has already been taken", "is reserved", "must be odd"] }
43
- options = { :object => object }
44
- content = ::ActiveSupport::SafeBuffer.new('content')
45
- stub(object).errors { errors }
46
- stub(object).name { 'Object Name' }
47
-
48
- expected_code = %{<div class="form-group has-error"><label class="control-label" for="post_name">Name</label>content<span class="help-block"> has already been taken, is reserved, and must be odd</span></div>}
49
- assert_equal expected_code, bootstrap_control_group_wrap(:post, :name, content, options)
50
- end
51
-
52
- def test_bootstrap_control_group_wrap_with_hint
53
- object = mock
54
- errors = {}
55
- options = { :object => object, :hint => "format matters" }
56
- content = ::ActiveSupport::SafeBuffer.new('content')
57
- stub(object).errors { errors }
58
- stub(object).name { 'Object Name' }
59
-
60
- expected_code = %{<div class="form-group"><label class="control-label" for="post_name">Name</label>content<span class="help-block"> format matters</span></div>}
61
- assert_equal expected_code, bootstrap_control_group_wrap(:post, :name, content, options)
62
- end
63
-
64
- def test_bootstrap_control_group_wrap_with_hint_and_errors
65
- object = mock
66
- errors = { :name => ["can't be blank"] }
67
- options = { :object => object, :hint => "format matters" }
68
- content = ::ActiveSupport::SafeBuffer.new('content')
69
- stub(object).errors { errors }
70
- stub(object).name { 'Object Name' }
71
-
72
- expected_code = %{<div class="form-group has-error"><label class="control-label" for="post_name">Name</label>content<span class="help-block"> can't be blank</span></div>}
73
- assert_equal expected_code, bootstrap_control_group_wrap(:post, :name, content, options)
74
- end
75
-
76
- def test_bootstrap_text_field
77
- html, text_field = mock, mock
78
- options = { :object => mock }
79
-
80
- mock(self).text_field(:post, :name, options) { text_field }
81
- mock(self).bootstrap_control_group_wrap(:post, :name, text_field, options.dup) { html }
82
- assert_equal html, bootstrap_text_field(:post, :name, options)
83
- end
84
-
85
- def test_bootstrap_email_field
86
- html, email_field = mock, mock
87
- options = { :object => mock }
88
-
89
- mock(self).email_field(:post, :email, options) { email_field }
90
- mock(self).bootstrap_control_group_wrap(:post, :email, email_field, options.dup) { html }
91
- assert_equal html, bootstrap_email_field(:post, :email, options)
92
- end
93
-
94
- def test_bootstrap_password_field
95
- html, password_field = mock, mock
96
- options = { :object => mock }
97
-
98
- mock(self).password_field(:post, :password, options) { password_field }
99
- mock(self).bootstrap_control_group_wrap(:post, :password, password_field, options.dup) { html }
100
- assert_equal html, bootstrap_password_field(:post, :password, options)
101
- end
102
-
103
- def test_bootstrap_collection_select
104
- html, collection_select_html, collection, object = mock, mock, mock, mock
105
- options = { :object => mock }
106
-
107
- mock(self).collection_select(:post, :name, collection, :id, :name, options, {}) { collection_select_html }
108
- mock(self).bootstrap_control_group_wrap(:post, :name, collection_select_html, options.dup) { html }
109
-
110
- assert_equal html, bootstrap_collection_select(:post, :name, collection, :id ,:name, options)
111
- end
112
-
113
- def test_bootstrap_select
114
- choices, select_html, html = mock, mock, mock
115
- options = { :object => mock }
116
-
117
- mock(self).select(:post, :name, choices, options, {}) { select_html }
118
- mock(self).bootstrap_control_group_wrap(:post, :name, select_html, options.dup) { html }
119
-
120
- assert_equal html, bootstrap_select(:post, :name, choices, options, {})
121
- end
122
-
123
- def test_bootstrap_file_field
124
- html, text_field = mock, mock
125
- options = { :object => mock }
126
-
127
- mock(self).file_field(:post, :attachment, options) { text_field }
128
- mock(self).bootstrap_control_group_wrap(:post, :attachment, text_field, options.dup) { html }
129
- assert_equal html, bootstrap_file_field(:post, :attachment, options)
130
- end
131
-
132
- def test_bootstrap_text_area
133
- html, text_area = mock, mock
134
- options = { :object => mock }
135
-
136
- mock(self).text_area(:post, :description, options) { text_area }
137
- mock(self).bootstrap_control_group_wrap(:post, :description, text_area, options.dup) { html }
138
- assert_equal html, bootstrap_text_area(:post, :description, options)
139
- end
140
-
141
- def test_ignore_bootstrap_options
142
- html, text_area = mock, mock
143
- options = { :object => mock, :label => "Custom", :hint => "be careful" }
144
-
145
- mock(self).text_area(:post, :description, options.except(:label, :hint)) { text_area }
146
- mock(self).bootstrap_control_group_wrap(:post, :description, text_area, options.dup) { html }
147
- assert_equal html, bootstrap_text_area(:post, :description, options)
148
- end
149
-
150
-
151
- end
@@ -1,26 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
-
4
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
- $LOAD_PATH.unshift(File.dirname(__FILE__))
6
-
7
- ENV["RAILS_ENV"] = "test"
8
-
9
- require 'minitest/autorun'
10
- require 'rails'
11
- require 'action_controller'
12
- require 'action_view'
13
- require 'rails/test_help'
14
- require 'bootstrap-form'
15
- require 'rr'
16
-
17
- module BootstrapForm
18
- class Application < Rails::Application ; end
19
- end
20
-
21
- BootstrapForm::Application.routes.draw do
22
- get '/:controller(/:action(/:id))'
23
- end
24
- BootstrapForm::Application.config.secret_key_base = 'bootstrap'
25
-
26
- ActionController::Base.send :include, BootstrapForm::Application.routes.url_helpers