record_collection 0.6.1 → 0.7.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 +4 -4
- data/app/assets/javascripts/record_collection/optionals.js.coffee +1 -0
- data/app/assets/stylesheets/record_collection/optionals.css.sass +6 -0
- data/lib/record_collection/base.rb +4 -0
- data/lib/record_collection/rails/form_options_helper.rb +12 -9
- data/lib/record_collection/version.rb +1 -1
- data/spec/base/{delegation_spec.rb → behaviour_spec.rb} +5 -0
- data/spec/dummy/app/controllers/employees_controller.rb +1 -1
- data/spec/dummy/app/controllers/projects_controller.rb +73 -0
- data/spec/dummy/app/models/project/collection.rb +3 -0
- data/spec/dummy/app/views/projects/_form.html.erb +21 -0
- data/spec/dummy/app/views/projects/collection_edit.html.slim +9 -0
- data/spec/dummy/app/views/projects/edit.html.erb +6 -0
- data/spec/dummy/app/views/projects/index.html.slim +20 -0
- data/spec/dummy/app/views/projects/new.html.erb +5 -0
- data/spec/dummy/app/views/projects/show.html.erb +14 -0
- data/spec/dummy/config/routes.rb +1 -0
- data/spec/features/disabled_boolean_spec.rb +19 -0
- data/spec/features/optional_boolean_with_normal_resource_spec.rb +20 -0
- metadata +25 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a59adda39d602d7f6bfb8f52d621249aa2abcc4
|
4
|
+
data.tar.gz: d1944bc51f5c50f874af1e2c75ec449986a77e45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d65cd419233c8bf56f0b1d447dcc02e774e967eaecd8f9cda0d350453faee3ea45b37c2012c0666e04ff67a2da9aaff0cce402d105ba2d88270b60da1ad56cf2
|
7
|
+
data.tar.gz: d1656f30b70811c497236c87300fccfd2a367c646aee2c42566deace1934c9f7fc3821675e0c06525e2bc32e33d8cb40a9ee8e95b55fa11496971b586fb4bf03
|
@@ -44,6 +44,7 @@ class Optionals
|
|
44
44
|
|
45
45
|
value_toggle = $('<span></span>').addClass('optional-boolean-toggle').click ->
|
46
46
|
return if container.hasClass('inactive')
|
47
|
+
return if container.data('disabled')
|
47
48
|
if $(@).hasClass('active')
|
48
49
|
value_field.val(0)
|
49
50
|
$(@).removeClass('active').addClass('inactive')
|
@@ -37,6 +37,12 @@ $unchecked-color: #999
|
|
37
37
|
&.inactive
|
38
38
|
color: $unchecked-color
|
39
39
|
@extend .fa, .fa-2x, .fa-square-o
|
40
|
+
&.disabled
|
41
|
+
.optional-boolean-toggle
|
42
|
+
&.active
|
43
|
+
color: $unchecked-color
|
44
|
+
&.inactive
|
45
|
+
color: $unchecked-color
|
40
46
|
&.inactive
|
41
47
|
display: block
|
42
48
|
.optional-boolean-activator-toggle
|
@@ -105,6 +105,10 @@ module RecordCollection
|
|
105
105
|
false
|
106
106
|
end
|
107
107
|
|
108
|
+
def to_ary(*)
|
109
|
+
self
|
110
|
+
end
|
111
|
+
|
108
112
|
# This method returns nil when the values of `attr` in the collection
|
109
113
|
# are mixed. Otherwise the value itself. For boolean attributes the
|
110
114
|
# check is wether the values are truthy or falsy. If the
|
@@ -15,36 +15,38 @@ class ActionView::Helpers::FormBuilder
|
|
15
15
|
object.map{|record| @template.hidden_field_tag('ids[]', record.id, id: nil) }.join.html_safe
|
16
16
|
end
|
17
17
|
|
18
|
-
def optional_boolean(attr)
|
19
|
-
classes = get_optional_classes(attr, base_class: 'optional-boolean')
|
18
|
+
def optional_boolean(attr, options = {})
|
19
|
+
classes = get_optional_classes(attr, options.merge(base_class: 'optional-boolean'))
|
20
20
|
label_tag = label(attr, options[:label])
|
21
21
|
check_box_tag = check_box(attr, options)
|
22
|
-
add_collection_ids @template.content_tag(:div, label_tag + check_box_tag , class: classes, data: get_data_attributes(attr))
|
22
|
+
add_collection_ids @template.content_tag(:div, label_tag + check_box_tag , class: classes, data: get_data_attributes(attr, options))
|
23
23
|
end
|
24
24
|
|
25
|
-
def optional_check_box(attr)
|
26
|
-
optional_boolean(attr)
|
25
|
+
def optional_check_box(attr, options = {})
|
26
|
+
optional_boolean(attr, options)
|
27
27
|
end
|
28
28
|
|
29
29
|
def optional_input(attr, options = {})
|
30
|
-
classes = get_optional_classes(attr, base_class: 'optional-input')
|
30
|
+
classes = get_optional_classes(attr, options.reverse_merge(base_class: 'optional-input'))
|
31
31
|
add_collection_ids @template.content_tag(:div, input(attr, options), class: classes, data: get_data_attributes(attr))
|
32
32
|
end
|
33
33
|
|
34
34
|
def optional_text_field(attr, options={})
|
35
|
-
classes = get_optional_classes(attr, base_class: 'optional-text-field')
|
35
|
+
classes = get_optional_classes(attr, options.reverse_merge(base_class: 'optional-text-field'))
|
36
36
|
add_collection_ids @template.content_tag(:div, label(attr, options[:label]) + text_field(attr, options), class: classes, data: get_data_attributes(attr))
|
37
37
|
end
|
38
38
|
|
39
39
|
def optional_text_area(attr, options={})
|
40
|
-
classes = get_optional_classes(attr, base_class: 'optional-text-area')
|
40
|
+
classes = get_optional_classes(attr, options.reverse_merge(base_class: 'optional-text-area'))
|
41
41
|
add_collection_ids @template.content_tag(:div, label(attr, options[:label]) + text_area(attr, options), class: classes, data: get_data_attributes(attr))
|
42
42
|
end
|
43
43
|
|
44
44
|
def get_data_attributes(attr, options = {})
|
45
45
|
one = true
|
46
46
|
one = object.one? if object.is_a? RecordCollection::Base
|
47
|
-
{attribute: attr, one: one}
|
47
|
+
attrs = {attribute: attr, one: one}
|
48
|
+
attrs[:disabled] = true if options[:disabled]
|
49
|
+
attrs
|
48
50
|
end
|
49
51
|
|
50
52
|
def get_optional_classes(attr, options = {})
|
@@ -57,6 +59,7 @@ class ActionView::Helpers::FormBuilder
|
|
57
59
|
active = true unless object.public_send(attr).nil? # Activate if collection attribute is not nil
|
58
60
|
classes = [options[:base_class] || 'optional-input', 'optional-attribute-container', attr]
|
59
61
|
classes << (active ? 'active' : 'inactive')
|
62
|
+
classes << 'disabled' if options[:disabled]
|
60
63
|
if object.is_a? RecordCollection::Base
|
61
64
|
classes << 'one' if object.one?
|
62
65
|
else
|
@@ -0,0 +1,73 @@
|
|
1
|
+
class ProjectsController < ApplicationController
|
2
|
+
before_action :set_project, only: [:show, :edit, :update, :destroy]
|
3
|
+
|
4
|
+
# GET /projects
|
5
|
+
def index
|
6
|
+
@projects = Project.all
|
7
|
+
end
|
8
|
+
|
9
|
+
# GET /projects/1
|
10
|
+
def show
|
11
|
+
end
|
12
|
+
|
13
|
+
# GET /projects/new
|
14
|
+
def new
|
15
|
+
@project = Project.new
|
16
|
+
end
|
17
|
+
|
18
|
+
# GET /projects/1/edit
|
19
|
+
def edit
|
20
|
+
end
|
21
|
+
|
22
|
+
# POST /projects
|
23
|
+
def create
|
24
|
+
@project = Project.new(project_params)
|
25
|
+
|
26
|
+
if @project.save
|
27
|
+
redirect_to @project, notice: 'Project was successfully created.'
|
28
|
+
else
|
29
|
+
render :new
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# PATCH/PUT /projects/1
|
34
|
+
def update
|
35
|
+
if @project.update(project_params)
|
36
|
+
redirect_to @project, notice: 'Project was successfully updated.'
|
37
|
+
else
|
38
|
+
render :edit
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# DELETE /projects/1
|
43
|
+
def destroy
|
44
|
+
@project.destroy
|
45
|
+
redirect_to projects_url, notice: 'Project was successfully destroyed.'
|
46
|
+
end
|
47
|
+
|
48
|
+
def collection_edit
|
49
|
+
@collection = Project::Collection.find(params[:ids])
|
50
|
+
redirect_to projects_path, alert: 'No projects selected' if @collection.empty?
|
51
|
+
end
|
52
|
+
|
53
|
+
def collection_update
|
54
|
+
@collection = Project::Collection.find(params[:ids])
|
55
|
+
if @collection.update params[:collection]
|
56
|
+
redirect_to projects_path, notice: 'Collection is updated'
|
57
|
+
else
|
58
|
+
render 'collection_edit'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
# Use callbacks to share common setup or constraints between actions.
|
65
|
+
def set_project
|
66
|
+
@project = Project.find(params[:id])
|
67
|
+
end
|
68
|
+
|
69
|
+
# Only allow a trusted parameter "white list" through.
|
70
|
+
def project_params
|
71
|
+
params.require(:project).permit(:name)
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<%= form_for(@project) do |f| %>
|
2
|
+
<% if @project.errors.any? %>
|
3
|
+
<div id="error_explanation">
|
4
|
+
<h2><%= pluralize(@project.errors.count, "error") %> prohibited this project from being saved:</h2>
|
5
|
+
|
6
|
+
<ul>
|
7
|
+
<% @project.errors.full_messages.each do |message| %>
|
8
|
+
<li><%= message %></li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<div class="field">
|
15
|
+
<%= f.label :name %><br>
|
16
|
+
<%= f.text_field :name %>
|
17
|
+
</div>
|
18
|
+
<div class="actions">
|
19
|
+
<%= f.submit %>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
h1 Edit multiple employees
|
2
|
+
= form_for @collection, url: [:collection_update, @collection] do |f|
|
3
|
+
= render 'form_errors', target: @collection
|
4
|
+
.form-inputs= f.optional_boolean :finished, disabled: true
|
5
|
+
.form-actions= f.submit
|
6
|
+
.page-actions
|
7
|
+
= link_to 'Back', employees_path
|
8
|
+
|
9
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
h1 Listing Projects
|
2
|
+
table.with-selection
|
3
|
+
thead
|
4
|
+
tr
|
5
|
+
th Name
|
6
|
+
th Finished?
|
7
|
+
th colspan=3
|
8
|
+
tbody
|
9
|
+
- @projects.each do |project|
|
10
|
+
tr data-record=project.attributes.to_json
|
11
|
+
td= project.name
|
12
|
+
td.finished= project.finished ? 'yes' : 'no'
|
13
|
+
td= link_to 'Show', project
|
14
|
+
td= link_to 'Edit', edit_project_path(project)
|
15
|
+
td= link_to 'Destroy', project, method: :delete, data: {confirm: 'Are you sure?' }
|
16
|
+
br
|
17
|
+
.page-actions
|
18
|
+
button.actions-button.button.warning onclick="window.location = Routes.collection_edit_projects_path({ids: MultiSelect.selected_ids()})" Actions
|
19
|
+
span.devider
|
20
|
+
= link_to 'New Project', new_project_path, class: 'info button'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<p id="notice"><%= notice %></p>
|
2
|
+
|
3
|
+
<p>
|
4
|
+
<strong>Name:</strong>
|
5
|
+
<%= @project.name %>
|
6
|
+
</p>
|
7
|
+
|
8
|
+
<p>
|
9
|
+
<strong>Finished:</strong>
|
10
|
+
<%= @project.finished ? 'yes' : 'no' %>
|
11
|
+
</p>
|
12
|
+
|
13
|
+
<%= link_to 'Edit', edit_project_path(@project) %> |
|
14
|
+
<%= link_to 'Back', projects_path %>
|
data/spec/dummy/config/routes.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.feature "Disabled booleans", type: :feature do
|
4
|
+
scenario "Selecting all", js: true do
|
5
|
+
project = Project.create name: 'P1', finished: true
|
6
|
+
visit collection_edit_projects_path(ids: [project.id])
|
7
|
+
|
8
|
+
toggle = find('.optional-attribute-container.finished .optional-boolean-toggle')
|
9
|
+
toggle['class'].should include 'active'
|
10
|
+
toggle.click
|
11
|
+
find('[name="commit"]').click
|
12
|
+
|
13
|
+
project.reload
|
14
|
+
|
15
|
+
# Should not be changed by the click
|
16
|
+
project.finished.should be true
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.feature "Optional text_field with normal record", type: :feature do
|
4
|
+
scenario "Selecting all", js: true do
|
5
|
+
employee = Employee.create name: 'E1', admin: true, vegan: false
|
6
|
+
visit collection_edit_employees_path(ids: [employee.id])
|
7
|
+
|
8
|
+
find('#collection_section').set 'SEC' # this is an optional
|
9
|
+
toggle = find('.optional-attribute-container.vegan .optional-boolean-toggle')
|
10
|
+
toggle.click
|
11
|
+
find('[name="commit"]').click
|
12
|
+
|
13
|
+
employee.reload
|
14
|
+
|
15
|
+
employee.section.should == 'SEC'
|
16
|
+
employee.admin.should be true
|
17
|
+
employee.vegan.should be true
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: record_collection
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin ter Kuile
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -384,7 +384,7 @@ files:
|
|
384
384
|
- record_collection.gemspec
|
385
385
|
- spec/base/accessors_spec.rb
|
386
386
|
- spec/base/after_record_update_spec.rb
|
387
|
-
- spec/base/
|
387
|
+
- spec/base/behaviour_spec.rb
|
388
388
|
- spec/base/finding_records_spec.rb
|
389
389
|
- spec/base/validations_spec.rb
|
390
390
|
- spec/dummy/README.rdoc
|
@@ -401,6 +401,7 @@ files:
|
|
401
401
|
- spec/dummy/app/controllers/application_controller.rb
|
402
402
|
- spec/dummy/app/controllers/concerns/.keep
|
403
403
|
- spec/dummy/app/controllers/employees_controller.rb
|
404
|
+
- spec/dummy/app/controllers/projects_controller.rb
|
404
405
|
- spec/dummy/app/helpers/application_helper.rb
|
405
406
|
- spec/dummy/app/mailers/.keep
|
406
407
|
- spec/dummy/app/models/.keep
|
@@ -408,6 +409,7 @@ files:
|
|
408
409
|
- spec/dummy/app/models/employee.rb
|
409
410
|
- spec/dummy/app/models/employee/collection.rb
|
410
411
|
- spec/dummy/app/models/project.rb
|
412
|
+
- spec/dummy/app/models/project/collection.rb
|
411
413
|
- spec/dummy/app/views/application/_form_errors.html.slim
|
412
414
|
- spec/dummy/app/views/employees/_form.html.erb
|
413
415
|
- spec/dummy/app/views/employees/collection_edit.html.slim
|
@@ -416,6 +418,12 @@ files:
|
|
416
418
|
- spec/dummy/app/views/employees/new.html.erb
|
417
419
|
- spec/dummy/app/views/employees/show.html.erb
|
418
420
|
- spec/dummy/app/views/layouts/application.html.slim
|
421
|
+
- spec/dummy/app/views/projects/_form.html.erb
|
422
|
+
- spec/dummy/app/views/projects/collection_edit.html.slim
|
423
|
+
- spec/dummy/app/views/projects/edit.html.erb
|
424
|
+
- spec/dummy/app/views/projects/index.html.slim
|
425
|
+
- spec/dummy/app/views/projects/new.html.erb
|
426
|
+
- spec/dummy/app/views/projects/show.html.erb
|
419
427
|
- spec/dummy/bin/bundle
|
420
428
|
- spec/dummy/bin/rails
|
421
429
|
- spec/dummy/bin/rake
|
@@ -450,7 +458,9 @@ files:
|
|
450
458
|
- spec/dummy/public/422.html
|
451
459
|
- spec/dummy/public/500.html
|
452
460
|
- spec/dummy/public/favicon.ico
|
461
|
+
- spec/features/disabled_boolean_spec.rb
|
453
462
|
- spec/features/multi_select_spec.rb
|
463
|
+
- spec/features/optional_boolean_with_normal_resource_spec.rb
|
454
464
|
- spec/features/optional_text_field_with_normal_resource_spec.rb
|
455
465
|
- spec/features/optionals_with_one_record_spec.rb
|
456
466
|
- spec/features/translations_spec.rb
|
@@ -485,7 +495,7 @@ summary: Manage collections of records in Ruby on Rails
|
|
485
495
|
test_files:
|
486
496
|
- spec/base/accessors_spec.rb
|
487
497
|
- spec/base/after_record_update_spec.rb
|
488
|
-
- spec/base/
|
498
|
+
- spec/base/behaviour_spec.rb
|
489
499
|
- spec/base/finding_records_spec.rb
|
490
500
|
- spec/base/validations_spec.rb
|
491
501
|
- spec/dummy/README.rdoc
|
@@ -502,6 +512,7 @@ test_files:
|
|
502
512
|
- spec/dummy/app/controllers/application_controller.rb
|
503
513
|
- spec/dummy/app/controllers/concerns/.keep
|
504
514
|
- spec/dummy/app/controllers/employees_controller.rb
|
515
|
+
- spec/dummy/app/controllers/projects_controller.rb
|
505
516
|
- spec/dummy/app/helpers/application_helper.rb
|
506
517
|
- spec/dummy/app/mailers/.keep
|
507
518
|
- spec/dummy/app/models/.keep
|
@@ -509,6 +520,7 @@ test_files:
|
|
509
520
|
- spec/dummy/app/models/employee.rb
|
510
521
|
- spec/dummy/app/models/employee/collection.rb
|
511
522
|
- spec/dummy/app/models/project.rb
|
523
|
+
- spec/dummy/app/models/project/collection.rb
|
512
524
|
- spec/dummy/app/views/application/_form_errors.html.slim
|
513
525
|
- spec/dummy/app/views/employees/_form.html.erb
|
514
526
|
- spec/dummy/app/views/employees/collection_edit.html.slim
|
@@ -517,6 +529,12 @@ test_files:
|
|
517
529
|
- spec/dummy/app/views/employees/new.html.erb
|
518
530
|
- spec/dummy/app/views/employees/show.html.erb
|
519
531
|
- spec/dummy/app/views/layouts/application.html.slim
|
532
|
+
- spec/dummy/app/views/projects/_form.html.erb
|
533
|
+
- spec/dummy/app/views/projects/collection_edit.html.slim
|
534
|
+
- spec/dummy/app/views/projects/edit.html.erb
|
535
|
+
- spec/dummy/app/views/projects/index.html.slim
|
536
|
+
- spec/dummy/app/views/projects/new.html.erb
|
537
|
+
- spec/dummy/app/views/projects/show.html.erb
|
520
538
|
- spec/dummy/bin/bundle
|
521
539
|
- spec/dummy/bin/rails
|
522
540
|
- spec/dummy/bin/rake
|
@@ -551,7 +569,9 @@ test_files:
|
|
551
569
|
- spec/dummy/public/422.html
|
552
570
|
- spec/dummy/public/500.html
|
553
571
|
- spec/dummy/public/favicon.ico
|
572
|
+
- spec/features/disabled_boolean_spec.rb
|
554
573
|
- spec/features/multi_select_spec.rb
|
574
|
+
- spec/features/optional_boolean_with_normal_resource_spec.rb
|
555
575
|
- spec/features/optional_text_field_with_normal_resource_spec.rb
|
556
576
|
- spec/features/optionals_with_one_record_spec.rb
|
557
577
|
- spec/features/translations_spec.rb
|
@@ -559,3 +579,4 @@ test_files:
|
|
559
579
|
- spec/rails/form_builder_spec.rb
|
560
580
|
- spec/record_selection/base_spec.rb
|
561
581
|
- spec/spec_helper.rb
|
582
|
+
has_rdoc:
|