assignable_values 0.16.1 → 0.16.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 977d6a6005a660c922f2ceb114f0d0e9ca187312
4
- data.tar.gz: 93af552eef243da11888c86be25e595242d67b65
2
+ SHA256:
3
+ metadata.gz: b9fa8864bca68f5d9a2c7199bd08a2c3f97bb46cc3e40b0b7860c62d9bb563bb
4
+ data.tar.gz: fe00de9f990305f33905cbd8b0dcaf9fc318521b4378c344aa33bc94a536b63b
5
5
  SHA512:
6
- metadata.gz: d8a4a8064ed9a7b68639212901128814f083651af7628645fa8275968f20ae78920459397efa0ece9755d78ce659054745c7baf3e2aef3a891aa34b6436119c2
7
- data.tar.gz: 4ee5bbd8c8a9137bd0f3b55cbfab07d104c0a5cc21817818ba21b2ceca48e0f5c4d42297778a4c23a4fe66399f3e8eda1d4ba98e357445b48734fea96990628f
6
+ metadata.gz: 815643f34c5d95f2ed47ae5ebdec2dd31c7da83ae1ded589efebf6409789bf30f002315d94468a5e8c14f2f64412fbae025f8a0dec7c057a66826417282a0ca9
7
+ data.tar.gz: 500c291826c51db9bfad4d3f222052a1b0e3c2cd59260a7db2f9ee58368d5574734cf58db92c42ec6aa34f1c5a5657d57919e8e1df2c97b05da4b4e69bb9d384
@@ -1 +1 @@
1
- 2.3.1
1
+ 2.3.8
@@ -1,9 +1,11 @@
1
1
  language: ruby
2
2
 
3
+ dist: trusty
4
+
3
5
  rvm:
4
6
  - 1.8.7
5
7
  - 2.1.8
6
- - 2.3.1
8
+ - 2.3.8
7
9
  - 2.4.2
8
10
  - 2.5.3
9
11
 
@@ -21,13 +23,13 @@ matrix:
21
23
  - gemfile: Gemfile.2.3
22
24
  rvm: 2.1.8
23
25
  - gemfile: Gemfile.2.3
24
- rvm: 2.3.1
26
+ rvm: 2.3.8
25
27
  - gemfile: Gemfile.2.3
26
28
  rvm: 2.4.2
27
29
  - gemfile: Gemfile.2.3
28
30
  rvm: 2.5.3
29
31
  - gemfile: Gemfile.3.2
30
- rvm: 2.3.1
32
+ rvm: 2.3.8
31
33
  - gemfile: Gemfile.3.2
32
34
  rvm: 2.4.2
33
35
  - gemfile: Gemfile.3.2
@@ -55,7 +57,7 @@ matrix:
55
57
  - gemfile: Gemfile.6.0.pg
56
58
  rvm: 2.1.8
57
59
  - gemfile: Gemfile.6.0.pg
58
- rvm: 2.3.1
60
+ rvm: 2.3.8
59
61
  - gemfile: Gemfile.6.0.pg
60
62
  rvm: 2.4.2
61
63
 
@@ -66,17 +68,13 @@ sudo: false
66
68
 
67
69
  cache: bundler
68
70
 
69
- notifications:
70
- email:
71
- - fail@makandra.de
72
-
73
71
  before_script:
74
72
  - psql -c 'create database assignable_values_test;' -U postgres
75
73
  - mysql -e 'create database IF NOT EXISTS assignable_values_test;'
76
74
 
77
75
  install:
78
76
  # Old Travis CI bundler explodes when lockfile version doesn't match recently bumped version
79
- - gem install bundler --version='=1.12.5'
77
+ - gem install bundler --version='=1.17.3'
80
78
  # This is the default Travis CI install step
81
79
  - bundle install --jobs=3 --retry=3 --deployment --path=${BUNDLE_PATH:-vendor/bundle}
82
80
 
@@ -8,6 +8,11 @@ This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html
8
8
 
9
9
  ### Compatible changes
10
10
 
11
+ ## 0.16.2 - 2020-10-06
12
+
13
+ ### Compatible changes
14
+
15
+ - when given a scope, do not load all records to memory during validation
11
16
 
12
17
  ## 0.16.1 - 2019-05-14
13
18
 
@@ -28,7 +33,7 @@ This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html
28
33
 
29
34
  ### Compatible changes
30
35
 
31
- - Add `#humanized_values` for the `mutliple: true` case.
36
+ - Add `#humanized_values` for the `multiple: true` case.
32
37
 
33
38
 
34
39
  ## 0.15.0 - 2018-10-26
data/Gemfile CHANGED
@@ -1 +1 @@
1
- Gemfile.4.2
1
+ ./Gemfile.4.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.16.1)
4
+ assignable_values (0.16.2)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.16.1)
4
+ assignable_values (0.16.2)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.16.1)
4
+ assignable_values (0.16.2)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.16.1)
4
+ assignable_values (0.16.2)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.16.1)
4
+ assignable_values (0.16.2)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -65,4 +65,4 @@ DEPENDENCIES
65
65
  rspec_candy
