array_enum 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7bf65753b1960e7d732e9dbef138a7adb0f2873ea8ecd02a48623e837ce95fc2
4
- data.tar.gz: 2adaa2064958a2d39933c1803070493db15e55602b8311b80255cea1d1cf5604
3
+ metadata.gz: d25d5a0511d3b6c7021f78de6061f7c58ee539fd83ad333c2d4d8df2a875837c
4
+ data.tar.gz: a4f5db8fd703a3eb0da62bd3bb391aa8875acc9e57e333507fd0a9f9f5a547bf
5
5
  SHA512:
6
- metadata.gz: e2a40dff60e27e34b11226ba300def97adcf6859ad6b6dfdb46539de8e7433b0b47db8a4a61cc727ff30bc091800d0e09c577d29065219c9e4a0f4298f4f7668
7
- data.tar.gz: 9efc6ad57fd3faa33f80dfb087246e894cec0d54bf83cc87a39b6cc680a52df32e82e581454e33feb1dd68b8d0e65fe4f3b8b5ad65a31bd82244d1de29a4e967
6
+ metadata.gz: 241bc38ae4922c19ca4c242e9970dc40d52e8cd3b7d27815604d5bfec07a1ffb82276dc7c31446393af542e119caabb039202c3880fb1c0a98265d1c61e1a909
7
+ data.tar.gz: a4942e835080837b810f8830a536b1d3408bae747cb5e2315952bb3ea132064e021c50177dc614598032e5a81e0291c437b6afd605089bd49194208b4f9f1edf
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- array_enum (0.1.0)
4
+ array_enum (1.0.0)
5
+ activemodel
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
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
  [![Build Status](https://travis-ci.com/freeletics/array_enum.svg?branch=master)](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
@@ -1,3 +1,3 @@
1
1
  module ArrayEnum
2
- VERSION = "0.1.0"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/array_enum.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require "array_enum/version"
2
+ require "array_enum/subset_validator"
3
+ require "array_enum/railtie" if defined?(Rails)
2
4
 
3
5
  module ArrayEnum
4
6
  def array_enum(definitions)
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: 0.1.0
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: '0'
134
+ version: '2.3'
119
135
  required_rubygems_version: !ruby/object:Gem::Requirement
120
136
  requirements:
121
137
  - - ">="