sal-engine 0.0.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +39 -7
- data/app/helpers/sal/application_helper.rb +15 -4
- data/lib/sal/version.rb +1 -1
- data/spec/dummy/config/initializers/assets.rb +1 -1
- data/spec/helpers/application_helper_spec.rb +29 -6
- metadata +42 -46
- data/spec/dummy/log/test.log +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 568b9f369eef36d4fa28a32eb7841b1875a33623df118bb18c353c277961ad25
|
4
|
+
data.tar.gz: 89bc876c17241f10524f1871c26a75e1feee5aa2623dc047c73501586c8a56ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa7bf9ca3ccae49be4505cbb9dcc32509b155c544c251e87ed29bdb3e3260322bc1fc6e210dcf7c386abe50ebf418f403a3aeffbac45ef4cf5f1177d887677a4
|
7
|
+
data.tar.gz: 81bcd86e3ef229ef091f8f4aa0c1d3d6790756a636dc768a0aa68d0b058d1f814170f29e198ad3057c10d650f1cafed7b2f834f6b8d55981c0d99284c0f41f5b
|
data/README.md
CHANGED
@@ -35,20 +35,22 @@ When providing both, `notice` will prevail.
|
|
35
35
|
## menu_item helper
|
36
36
|
Very handy for navigation menus:
|
37
37
|
```erb
|
38
|
-
<%= menu_item 'first' %>First option<% end %>
|
39
|
-
<%= menu_item 'second', :div %><%= link_to root_path, 'Second option' %><% end %>
|
38
|
+
<%= menu_item 'first' do %>First option<% end %>
|
39
|
+
<%= menu_item 'second', tag: :div do %><%= link_to root_path, 'Second option' %><% end %>
|
40
|
+
<%= menu_item 'third', class: 'nav-link' do %>Third option<% end %>
|
40
41
|
```
|
41
42
|
|
42
43
|
Renders:
|
43
44
|
```html
|
44
45
|
<li class="active">First option<li>
|
45
46
|
<div><a href="/">Second option</a><div>
|
47
|
+
<li class="nav-link">Third option</li>
|
46
48
|
```
|
47
49
|
|
48
50
|
Parameters:
|
49
|
-
`menu_item(item,
|
51
|
+
`menu_item(item, options)`
|
50
52
|
- item: item name
|
51
|
-
-
|
53
|
+
- options: a has of options such as :class, etc… An additional option :tag is provided in case you don't want to use LI as default
|
52
54
|
|
53
55
|
## errors_bar helper
|
54
56
|
Will indicate if any model in your form has an error. It supports multiple models
|
@@ -67,17 +69,47 @@ Parameters:
|
|
67
69
|
- model: an active record model, or tableless
|
68
70
|
- model2: you can provide more than one
|
69
71
|
|
72
|
+
The string `Please correct the highlighted fields.` is localized as `errors_bar_message`
|
73
|
+
into English, French, German, Italian, Portuguese and Spanish. You can override
|
74
|
+
this in your app if you need to, editing your locale yml files.
|
75
|
+
|
70
76
|
## Error messages
|
71
77
|
I like to put the error messages right after the field in the form.
|
72
|
-
|
73
|
-
|
78
|
+
sal provides an initializer that will patch ActionView::Base to wrap the field
|
79
|
+
with the extra markup and the error message.
|
80
|
+
|
81
|
+
Given a model with a field:
|
82
|
+
```erb
|
83
|
+
<%= text_field_tag :title %>
|
84
|
+
```
|
85
|
+
that renders this simple view:
|
86
|
+
```html
|
87
|
+
<input type="text" name="title">
|
88
|
+
```
|
89
|
+
|
90
|
+
Then it will add this extra HTML on an error:
|
74
91
|
```html
|
75
92
|
<div class="has-error">
|
76
93
|
<input type="text" name="title">
|
77
|
-
<span class="help-block"
|
94
|
+
<span class="help-block">✖ can't be blank</span>
|
78
95
|
</div>
|
79
96
|
```
|
80
97
|
|
98
|
+
It plays nice with Bootstrap forms. You won't have to touch any CSS.
|
99
|
+
- Plain text fields:
|
100
|
+
```erb
|
101
|
+
<div class="form-group">
|
102
|
+
<%= f.label :password, 'Password' %>
|
103
|
+
<%= f.password_field :password, :class => 'form-control' %>
|
104
|
+
</div>
|
105
|
+
```
|
106
|
+
- Checkboxes. Use this code for proper margin and alignment:
|
107
|
+
```erb
|
108
|
+
<div class="form-group checkbox">
|
109
|
+
<%= f.label :conditions, "#{f.check_box(:conditions)}I accept the terms and conditions".html_safe, :class => 'checkbox' %>
|
110
|
+
</div>
|
111
|
+
```
|
112
|
+
|
81
113
|
## Generators
|
82
114
|
Rails generators are very useful in the initial stages of development to create your admin interfaces.
|
83
115
|
In particular:
|
@@ -3,8 +3,15 @@ module Sal
|
|
3
3
|
def errors_bar(*entities)
|
4
4
|
entities = Array(entities)
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
messages = entities.map { |entity| entity.errors.select { |error| error.attribute == :base }.map(&:to_s).map(&:capitalize) }.flatten
|
7
|
+
|
8
|
+
# is there any non-base error?
|
9
|
+
if entities.detect { |entity| entity.errors.detect { |error| error.attribute != :base } }
|
10
|
+
messages << t(:errors_bar_message)
|
11
|
+
end
|
12
|
+
|
13
|
+
if messages.any?
|
14
|
+
content_tag :div, messages.join("\n"), class: 'alert alert-danger'
|
8
15
|
end
|
9
16
|
end
|
10
17
|
|
@@ -16,8 +23,12 @@ module Sal
|
|
16
23
|
end
|
17
24
|
end
|
18
25
|
|
19
|
-
def menu_item(item,
|
20
|
-
|
26
|
+
def menu_item(item, options = {})
|
27
|
+
tag = options.delete(:tag) || 'li'
|
28
|
+
if section == item
|
29
|
+
klass = options[:class].to_s.split(' ').push('active').join(' ')
|
30
|
+
options[:class] = klass
|
31
|
+
end
|
21
32
|
content_tag tag, options do
|
22
33
|
yield
|
23
34
|
end
|
data/lib/sal/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Be sure to restart your server when you modify this file.
|
2
2
|
|
3
3
|
# Version of your assets, change this if you want to expire all your assets.
|
4
|
-
Rails.application.config.assets.version = '1.0'
|
4
|
+
#Rails.application.config.assets.version = '1.0'
|
5
5
|
|
6
6
|
# Precompile additional assets.
|
7
7
|
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
@@ -4,8 +4,12 @@ describe ApplicationHelper do
|
|
4
4
|
|
5
5
|
describe '#errors_bar' do
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
# Mocking ActiveRecord error format:
|
8
|
+
# - errors are presented as arrays
|
9
|
+
# - no errors in a category returns an empty array
|
10
|
+
let(:without) { double(errors: {base: []}) }
|
11
|
+
let(:with) { double(errors: {base: ['base error']}) }
|
12
|
+
let(:with_non_base) { double(errors: {base: [], email: ['is invalid']}) }
|
9
13
|
let(:text) { 'Please correct the highlighted fields.' }
|
10
14
|
|
11
15
|
context 'no errors' do
|
@@ -16,9 +20,12 @@ describe ApplicationHelper do
|
|
16
20
|
|
17
21
|
context 'errors' do
|
18
22
|
|
19
|
-
it { expect(helper.errors_bar(with)).to have_selector('div.alert.alert-danger', text:
|
20
|
-
it { expect(helper.errors_bar(with, without)).to have_selector('div.alert.alert-danger', text:
|
21
|
-
it { expect(helper.errors_bar(with,
|
23
|
+
it { expect(helper.errors_bar(with)).to have_selector('div.alert.alert-danger', text: 'Base error') }
|
24
|
+
it { expect(helper.errors_bar(with, without)).to have_selector('div.alert.alert-danger', text: 'Base error') }
|
25
|
+
it { expect(helper.errors_bar(with, with_non_base)).to have_selector('div.alert.alert-danger', text: "Base error\n#{text}") }
|
26
|
+
it { expect(helper.errors_bar(with_non_base, without)).to have_selector('div.alert.alert-danger', text: text) }
|
27
|
+
it { expect(helper.errors_bar(with, with)).to have_selector('div.alert.alert-danger', text: "Base error\nBase error") }
|
28
|
+
it { expect(helper.errors_bar(with_non_base, with, with)).to have_selector('div.alert.alert-danger', text: "Base error\nBase error\n#{text}") }
|
22
29
|
end
|
23
30
|
end
|
24
31
|
|
@@ -55,12 +62,28 @@ describe ApplicationHelper do
|
|
55
62
|
allow(helper).to receive(:section) { 'selected_list_item' }
|
56
63
|
end
|
57
64
|
|
58
|
-
context '
|
65
|
+
context 'tag is selected' do
|
59
66
|
let(:item) { 'selected_list_item' }
|
60
67
|
|
61
68
|
it { is_expected.to have_selector('li.active', 'content') }
|
62
69
|
end
|
63
70
|
|
71
|
+
context 'list item is selected' do
|
72
|
+
let(:item) { 'selected_list_item' }
|
73
|
+
|
74
|
+
it 'appends the active class' do
|
75
|
+
expect(helper.menu_item(item, tag: 'div') { 'content' }).to have_selector('div.active', 'content')
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context 'list item is selected and there are other options' do
|
80
|
+
let(:item) { 'selected_list_item' }
|
81
|
+
|
82
|
+
it 'appends the active class' do
|
83
|
+
expect(helper.menu_item(item, class: 'nav-item') { 'content' }).to have_selector('li.nav-item.active', 'content')
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
64
87
|
context 'list item is not selected' do
|
65
88
|
let(:item) { 'unselected_list_item' }
|
66
89
|
|
metadata
CHANGED
@@ -1,101 +1,101 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sal-engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Cruz Horts
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '7'
|
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: '
|
26
|
+
version: '7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: pry
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0.10'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pry-rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0.3'
|
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
54
|
version: '0.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: pry-byebug
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '1.3'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.3'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec-rails
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '3.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '3.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: capybara
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '2.4'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '2.4'
|
97
97
|
description: Sal (salt) is what you add to every meal. I add sal to my Rails projects
|
98
|
-
email:
|
98
|
+
email:
|
99
99
|
executables: []
|
100
100
|
extensions: []
|
101
101
|
extra_rdoc_files: []
|
@@ -153,7 +153,6 @@ files:
|
|
153
153
|
- spec/dummy/config/locales/en.yml
|
154
154
|
- spec/dummy/config/routes.rb
|
155
155
|
- spec/dummy/config/secrets.yml
|
156
|
-
- spec/dummy/log/test.log
|
157
156
|
- spec/dummy/public/404.html
|
158
157
|
- spec/dummy/public/422.html
|
159
158
|
- spec/dummy/public/500.html
|
@@ -167,7 +166,7 @@ homepage: https://github.com/dncrht/sal
|
|
167
166
|
licenses:
|
168
167
|
- MIT
|
169
168
|
metadata: {}
|
170
|
-
post_install_message:
|
169
|
+
post_install_message:
|
171
170
|
rdoc_options: []
|
172
171
|
require_paths:
|
173
172
|
- lib
|
@@ -182,50 +181,47 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
182
181
|
- !ruby/object:Gem::Version
|
183
182
|
version: '0'
|
184
183
|
requirements: []
|
185
|
-
|
186
|
-
|
187
|
-
signing_key:
|
184
|
+
rubygems_version: 3.1.6
|
185
|
+
signing_key:
|
188
186
|
specification_version: 4
|
189
187
|
summary: A Rails engine with my recurrent additions
|
190
188
|
test_files:
|
189
|
+
- spec/spec_helper.rb
|
190
|
+
- spec/dummy/app/models/tableless.rb
|
191
|
+
- spec/dummy/app/controllers/application_controller.rb
|
192
|
+
- spec/dummy/app/views/layouts/application.html.erb
|
191
193
|
- spec/dummy/app/assets/javascripts/application.js
|
192
194
|
- spec/dummy/app/assets/stylesheets/application.css
|
193
|
-
- spec/dummy/app/controllers/application_controller.rb
|
194
195
|
- spec/dummy/app/helpers/application_helper.rb
|
195
|
-
- spec/dummy/
|
196
|
-
- spec/dummy/app/views/layouts/application.html.erb
|
196
|
+
- spec/dummy/bin/rake
|
197
197
|
- spec/dummy/bin/bundle
|
198
198
|
- spec/dummy/bin/rails
|
199
|
-
- spec/dummy/
|
200
|
-
- spec/dummy/config/
|
201
|
-
- spec/dummy/config/
|
202
|
-
- spec/dummy/config/database.yml
|
203
|
-
- spec/dummy/config/environment.rb
|
204
|
-
- spec/dummy/config/environments/development.rb
|
199
|
+
- spec/dummy/config/secrets.yml
|
200
|
+
- spec/dummy/config/routes.rb
|
201
|
+
- spec/dummy/config/locales/en.yml
|
205
202
|
- spec/dummy/config/environments/production.rb
|
203
|
+
- spec/dummy/config/environments/development.rb
|
206
204
|
- spec/dummy/config/environments/test.rb
|
207
|
-
- spec/dummy/config/
|
205
|
+
- spec/dummy/config/environment.rb
|
206
|
+
- spec/dummy/config/application.rb
|
207
|
+
- spec/dummy/config/database.yml
|
208
|
+
- spec/dummy/config/boot.rb
|
208
209
|
- spec/dummy/config/initializers/backtrace_silencers.rb
|
209
|
-
- spec/dummy/config/initializers/cookies_serializer.rb
|
210
|
-
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
211
|
-
- spec/dummy/config/initializers/inflections.rb
|
212
210
|
- spec/dummy/config/initializers/mime_types.rb
|
211
|
+
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
213
212
|
- spec/dummy/config/initializers/session_store.rb
|
214
213
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
215
|
-
- spec/dummy/config/
|
216
|
-
- spec/dummy/config/
|
217
|
-
- spec/dummy/config/
|
214
|
+
- spec/dummy/config/initializers/assets.rb
|
215
|
+
- spec/dummy/config/initializers/cookies_serializer.rb
|
216
|
+
- spec/dummy/config/initializers/inflections.rb
|
218
217
|
- spec/dummy/config.ru
|
219
|
-
- spec/dummy/
|
220
|
-
- spec/dummy/public/
|
218
|
+
- spec/dummy/Rakefile
|
219
|
+
- spec/dummy/public/favicon.ico
|
221
220
|
- spec/dummy/public/422.html
|
222
221
|
- spec/dummy/public/500.html
|
223
|
-
- spec/dummy/public/
|
224
|
-
- spec/dummy/Rakefile
|
222
|
+
- spec/dummy/public/404.html
|
225
223
|
- spec/dummy/README.rdoc
|
224
|
+
- spec/rails_helper.rb
|
226
225
|
- spec/helpers/application_helper_spec.rb
|
227
226
|
- spec/helpers/error_span_spec.rb
|
228
227
|
- spec/helpers/error_span_view.html.erb
|
229
|
-
- spec/rails_helper.rb
|
230
|
-
- spec/spec_helper.rb
|
231
|
-
has_rdoc:
|
data/spec/dummy/log/test.log
DELETED
@@ -1,4 +0,0 @@
|
|
1
|
-
Rendered /Users/dani/Pasatiempos/ruby/sal/spec/helpers/error_span_view.html.erb (9.6ms)
|
2
|
-
Rendered /Users/dani/Pasatiempos/ruby/sal/spec/helpers/error_span_view.html.erb (11.2ms)
|
3
|
-
Rendered /Users/dani/Pasatiempos/ruby/sal/spec/helpers/error_span_view.html.erb (5.9ms)
|
4
|
-
Rendered /Users/dani/Pasatiempos/ruby/sal/spec/helpers/error_span_view.html.erb (5.6ms)
|