66
66
 
67
67
  BUNDLED WITH
68
- 1.16.4
68
+ 1.17.3
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.16.1)
4
+ assignable_values (0.16.2)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # Runtime dependencies
4
- gem 'activerecord', '~>6.0.0beta'
4
+ gem 'activerecord', '~>6.0.0'
5
5
  gem 'i18n'
6
6
  gem 'pg', '<1'
7
7
 
@@ -1,23 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- assignable_values (0.16.1)
4
+ assignable_values (0.16.2)
5
5
  activerecord (>= 2.3)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activemodel (6.0.0.beta3)
11
- activesupport (= 6.0.0.beta3)
12
- activerecord (6.0.0.beta3)
13
- activemodel (= 6.0.0.beta3)
14
- activesupport (= 6.0.0.beta3)
15
- activesupport (6.0.0.beta3)
10
+ activemodel (6.0.0)
11
+ activesupport (= 6.0.0)
12
+ activerecord (6.0.0)
13
+ activemodel (= 6.0.0)
14
+ activesupport (= 6.0.0)
15
+ activesupport (6.0.0)
16
16
  concurrent-ruby (~> 1.0, >= 1.0.2)
17
17
  i18n (>= 0.7, < 2)
18
18
  minitest (~> 5.1)
19
19
  tzinfo (~> 1.1)
20
- zeitwerk (~> 1.3, >= 1.3.1)
20
+ zeitwerk (~> 2.1, >= 2.1.8)
21
21
  concurrent-ruby (1.1.5)
22
22
  database_cleaner (1.7.0)
23
23
  diff-lcs (1.3)
@@ -48,13 +48,13 @@ GEM
48
48
  thread_safe (0.3.6)
49
49
  tzinfo (1.2.5)
50
50
  thread_safe (~> 0.1)
51
- zeitwerk (1.4.3)
51
+ zeitwerk (2.1.9)
52
52
 
53
53
  PLATFORMS
54
54
  ruby
55
55
 
56
56
  DEPENDENCIES
57
- activerecord (~> 6.0.0beta)
57
+ activerecord (~> 6.0.0)
58
58
  assignable_values!
59
59
  database_cleaner
60
60
  gemika
@@ -1 +1 @@
1
- Gemfile.4.2.lock
1
+ ./Gemfile.4.2.lock
data/README.md CHANGED
@@ -91,7 +91,7 @@ The default is applied to new records:
91
91
  Defaults can be procs:
92
92
 
93
93
  class Song < ActiveRecord::Base
94
- assignable_values_for :genre, default: proc { Date.today.year } do
94
+ assignable_values_for :year, default: proc { Date.today.year } do
95
95
  1980 .. 2011
96
96
  end
97
97
  end
@@ -205,7 +205,7 @@ You can restrict `belongs_to` associations in the same manner as scalar attribut
205
205
 
206
206
  end
207
207
 
208
- Listing and validating als works the same:
208
+ Listing and validating also works the same:
209
209
 
210
210
  chicane = Artist.create!(name: 'Chicane', signed: true)
211
211
  lt2 = Artist.create!(name: 'LT2', signed: false)
@@ -349,9 +349,12 @@ Development
349
349
 
350
350
  There are tests in `spec`. We only accept PRs with tests. To run tests:
351
351
 
352
- - Install Ruby 2.1.8
353
- - Create a local test database `assignable_values_test` in both MySQL and PostgreSQL
354
- - Copy `spec/support/database.sample.yml` to `spec/support/database.yml` and enter your local credentials for the test database
352
+ - Install Ruby 2.3.8
353
+ - Create a local test database `assignable_values_test` in both MySQL and PostgreSQL (see
354
+ `.travis.yml` for commands to do so)
355
+ - Copy `spec/support/database.sample.yml` to `spec/support/database.yml` and enter your local
356
+ credentials for the test databases (postgres entry is not required if you are using a socket
357
+ connection)
355
358
  - Install development dependencies using `bundle install`
356
359
  - Run tests using `bundle exec rake current_rspec`
357
360
 
@@ -48,25 +48,31 @@ module AssignableValues
48
48
  end
49
49
 
50
50
  def assignable_values(record, options = {})
51
- assignable_values = []
51
+ additional_assignable_values = []
52
52
  current_values = assignable_values_from_record_or_delegate(record)
53
53
 
54
54
  if options.fetch(:include_old_value, true) && has_previously_saved_value?(record)
55
55
  old_value = previously_saved_value(record)
56
56
  if @options[:multiple]
57
57
  if old_value.is_a?(Array)
58
- assignable_values |= old_value
58
+ additional_assignable_values |= old_value
59
59
  end
60
60
  elsif !old_value.blank? && !current_values.include?(old_value)
61
- assignable_values << old_value
61
+ additional_assignable_values << old_value
62
62
  end
63
63
  end
64
64
 
