enumbler 0.7.0 → 0.8.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/Gemfile.lock +1 -1
- data/README.md +11 -0
- data/lib/enumbler/enabler.rb +45 -0
- data/lib/enumbler/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3b8d2a2e38789cb62f2be5c895aa0fb2776b26b8efbbfe3386e88feaf041393
|
4
|
+
data.tar.gz: d981a2476760ab1d0afb09bd2eb790c125cf54ba54cad3493a5865f52163648b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65c1b774b7fd7fe86e3038c5bfea649608708e57ef626529c933e82e31249a43716b50e54d2a822640d11d6b98321832f032dfedf2efce9a750aebc1e25fd26c
|
7
|
+
data.tar.gz: c223ff2703dd5693ee9925dd4ffc025c890138962001acca6619f8c1d30b7e6056a5275fa84f5c159f163c052b8fbc546c1f9132917b93a96956c6aba9d1e72e
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -91,6 +91,17 @@ Color.ids_from_enumbler(:black, 'does-no-exist') # => [1, nil]
|
|
91
91
|
Color.ids_from_enumbler!(:black, 'does-no-exist') # => raises Enumbler::Error
|
92
92
|
Color.id_from_enumbler!(:does_not_exist) # => raises Enumbler::Error
|
93
93
|
|
94
|
+
# Get a model instance (like `.find_by` in Rails)
|
95
|
+
Color.find_by_enumble(1)
|
96
|
+
Color.find_by_enumble(:black)
|
97
|
+
Color.find_by_enumble("black")
|
98
|
+
Color.find_by_enumble("BLACK")
|
99
|
+
Color.find_by_enumble(Color.black) # => self
|
100
|
+
Color.find_by_enumble("whoops") # => nil
|
101
|
+
|
102
|
+
# Raise ActiveRecord::RecordNotFound error with bang
|
103
|
+
Color.find_by_enumble!("whoops") # => nil
|
104
|
+
|
94
105
|
# Get enumble object by id
|
95
106
|
house = House.create!(color: Color.black)
|
96
107
|
|
data/lib/enumbler/enabler.rb
CHANGED
@@ -126,6 +126,51 @@ module Enumbler
|
|
126
126
|
@enumbler_label_column_name = label_column_name
|
127
127
|
end
|
128
128
|
|
129
|
+
# Like `ActiveRecord#find_by`, will try and return an instance of this
|
130
|
+
# model that matches any of our enumble attributes (instance, id, string,
|
131
|
+
# or symbol).
|
132
|
+
#
|
133
|
+
# Color.find_by_enumble(1)
|
134
|
+
# Color.find_by_enumble(:black)
|
135
|
+
# Color.find_by_enumble("black")
|
136
|
+
# Color.find_by_enumble("BLACK")
|
137
|
+
# Color.find_by_enumble(Color.black) # => self
|
138
|
+
# Color.find_by_enumble("whoops") # => nil
|
139
|
+
#
|
140
|
+
# @param arg [Class, String, Integer, Symbol] search argument
|
141
|
+
# @param case_sensitive [Boolean] string search to be case sensitive (default: false)
|
142
|
+
# @param raise_error [Boolean] whether to raise RecordNotFound error (default: false)
|
143
|
+
# @return [self]
|
144
|
+
def find_by_enumble(arg, case_sensitive: false, raise_error: false)
|
145
|
+
return arg if arg.instance_of?(@enumbled_model)
|
146
|
+
|
147
|
+
id = id_from_enumbler(arg, case_sensitive: case_sensitive, raise_error: raise_error)
|
148
|
+
|
149
|
+
find_by = raise_error ? :find_by! : :find_by
|
150
|
+
@enumbled_model.public_send(find_by, id: id)
|
151
|
+
rescue Enumbler::Error
|
152
|
+
raise ActiveRecord::RecordNotFound.new("Couldn't find #{@enumbled_model}", @enumbled_model)
|
153
|
+
end
|
154
|
+
|
155
|
+
# Like `ActiveRecord#find`, will try and return an instance of this model
|
156
|
+
# that matches any of our enumble attributes (instance, id, string, or
|
157
|
+
# symbol) raises a `RecordNotFound` error if none found.
|
158
|
+
#
|
159
|
+
# Color.find_by_enumble!(1)
|
160
|
+
# Color.find_by_enumble!(:black)
|
161
|
+
# Color.find_by_enumble!("black")
|
162
|
+
# Color.find_by_enumble!("BLACK")
|
163
|
+
# Color.find_by_enumble!(Color.black) # => returns self
|
164
|
+
# Color.find_by_enumble!("whoops") # => raise ActiveRecord::RecordNotFound
|
165
|
+
#
|
166
|
+
# @param arg [Class, String, Integer, Symbol] search argument
|
167
|
+
# @param case_sensitive [Boolean] string search to be case sensitive (default: false)
|
168
|
+
# @param raise_error [Boolean] whether to raise RecordNotFound error (default: false)
|
169
|
+
# @return [self]
|
170
|
+
def find_by_enumble!(arg, case_sensitive: false)
|
171
|
+
find_by_enumble(arg, case_sensitive: case_sensitive, raise_error: true)
|
172
|
+
end
|
173
|
+
|
129
174
|
# See {.find_enumbles}. Simply returns the first object. Use when you
|
130
175
|
# want one argument to be found and not returned in an array.
|
131
176
|
# @raise [Error] when there is no [Enumbler::Enumble] to be found and
|
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.
|
4
|
+
version: 0.8.0
|
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-10-
|
11
|
+
date: 2020-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|