acts_as_enumeration 0.1.15 → 0.1.17

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
- SHA1:
3
- metadata.gz: 4afd8b2c797537339bee4306d4061e213cac31ad
4
- data.tar.gz: 4f53befa038a1f14a8e51afe7776637105307c5b
2
+ SHA256:
3
+ metadata.gz: 718e945ae870fccfeeccc24a0da07df9eec10398a812f80b7754a5c64c232069
4
+ data.tar.gz: ee06785a3f3d10ddec6c6fe09f25c6b4e730b600f9c9354b5d710415ceab6635
5
5
  SHA512:
6
- metadata.gz: 1b8e2ca924a72b9dadf91810c4b4872d59ca472176ea7f0bece27c28ca241e3ae78e4226bb1cd87baef1b3d8a3bf5f3bd5f692288f0f1e1d8d0c11837b73db29
7
- data.tar.gz: 9c529b7e047b55f30500cac391812c048a5706fe8d21749a9b3e729e6b93d1b4bcc23c009d63fbdbec0066f4f72804f434c8c8bc04587a76dcabe1e2beacf067
6
+ metadata.gz: aa17d9df0e149bd4ab644ff27850dc68226d1742b8c448e5df93b1dcec8c2a47bb1d2a2535d0303afa727cf849a3ec463394022f557ae73f22e73a956aebc1e8
7
+ data.tar.gz: 44bb24803543f1211bd7a50b3d183d9fa10698c3754a64c5c84c978e60bb26574fb94abd60e795d1993c40f2a71742761658f5d7ebb13a66657e523df3d830a7
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in acts_as_enumeration.gemspec
data/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # ActsAsEnumeration
2
2
 
3
+ If you've found this, you may be wondering why it exists since Rails has had enum since version 4.1.8. The biggest
4
+ difference with this one is that it allows you to have a separate table to hold your enumerated values and have the
5
+ primary key as the enumeration, which adds flexibility in how they are used.
6
+
7
+ The big plus that ActiveRecord::Enum has is that it adds scopes directly,
8
+
3
9
  acts_as_enumeration and its aliases acts_as_enumerable, acts_as_enum, enumerable_column and enum_column
4
10
  allow for unique names in a database column to behave as if they were enumerated
5
11
  types, including chaining etc.
data/Rakefile CHANGED
@@ -1,2 +1,3 @@
1
- require "bundler/gem_tasks"
1
+ # frozen_string_literal: true
2
2
 
3
+ require 'bundler/gem_tasks'
@@ -1,5 +1,8 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ require 'English'
4
+
5
+ lib = File.expand_path('lib', __dir__)
3
6
  require File.dirname(__FILE__) + '/lib/active_record/acts/enumeration'
4
7
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
8
 
@@ -9,27 +12,19 @@ Gem::Specification.new do |spec|
9
12
  spec.authors = ['Paul McKibbin']
10
13
  spec.email = ['pmckibbin@gmail.com']
11
14
 
