railsstrap 3.3.1 → 3.3.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|