str_enum 0.1.4 → 0.3.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 +5 -5
- data/CHANGELOG.md +23 -5
- data/LICENSE.txt +1 -1
- data/README.md +37 -2
- data/lib/str_enum/model.rb +49 -0
- data/lib/str_enum/version.rb +1 -1
- data/lib/str_enum.rb +5 -25
- metadata +15 -61
- data/.gitignore +0 -9
- data/Gemfile +0 -7
- data/Rakefile +0 -10
- data/str_enum.gemspec +0 -25
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 620b3321fd0fa64430af924b39bb0f07bfb3564868e7b56e5667b3df94f895f3
|
|
4
|
+
data.tar.gz: 5bf7bb0b10750e5134fef78fc9176f222f0d2d98abfabff2c6d969400fa589cb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e9ced975c17b9bec4077dbdd7a0efc52bcf939c3579533656065001c98c77d374efcf22f330c891fd37f1df18c71e4f0fea987a09cfea8843d7401584ad6be94
|
|
7
|
+
data.tar.gz: 22de16567abcd58b9e8e5eb5e0e60fe5e68879e4c687c0bb574d3c0d925296118bacee4d00265368b81306984e8620f57ff3da639297be8921057195a454f904
|
data/CHANGELOG.md
CHANGED
|
@@ -1,19 +1,37 @@
|
|
|
1
|
-
## 0.
|
|
1
|
+
## 0.3.0 (2022-01-10)
|
|
2
|
+
|
|
3
|
+
- Dropped support for Ruby < 2.6 and Active Record < 5.2
|
|
4
|
+
|
|
5
|
+
## 0.2.0 (2019-10-28)
|
|
6
|
+
|
|
7
|
+
- Added negative scopes
|
|
8
|
+
- Moved presence validation message before inclusion message
|
|
9
|
+
|
|
10
|
+
## 0.1.6 (2019-07-15)
|
|
11
|
+
|
|
12
|
+
- Added update methods
|
|
13
|
+
|
|
14
|
+
## 0.1.5 (2016-12-12)
|
|
15
|
+
|
|
16
|
+
- Added `default` option
|
|
17
|
+
- Added ability to include manually
|
|
18
|
+
|
|
19
|
+
## 0.1.4 (2016-10-28)
|
|
2
20
|
|
|
3
21
|
- Fixed error with `select`
|
|
4
22
|
|
|
5
|
-
## 0.1.3
|
|
23
|
+
## 0.1.3 (2016-10-24)
|
|
6
24
|
|
|
7
25
|
- Added `suffix` option
|
|
8
26
|
|
|
9
|
-
## 0.1.2
|
|
27
|
+
## 0.1.2 (2016-10-24)
|
|
10
28
|
|
|
11
29
|
- Added method to list values
|
|
12
30
|
|
|
13
|
-
## 0.1.1
|
|
31
|
+
## 0.1.1 (2016-10-23)
|
|
14
32
|
|
|
15
33
|
- Added `prefix` option
|
|
16
34
|
|
|
17
|
-
## 0.1.0
|
|
35
|
+
## 0.1.0 (2016-10-23)
|
|
18
36
|
|
|
19
37
|
- First release
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
|
@@ -7,13 +7,16 @@ String enums for Rails!! :tada:
|
|
|
7
7
|
- scopes
|
|
8
8
|
- validations
|
|
9
9
|
- accessor methods
|
|
10
|
+
- update methods
|
|
11
|
+
|
|
12
|
+
[](https://github.com/ankane/str_enum/actions)
|
|
10
13
|
|
|
11
14
|
## Getting Started
|
|
12
15
|
|
|
13
16
|
Add this line to your application’s Gemfile:
|
|
14
17
|
|
|
15
18
|
```ruby
|
|
16
|
-
gem
|
|
19
|
+
gem "str_enum"
|
|
17
20
|
```
|
|
18
21
|
|
|
19
22
|
Add a string column to your model.
|
|
@@ -39,6 +42,13 @@ User.active
|
|
|
39
42
|
User.archived
|
|
40
43
|
```
|
|
41
44
|
|
|
45
|
+
And negative scopes
|
|
46
|
+
|
|
47
|
+
```ruby
|
|
48
|
+
User.not_active
|
|
49
|
+
User.not_archived
|
|
50
|
+
```
|
|
51
|
+
|
|
42
52
|
#### Validations
|
|
43
53
|
|
|
44
54
|
```ruby
|
|
@@ -53,6 +63,13 @@ user.active?
|
|
|
53
63
|
user.archived?
|
|
54
64
|
```
|
|
55
65
|
|
|
66
|
+
#### Update Methods
|
|
67
|
+
|
|
68
|
+
```ruby
|
|
69
|
+
user.active!
|
|
70
|
+
user.archived!
|
|
71
|
+
```
|
|
72
|
+
|
|
56
73
|
#### Forms
|
|
57
74
|
|
|
58
75
|
```erb
|
|
@@ -65,7 +82,12 @@ Choose which features you want with:
|
|
|
65
82
|
|
|
66
83
|
```ruby
|
|
67
84
|
class User < ActiveRecord::Base
|
|
68
|
-
str_enum :status, [:active, :archived],
|
|
85
|
+
str_enum :status, [:active, :archived],
|
|
86
|
+
scopes: false,
|
|
87
|
+
validate: false,
|
|
88
|
+
accessor_methods: false,
|
|
89
|
+
update_methods: false,
|
|
90
|
+
default: nil
|
|
69
91
|
end
|
|
70
92
|
```
|
|
71
93
|
|
|
@@ -83,6 +105,10 @@ User.archived_address
|
|
|
83
105
|
# accessor methods
|
|
84
106
|
user.active_address?
|
|
85
107
|
user.archived_address?
|
|
108
|
+
|
|
109
|
+
# update methods
|
|
110
|
+
user.active_address!
|
|
111
|
+
user.archived_address!
|
|
86
112
|
```
|
|
87
113
|
|
|
88
114
|
## History
|
|
@@ -97,3 +123,12 @@ Everyone is encouraged to help improve this project. Here are a few ways you can
|
|
|
97
123
|
- Fix bugs and [submit pull requests](https://github.com/ankane/str_enum/pulls)
|
|
98
124
|
- Write, clarify, or fix documentation
|
|
99
125
|
- Suggest or add new features
|
|
126
|
+
|
|
127
|
+
To get started with development and testing:
|
|
128
|
+
|
|
129
|
+
```sh
|
|
130
|
+
git clone https://github.com/ankane/str_enum.git
|
|
131
|
+
cd str_enum
|
|
132
|
+
bundle install
|
|
133
|
+
bundle exec rake test
|
|
134
|
+
```
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require "active_support/concern"
|
|
2
|
+
|
|
3
|
+
module StrEnum
|
|
4
|
+
module Model
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
class_methods do
|
|
8
|
+
def str_enum(column, values, validate: true, scopes: true, accessor_methods: true, update_methods: true, prefix: false, suffix: false, default: true, allow_nil: false)
|
|
9
|
+
values = values.map(&:to_s)
|
|
10
|
+
if validate
|
|
11
|
+
validate_options = {}
|
|
12
|
+
if allow_nil
|
|
13
|
+
validate_options[:allow_nil] = true
|
|
14
|
+
else
|
|
15
|
+
validate_options[:presence] = true
|
|
16
|
+
end
|
|
17
|
+
validate_options[:inclusion] = {in: values}
|
|
18
|
+
validates column, validate_options
|
|
19
|
+
end
|
|
20
|
+
values.each do |value|
|
|
21
|
+
prefix = column if prefix == true
|
|
22
|
+
suffix = column if suffix == true
|
|
23
|
+
method_name = [prefix, value, suffix].select { |v| v }.join("_")
|
|
24
|
+
if scopes
|
|
25
|
+
scope method_name, -> { where(column => value) } unless respond_to?(method_name)
|
|
26
|
+
scope "not_#{method_name}", -> { where.not(column => value) } unless respond_to?("not_#{method_name}")
|
|
27
|
+
end
|
|
28
|
+
if accessor_methods && !method_defined?("#{method_name}?")
|
|
29
|
+
define_method "#{method_name}?" do
|
|
30
|
+
read_attribute(column) == value
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
if update_methods && !method_defined?("#{method_name}!")
|
|
34
|
+
define_method "#{method_name}!" do
|
|
35
|
+
update!(column => value)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
default_value = default == true ? values.first : default
|
|
40
|
+
after_initialize do
|
|
41
|
+
send("#{column}=", default_value) unless try(column)
|
|
42
|
+
end
|
|
43
|
+
define_singleton_method column.to_s.pluralize do
|
|
44
|
+
values
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
data/lib/str_enum/version.rb
CHANGED
data/lib/str_enum.rb
CHANGED
|
@@ -1,30 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
# dependencies
|
|
2
2
|
require "active_support"
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
validates column, presence: true, inclusion: {in: values} if validate
|
|
8
|
-
values.each do |value|
|
|
9
|
-
prefix = column if prefix == true
|
|
10
|
-
suffix = column if suffix == true
|
|
11
|
-
method_name = [prefix, value, suffix].select { |v| v }.join("_")
|
|
12
|
-
scope method_name, -> { where(column => value) } if scopes && !respond_to?(method_name)
|
|
13
|
-
if accessor_methods && !method_defined?("#{method_name}?")
|
|
14
|
-
define_method "#{method_name}?" do
|
|
15
|
-
read_attribute(column) == value
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
after_initialize do
|
|
20
|
-
send("#{column}=", values.first) unless try(column)
|
|
21
|
-
end
|
|
22
|
-
define_singleton_method column.to_s.pluralize do
|
|
23
|
-
values
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
4
|
+
# modules
|
|
5
|
+
require "str_enum/model"
|
|
6
|
+
require "str_enum/version"
|
|
27
7
|
|
|
28
8
|
ActiveSupport.on_load(:active_record) do
|
|
29
|
-
|
|
9
|
+
include StrEnum::Model
|
|
30
10
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: str_enum
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrew Kane
|
|
8
|
-
autorequire:
|
|
9
|
-
bindir:
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-01-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -16,76 +16,31 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '5.2'
|
|
20
20
|
type: :runtime
|
|
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: '
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - ">="
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ">="
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0'
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: rake
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - ">="
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - ">="
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: minitest
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - ">="
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '0'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - ">="
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '0'
|
|
69
|
-
description:
|
|
70
|
-
email:
|
|
71
|
-
- andrew@chartkick.com
|
|
26
|
+
version: '5.2'
|
|
27
|
+
description:
|
|
28
|
+
email: andrew@ankane.org
|
|
72
29
|
executables: []
|
|
73
30
|
extensions: []
|
|
74
31
|
extra_rdoc_files: []
|
|
75
32
|
files:
|
|
76
|
-
- ".gitignore"
|
|
77
33
|
- CHANGELOG.md
|
|
78
|
-
- Gemfile
|
|
79
34
|
- LICENSE.txt
|
|
80
35
|
- README.md
|
|
81
|
-
- Rakefile
|
|
82
36
|
- lib/str_enum.rb
|
|
37
|
+
- lib/str_enum/model.rb
|
|
83
38
|
- lib/str_enum/version.rb
|
|
84
|
-
- str_enum.gemspec
|
|
85
39
|
homepage: https://github.com/ankane/str_enum
|
|
86
|
-
licenses:
|
|
40
|
+
licenses:
|
|
41
|
+
- MIT
|
|
87
42
|
metadata: {}
|
|
88
|
-
post_install_message:
|
|
43
|
+
post_install_message:
|
|
89
44
|
rdoc_options: []
|
|
90
45
|
require_paths:
|
|
91
46
|
- lib
|
|
@@ -93,16 +48,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
93
48
|
requirements:
|
|
94
49
|
- - ">="
|
|
95
50
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
51
|
+
version: '2.6'
|
|
97
52
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
98
53
|
requirements:
|
|
99
54
|
- - ">="
|
|
100
55
|
- !ruby/object:Gem::Version
|
|
101
56
|
version: '0'
|
|
102
57
|
requirements: []
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
signing_key:
|
|
58
|
+
rubygems_version: 3.3.3
|
|
59
|
+
signing_key:
|
|
106
60
|
specification_version: 4
|
|
107
61
|
summary: String enums for Rails
|
|
108
62
|
test_files: []
|
data/.gitignore
DELETED
data/Gemfile
DELETED
data/Rakefile
DELETED
data/str_enum.gemspec
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# coding: utf-8
|
|
2
|
-
lib = File.expand_path("../lib", __FILE__)
|
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
-
require "str_enum/version"
|
|
5
|
-
|
|
6
|
-
Gem::Specification.new do |spec|
|
|
7
|
-
spec.name = "str_enum"
|
|
8
|
-
spec.version = StrEnum::VERSION
|
|
9
|
-
spec.authors = ["Andrew Kane"]
|
|
10
|
-
spec.email = ["andrew@chartkick.com"]
|
|
11
|
-
|
|
12
|
-
spec.summary = "String enums for Rails"
|
|
13
|
-
spec.homepage = "https://github.com/ankane/str_enum"
|
|
14
|
-
|
|
15
|
-
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
16
|
-
spec.bindir = "exe"
|
|
17
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
18
|
-
spec.require_paths = ["lib"]
|
|
19
|
-
|
|
20
|
-
spec.add_dependency "activesupport"
|
|
21
|
-
|
|
22
|
-
spec.add_development_dependency "bundler"
|
|
23
|
-
spec.add_development_dependency "rake"
|
|
24
|
-
spec.add_development_dependency "minitest"
|
|
25
|
-
end
|