12
- spec.description = %q(Active Record extender to enable the selection of a database column and have all of it's values enumerable)
13
- spec.summary = %q(enumerable values from database columns)
14
- spec.homepage = "http://blackrat.org"
15
- spec.license = "MIT"
15
+ spec.description = 'Active Record extender to make a database column enumerable and queryable'
16
+ spec.summary = 'enumerable values from database columns'
17
+ spec.homepage = 'http://blackrat.org'
18
+ spec.license = 'MIT'
16
19
 
17
- spec.files = `git ls-files`.split($/)
20
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
18
21
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
22
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
23
  spec.require_paths = ['lib']
21
24
 
22
- spec.add_development_dependency 'bundler', '~> 1.3'
23
- spec.add_development_dependency 'rake'
24
- spec.add_development_dependency 'sqlite3'
25
- if RUBY_VERSION >= '2.2.2'
26
- spec.add_development_dependency 'minitest'
27
- spec.add_development_dependency 'activerecord'
28
- elsif RUBY_VERSION >= '1.9'
29
- spec.add_development_dependency 'minitest'
30
- spec.add_development_dependency 'activerecord', '~> 3.0'
31
- else
32
- spec.add_development_dependency 'test-unit'
33
- spec.add_development_dependency 'activerecord', '~> 2.3'
34
- end
25
+ spec.add_development_dependency 'activerecord', '~> 6.1'
26
+ spec.add_development_dependency 'bundler', '~> 2.2.24'
27
+ spec.add_development_dependency 'minitest', '~> 5.14'
28
+ spec.add_development_dependency 'rake', '~> 13.0'
29
+ spec.add_development_dependency 'sqlite3', '~> 1.4'
35
30
  end
data/init.rb CHANGED
@@ -1 +1,3 @@
1
- require File.join(File.dirname(__FILE__), 'lib', 'acts_as_enumeration')
1
+ # frozen_string_literal: true
2
+
3
+ require File.join(File.dirname(__FILE__), 'lib', 'acts_as_enumeration')
@@ -1,10 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module Acts
3
5
  module Enumeration
4
-
5
- VERSION="0.1.15"
6
+ VERSION = '0.1.17'
6
7
  class << self
7
-
8
8
  def included(base)
9
9
  base.instance_eval do
10
10
  extend ClassMethods
@@ -13,9 +13,12 @@ module ActiveRecord
13
13
  end
14
14
 
15
15
  module ClassMethods
16
+ extend Gem::Deprecate
17
+
16
18
  private
19
+
17
20
  def portable_select(*args)
18
- respond_to?(:scoped) ? scoped(:select => "#{args.join(',')}") : select(*args)
21
+ respond_to?(:scoped) ? scoped(select: args.join(',').to_s) : select(*args)
19
22
  end
20
23
 
21
24
  def normalize(string)
@@ -23,24 +26,25 @@ module ActiveRecord
23
26
  end
24
27
 
25
28
  public
29
+
26
30
  def normalize_intern(string)
27
31
  normalize(string).intern
28
32
  end
29
33
 
30
34
  def acts_as_enumeration(*args)
31
- class << self;
32
- attr_accessor :enumeration;
35
+ class << self
36
+ attr_accessor :enumeration
33
37
  end
34
- self.enumeration||=HashWithIndifferentAccess.new
38
+ self.enumeration ||= HashWithIndifferentAccess.new
35
39
  args.each do |field|
36
- self.enumeration[field]=HashWithIndifferentAccess[
40
+ self.enumeration[field] = HashWithIndifferentAccess[
37
41
  *portable_select(field, primary_key).map do |x|
38
42
  [normalize_intern(x.send(field)), x.send(x.class.primary_key)]
39
43
  end.flatten
40
44
  ]
41
45
  (
42
- class << self;
43
- self;
46
+ class << self
47
+ self
44
48
  end).class_eval do
45
49
  define_method(:enumerations) { |name| self.enumeration[name.intern] }
46
50
  define_method("#{field}_valid?") { |value| !!send("id_for_#{field}", value) }
@@ -48,16 +52,36 @@ module ActiveRecord
48
52
  define_method("id_for_#{field}") { |value| enumerations(field)[value.intern] }
49
53
  define_method("for_#{field}") { |value| find(send("id_for_#{field}", value)) }
50
54
  define_method("enum_#{field}") { enumerations(field) }
51
- define_method("as_key") { |value| find(value).as_key rescue nil }
55
+ define_method('as_key') do |value|
56
+ begin
57
+ find(value).as_key
58
+ rescue StandardError
59
+ nil
60
+ end
61
+ end
62
+ end
63
+
64
+ define_method(:is?) do |*types|
65
+ types.any? do |x|
66
+ self == (begin
67
+ self.class.send(x)
68
+ rescue StandardError
69
+ nil
70
+ end)
71
+ end
72
+ end
73
+ # Deprecated: Please use 'not?' instead
74
+ define_method(:is_not?) do |*types|
75
+ not?(*types)
52
76
  end
77
+ define_method(:not?) { |*types| !is?(*types) }
78
+ deprecate :is_not?, :not?, '2021', '7'
53
79
 
54
- define_method(:is?) { |*types| types.any? { |x| self==(self.class.send(x) rescue nil) } }
55
- define_method(:is_not?) { |*types| !is?(*types) }
56
80
  define_method(:method_missing) do |method_id, *args, &block|
57
- method_name=method_id.to_s
58
- if match_data=method_name.match(/^(is[_not]*)(\?|_(\w*)\?)/)
59
- method =match_data[1] << "?"
60
- new_args= (match_data[2]=='?') ? args : match_data[3].split(/_or_/)
81
+ method_name = method_id.to_s
82
+ if match_data = method_name.match(/^(is[_not]*)(\?|_(\w*)\?)/)
83
+ method = match_data[1] << '?'
84
+ new_args = match_data[2] == '?' ? args : match_data[3].split(/_or_/)
61
85
  respond_to?(method) ? send(method, *new_args, &block) : false
62
86
  else
63
87
  super method_id, *args, &block
@@ -65,57 +89,55 @@ module ActiveRecord
65
89
  end
66
90
 
67
91
  def allowed_chars(string)
68
- string.to_s=~/^[a-z_]/
92
+ string.to_s =~ /^[a-z_]/
69
93
  end
70
94
 
71
- def check_string(string, &block)
95
+ def check_string(string)
72
96
  allowed_chars(string) && (yield string)
73
97
  end
74
98
 
75
99
  def _key(string)
76
- check_string(string) {|y| !respond_to?(y)} ? string : "_#{string}"
100
+ check_string(string) { |y| !respond_to?(y) } ? string : "_#{string}"
77
101
  end
78
102
 
79
103
  def _camelized_key(string)
80
- check_string(string) {|y| !const_defined?(string.camelize)} ? string.camelize : "_#{string.camelize}"
104
+ check_string(string) { |_y| !const_defined?(string.camelize) } ? string.camelize : "_#{string.camelize}"
81
105
  end
82
106
 
83
107
  def _camelized_upcase_key(string)
84
- check_string(string) {|y| !const_defined?(string.camelize.upcase)} ? string.camelize.upcase : "_#{string.camelize.upcase}"
108
+ check_string(string) { |_y| !const_defined?(string.camelize.upcase) } ? string.camelize.upcase : "_#{string.camelize.upcase}"
85
109
  end
86
110
 
87
111
  portable_select(field).map { |x| normalize_intern(x.send(field)) }.each do |y|
88
- key=_key(y.to_s)
89
- camelized_key=_camelized_key(y.to_s)
90
- camelized_upcase_key=_camelized_upcase_key(y.to_s)
112
+ key = _key(y.to_s)
113
+ camelized_key = _camelized_key(y.to_s)
114
+ camelized_upcase_key = _camelized_upcase_key(y.to_s)
91
115
  define_method(:as_key) { self.class.normalize_intern(send(field)) }
92
116
  define_method("is_#{y}?") { is?(y) }
93
117
  alias_method "#{key}?", "is_#{y}?"
94
- class << self;
95
- self;
118
+ class << self
119
+ self
96
120
  end.instance_eval do
97
- define_method(key) { self.send("for_#{field}", y) }
98
- define_method(camelized_key) { self.send("id_for_#{field}", y)}
99
- define_method(camelized_upcase_key) { self.send("id_for_#{field}", y)}
121
+ define_method(key) { send("for_#{field}", y) }
122
+ define_method(camelized_key) { send("id_for_#{field}", y) }
123
+ define_method(camelized_upcase_key) { send("id_for_#{field}", y) }
100
124
  end
101
125
  begin
102
- self.const_set(camelized_key,self.send("id_for_#{field}",y))
103
- rescue Exception=>e
126
+ const_set(camelized_key, send("id_for_#{field}", y))
127
+ rescue Exception => e
104
128
  puts("Warning: Skipping constant definition for #{camelized_key}")
105
129
  end
106
130
  begin
107
- self.const_set(camelized_upcase_key,self.send("id_for_#{field}",y))
108
- rescue Exception=>e
131
+ const_set(camelized_upcase_key, send("id_for_#{field}", y))
132
+ rescue Exception => e
109
133
  puts("Warning: Skipping constant definition for #{camelized_upcase_key}")
110
134
  end
111
135
  end
112
136
  end
113
137
  end
114
138
 
115
- [:acts_as_enum, :enum_column, :enumerable_column, :acts_as_enumerable].each do |aliased|
116
- unless defined?(aliased)
117
- alias_method aliased, :acts_as_enumeration
118
- end
139
+ %i[acts_as_enum enum_column enumerable_column acts_as_enumerable].each do |aliased|
140
+ alias_method aliased, :acts_as_enumeration unless defined?(aliased)
119
141
  end
120
142
  end
121
143
  end
@@ -1,2 +1,2 @@
1
- require (File.join(File.dirname(__FILE__), 'active_record', 'acts', 'enumeration.rb'))
2
- ActiveRecord::Base.send :include, ActiveRecord::Acts::Enumeration
1
+ require File.join(File.dirname(__FILE__), 'active_record', 'acts', 'enumeration.rb')
2
+ ActiveRecord::Base.include ActiveRecord::Acts::Enumeration
@@ -1,25 +1,26 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
- if RUBY_VERSION >= '1.9'
3
- require 'minitest/autorun'
4
- require 'active_record'
5
- else
6
- require 'test/unit'
7
- require 'activerecord'
8
- require 'sqlite3'
9
- end
4
+ require 'minitest/autorun'
5
+ require 'active_record'
6
+
10
7
  $:.unshift File.dirname(__FILE__) + '/../lib'
11
8
  require 'acts_as_enumeration'
12
9
 
13
- ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
10
+ ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
14
11
 
15
12
  def setup_db
16
13
  ActiveRecord::Base.logger
17
- ActiveRecord::Schema.define(:version => 1) do
14
+ ActiveRecord::Schema.define(version: 1) do
18
15
  create_table :enumerates do |t|
19
16
  t.column :type, :string
20
17
  t.column :name, :string
21
18
  t.column :description, :string
22
19
  end
20
+
21
+ create_table :associated_tables do |t|
22
+ t.references :enumerates
23
+ end
23
24
  end
24
25
  end
25
26
 
@@ -36,23 +37,27 @@ class BrokenEnumeration < Enumerate; end
36
37
 
37
38
  class EnumerateTest < (
38
39
  begin
39
- MiniTest::Test rescue Test::Unit::TestCase
40
+ begin
41
+ MiniTest::Test
42
+ rescue StandardError
43
+ Test::Unit::TestCase
44
+ end
40
45
  end)
41
46
  def setup
42
47
  setup_db
43
48
  [EnumerateAll].each do |klass|
44
- klass.create! :name => 'first', :description => 'First field'
45
- klass.create! :name => 'second', :description => 'Second field'
46
- klass.create! :name => 'third', :description => 'Third field'
49
+ klass.create! name: 'first', description: 'First field'
50
+ klass.create! name: 'second', description: 'Second field'
51
+ klass.create! name: 'third', description: 'Third field'
47
52
  end
48
53
  [EnumerateSome].each do |klass|
49
- klass.create! :name => 'forth', :description => 'Forth field'
50
- klass.create! :name => 'fifth', :description => 'Fifth field'
51
- klass.create! :name => 'sixth', :description => 'Sixth field'
54
+ klass.create! name: 'forth', description: 'Forth field'
55
+ klass.create! name: 'fifth', description: 'Fifth field'
56
+ klass.create! name: 'sixth', description: 'Sixth field'
52
57
  end
53
58
  [BrokenEnumeration].each do |klass|
54
- klass.create! :name => '33108', :description => '33108 field'
55
- klass.create! :name => 'all', :description => 'already defined method'
59
+ klass.create! name: '33108', description: '33108 field'
60
+ klass.create! name: 'all', description: 'already defined method'
56
61
  end
57
62
  EnumerateAll.acts_as_enumeration :description
58
63
  EnumerateSome.acts_as_enumeration :description
@@ -83,15 +88,15 @@ end)
83
88
  assert !EnumerateAll.valid_description?(:blah_blah_field)
84
89
  assert !EnumerateAll.valid_description?('blah_blah_field')
85
90
  assert Enumerate.first.id, EnumerateAll.id_for_description(:first_field)
86
- assert EnumerateAll::FIRSTFIELD,Enumerate.first.id
87
- assert EnumerateAll::FirstField,Enumerate.first.id
88
- assert EnumerateAll.FIRSTFIELD,Enumerate.first.id
89
- assert EnumerateAll.FirstField,Enumerate.first.id
90
- assert BrokenEnumeration._33108,BrokenEnumeration.first.id
91
- assert BrokenEnumeration._all,BrokenEnumeration.find_by_name('all')
92
- assert BrokenEnumeration::All,BrokenEnumeration.find_by_name('all').id
93
- assert BrokenEnumeration::ALL,BrokenEnumeration.find_by_name('all').id
94
- assert BrokenEnumeration::ALL,BrokenEnumeration.id_for_name(:all)
91
+ assert EnumerateAll::FIRSTFIELD, Enumerate.first.id
92
+ assert EnumerateAll::FirstField, Enumerate.first.id
93
+ assert EnumerateAll.FIRSTFIELD, Enumerate.first.id
94
+ assert EnumerateAll.FirstField, Enumerate.first.id
95
+ assert BrokenEnumeration._33108, BrokenEnumeration.first.id
96
+ assert BrokenEnumeration._all, BrokenEnumeration.find_by_name('all')
97
+ assert BrokenEnumeration::All, BrokenEnumeration.find_by_name('all').id
98
+ assert BrokenEnumeration::ALL, BrokenEnumeration.find_by_name('all').id
99
+ assert BrokenEnumeration::ALL, BrokenEnumeration.id_for_name(:all)
95
100
  end
96
101
 
97
102
  def test_sti
@@ -116,4 +121,3 @@ end)
116
121
  assert EnumerateSome.first.id, EnumerateSome.id_for_description(:forth_field)