65
- assignable_values += current_values
66
65
  if options[:decorate]
67
- assignable_values = decorate_values(assignable_values)
66
+ current_values = decorate_values(current_values)
67
+ additional_assignable_values = decorate_values(additional_assignable_values)
68
+ end
69
+
70
+ if additional_assignable_values.present?
71
+ # will not keep current_values scoped
72
+ additional_assignable_values + current_values
73
+ else
74
+ current_values
68
75
  end
69
- assignable_values
70
76
  end
71
77
 
72
78
  private
@@ -94,7 +100,21 @@ module AssignableValues
94
100
  def assignable_single_value?(record, value)
95
101
  (has_previously_saved_value?(record) && value == previously_saved_value(record)) ||
96
102
  (value.blank? && allow_blank?(record)) ||
97
- assignable_values(record, :include_old_value => false).include?(value)
103
+ included_in_assignable_values?(record, value)
104
+ end
105
+
106
+ def included_in_assignable_values?(record, value)
107
+ values_or_scope = assignable_values(record, :include_old_value => false)
108
+
109
+ if is_scope?(values_or_scope)
110
+ values_or_scope.exists?(value.id)
111
+ else
112
+ values_or_scope.include?(value)
113
+ end
114
+ end
115
+
116
+ def is_scope?(object)
117
+ object.respond_to?(:scoped) || object.respond_to?(:all)
98
118
  end
99
119
 
100
120
  def assignable_multi_value?(record, value)
@@ -217,9 +237,9 @@ module AssignableValues
217
237
 
218
238
  def assignable_values_from_record_or_delegate(record)
219
239
  if delegate?
220
- assignable_values_from_delegate(record).to_a
240
+ assignable_values_from_delegate(record)
221
241
  else
222
- record.instance_exec(&@values).to_a
242
+ record.instance_exec(&@values)
223
243
  end
224
244
  end
225
245
 
@@ -1,3 +1,3 @@
1
1
  module AssignableValues
2
- VERSION = '0.16.1'
2
+ VERSION = '0.16.2'
3
3
  end
@@ -448,7 +448,7 @@ describe AssignableValues::ActiveRecord do
448
448
  record.should be_valid
449
449
  end
450
450
 
451
- it 'sould not allow nil for an association (the "previously saved value") if the record is new' do
451
+ it 'should not allow nil for an association (the "previously saved value") if the record is new' do
452
452
  allowed_association = Artist.create!
453
453
  klass = Song.disposable_copy
454
454
  record = klass.new(:artist => nil)
@@ -510,6 +510,47 @@ describe AssignableValues::ActiveRecord do
510
510
  record.valid?
511
511
  end
512
512
 
513
+ it 'should not load all records to memory when assignable values are scoped' do
514
+ unless ::ActiveRecord::VERSION::MAJOR < 3 # somehow rails 2 still initializes Objects during the scope.exists?-call
515
+ initialized_artists_count = 0
516
+ MyArtist = Artist.disposable_copy
517
+
518
+ MyArtist.class_eval do
519
+ after_initialize :increase_initialized_count
520
+
521
+ define_method :increase_initialized_count do
522
+ initialized_artists_count += 1
523
+ end
524
+ end
525
+
526
+ klass = Song.disposable_copy
527
+
528
+ klass.class_eval do
529
+ assignable_values_for :artist do
530
+ if ::ActiveRecord::VERSION::MAJOR < 4
531
+ MyArtist.scoped
532
+ else
533
+ MyArtist.all
534
+ end
535
+ end
536
+ end
537
+
538
+ artist = MyArtist.create!
539
+ initialized_artists_count.should == 1
540
+
541
+ song = klass.new(:artist => artist)
542
+
543
+ song.valid?
544
+ initialized_artists_count.should == 1
545
+
546
+ song.assignable_artists
547
+ initialized_artists_count.should == 1
548
+
549
+ song.assignable_artists.to_a
550
+ initialized_artists_count.should == 2
551
+ end
552
+ end
553
+
513
554
  end
514
555
 
515
556
  context 'when delegating using the :through option' do
@@ -730,7 +771,7 @@ describe AssignableValues::ActiveRecord do
730
771
  klass.new.assignable_genres.should == %w[pop rock]
731
772
  end
732
773
 
733
- it 'should call #to_a on the list of assignable values, allowing ranges and scopes to be passed as allowed value descriptors' do
774
+ it 'should work with ranges' do
734
775
  klass = Song.disposable_copy do
735
776
  assignable_values_for :year do
736
777
  1999..2001
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: assignable_values
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.1
4
+ version: 0.16.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henning Koch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-14 00:00:00.000000000 Z
11
+ date: 2020-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -91,8 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
91
  - !ruby/object:Gem::Version
92
92
  version: '0'
93
93
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.5.1
94
+ rubygems_version: 3.0.3
96
95
  signing_key:
97
96
  specification_version: 4
98
97
  summary: Restrict the values assignable to ActiveRecord attributes or associations