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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bd8d1d86b3abe14b9454f4b36519d41c7d21e6544c749e5db19215d790a4b3dc
4
- data.tar.gz: 44a694212c3feaa9aad8ea5dacd0ca370105e8dc69fe6196b67b158fd0f4ba63
3
+ metadata.gz: a3b8d2a2e38789cb62f2be5c895aa0fb2776b26b8efbbfe3386e88feaf041393
4
+ data.tar.gz: d981a2476760ab1d0afb09bd2eb790c125cf54ba54cad3493a5865f52163648b
5
5
  SHA512:
6
- metadata.gz: 374e370ed1e6ff6575b0d494d57f20b95ebf25116382dbabe723a4450a06e4bf53a1ae688576e632fbbaabd97c4d5aa35f8a048fc71d76caf7d739a2a7d5676a
7
- data.tar.gz: 51772747de3d1e9e3ac2012c1a91223c68470f7caa96127807b30c398870965e781fa813f297fc2a28fa8dfe25bc8a4174836ab8035ce2bcb6eae4e7d41ddf9a
6
+ metadata.gz: 65c1b774b7fd7fe86e3038c5bfea649608708e57ef626529c933e82e31249a43716b50e54d2a822640d11d6b98321832f032dfedf2efce9a750aebc1e25fd26c
7
+ data.tar.gz: c223ff2703dd5693ee9925dd4ffc025c890138962001acca6619f8c1d30b7e6056a5275fa84f5c159f163c052b8fbc546c1f9132917b93a96956c6aba9d1e72e
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- enumbler (0.7.0)
4
+ enumbler (0.8.0)
5
5
  activerecord (>= 5.2.3, < 6.1)
6
6
  activesupport (>= 5.2.3, < 6.1)
7
7
 
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
 
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Enumbler
4
- VERSION = '0.7.0'
4
+ VERSION = '0.8.0'
5
5
  end
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.7.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-01 00:00:00.000000000 Z
11
+ date: 2020-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord