array_enum 0.1.0 → 1.0.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 +2 -1
- data/README.md +18 -0
- data/array_enum.gemspec +4 -0
- data/lib/array_enum/railtie.rb +8 -0
- data/lib/array_enum/subset_validator.rb +18 -0
- data/lib/array_enum/version.rb +1 -1
- data/lib/array_enum.rb +2 -0
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d25d5a0511d3b6c7021f78de6061f7c58ee539fd83ad333c2d4d8df2a875837c
|
4
|
+
data.tar.gz: a4f5db8fd703a3eb0da62bd3bb391aa8875acc9e57e333507fd0a9f9f5a547bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 241bc38ae4922c19ca4c242e9970dc40d52e8cd3b7d27815604d5bfec07a1ffb82276dc7c31446393af542e119caabb039202c3880fb1c0a98265d1c61e1a909
|
7
|
+
data.tar.gz: a4942e835080837b810f8830a536b1d3408bae747cb5e2315952bb3ea132064e021c50177dc614598032e5a81e0291c437b6afd605089bd49194208b4f9f1edf
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -8,6 +8,8 @@ Extension for `ActiveRecord` that adds support for `PostgreSQL` array columns, m
|
|
8
8
|
|
9
9
|
## Usage
|
10
10
|
|
11
|
+
### ActiveRecord extension
|
12
|
+
|
11
13
|
Database will store integers that after reading will map to string values.
|
12
14
|
Additionally scope is generated with `with_` prefix that will query database for any matching passed value.
|
13
15
|
|
@@ -29,6 +31,22 @@ user.favourite_colors # => ["red", "green"]
|
|
29
31
|
User.with_favourite_colors("red") # => [user]
|
30
32
|
```
|
31
33
|
|
34
|
+
### Subset Validator
|
35
|
+
|
36
|
+
Additionally `subset` validator is provided that can help to ensure correct values are passed during validation.
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
class CreateUser
|
40
|
+
include ActiveModel::Model
|
41
|
+
|
42
|
+
attr_accessor :favourite_colors
|
43
|
+
|
44
|
+
validates :favourite_colors, subset: ["green", "blue"]
|
45
|
+
end
|
46
|
+
|
47
|
+
CreateUser.new(favourite_colors: ["black"]).valid? # => false
|
48
|
+
```
|
49
|
+
|
32
50
|
## Development
|
33
51
|
|
34
52
|
[](https://travis-ci.com/freeletics/array_enum)
|
data/array_enum.gemspec
CHANGED
@@ -33,6 +33,10 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
34
34
|
spec.require_paths = ["lib"]
|
35
35
|
|
36
|
+
spec.required_ruby_version = ">= 2.3"
|
37
|
+
|
38
|
+
spec.add_dependency "activemodel"
|
39
|
+
|
36
40
|
spec.add_development_dependency "activerecord"
|
37
41
|
spec.add_development_dependency "pg"
|
38
42
|
spec.add_development_dependency "bundler", ">= 1.17"
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require "rails/railtie"
|
2
|
+
|
3
|
+
class ArrayEnum::Railtie < Rails::Railtie
|
4
|
+
initializer "array_enum.subset_validator" do
|
5
|
+
# ActiveModel expects top level class name for validator to have syntax "validates subset: []"
|
6
|
+
::SubsetValidator = ArrayEnum::SubsetValidator unless defined?(::SubsetValidator)
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "active_model/validator"
|
2
|
+
|
3
|
+
class ArrayEnum::SubsetValidator < ActiveModel::EachValidator
|
4
|
+
def validate_each(record, attribute, value)
|
5
|
+
wrapped_value = [value].flatten # Handles nil value
|
6
|
+
diff = wrapped_value.reject { |element| delimiter.include?(element) }
|
7
|
+
|
8
|
+
unless diff.empty?
|
9
|
+
record.errors.add(attribute, :inclusion, options.except(:in, :within).merge!(value: diff))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def delimiter
|
16
|
+
@delimiter ||= options[:in] || options[:within]
|
17
|
+
end
|
18
|
+
end
|
data/lib/array_enum/version.rb
CHANGED
data/lib/array_enum.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: array_enum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wojciech Wnętrzak
|
@@ -10,6 +10,20 @@ bindir: exe
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2019-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activemodel
|
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'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: activerecord
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,6 +114,8 @@ files:
|
|
100
114
|
- bin/console
|
101
115
|
- bin/setup
|
102
116
|
- lib/array_enum.rb
|
117
|
+
- lib/array_enum/railtie.rb
|
118
|
+
- lib/array_enum/subset_validator.rb
|
103
119
|
- lib/array_enum/version.rb
|
104
120
|
homepage: https://github.com/freeletics/array_enum
|
105
121
|
licenses:
|
@@ -115,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
115
131
|
requirements:
|
116
132
|
- - ">="
|
117
133
|
- !ruby/object:Gem::Version
|
118
|
-
version: '
|
134
|
+
version: '2.3'
|
119
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
136
|
requirements:
|
121
137
|
- - ">="
|