acts_as_enumeration 0.1.15 → 0.1.17

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: 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: