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 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
  - - ">="