enummer 1.0.2 → 1.0.4

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: 4b16d1285b14678fff04f2b81f93fd3e161092c85a4895a115e718a8ebd18532
4
- data.tar.gz: a0ee6f85e5b967d04035a77a4cde6ab6f253fd929043764926114d809179abf4
3
+ metadata.gz: 3876abd550e7a6cc2a44853daff2124bcaf7d277c9202d017b93d1f71a9b3223
4
+ data.tar.gz: 0ce455ff89be35d0aa8324570d33a5f4039ae4b3fdd7d67b317192d7bad60c21
5
5
  SHA512:
6
- metadata.gz: b06d115443d1c965eabc9c0627583f98e4f0c9641b595851c3a9574f3e15a6afbe444eb93c1548a1e319250dc3a30a7902fc309c7ae7bdc836608d3baea9abf6
7
- data.tar.gz: 1284a66c8d5e60cc20207ff9b441612be3eaefa635d724e25878adfca3f2bacf11e362909dea2dbc48533455fb137ab78d22bbab1e9bd41bf77a050fa7366a05
6
+ metadata.gz: b54ffad39435c24dcc57cf27914cdcf895be71333d2665ce553775fd39bb51e1ae6b986b25adb3dd52ff19e50319a402fa8e5ff994605fccca74ceb52fba1e63
7
+ data.tar.gz: 876a285e2de4701cef2fa2cf66e36d4d9ae560fb0951686392ad7b2fcbb7458a3ed4b9205742a55b55a3ecf4e39ed86e7816a16b07d1c9786a4cc43f4030913e
data/README.md CHANGED
@@ -46,6 +46,21 @@ User.execute
46
46
  User.not_execute
47
47
  ```
48
48
 
49
+ Additionally, a `with_<name>` scope will be generated which returns all records that match all given options. E.g.:
50
+
51
+ ```ruby
52
+ user1 = User.create!(permissions: %i[read write execute])
53
+ user2 = User.create!(permissions: %i[read write])
54
+ user3 = User.create!(permissions: %i[read])
55
+
56
+ # .where(permissions: ...) will generate an `IN` query, returning all records that have *any*
57
+ # of those permissions.
58
+ User.where(permissions: %i[read write]) # => [user1, user2, user3]
59
+
60
+ # .with_permissions will return only users that have at least all of the given set of permissions
61
+ User.with_permissions(%i[read write]) # => [user1, user2]
62
+ ```
63
+
49
64
  ### Getter methods
50
65
 
51
66
  Simply calling the instance method for the column will return an array of options. Question mark methods are also provided.
@@ -87,6 +102,17 @@ lol stop
87
102
  ## Contributing
88
103
  Make an issue / PR and we'll see.
89
104
 
105
+ ### Development
106
+
107
+ ```bash
108
+ $ cd enummer
109
+ $ bundle install
110
+ $ cd test/dummy
111
+ $ RAILS_ENV=test DATABASE_URL=sqlite3:dummy_test rails db:setup
112
+ $ cd ../..
113
+ $ RAILS_ENV=test DATABASE_URL=sqlite3:dummy_test bin/test
114
+ ```
115
+
90
116
  ## Alternatives
91
117
  - [flag_shih_tzu](https://github.com/pboling/flag_shih_tzu)
92
118
  - Lots of booleans
@@ -22,7 +22,7 @@ module Enummer
22
22
  def serialize(value)
23
23
  return unless value
24
24
 
25
- Array.wrap(value).sum { |value_name| @bit_pairs.fetch(value_name, 0) }
25
+ Array.wrap(value).sum { |value_name| @bit_pairs.fetch(value_name.to_sym, 0) }
26
26
  end
27
27
 
28
28
  # @param [Numeric] value Numeric representation of values
@@ -38,11 +38,12 @@ module Enummer
38
38
 
39
39
  define_method("#{method_name}?") { self[attribute_name].include?(name) }
40
40
  define_method("#{method_name}=") do |new_value|
41
- if new_value
42
- self[attribute_name].push(name)
41
+ if ActiveModel::Type::Boolean.new.cast(new_value)
42
+ self[attribute_name] += [name]
43
43
  else
44
- self[attribute_name].delete(name)
44
+ self[attribute_name] -= [name]
45
45
  end
46
+ self[attribute_name].uniq!
46
47
  end
47
48
  define_method("#{method_name}!") do
48
49
  update(attribute_name => self[attribute_name] + [name])
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Enummer
4
- VERSION = "1.0.2"
4
+ VERSION = "1.0.4"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enummer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Schembri
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-07 00:00:00.000000000 Z
11
+ date: 2024-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -62,7 +62,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
64
  requirements: []
65
- rubygems_version: 3.3.3
65
+ rubygems_version: 3.5.4
66
66
  signing_key:
67
67
  specification_version: 4
68
68
  summary: Multi-value enums for Rails.