enum_table 0.4.0 → 0.5.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/.travis.yml +9 -0
- data/CHANGELOG +4 -0
- data/Gemfile +7 -0
- data/Gemfile.ar3 +13 -0
- data/README.markdown +1 -1
- data/enum_table.gemspec +1 -2
- data/lib/enum_table/record.rb +10 -8
- data/lib/enum_table/version.rb +1 -1
- data/test/enum_table/test_record.rb +42 -14
- metadata +15 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9efb4a2edbe205dac4da12d14820d33a78ddb91f
|
4
|
+
data.tar.gz: 8f4aeb6cbc9ae4455bd2efaefbc7e0a16342d31a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 678a59b0aedd78bcd0ef41b501bf9dfb7e093fee99e348c607353cb812f93ee5d36bcf70827e3b8f291b3eee65fa463c846bbc486e6007c09d19396097eaaa57
|
7
|
+
data.tar.gz: 18c93a939a2a712412133779b92a4f39a4154e8c1b9646d41c9da2087c8aac9d824a778cf090b417f64214f98d96c683b6253d18cbdc599e05918f9e6bf20c13
|
data/.travis.yml
ADDED
data/CHANGELOG
CHANGED
data/Gemfile
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
|
+
gem 'activerecord'
|
2
3
|
gem 'sqlite3'
|
3
4
|
gem 'mysql2'
|
4
5
|
gem 'pg'
|
5
6
|
gem 'minitest', '~> 4.0'
|
6
7
|
gemspec
|
8
|
+
|
9
|
+
group :dev do
|
10
|
+
gem 'ruby-debug-base', platform: :jruby
|
11
|
+
gem 'debugger', platform: :mri_19
|
12
|
+
gem 'byebug', platform: [:mri_20, :mri_21]
|
13
|
+
end
|
data/Gemfile.ar3
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
gem 'activerecord', '~> 3'
|
3
|
+
gem 'sqlite3'
|
4
|
+
gem 'mysql2'
|
5
|
+
gem 'pg'
|
6
|
+
gem 'minitest', '~> 4.0'
|
7
|
+
gemspec
|
8
|
+
|
9
|
+
group :dev do
|
10
|
+
gem 'ruby-debug-base', platform: :jruby
|
11
|
+
gem 'debugger', platform: :mri_19
|
12
|
+
gem 'byebug', platform: [:mri_20, :mri_21]
|
13
|
+
end
|
data/README.markdown
CHANGED
data/enum_table.gemspec
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
1
|
$:.unshift File.expand_path('lib', File.dirname(__FILE__))
|
3
2
|
require 'enum_table/version'
|
4
3
|
|
@@ -16,6 +15,6 @@ Gem::Specification.new do |gem|
|
|
16
15
|
gem.files = `git ls-files`.split("\n")
|
17
16
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
17
|
|
19
|
-
gem.add_runtime_dependency 'activerecord', '
|
18
|
+
gem.add_runtime_dependency 'activerecord', '>= 3', '< 5'
|
20
19
|
gem.add_development_dependency 'ritual', '~> 0.4.1'
|
21
20
|
end
|
data/lib/enum_table/record.rb
CHANGED
@@ -106,7 +106,7 @@ module EnumTable
|
|
106
106
|
(reflection = inheritance_enum) ? super(reflection.value(type_name).to_s) : super
|
107
107
|
end
|
108
108
|
|
109
|
-
# Enables .
|
109
|
+
# Enables .where(name: value) for enums.
|
110
110
|
def expand_hash_conditions_for_aggregates(attrs) # :nodoc:
|
111
111
|
conditions = super
|
112
112
|
enums.each do |name, reflection|
|
@@ -127,14 +127,16 @@ module EnumTable
|
|
127
127
|
conditions
|
128
128
|
end
|
129
129
|
|
130
|
-
|
131
|
-
|
132
|
-
attribute_names
|
133
|
-
|
134
|
-
|
135
|
-
|
130
|
+
if ActiveRecord::VERSION::MAJOR < 4
|
131
|
+
# Enables .find_by_name(value) for enums.
|
132
|
+
def expand_attribute_names_for_aggregates(attribute_names) # :nodoc:
|
133
|
+
attribute_names = super
|
134
|
+
enums.each do |name, reflection|
|
135
|
+
index = attribute_names.index(name) and
|
136
|
+
attribute_names[index] = reflection.id_name
|
137
|
+
end
|
138
|
+
attribute_names
|
136
139
|
end
|
137
|
-
attribute_names
|
138
140
|
end
|
139
141
|
|
140
142
|
# Enables state_machine to set initial values for states. Ick.
|
data/lib/enum_table/version.rb
CHANGED
@@ -8,6 +8,7 @@ describe EnumTable do
|
|
8
8
|
t.integer :gender_id
|
9
9
|
t.integer :status_id
|
10
10
|
t.string :user_type
|
11
|
+
t.integer :lock_version
|
11
12
|
end
|
12
13
|
Object.const_set :User, Class.new(ActiveRecord::Base)
|
13
14
|
end
|
@@ -186,9 +187,13 @@ describe EnumTable do
|
|
186
187
|
attributes.must_equal('gender_id' => 1)
|
187
188
|
end
|
188
189
|
|
189
|
-
it "does not prevent optimistic locking from working, which also uses this internal method" do
|
190
|
-
|
191
|
-
|
190
|
+
it "does not prevent optimistic locking from working, which also uses this internal method in AR < 4" do
|
191
|
+
user = User.create(gender: :male)
|
192
|
+
user.lock_version.must_equal 0
|
193
|
+
|
194
|
+
user = User.find(user.id)
|
195
|
+
user.update_attributes(gender: :female)
|
196
|
+
user.lock_version.must_equal 1
|
192
197
|
end
|
193
198
|
|
194
199
|
it "should favor the ID if both the id and value are present in the attributes hash (so enums override columns)" do
|
@@ -513,14 +518,14 @@ describe EnumTable do
|
|
513
518
|
User.enum :gender, table: {female: 1, male: 2}
|
514
519
|
female = User.create(gender_id: 1)
|
515
520
|
male = User.create(gender_id: 2)
|
516
|
-
User.where(gender: :female).
|
521
|
+
User.where(gender: :female).to_a.must_equal [female]
|
517
522
|
end
|
518
523
|
|
519
524
|
it "supports filtering by enums with string keys" do
|
520
525
|
User.enum :gender, table: {female: 1, male: 2}
|
521
526
|
female = User.create(gender_id: 1)
|
522
527
|
male = User.create(gender_id: 2)
|
523
|
-
User.where('gender' => :female).
|
528
|
+
User.where('gender' => :female).to_a.must_equal [female]
|
524
529
|
end
|
525
530
|
|
526
531
|
it "supports filtering by multiple values" do
|
@@ -528,7 +533,7 @@ describe EnumTable do
|
|
528
533
|
female = User.create(gender_id: 1)
|
529
534
|
male = User.create(gender_id: 2)
|
530
535
|
other = User.create(gender_id: 3)
|
531
|
-
User.where(gender: [:female, :male]).
|
536
|
+
User.where(gender: [:female, :male]).to_a.must_equal [female, male]
|
532
537
|
end
|
533
538
|
|
534
539
|
it "still supports filtering by other attributes" do
|
@@ -536,18 +541,41 @@ describe EnumTable do
|
|
536
541
|
female1 = User.create(gender_id: 1, status_id: 1)
|
537
542
|
male1 = User.create(gender_id: 2, status_id: 1)
|
538
543
|
male2 = User.create(gender_id: 2, status_id: 2)
|
539
|
-
User.where(gender: :male, status_id: 1).
|
544
|
+
User.where(gender: :male, status_id: 1).to_a.must_equal [male1]
|
540
545
|
end
|
541
546
|
end
|
542
547
|
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
+
if ActiveRecord::VERSION::MAJOR < 4
|
549
|
+
describe "dynamic finders" do
|
550
|
+
it "support retrieval by enums" do
|
551
|
+
User.enum :gender, table: {female: 1, male: 2}
|
552
|
+
female = User.create(gender_id: 1)
|
553
|
+
male = User.create(gender_id: 2)
|
548
554
|
|
549
|
-
|
550
|
-
|
555
|
+
User.find_by_gender(:female).must_equal female
|
556
|
+
User.find_all_by_gender(:female).must_equal [female]
|
557
|
+
end
|
558
|
+
end
|
559
|
+
else
|
560
|
+
describe ".find_or_initialize_by" do
|
561
|
+
it "supports building with enums" do
|
562
|
+
User.enum :gender, table: {female: 1, male: 2}
|
563
|
+
|
564
|
+
user = User.find_or_initialize_by(gender: :female)
|
565
|
+
user.gender_id.must_equal 1
|
566
|
+
user.gender.must_equal :female
|
567
|
+
user.save!
|
568
|
+
end
|
569
|
+
|
570
|
+
it "supports finding by enums" do
|
571
|
+
female = User.create(gender_id: 1)
|
572
|
+
male = User.create(gender_id: 2)
|
573
|
+
|
574
|
+
User.enum :gender, table: {female: 1, male: 2}
|
575
|
+
|
576
|
+
user = User.find_or_initialize_by(gender: :female)
|
577
|
+
user.must_equal female
|
578
|
+
end
|
551
579
|
end
|
552
580
|
end
|
553
581
|
|
metadata
CHANGED
@@ -1,29 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enum_table
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- George Ogata
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3'
|
20
|
+
- - "<"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
22
|
+
version: '5'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3'
|
30
|
+
- - "<"
|
25
31
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
32
|
+
version: '5'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: ritual
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -46,8 +52,10 @@ extensions: []
|
|
46
52
|
extra_rdoc_files: []
|
47
53
|
files:
|
48
54
|
- ".gitignore"
|
55
|
+
- ".travis.yml"
|
49
56
|
- CHANGELOG
|
50
57
|
- Gemfile
|
58
|
+
- Gemfile.ar3
|
51
59
|
- LICENSE
|
52
60
|
- README.markdown
|
53
61
|
- Rakefile
|
@@ -85,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
93
|
version: '0'
|
86
94
|
requirements: []
|
87
95
|
rubyforge_project:
|
88
|
-
rubygems_version: 2.2.
|
96
|
+
rubygems_version: 2.2.2
|
89
97
|
signing_key:
|
90
98
|
specification_version: 4
|
91
99
|
summary: Enumeration tables for ActiveRecord
|