record_collection 0.7.4 → 0.7.5

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
2
  SHA1:
3
- metadata.gz: 1a18dd599ddae39a9097d25b2aff3489b383ad91
4
- data.tar.gz: 52835347a7fa4e3b8185e8c5595f00d14339fbd4
3
+ metadata.gz: c3ab00ef1adc5b2fba1f11c6775bdb5cedf3d131
4
+ data.tar.gz: 466e4feeaf5bbbee5f62dddf126159834a131c67
5
5
  SHA512:
6
- metadata.gz: b1c6b9cbc3bbb195eccd046bf7ef02a82fa68287b0046ef96fad14bad9886faa2689cb664afd8f424a3d5639362df2c5783e9146db7b3e948753fc3640bbbab2
7
- data.tar.gz: 5df9fa42f9c1a695a1ed9691750f5cd3da7177b3ce1644707492904e263fac46a6754baae688c6e55b5b0497d2faf52bf951f23b64c5e0333dbbb8478e3c6de6
6
+ metadata.gz: be027edc729b7fb5c1bf0059c7bd6e874c68a788deb6970e0f648b1311549791479022306ab116df3bd6ae34cb1ae4f3e98951f08fb03bc6486013fd5b629962
7
+ data.tar.gz: 56cee9b7123367bcd065c0edb1be3cd1d576e584574943f9f29283ac3153796f4ce08e6cd0f05e9f1f8078a58fbbdb253f01de0c2ce75ee476a13ba6a9d36c41
data/.travis.yml CHANGED
@@ -1,3 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.0
3
+ - 2.1.6
4
+ - 2.2.2
5
+ addons:
6
+ code_climate:
7
+ repo_token: 22819b10ef9110a7fef884ab105239fc16fd0562ac79ae54c2204b5e07343919
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in record_collection.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem "codeclimate-test-reporter", require: nil
8
+ end
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # RecordCollection
2
- [<img src="https://secure.travis-ci.org/bterkuile/record_collection.png?branch=master" alt="Build Status" />](http://travis-ci.org/bterkuile/record_collection)
2
+ [![Gem Version](https://badge.fury.io/rb/record_collection.svg)](http://badge.fury.io/rb/record_collection)
3
+ [![Build Status](https://travis-ci.org/bterkuile/record_collection.svg?branch=master)](https://travis-ci.org/bterkuile/record_collection)
3
4
  [![Code Climate](https://codeclimate.com/github/bterkuile/record_collection/badges/gpa.svg)](https://codeclimate.com/github/bterkuile/record_collection)
5
+ [![Test Coverage](https://codeclimate.com/github/bterkuile/record_collection/badges/coverage.svg)](https://codeclimate.com/github/bterkuile/record_collection/coverage)
4
6
 
5
7
  record\_collection is a gem that adds functionality to rails to work
6
8
  with collections. This consists of a few components:
@@ -11,6 +13,14 @@ with collections. This consists of a few components:
11
13
  * the optionals helpers for managing attributes on the collection of
12
14
  records you may or may not want to edit in the collection form
13
15
 
16
+ This gem is created for a project where acting on collections of records
17
+ was a key feature of the application. If you require really heavy client
18
+ side logic on collections, a client side framework might be the way to go
19
+ treating all records CRUD individually. This gem add two 'resourceful'
20
+ actions to a resource controller to act on collections (a subset) of
21
+ your records. Advanced failure handling is missing. Normal active
22
+ model validation is implemented.
23
+
14
24
  ## Installation
15
25
 
16
26
  Add this line to your application's Gemfile:
@@ -16,15 +16,13 @@ class ActionView::Helpers::FormBuilder
16
16
  end
17
17
 
18
18
  def optional_boolean(attr, options = {})
19
- classes = get_optional_classes(attr, options.merge(base_class: 'optional-boolean'))
20
- label_tag = label(attr, options[:label])
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, options))
23
- end
24
-
25
- def optional_check_box(attr, options = {})
26
- optional_boolean(attr, options)
19
+ #classes = get_optional_classes(attr, options.merge(base_class: 'optional-boolean'))
20
+ #label_tag = label(attr, options[:label])
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, options))
23
+ optional_form_element(:check_box, attr, options.reverse_merge(base_class: 'optional-boolean'))
27
24
  end
25
+ alias_method :optional_check_box, :optional_boolean
28
26
 
29
27
  def optional_input(attr, options = {})
30
28
  classes = get_optional_classes(attr, options.reverse_merge(base_class: 'optional-input'))
@@ -32,42 +30,45 @@ class ActionView::Helpers::FormBuilder
32
30
  end
33
31
 
34
32
  def optional_text_field(attr, options={})
35
- classes = get_optional_classes(attr, options.reverse_merge(base_class: 'optional-text-field'))
36
- add_collection_ids @template.content_tag(:div, label(attr, options[:label]) + text_field(attr, options), class: classes, data: get_data_attributes(attr))
33
+ optional_form_element(:text_area, attr, options.reverse_merge(base_class: 'optional-text-field'))
37
34
  end
38
35
 
39
36
  def optional_text_area(attr, options={})
37
+ optional_form_element(:text_area, attr, options.reverse_merge(base_class: 'optional-text-area'))
38
+ end
39
+
40
+ def get_optional_classes(attr, options = {})
41
+ classes = [options[:base_class] || 'optional-input', 'optional-attribute-container', attr, active_class(attr)]
42
+ classes << 'disabled' if options[:disabled]
43
+ classes << 'one' if !object.is_a?(RecordCollection::Base) or object.one?
44
+ classes << 'error' if object.errors[attr].present?
45
+ classes
46
+ end
47
+
48
+ def optional_form_element(element, attr, options = {})
40
49
  classes = get_optional_classes(attr, options.reverse_merge(base_class: 'optional-text-area'))
41
- add_collection_ids @template.content_tag(:div, label(attr, options[:label]) + text_area(attr, options), class: classes, data: get_data_attributes(attr))
50
+ add_collection_ids @template.content_tag(:div, label(attr, options[:label]) + send(element, attr, options), class: classes, data: get_data_attributes(attr, options))
42
51
  end
43
52
 
53
+ private
54
+
44
55
  def get_data_attributes(attr, options = {})
45
- one = true
46
- one = object.one? if object.is_a? RecordCollection::Base
56
+ one = object.is_a?(RecordCollection::Base) ? object.one? : true
47
57
  attrs = {attribute: attr, one: one}
48
58
  attrs[:disabled] = true if options[:disabled]
49
59
  attrs
50
60
  end
51
61
 
52
- def get_optional_classes(attr, options = {})
53
- active = false
62
+ def active_class(attr)
63
+ active = false # default
54
64
  if object.respond_to?(:uniform_collection_attribute)
55
65
  uniform_value = object.uniform_collection_attribute(attr, set_if_nil: true)
56
- # The field is active when the uniform value is not nil
66
+ # The field is active when the uniform value is not nil,
67
+ # aka has a value
57
68
  active = !uniform_value.nil?
58
69
  end
59
- active = true unless object.public_send(attr).nil? # Activate if collection attribute is not nil
60
- classes = [options[:base_class] || 'optional-input', 'optional-attribute-container', attr]
61
- classes << (active ? 'active' : 'inactive')
62
- classes << 'disabled' if options[:disabled]
63
- if object.is_a? RecordCollection::Base
64
- classes << 'one' if object.one?
65
- else
66
- # Assume normal record, this always behaves like one
67
- classes << 'one'
68
- end
69
- classes << 'error' if object.errors[attr].present?
70
- classes
70
+ active = true unless object.public_send(attr).nil? # Activate if collection or record attribute is not nil
71
+ active ? 'active' : 'inactive'
71
72
  end
72
73
  end
73
74
 
@@ -1,3 +1,3 @@
1
1
  module RecordCollection
2
- VERSION = "0.7.4"
2
+ VERSION = "0.7.5"
3
3
  end
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
23
  #spec.add_development_dependency "rspec", ">= 3.1.0"
24
24
  spec.add_development_dependency "rspec-rails", "~> 3.1"
25
+ spec.add_development_dependency "rspec-its"
25
26
  spec.add_development_dependency "pry", ">= 0.1"
26
27
  spec.add_development_dependency "rails", "~> 4.1"
27
28
  spec.add_development_dependency "sqlite3"
@@ -1,3 +1,4 @@
1
1
  class Project::Collection < RecordCollection::Base
2
2
  attribute :finished, type: Boolean
3
+ attribute :description
3
4
  end
@@ -1,7 +1,8 @@
1
- h1 Edit multiple employees
1
+ h1 Edit multiple projects
2
2
  = form_for @collection, url: [:collection_update, @collection] do |f|
3
3
  = render 'form_errors', target: @collection
4
4
  .form-inputs= f.optional_boolean :finished, disabled: true
5
+ .form-inputs= f.optional_text_area :description
5
6
  .form-actions= f.submit
6
7
  .page-actions
7
8
  = link_to 'Back', employees_path
@@ -1,7 +1,7 @@
1
1
  en:
2
2
  activerecord:
3
3
  collections:
4
- employee: Group
4
+ employee: Employees collection
5
5
  attributes:
6
6
  employee:
7
7
  section: Department
@@ -0,0 +1,5 @@
1
+ class AddDescriptionToProjects < ActiveRecord::Migration
2
+ def change
3
+ add_column :projects, :description, :text
4
+ end
5
+ end
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20150204125014) do
14
+ ActiveRecord::Schema.define(version: 20150721122805) do
15
15
 
16
16
  create_table "employees", force: :cascade do |t|
17
17
  t.string "name"
@@ -26,8 +26,9 @@ ActiveRecord::Schema.define(version: 20150204125014) do
26
26
  t.string "name"
27
27
  t.boolean "finished"
28
28
  t.string "state"
29
- t.datetime "created_at", null: false
30
- t.datetime "updated_at", null: false
29
+ t.datetime "created_at", null: false
30
+ t.datetime "updated_at", null: false
31
+ t.text "description"
31
32
  end
32
33
 
33
34
  end
@@ -4,6 +4,6 @@ RSpec.feature "Multi select", type: :feature do
4
4
  scenario "Selecting all", js: true do
5
5
  employee = Employee.create name: 'E1', section: 'ABC', admin: true, vegan: false
6
6
  visit collection_edit_employees_path(ids: [employee.id])
7
- find('[name="commit"]').value.should eq "Update Group"
7
+ find('[name="commit"]').value.should eq "Update Employees collection"
8
8
  end
9
9
  end
@@ -1,8 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec.describe ActionView::Helpers::FormBuilder do
3
+ describe ActionView::Helpers::FormBuilder do
4
4
  let(:employee){ Employee.create section: 'SE1' }
5
- subject{ described_class.new :collection, Employee::Collection.new([employee]), @template, {}}
5
+ let(:arguments){ {form_object: Employee::Collection.new([employee])} }
6
+ subject{ described_class.new :collection, arguments[:form_object], @template, {}}
6
7
  before do
7
8
  # http://pivotallabs.com/testing-custom-form-builder/
8
9
  @template = Object.new
@@ -17,8 +18,79 @@ RSpec.describe ActionView::Helpers::FormBuilder do
17
18
  end
18
19
 
19
20
  it "does not raise when the object is not a collection object" do
20
- form_builder = described_class.new :employee, employee, @template, {}
21
- expect{ form_builder.collection_ids }.not_to raise_error
21
+ arguments[:form_object] = employee
22
+ expect{ subject.collection_ids }.not_to raise_error
22
23
  end
23
24
  end
25
+
26
+ describe '#get_optional_classes' do
27
+
28
+ describe 'active/inactive' do
29
+ it "does not include active when record has no value" do
30
+ employee.section = nil
31
+ subject.get_optional_classes(:section).should_not include'active'
32
+ subject.get_optional_classes(:section).should include'inactive'
33
+ end
34
+
35
+ it "includes active when record has en empty value" do
36
+ employee.section = ''
37
+ subject.get_optional_classes(:section).should include'active'
38
+ subject.get_optional_classes(:section).should_not include'inactive'
39
+ end
40
+
41
+ it 'includes active when two records have the same value' do
42
+ employee_2 = Employee.create section: 'SE1'
43
+ arguments[:form_object] = Employee::Collection.new([employee, employee_2])
44
+ subject.get_optional_classes(:section).should include'active'
45
+ subject.get_optional_classes(:section).should_not include'inactive'
46
+ end
47
+
48
+ it 'does not include active when two records have different values' do
49
+ employee_2 = Employee.create section: 'SE2'
50
+ arguments[:form_object] = Employee::Collection.new([employee, employee_2])
51
+ subject.get_optional_classes(:section).should_not include'active'
52
+ subject.get_optional_classes(:section).should include'inactive'
53
+ end
54
+ end
55
+
56
+ describe 'one' do
57
+ it "includes one if only one record is present" do
58
+ subject.get_optional_classes(:section).should include'one'
59
+ end
60
+
61
+ it "includes one if the form record is not a collection but a normal record" do
62
+ arguments[:form_object] = employee
63
+ subject.get_optional_classes(:section).should include'one'
64
+ end
65
+
66
+ it "does not include one for a collection having more than one records" do
67
+ employee_2 = Employee.create section: 'SE2'
68
+ arguments[:form_object] = Employee::Collection.new([employee, employee_2])
69
+ subject.get_optional_classes(:section).should_not include'one'
70
+ end
71
+ end
72
+
73
+ describe 'error' do
74
+ it "has no error class without any arguments set" do
75
+ subject.get_optional_classes(:section).should_not include'error'
76
+ end
77
+
78
+ it "has no error class with valid argument set" do
79
+ arguments[:form_object].update(section: 'Se9').should be_truthy
80
+ subject.get_optional_classes(:section).should_not include'error'
81
+ end
82
+
83
+ it "has error class with invalid argument set" do
84
+ arguments[:form_object].update(section: 'INVALID NAME').should be false
85
+ subject.get_optional_classes(:section).should include'error'
86
+ end
87
+ end
88
+
89
+ describe 'disabled' do
90
+ it "adds disabled when given as option" do
91
+ subject.get_optional_classes(:section, disabled: true).should include'disabled'
92
+ end
93
+ end
94
+
95
+ end
24
96
  end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe RecordCollection::Name do
4
+ let(:employee){ Employee.create section: 'SE1' }
5
+ subject{ Employee::Collection.new([employee]).model_name }
6
+
7
+ its(:singular_route_key){ should eq 'employee' }
8
+ its(:route_key){ should eq 'employees' }
9
+ its(:human){ should eq 'Employees collection' }
10
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  ENV["RAILS_ENV"] = "test"
2
+ require "codeclimate-test-reporter"
3
+ CodeClimate::TestReporter.start
2
4
 
3
5
  require 'pry'
4
-
5
6
  require File.expand_path("../../spec/dummy/config/environment.rb", __FILE__)
6
7
  ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../spec/dummy/db/migrate", __FILE__)]
7
8
 
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.7.4
4
+ version: 0.7.5
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-06-22 00:00:00.000000000 Z
11
+ date: 2015-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec-its
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
70
  name: pry
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -452,6 +466,7 @@ files:
452
466
  - spec/dummy/db/migrate/20150204103712_add_vegan_to_employees.rb
453
467
  - spec/dummy/db/migrate/20150204103925_add_admin_to_employees.rb
454
468
  - spec/dummy/db/migrate/20150204125014_create_projects.rb
469
+ - spec/dummy/db/migrate/20150721122805_add_description_to_projects.rb
455
470
  - spec/dummy/db/schema.rb
456
471
  - spec/dummy/lib/assets/.keep
457
472
  - spec/dummy/log/.keep
@@ -468,6 +483,7 @@ files:
468
483
  - spec/fixtures/collections.rb
469
484
  - spec/rails/form_builder_spec.rb
470
485
  - spec/record_selection/base_spec.rb
486
+ - spec/record_selection/name_spec.rb
471
487
  - spec/spec_helper.rb
472
488
  homepage: https://github.com/bterkuile/record_collection
473
489
  licenses:
@@ -564,6 +580,7 @@ test_files:
564
580
  - spec/dummy/db/migrate/20150204103712_add_vegan_to_employees.rb
565
581
  - spec/dummy/db/migrate/20150204103925_add_admin_to_employees.rb
566
582
  - spec/dummy/db/migrate/20150204125014_create_projects.rb
583
+ - spec/dummy/db/migrate/20150721122805_add_description_to_projects.rb
567
584
  - spec/dummy/db/schema.rb
568
585
  - spec/dummy/lib/assets/.keep
569
586
  - spec/dummy/log/.keep
@@ -580,5 +597,6 @@ test_files:
580
597
  - spec/fixtures/collections.rb
581
598
  - spec/rails/form_builder_spec.rb
582
599
  - spec/record_selection/base_spec.rb
600
+ - spec/record_selection/name_spec.rb
583
601
  - spec/spec_helper.rb
584
602
  has_rdoc: