railsstrap 3.3.1 → 3.3.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/README.md +13 -27
- data/app/helpers/railsstrap/aside_helper.rb +59 -0
- data/app/helpers/railsstrap/badge_label_helper.rb +0 -4
- data/app/helpers/railsstrap/bootstrap_flash_helper.rb +1 -1
- data/app/helpers/railsstrap/date_picker_helper.rb +16 -8
- data/app/helpers/railsstrap/modal_helper.rb +18 -24
- data/lib/generators/railsstrap/install/templates/bootstrap_and_overrides.less +42 -26
- data/lib/railsstrap/constants.rb +1 -1
- data/lib/railsstrap/engine.rb +9 -5
- data/spec/lib/railsstrap/aside_helper_spec.rb +140 -0
- data/spec/lib/railsstrap/badge_label_helper_spec.rb +42 -0
- data/spec/lib/railsstrap/bootstrap_flash_helper_spec.rb +130 -0
- data/spec/lib/railsstrap/breadcrumbs_spec.rb +75 -0
- data/spec/lib/railsstrap/datepicker_helper_spec.rb +59 -0
- data/spec/lib/railsstrap/form_errors_helper_spec.rb +147 -0
- data/spec/lib/railsstrap/glyph_helper_spec.rb +24 -0
- data/spec/lib/railsstrap/icon_helper_spec.rb +24 -0
- data/spec/lib/railsstrap/modal_helper_spec.rb +140 -0
- data/spec/lib/railsstrap/navbar_helper_spec.rb +373 -0
- data/spec/lib/railsstrap/uri_state_spec.rb +49 -0
- data/spec/spec_helper.rb +20 -0
- data/vendor/assets/bower_components/bootstrap/Gruntfile.js +45 -8
- data/vendor/assets/bower_components/bootstrap/LICENSE +1 -1
- data/vendor/assets/bower_components/bootstrap/README.md +12 -9
- data/vendor/assets/bower_components/bootstrap/bower.json +1 -1
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.css +8 -2
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.css.map +1 -1
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap-theme.min.css +3 -3
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.css +257 -23
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.css.map +1 -1
- data/vendor/assets/bower_components/bootstrap/dist/css/bootstrap.min.css +3 -3
- data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
- data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +273 -214
- data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
- data/vendor/assets/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/vendor/assets/bower_components/bootstrap/dist/js/bootstrap.js +55 -69
- data/vendor/assets/bower_components/bootstrap/dist/js/bootstrap.min.js +4 -4
- data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
- data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg +273 -214
- data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
- data/vendor/assets/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/vendor/assets/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js +41 -0
- data/vendor/assets/bower_components/bootstrap/grunt/configBridge.json +1 -0
- data/vendor/assets/bower_components/bootstrap/grunt/sauce_browsers.yml +4 -4
- data/vendor/assets/bower_components/bootstrap/js/affix.js +4 -4
- data/vendor/assets/bower_components/bootstrap/js/alert.js +3 -3
- data/vendor/assets/bower_components/bootstrap/js/button.js +3 -3
- data/vendor/assets/bower_components/bootstrap/js/carousel.js +7 -10
- data/vendor/assets/bower_components/bootstrap/js/collapse.js +4 -4
- data/vendor/assets/bower_components/bootstrap/js/dropdown.js +3 -3
- data/vendor/assets/bower_components/bootstrap/js/modal.js +3 -3
- data/vendor/assets/bower_components/bootstrap/js/popover.js +7 -13
- data/vendor/assets/bower_components/bootstrap/js/scrollspy.js +3 -3
- data/vendor/assets/bower_components/bootstrap/js/tab.js +3 -3
- data/vendor/assets/bower_components/bootstrap/js/tooltip.js +10 -16
- data/vendor/assets/bower_components/bootstrap/js/transition.js +2 -2
- data/vendor/assets/bower_components/bootstrap/less/alerts.less +5 -0
- data/vendor/assets/bower_components/bootstrap/less/badges.less +4 -0
- data/vendor/assets/bower_components/bootstrap/less/button-groups.less +2 -2
- data/vendor/assets/bower_components/bootstrap/less/buttons.less +1 -1
- data/vendor/assets/bower_components/bootstrap/less/carousel.less +8 -6
- data/vendor/assets/bower_components/bootstrap/less/close.less +1 -0
- data/vendor/assets/bower_components/bootstrap/less/dropdowns.less +2 -1
- data/vendor/assets/bower_components/bootstrap/less/forms.less +41 -21
- data/vendor/assets/bower_components/bootstrap/less/glyphicons.less +67 -0
- data/vendor/assets/bower_components/bootstrap/less/jumbotron.less +1 -0
- data/vendor/assets/bower_components/bootstrap/less/media.less +14 -0
- data/vendor/assets/bower_components/bootstrap/less/mixins/vendor-prefixes.less +1 -1
- data/vendor/assets/bower_components/bootstrap/less/navbar.less +1 -0
- data/vendor/assets/bower_components/bootstrap/less/panels.less +5 -1
- data/vendor/assets/bower_components/bootstrap/less/popovers.less +1 -1
- data/vendor/assets/bower_components/bootstrap/less/tables.less +3 -3
- data/vendor/assets/bower_components/bootstrap/less/theme.less +3 -2
- data/vendor/assets/bower_components/bootstrap/less/tooltip.less +1 -1
- data/vendor/assets/bower_components/bootstrap/less/variables.less +3 -2
- data/vendor/assets/bower_components/bootstrap/package.json +14 -13
- data/vendor/assets/bower_components/jquery/bower.json +2 -2
- data/vendor/assets/bower_components/jquery/dist/jquery.js +277 -262
- data/vendor/assets/bower_components/jquery/dist/jquery.min.js +4 -4
- data/vendor/assets/bower_components/jquery/dist/jquery.min.map +1 -1
- data/vendor/assets/bower_components/jquery/src/ajax.js +11 -31
- data/vendor/assets/bower_components/jquery/src/ajax/xhr.js +3 -2
- data/vendor/assets/bower_components/jquery/src/attributes/attr.js +0 -2
- data/vendor/assets/bower_components/jquery/src/attributes/classes.js +4 -4
- data/vendor/assets/bower_components/jquery/src/attributes/prop.js +1 -3
- data/vendor/assets/bower_components/jquery/src/attributes/support.js +8 -8
- data/vendor/assets/bower_components/jquery/src/attributes/val.js +3 -5
- data/vendor/assets/bower_components/jquery/src/core.js +6 -7
- data/vendor/assets/bower_components/jquery/src/core/init.js +3 -3
- data/vendor/assets/bower_components/jquery/src/core/ready.js +1 -1
- data/vendor/assets/bower_components/jquery/src/css.js +28 -29
- data/vendor/assets/bower_components/jquery/src/css/addGetHookIf.js +2 -4
- data/vendor/assets/bower_components/jquery/src/css/curCSS.js +1 -1
- data/vendor/assets/bower_components/jquery/src/css/defaultDisplay.js +1 -1
- data/vendor/assets/bower_components/jquery/src/css/support.js +5 -0
- data/vendor/assets/bower_components/jquery/src/css/var/getStyles.js +8 -1
- data/vendor/assets/bower_components/jquery/src/data.js +10 -11
- data/vendor/assets/bower_components/jquery/src/data/Data.js +3 -3
- data/vendor/assets/bower_components/jquery/src/deferred.js +2 -2
- data/vendor/assets/bower_components/jquery/src/dimensions.js +1 -1
- data/vendor/assets/bower_components/jquery/src/effects.js +29 -30
- data/vendor/assets/bower_components/jquery/src/effects/Tween.js +7 -7
- data/vendor/assets/bower_components/jquery/src/event.js +5 -5
- data/vendor/assets/bower_components/jquery/src/event/ajax.js +13 -0
- data/vendor/assets/bower_components/jquery/src/exports/global.js +2 -2
- data/vendor/assets/bower_components/jquery/src/intro.js +8 -8
- data/vendor/assets/bower_components/jquery/src/jquery.js +1 -0
- data/vendor/assets/bower_components/jquery/src/manipulation.js +9 -11
- data/vendor/assets/bower_components/jquery/src/manipulation/support.js +6 -5
- data/vendor/assets/bower_components/jquery/src/offset.js +9 -6
- data/vendor/assets/bower_components/jquery/src/queue.js +3 -3
- data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.js +83 -60
- data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.js +3 -3
- data/vendor/assets/bower_components/jquery/src/sizzle/dist/sizzle.min.map +1 -1
- data/vendor/assets/bower_components/jquery/src/traversing.js +3 -4
- data/vendor/assets/bower_components/jquery/src/wrap.js +1 -0
- data/vendor/assets/stylesheets/aside/aside.less +18 -2
- data/vendor/assets/stylesheets/bootstrap.less +2 -0
- data/vendor/assets/stylesheets/dist/railsstrap.css +28 -6
- data/vendor/assets/stylesheets/fontawesome-local.less +15 -0
- data/vendor/assets/stylesheets/glyphicons.less +12 -0
- metadata +278 -7
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
require 'action_view'
|
|
4
|
+
require 'active_support'
|
|
5
|
+
require_relative '../../../app/helpers/railsstrap/badge_label_helper'
|
|
6
|
+
|
|
7
|
+
include ActionView::Helpers
|
|
8
|
+
include ActionView::Context
|
|
9
|
+
include Railsstrap::BadgeLabelHelper
|
|
10
|
+
|
|
11
|
+
describe Railsstrap::BadgeLabelHelper, :type => :helper do
|
|
12
|
+
it 'should return a basic railsstrap badge' do
|
|
13
|
+
expect(badge('New!').gsub(/\s/, '').downcase)
|
|
14
|
+
.to eql(BASIC_BADGE.gsub(/\s/, '').downcase)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'should return a railsstrap badge with class' do
|
|
18
|
+
expect(badge('2', :warning).gsub(/\s/, '').downcase)
|
|
19
|
+
.to eql(BADGE_WITH_CLASS.gsub(/\s/, '').downcase)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'should take a Number as its first parameter' do
|
|
23
|
+
expect(badge(12).gsub(/\s/, '').downcase).to eql(BADGE_WITH_NUMBER_PARAM.gsub(/\s/, '').downcase)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
BASIC_BADGE = <<-HTML
|
|
29
|
+
<span class="badge">New!</span>
|
|
30
|
+
HTML
|
|
31
|
+
|
|
32
|
+
BADGE_WITH_CLASS = <<-HTML
|
|
33
|
+
<span class="badge badge-warning">2</span>
|
|
34
|
+
HTML
|
|
35
|
+
|
|
36
|
+
BADGE_WITH_NUMBER_PARAM = <<-HTML
|
|
37
|
+
<span class="badge">12</span>
|
|
38
|
+
HTML
|
|
39
|
+
|
|
40
|
+
LABEL_WITH_NUMBER_PARAM = <<-HTML
|
|
41
|
+
<label class="badge">42</label>
|
|
42
|
+
HTML
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
require_relative '../../../app/helpers/railsstrap/bootstrap_flash_helper'
|
|
4
|
+
|
|
5
|
+
include ActionView::Helpers
|
|
6
|
+
include Railsstrap::BootstrapFlashHelper
|
|
7
|
+
|
|
8
|
+
describe Railsstrap::BootstrapFlashHelper, :type => :helper do
|
|
9
|
+
describe 'bootstrap_flash' do
|
|
10
|
+
let(:flash) { ActionDispatch::Flash::FlashHash.new }
|
|
11
|
+
before { allow(self).to receive(:flash).and_return flash }
|
|
12
|
+
|
|
13
|
+
context 'when type is :notice' do
|
|
14
|
+
before { flash[:notice] = 'success flash' }
|
|
15
|
+
|
|
16
|
+
it 'should return a success flash message' do
|
|
17
|
+
expect(bootstrap_flash.gsub(/\s/, '').downcase)
|
|
18
|
+
.to eql(BASIC_SUCCESS_FLASH.gsub(/\s/, '').downcase)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context 'when type is :alert' do
|
|
23
|
+
before { flash[:alert] = 'danger flash' }
|
|
24
|
+
|
|
25
|
+
it 'should return a danger flash message' do
|
|
26
|
+
expect(bootstrap_flash.gsub(/\s/, '').downcase)
|
|
27
|
+
.to eql(BASIC_DANGER_FLASH.gsub(/\s/, '').downcase)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context 'when type is :error' do
|
|
32
|
+
before { flash[:error] = 'danger flash' }
|
|
33
|
+
|
|
34
|
+
it 'should return a danger flash message' do
|
|
35
|
+
expect(bootstrap_flash.gsub(/\s/, '').downcase)
|
|
36
|
+
.to eql(BASIC_DANGER_FLASH.gsub(/\s/, '').downcase)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context 'when class is set' do
|
|
41
|
+
before { flash[:notice] = 'success flash' }
|
|
42
|
+
|
|
43
|
+
it 'should display the class' do
|
|
44
|
+
expect(bootstrap_flash({class: 'success-class'}).gsub(/\s/, '').downcase)
|
|
45
|
+
.to eql(BASIC_SUCCESS_FLASH_WITH_CLASS.gsub(/\s/, '').downcase)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
context 'when animation is set' do
|
|
50
|
+
before { flash[:notice] = 'success flash' }
|
|
51
|
+
|
|
52
|
+
it 'should display the animation class' do
|
|
53
|
+
expect(bootstrap_flash({animation: 'flip-x'}).gsub(/\s/, '').downcase)
|
|
54
|
+
.to eql(BASIC_SUCCESS_FLASH_WITH_ANIMATION.gsub(/\s/, '').downcase)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
context 'when container_tag is set' do
|
|
59
|
+
before { flash[:notice] = 'success flash' }
|
|
60
|
+
it 'should use a span for the container' do
|
|
61
|
+
expect(bootstrap_flash({container_tag: :span}).gsub(/\s/, '').downcase)
|
|
62
|
+
.to eql(BASIC_SUCCESS_FLASH_WITH_SPAN.gsub(/\s/, '').downcase)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
context 'when show_button is set to false' do
|
|
67
|
+
before { flash[:notice] = 'success flash' }
|
|
68
|
+
it 'should not output a close button' do
|
|
69
|
+
expect(bootstrap_flash({show_close: false}).gsub(/\s/, '').downcase)
|
|
70
|
+
.to eql(BASIC_SUCCESS_WITHOUT_BUTTON.gsub(/\s/, '').downcase)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
context 'when html is set in the message' do
|
|
75
|
+
before { flash[:notice] = 'success flash <a href="#">Link</a>' }
|
|
76
|
+
it 'should output the html' do
|
|
77
|
+
expect(bootstrap_flash.gsub(/\s/, '').downcase)
|
|
78
|
+
.to eql(BASIC_SUCCESS_WITH_HTML.gsub(/\s/, '').downcase)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
BASIC_DANGER_FLASH = <<-HTML
|
|
86
|
+
<div class="alert fade in alert-danger">
|
|
87
|
+
<button type="button" class="close" data-dismiss="alert">×</button>danger flash
|
|
88
|
+
</div>
|
|
89
|
+
HTML
|
|
90
|
+
|
|
91
|
+
BASIC_SUCCESS_FLASH = <<-HTML
|
|
92
|
+
<div class="alert fade in alert-success">
|
|
93
|
+
<button type="button" class="close" data-dismiss="alert">×</button>success flash
|
|
94
|
+
</div>
|
|
95
|
+
HTML
|
|
96
|
+
|
|
97
|
+
BASIC_SUCCESS_WITH_HTML = <<-HTML
|
|
98
|
+
<div class="alert fade in alert-success">
|
|
99
|
+
<button type="button" class="close" data-dismiss="alert">×</button>success flash
|
|
100
|
+
<a href="#">Link</a>
|
|
101
|
+
</div>
|
|
102
|
+
HTML
|
|
103
|
+
|
|
104
|
+
BASIC_SUCCESS_WITHOUT_BUTTON = <<-HTML
|
|
105
|
+
<div class="alert fade in alert-success">
|
|
106
|
+
success flash
|
|
107
|
+
</div>
|
|
108
|
+
HTML
|
|
109
|
+
|
|
110
|
+
BASIC_SUCCESS_FLASH_WITH_CLASS = <<-HTML
|
|
111
|
+
<div class="alert fade in alert-success success-class">
|
|
112
|
+
<button type="button" class="close" data-dismiss="alert">×</button>success flash
|
|
113
|
+
</div>
|
|
114
|
+
HTML
|
|
115
|
+
|
|
116
|
+
BASIC_SUCCESS_FLASH_WITH_ANIMATION = <<-HTML
|
|
117
|
+
<div class="alert flip-x alert-success">
|
|
118
|
+
<button type="button" class="close" data-dismiss="alert">×</button>success flash
|
|
119
|
+
</div>
|
|
120
|
+
HTML
|
|
121
|
+
|
|
122
|
+
BASIC_SUCCESS_FLASH_WITH_SPAN = <<-HTML
|
|
123
|
+
<span class="alert fade in alert-success">
|
|
124
|
+
<button type="button" class="close" data-dismiss="alert">×</button>success flash
|
|
125
|
+
</span>
|
|
126
|
+
HTML
|
|
127
|
+
|
|
128
|
+
BLOCK_FLASH = <<-HTML
|
|
129
|
+
<span>wat</span>
|
|
130
|
+
HTML
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require_relative '../../../app/helpers/railsstrap/breadcrumbs'
|
|
3
|
+
|
|
4
|
+
describe Railsstrap::Breadcrumbs do
|
|
5
|
+
class TestModel
|
|
6
|
+
include ActiveModel::Model
|
|
7
|
+
|
|
8
|
+
def to_s
|
|
9
|
+
'test_model'
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class BaseTestController < AbstractController::Base
|
|
14
|
+
include Railsstrap::Breadcrumbs
|
|
15
|
+
include AbstractController::Callbacks
|
|
16
|
+
include AbstractController::UrlFor
|
|
17
|
+
|
|
18
|
+
add_breadcrumb 'base', '/base'
|
|
19
|
+
add_breadcrumb :base_i18n, '/base_i18n'
|
|
20
|
+
|
|
21
|
+
def breadcrumbs
|
|
22
|
+
@breadcrumbs
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class TestController < BaseTestController
|
|
27
|
+
add_breadcrumb 'class', '/class'
|
|
28
|
+
add_breadcrumb :class_i18n, '/class_i18n'
|
|
29
|
+
|
|
30
|
+
def show
|
|
31
|
+
add_breadcrumb 'instance', '/instance'
|
|
32
|
+
add_breadcrumb :instance_i18n, '/instance_i18n'
|
|
33
|
+
|
|
34
|
+
test_model = TestModel.new
|
|
35
|
+
add_breadcrumb test_model
|
|
36
|
+
|
|
37
|
+
add_breadcrumb :symbolized
|
|
38
|
+
add_breadcrumb :show
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def symbolized_path
|
|
42
|
+
'/symbolized'
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_models_path
|
|
46
|
+
'/test_model'
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
before do
|
|
51
|
+
options = { :scope => [:breadcrumbs, 'test'] }
|
|
52
|
+
[:class_i18n, :instance_i18n, :show, :symbolized].each do |name|
|
|
53
|
+
I18n.expects(:t).with(name, options).returns(name.to_s)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
name = :base_i18n
|
|
57
|
+
options = { :scope => [:breadcrumbs, 'base_test'] }
|
|
58
|
+
I18n.expects(:t).with(name, options).returns(name)
|
|
59
|
+
|
|
60
|
+
@controller = TestController.new
|
|
61
|
+
@controller.process(:show)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'has breadcrumbs' do
|
|
65
|
+
[:base, :base_i18n, :class, :class_i18n, :instance, :instance_i18n, :test_model, :symbolized].each do |name|
|
|
66
|
+
path = "/#{name}"
|
|
67
|
+
idx = @controller.breadcrumbs.index { |b| b[:name] == name.to_s && b[:url] == path }
|
|
68
|
+
expect(idx).to be, -> { name }
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
idx = @controller.breadcrumbs.index { |b| b[:name] == "show" && b[:url] == '' }
|
|
72
|
+
expect(idx).to be
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'action_view'
|
|
3
|
+
require 'active_support'
|
|
4
|
+
require 'spec_helper'
|
|
5
|
+
|
|
6
|
+
include ActionView::Helpers
|
|
7
|
+
include ActionView::Context
|
|
8
|
+
|
|
9
|
+
require_relative '../../../app/helpers/railsstrap/date_picker_helper'
|
|
10
|
+
include Railsstrap::DatePickerHelper
|
|
11
|
+
describe Railsstrap::DatePickerHelper, :type => :helper do
|
|
12
|
+
|
|
13
|
+
it 'should render a date_picker html block' do
|
|
14
|
+
expect(date_picker.gsub(/\s/, ''))
|
|
15
|
+
.to eql(DEFAULT_DATEPICKER.gsub(/\s/, ''))
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'should override default options' do
|
|
19
|
+
expect(date_picker({id: 'testing'}).gsub(/\s/, ''))
|
|
20
|
+
.to eql(DATEPICKER_ID_CHANGED.gsub(/\s/, ''))
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should render a script tag' do
|
|
24
|
+
expect(date_picker_javascript.gsub(/\s/, ''))
|
|
25
|
+
.to eql(DEFAULT_JS_DATEPICKER.gsub(/\s/, ''))
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'date_picker_javascript should accept a hash of options' do
|
|
29
|
+
expect(date_picker_javascript({language: 'ru'}).gsub(/\s/, ''))
|
|
30
|
+
.to eql(DEFAULT_JS_DATEPICKER_OPTIONS.gsub(/\s/, ''))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
DEFAULT_DATEPICKER = <<-HTML
|
|
36
|
+
<div id="date_picker" class="input-group date" data-datepicker="true" data-date-language="en">
|
|
37
|
+
<input type="text" name="date_picker" id="date_picker" value="" class="form-control" />
|
|
38
|
+
<span class="input-group-addon">
|
|
39
|
+
<i class="fa fa-calendar"></i>
|
|
40
|
+
</span>
|
|
41
|
+
</div>
|
|
42
|
+
HTML
|
|
43
|
+
|
|
44
|
+
DATEPICKER_ID_CHANGED = <<-HTML
|
|
45
|
+
<div id="testing" class="input-group date" data-datepicker="true" data-date-language="en">
|
|
46
|
+
<input type="text" name="date_picker" id="date_picker" value="" class="form-control" />
|
|
47
|
+
<span class="input-group-addon">
|
|
48
|
+
<i class="fa fa-calendar"></i>
|
|
49
|
+
</span>
|
|
50
|
+
</div>
|
|
51
|
+
HTML
|
|
52
|
+
|
|
53
|
+
DEFAULT_JS_DATEPICKER = <<-HTML
|
|
54
|
+
<script>//<![CDATA[(function($){$('[data-datepicker=\"true\"]').datetimepicker({\"selector\":\"[data-datepicker=\\\"true\\\"]\",\"language\":\"en\",\"icons\":{\"time\":\"fafa-clock-o\",\"date\":\"fafa-calendar\",\"up\":\"fafa-chevron-up\",\"down\":\"fafa-chevron-down\"}});})(jQuery);//]]></script>
|
|
55
|
+
HTML
|
|
56
|
+
|
|
57
|
+
DEFAULT_JS_DATEPICKER_OPTIONS = <<-HTML
|
|
58
|
+
<script>//<![CDATA[(function($){$('[data-datepicker=\"true\"]').datetimepicker({\"selector\":\"[data-datepicker=\\\"true\\\"]\",\"language\":\"ru\",\"icons\":{\"time\":\"fafa-clock-o\",\"date\":\"fafa-calendar\",\"up\":\"fafa-chevron-up\",\"down\":\"fafa-chevron-down\"}});})(jQuery);//]]></script>
|
|
59
|
+
HTML
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
require 'action_view'
|
|
4
|
+
require 'active_support'
|
|
5
|
+
require 'rspec/active_model/mocks'
|
|
6
|
+
|
|
7
|
+
require_relative '../../../app/helpers/railsstrap/form_errors_helper'
|
|
8
|
+
|
|
9
|
+
include ActionView::Helpers
|
|
10
|
+
include ActionView::Context
|
|
11
|
+
include Railsstrap::FormErrorsHelper
|
|
12
|
+
|
|
13
|
+
describe Railsstrap::FormErrorsHelper, :type => :helper do
|
|
14
|
+
|
|
15
|
+
before do
|
|
16
|
+
@base_errors = ['base error message', 'nasty error']
|
|
17
|
+
@base_error = 'one base error'
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@title_errors = ["can't be blank", 'is too short (minimum is 5 characters)']
|
|
21
|
+
@title_error = "can't be blank"
|
|
22
|
+
|
|
23
|
+
@errors = double('errors')
|
|
24
|
+
@new_post = mock_model( 'Post' )
|
|
25
|
+
allow(@new_post).to receive_messages(:errors => @errors)
|
|
26
|
+
allow(self).to receive_messages(:post_path => '/post/1')
|
|
27
|
+
allow(self).to receive_messages(:protect_against_forgery? => false)
|
|
28
|
+
allow(self).to receive_messages(:polymorphic_path => '')
|
|
29
|
+
|
|
30
|
+
@default_class = 'help-block'
|
|
31
|
+
@default_error_class = 'has-error'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
describe 'error[:base] is a string' do
|
|
36
|
+
|
|
37
|
+
before do
|
|
38
|
+
allow(@errors).to receive(:[]).with(:base).and_return(@base_error)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'should render base error on :base key' do
|
|
42
|
+
form_for(@new_post) do |builder|
|
|
43
|
+
expect(builder.error_span(:base)).to have_tag("div.#{@default_error_class}") do
|
|
44
|
+
with_tag("span.#{@default_class}", :text => @base_error)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe 'when there is only one error on base' do
|
|
52
|
+
|
|
53
|
+
before do
|
|
54
|
+
allow(@errors).to receive(:[]).with(:base).and_return(@base_error)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'should render base error on :base key' do
|
|
58
|
+
form_for(@new_post) do |builder|
|
|
59
|
+
expect(builder.error_span(:base)).to have_tag("div.#{@default_error_class}") do
|
|
60
|
+
with_tag("span.#{@default_class}", :text => @base_error)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe 'when there is only one error on title' do
|
|
68
|
+
|
|
69
|
+
before do
|
|
70
|
+
allow(@errors).to receive(:[]).with(:title).and_return(@title_error)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'should render base errors join with comma' do
|
|
74
|
+
form_for(@new_post) do |builder|
|
|
75
|
+
expect(builder.error_span(:title)).to have_tag("div.#{@default_error_class}") do
|
|
76
|
+
with_tag("span.#{@default_class}", :text => @title_error)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
describe 'when there is more than one error on title' do
|
|
85
|
+
|
|
86
|
+
before do
|
|
87
|
+
allow(@errors).to receive(:[]).with(:title).and_return(@title_errors)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'should render base errors join with comma' do
|
|
91
|
+
form_for(@new_post) do |builder|
|
|
92
|
+
expect(builder.error_span(:title)).to have_tag("div.#{@default_error_class}") do
|
|
93
|
+
with_tag("span.#{@default_class}", :text => @title_errors.join(', '))
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
describe 'when there are no errors' do
|
|
101
|
+
before do
|
|
102
|
+
allow(@errors).to receive(:[]).with(:title).and_return(nil)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it 'should return nil' do
|
|
106
|
+
form_for(@new_post) do |builder|
|
|
107
|
+
expect(builder.error_span(:title)).to be_nil
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
describe 'when :error_class option is passed' do
|
|
113
|
+
let(:error_class) { 'has_warning' }
|
|
114
|
+
|
|
115
|
+
before do
|
|
116
|
+
allow(@errors).to receive(:[]).with(:title).and_return(@title_error)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "should render with passed error class " do
|
|
120
|
+
form_for(@new_post) do |builder|
|
|
121
|
+
expect(builder.error_span(:title, :error_class => error_class))
|
|
122
|
+
.to have_tag("div.#{error_class}") do
|
|
123
|
+
with_tag("span.#{@default_class}", :text => @title_error)
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
describe 'when :error_class option is passed' do
|
|
130
|
+
let(:span_class) { 'help-inline' }
|
|
131
|
+
|
|
132
|
+
before do
|
|
133
|
+
allow(@errors).to receive(:[]).with(:title).and_return(@title_error)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it "should render with passed error class " do
|
|
137
|
+
form_for(@new_post) do |builder|
|
|
138
|
+
expect(builder.error_span(:title, :span_class => span_class))
|
|
139
|
+
.to have_tag("div.#{@default_error_class}") do
|
|
140
|
+
with_tag("span.#{span_class}", :text => @title_error)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
end
|