117
122
  end
118
123
  end
119
-
metadata CHANGED
@@ -1,87 +1,86 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_enumeration
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.15
4
+ version: 0.1.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul McKibbin
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-25 00:00:00.000000000 Z
11
+ date: 2021-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '6.1'
20
20
  type: :development
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: '1.3'
26
+ version: '6.1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 2.2.24
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
- version: '0'
40
+ version: 2.2.24
41
41
  - !ruby/object:Gem::Dependency
42
- name: sqlite3
42
+ name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '5.14'
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
- version: '0'
54
+ version: '5.14'
55
55
  - !ruby/object:Gem::Dependency
56
- name: minitest
56
+ name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '13.0'
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
- version: '0'
68
+ version: '13.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: activerecord
70
+ name: sqlite3
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '1.4'
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
- version: '0'
83
- description: Active Record extender to enable the selection of a database column and
84
- have all of it's values enumerable
82
+ version: '1.4'
83
+ description: Active Record extender to make a database column enumerable and queryable
85
84
  email:
86
85
  - pmckibbin@gmail.com
87
86
  executables: []
@@ -103,7 +102,7 @@ homepage: http://blackrat.org
103
102
  licenses:
104
103
  - MIT
105
104
  metadata: {}
106
- post_install_message:
105
+ post_install_message:
107
106
  rdoc_options: []
108
107
  require_paths:
109
108
  - lib
@@ -118,9 +117,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
117
  - !ruby/object:Gem::Version
119
118
  version: '0'
120
119
  requirements: []
121
- rubyforge_project:
122
- rubygems_version: 2.6.12
123
- signing_key:
120
+ rubygems_version: 3.1.4
121
+ signing_key:
124
122
  specification_version: 4
125
123
  summary: enumerable values from database columns
126
124
  test_files: