enumbler 0.6.7 → 0.6.12
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/.gitignore +1 -0
- data/Gemfile.lock +3 -1
- data/README.md +12 -0
- data/enumbler.gemspec +1 -0
- data/lib/enumbler.rb +9 -8
- data/lib/enumbler/core_ext/symbol/case_equality_operator.rb +22 -0
- data/lib/enumbler/enabler.rb +19 -3
- data/lib/enumbler/enumble.rb +11 -5
- data/lib/enumbler/version.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d88e3b0c2b84e7fc868c0c249f07024410c345c302fb73ce9d258b69c4521d9f
|
4
|
+
data.tar.gz: 88221bf5dd81bd739e76ee6fafc6d1c7ea88776d5fb2cf63951a685d5ab484fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbb8eda79025a550a86ec856eafacd22f120ac980730036e8127f813e915a9239ff6a3277f9f3cd50b60e8013714f162dfe91b455e72a80c15fb58fc7acda405
|
7
|
+
data.tar.gz: c2c4268c754c0fc957cbe3c6d669e82317c766500ef225c471ddd4e549ba4b6293ffd39ffad0ec42367e6959fd58ef3a3d7f15bf68747809fed9423cb92c5656
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
enumbler (0.6.
|
4
|
+
enumbler (0.6.12)
|
5
5
|
activerecord (>= 5.2.3, < 6.1)
|
6
6
|
activesupport (>= 5.2.3, < 6.1)
|
7
7
|
|
@@ -20,6 +20,7 @@ GEM
|
|
20
20
|
tzinfo (~> 1.1)
|
21
21
|
zeitwerk (~> 2.2, >= 2.2.2)
|
22
22
|
ast (2.4.0)
|
23
|
+
byebug (11.1.3)
|
23
24
|
concurrent-ruby (1.1.6)
|
24
25
|
database_cleaner (1.8.5)
|
25
26
|
database_cleaner-active_record (1.8.0)
|
@@ -72,6 +73,7 @@ PLATFORMS
|
|
72
73
|
ruby
|
73
74
|
|
74
75
|
DEPENDENCIES
|
76
|
+
byebug
|
75
77
|
database_cleaner-active_record (~> 1.8.0)
|
76
78
|
enumbler!
|
77
79
|
fuubar (~> 2.5)
|
data/README.md
CHANGED
@@ -129,6 +129,18 @@ class Feeling < ApplicationRecord
|
|
129
129
|
end
|
130
130
|
```
|
131
131
|
|
132
|
+
## Core ext
|
133
|
+
|
134
|
+
Adds case equality power to the `Symbol` class allowing you to use case methods directly against an enabled instance:
|
135
|
+
|
136
|
+
```ruby
|
137
|
+
case Color.black
|
138
|
+
when :black
|
139
|
+
'not surprised'
|
140
|
+
when :blue, :purple
|
141
|
+
'very surprised'
|
142
|
+
end
|
143
|
+
|
132
144
|
## Development
|
133
145
|
|
134
146
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/enumbler.gemspec
CHANGED
@@ -32,6 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_dependency 'activerecord', ['>= 5.2.3', '< 6.1']
|
33
33
|
spec.add_dependency 'activesupport', ['>= 5.2.3', '< 6.1']
|
34
34
|
|
35
|
+
spec.add_development_dependency 'byebug'
|
35
36
|
spec.add_development_dependency 'database_cleaner-active_record', '~> 1.8.0'
|
36
37
|
spec.add_development_dependency 'fuubar', '~> 2.5'
|
37
38
|
spec.add_development_dependency 'rake', '~> 12.0'
|
data/lib/enumbler.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'enumbler/core_ext/symbol/case_equality_operator'
|
4
|
+
|
3
5
|
require 'enumbler/collection'
|
4
6
|
require 'enumbler/enumble'
|
5
7
|
require 'enumbler/enabler'
|
@@ -55,7 +57,7 @@ module Enumbler
|
|
55
57
|
# example: `where_by` will make it `House.where_by_color(:black)`
|
56
58
|
# @param **options [Hash] additional options passed to `belongs_to`
|
57
59
|
def enumbled_to(name, scope = nil, prefix: false, scope_prefix: nil, **options)
|
58
|
-
class_name = name.to_s.classify
|
60
|
+
class_name = options.fetch(:class_name, name.to_s.classify)
|
59
61
|
enumbled_model = class_name.constantize
|
60
62
|
|
61
63
|
unless enumbled_model.respond_to?(:enumbles)
|
@@ -66,7 +68,7 @@ module Enumbler
|
|
66
68
|
belongs_to(name, scope, **options)
|
67
69
|
|
68
70
|
define_helper_attributes(name)
|
69
|
-
define_dynamic_methods_for_enumbled_to_models(enumbled_model, prefix: prefix, scope_prefix: scope_prefix)
|
71
|
+
define_dynamic_methods_for_enumbled_to_models(name, enumbled_model, prefix: prefix, scope_prefix: scope_prefix)
|
70
72
|
rescue NameError
|
71
73
|
raise Error, "The model #{class_name} cannot be found. Uninitialized constant."
|
72
74
|
end
|
@@ -78,11 +80,10 @@ module Enumbler
|
|
78
80
|
# @todo - we should check for naming conflicts!
|
79
81
|
# dangerous_attribute_method?(method_name)
|
80
82
|
# method_defined_within?(method_name, self, Module)
|
81
|
-
def define_dynamic_methods_for_enumbled_to_models(enumbled_model, prefix: false, scope_prefix: nil)
|
82
|
-
|
83
|
-
column_name = "#{model_name}_id"
|
83
|
+
def define_dynamic_methods_for_enumbled_to_models(name, enumbled_model, prefix: false, scope_prefix: nil)
|
84
|
+
column_name = "#{name}_id"
|
84
85
|
|
85
|
-
cmethod = scope_prefix.blank? ?
|
86
|
+
cmethod = scope_prefix.blank? ? name : "#{scope_prefix}_#{name}"
|
86
87
|
define_singleton_method(cmethod) do |*args|
|
87
88
|
where(column_name => enumbled_model.ids_from_enumbler(args))
|
88
89
|
end
|
@@ -92,8 +93,8 @@ module Enumbler
|
|
92
93
|
end
|
93
94
|
|
94
95
|
enumbled_model.enumbles.each do |enumble|
|
95
|
-
method_name = prefix ? "#{
|
96
|
-
not_method_name = prefix ? "#{
|
96
|
+
method_name = prefix ? "#{name}_#{enumble.enum}?" : "#{enumble.enum}?"
|
97
|
+
not_method_name = prefix ? "#{name}_not_#{enumble.enum}?" : "not_#{enumble.enum}?"
|
97
98
|
define_method(method_name) { self[column_name] == enumble.id }
|
98
99
|
define_method(not_method_name) { self[column_name] != enumble.id }
|
99
100
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Use case equality operator with an enabled class.
|
4
|
+
#
|
5
|
+
# case House.black
|
6
|
+
# when :black
|
7
|
+
# 'this is true'
|
8
|
+
# when :blue, :purple
|
9
|
+
# 'this is not'
|
10
|
+
# end
|
11
|
+
class Symbol
|
12
|
+
def ===(other)
|
13
|
+
super ||
|
14
|
+
other.class.included_modules.include?(Enumbler::Enabler) &&
|
15
|
+
other.enumble.enum == self
|
16
|
+
|
17
|
+
# Calling #enumble on a new instance that has not been defined raises an
|
18
|
+
# error, so catching that edge case here
|
19
|
+
rescue Enumbler::Error
|
20
|
+
false
|
21
|
+
end
|
22
|
+
end
|
data/lib/enumbler/enabler.rb
CHANGED
@@ -17,13 +17,29 @@ module Enumbler
|
|
17
17
|
@enumble
|
18
18
|
end
|
19
19
|
|
20
|
+
# The enumble graphql_enum if it exists.
|
21
|
+
# @return [Symbol]
|
22
|
+
def to_graphql_enum
|
23
|
+
to_enumble_attribute(:graphql_enum) || super
|
24
|
+
end
|
25
|
+
|
20
26
|
# The enumble label if it exists.
|
21
27
|
# @return [String]
|
22
28
|
def to_s
|
23
|
-
|
24
|
-
|
29
|
+
to_enumble_attribute(:label) || super
|
30
|
+
end
|
25
31
|
|
26
|
-
|
32
|
+
# The enumble symbol if it exists.
|
33
|
+
# @return [Symbol]
|
34
|
+
def to_sym
|
35
|
+
to_enumble_attribute(:enum) || super
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def to_enumble_attribute(attribute)
|
41
|
+
enumble = self.class.find_enumble(id)
|
42
|
+
return enumble.send(attribute) if enumble.present?
|
27
43
|
end
|
28
44
|
|
29
45
|
# These ClassMethods can be included in any model that you wish to
|
data/lib/enumbler/enumble.rb
CHANGED
@@ -8,9 +8,10 @@ module Enumbler
|
|
8
8
|
def initialize(enum, id, label: nil, label_column_name: :label, **attributes)
|
9
9
|
@id = id
|
10
10
|
@enum = enum
|
11
|
-
@label = label || enum.to_s.dasherize
|
12
11
|
@label_column_name = label_column_name
|
12
|
+
@label = (label_col_specified? ? attributes[label_column_name] : label) || enum.to_s.dasherize
|
13
13
|
@additional_attributes = attributes || {}
|
14
|
+
@additional_attributes.merge!({ label: label }) if label_col_specified?
|
14
15
|
end
|
15
16
|
|
16
17
|
def ==(other)
|
@@ -19,10 +20,9 @@ module Enumbler
|
|
19
20
|
end
|
20
21
|
|
21
22
|
def attributes
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
})
|
23
|
+
hash = { id: id, label_column_name => label }
|
24
|
+
hash.merge!({ label: @additional_attributes[:label] }) if label_col_specified?
|
25
|
+
@additional_attributes.merge(hash)
|
26
26
|
end
|
27
27
|
|
28
28
|
# Used to return itself from a class method.
|
@@ -50,5 +50,11 @@ module Enumbler
|
|
50
50
|
def to_s
|
51
51
|
enum
|
52
52
|
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def label_col_specified?
|
57
|
+
label_column_name != :label
|
58
|
+
end
|
53
59
|
end
|
54
60
|
end
|
data/lib/enumbler/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enumbler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Damon Timm
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -50,6 +50,20 @@ dependencies:
|
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: '6.1'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: byebug
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
type: :development
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
53
67
|
- !ruby/object:Gem::Dependency
|
54
68
|
name: database_cleaner-active_record
|
55
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -157,6 +171,7 @@ files:
|
|
157
171
|
- enumbler.gemspec
|
158
172
|
- lib/enumbler.rb
|
159
173
|
- lib/enumbler/collection.rb
|
174
|
+
- lib/enumbler/core_ext/symbol/case_equality_operator.rb
|
160
175
|
- lib/enumbler/enabler.rb
|
161
176
|
- lib/enumbler/enumble.rb
|
162
177
|
- lib/enumbler/version.rb
|