str_enum 0.1.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 +7 -0
- data/.gitignore +9 -0
- data/Gemfile +7 -0
- data/README.md +67 -0
- data/Rakefile +10 -0
- data/lib/str_enum/version.rb +3 -0
- data/lib/str_enum.rb +24 -0
- data/str_enum.gemspec +25 -0
- metadata +106 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b1feedc135da7927cbe30d1b3adea0905a2c1cde
|
4
|
+
data.tar.gz: c07e9d2a957da6a464b60ba6c258adcbefeb445a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 35f31098800bf578473e2edb8c46cb76134e63492addd325647f948c3754b2234f994af2ac132661ea2fa16ae17c0a0ec4b5804f85ba6d40354cdeb863ac5bd2
|
7
|
+
data.tar.gz: 5b99e03f4dd40a034ae6d8e86e52931e6894b78d8da234c4e597e26a03ec00e78ff1c04d01bc7a5027fabb551e9b58115fe27a3a51d017cf5be1de50c7bad89a
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# str_enum
|
2
|
+
|
3
|
+
Don’t want to store enums as integers in your database? Introducing...
|
4
|
+
|
5
|
+
String enums for Rails!! :tada:
|
6
|
+
|
7
|
+
- scopes
|
8
|
+
- validations
|
9
|
+
- accessor methods
|
10
|
+
|
11
|
+
## Getting Started
|
12
|
+
|
13
|
+
Add this line to your application’s Gemfile:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
gem 'str_enum'
|
17
|
+
```
|
18
|
+
|
19
|
+
In your models, use:
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
class User < ActiveRecord::Base
|
23
|
+
str_enum :status, [:active, :archived]
|
24
|
+
end
|
25
|
+
```
|
26
|
+
|
27
|
+
The first value will be the initial value. This gives you...
|
28
|
+
|
29
|
+
### Scopes
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
User.active
|
33
|
+
User.archived
|
34
|
+
```
|
35
|
+
|
36
|
+
### Validations
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
user = User.new(status: "unknown")
|
40
|
+
user.valid? # false
|
41
|
+
```
|
42
|
+
|
43
|
+
### Accessor Methods
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
user.active?
|
47
|
+
user.archived?
|
48
|
+
```
|
49
|
+
|
50
|
+
## Customize
|
51
|
+
|
52
|
+
Choose which features you want
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
class User < ActiveRecord::Base
|
56
|
+
str_enum :status, [:active, :archived], scopes: false, validate: false, accessor_methods: false
|
57
|
+
end
|
58
|
+
```
|
59
|
+
|
60
|
+
## Contributing
|
61
|
+
|
62
|
+
Everyone is encouraged to help improve this project. Here are a few ways you can help:
|
63
|
+
|
64
|
+
- [Report bugs](https://github.com/ankane/str_enum/issues)
|
65
|
+
- Fix bugs and [submit pull requests](https://github.com/ankane/str_enum/pulls)
|
66
|
+
- Write, clarify, or fix documentation
|
67
|
+
- Suggest or add new features
|
data/Rakefile
ADDED
data/lib/str_enum.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require "str_enum/version"
|
2
|
+
require "active_support"
|
3
|
+
|
4
|
+
module StrEnum
|
5
|
+
def str_enum(column, values, validate: true, scopes: true, accessor_methods: true)
|
6
|
+
values = values.map(&:to_s)
|
7
|
+
validates column, presence: true, inclusion: {in: values} if validate
|
8
|
+
values.each do |value|
|
9
|
+
scope value, -> { where(column => value) } if scopes && !respond_to?(value)
|
10
|
+
if accessor_methods && !method_defined?("#{value}?")
|
11
|
+
define_method "#{value}?" do
|
12
|
+
read_attribute(column) == value
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
after_initialize do
|
17
|
+
send("#{column}=", values.first) unless send(column)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
ActiveSupport.on_load(:active_record) do
|
23
|
+
extend(StrEnum)
|
24
|
+
end
|
data/str_enum.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
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
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: str_enum
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrew Kane
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
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
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- Gemfile
|
78
|
+
- README.md
|
79
|
+
- Rakefile
|
80
|
+
- lib/str_enum.rb
|
81
|
+
- lib/str_enum/version.rb
|
82
|
+
- str_enum.gemspec
|
83
|
+
homepage: https://github.com/ankane/str_enum
|
84
|
+
licenses: []
|
85
|
+
metadata: {}
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options: []
|
88
|
+
require_paths:
|
89
|
+
- lib
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
requirements: []
|
101
|
+
rubyforge_project:
|
102
|
+
rubygems_version: 2.5.1
|
103
|
+
signing_key:
|
104
|
+
specification_version: 4
|
105
|
+
summary: String enums for Rails
|
106
|
+
test_files: []
|