metaractor 3.0.1 → 3.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 +4 -4
- data/.buildkite/pipeline.yml +92 -0
- data/.gitignore +1 -0
- data/.rspec +2 -0
- data/Dockerfile +11 -2
- data/Gemfile +1 -2
- data/README.md +19 -1
- data/docker-compose.yml +6 -0
- data/docker-entrypoint.sh +13 -0
- data/lib/metaractor.rb +12 -0
- data/lib/metaractor/parameters.rb +18 -0
- data/lib/metaractor/version.rb +1 -1
- data/metaractor.gemspec +5 -1
- metadata +26 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 285b4aecd4d684716db6d574e443464ba4fecaca03f49417153d4eb2d49994e4
|
4
|
+
data.tar.gz: bea5769c3cb76692d1f1a1218fae8937500ae2cdec53dfda5d17066170a723b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78226f45df08e38363d19cf03e3ec7867d0788700abf11daa08d5eca31ff62f3e9c43460d39be9d9422a686ee1a0da35de323df54d49ea06962876a809f3ad06
|
7
|
+
data.tar.gz: 76dee36d5fd30560f4bb7ebee50cf1e59d984e70bc219107e2d439024523ed2992056baacb17227e294466f4cff75b58cd96c7bb8fc0b680438ee8bf367e057c
|
@@ -0,0 +1,92 @@
|
|
1
|
+
env:
|
2
|
+
BUILDKITE_PLUGIN_DOCKER_CACHE_S3_BUCKET: "outstand-buildkite-cache"
|
3
|
+
# BUILDKITE_PLUGIN_DOCKER_CACHE_VOLUME_DEBUG: "true"
|
4
|
+
BUILDKITE_PLUGIN_DOCKER_COMPOSE_SHELL: "false"
|
5
|
+
# BUILDKITE_PLUGIN_DOCKER_COMPOSE_UPLOAD_CONTAINER_LOGS: "always"
|
6
|
+
BUILDKITE_PLUGIN_DOCKER_COMPOSE_PULL_RETRIES: 5
|
7
|
+
BUILDKITE_PLUGIN_DOCKER_COMPOSE_PUSH_RETRIES: 5
|
8
|
+
PLUGIN_DOCKER_COMPOSE_VERSION: "17bac3aaee1360e39381b89bb45513b11838238e"
|
9
|
+
PLUGIN_DOCKER_CACHE_VERSION: "f3d8feb52a25c69c75565e9f0b80375eae51850a"
|
10
|
+
|
11
|
+
steps:
|
12
|
+
- label: ":docker: Build"
|
13
|
+
command: ./docker/ci-prep.sh
|
14
|
+
key: build
|
15
|
+
plugins:
|
16
|
+
- seek-oss/aws-sm#v2.2.1:
|
17
|
+
env:
|
18
|
+
DOCKER_LOGIN_PASSWORD: "/buildkite/docker_password"
|
19
|
+
|
20
|
+
- docker-login#v2.0.1:
|
21
|
+
username: outstandci
|
22
|
+
|
23
|
+
- ecr#v2.1.1:
|
24
|
+
login: true
|
25
|
+
region: "us-east-1"
|
26
|
+
|
27
|
+
- https://github.com/outstand/docker-compose-buildkite-plugin.git#${PLUGIN_DOCKER_COMPOSE_VERSION}:
|
28
|
+
build: metaractor
|
29
|
+
image-repository: 786715713882.dkr.ecr.us-east-1.amazonaws.com/ci-images
|
30
|
+
config:
|
31
|
+
- docker-compose.yml
|
32
|
+
|
33
|
+
- label: ":bundler: :rubygems:"
|
34
|
+
key: bundle_install
|
35
|
+
command: bundle install
|
36
|
+
depends_on: build
|
37
|
+
plugins:
|
38
|
+
- seek-oss/aws-sm#v2.2.1:
|
39
|
+
env:
|
40
|
+
DOCKER_LOGIN_PASSWORD: "/buildkite/docker_password"
|
41
|
+
|
42
|
+
- docker-login#v2.0.1:
|
43
|
+
username: outstandci
|
44
|
+
|
45
|
+
- ecr#v2.1.1:
|
46
|
+
login: true
|
47
|
+
region: "us-east-1"
|
48
|
+
|
49
|
+
- https://github.com/outstand/docker-compose-buildkite-plugin.git#${PLUGIN_DOCKER_COMPOSE_VERSION}:
|
50
|
+
run: metaractor
|
51
|
+
dependencies: false
|
52
|
+
config:
|
53
|
+
- docker-compose.yml
|
54
|
+
|
55
|
+
- https://github.com/outstand/docker-cache-buildkite-plugin.git#${PLUGIN_DOCKER_CACHE_VERSION}:
|
56
|
+
name: bundler-cache
|
57
|
+
keys:
|
58
|
+
- v1-bundler-cache-{{ arch }}-{{ checksum "metaractor.gemspec" }}-{{ checksum "Gemfile" }}
|
59
|
+
- v1-bundler-cache-{{ arch }}-
|
60
|
+
save: true
|
61
|
+
volumes:
|
62
|
+
- bundler-data
|
63
|
+
|
64
|
+
- label: ":ruby: Specs"
|
65
|
+
command: rspec spec
|
66
|
+
depends_on: bundle_install
|
67
|
+
plugins:
|
68
|
+
- seek-oss/aws-sm#v2.2.1:
|
69
|
+
env:
|
70
|
+
DOCKER_LOGIN_PASSWORD: "/buildkite/docker_password"
|
71
|
+
json-to-env:
|
72
|
+
- secret-id: "/buildkite/rails/env_vars"
|
73
|
+
|
74
|
+
- docker-login#v2.0.1:
|
75
|
+
username: outstandci
|
76
|
+
|
77
|
+
- ecr#v2.1.1:
|
78
|
+
login: true
|
79
|
+
region: "us-east-1"
|
80
|
+
|
81
|
+
- https://github.com/outstand/docker-compose-buildkite-plugin.git#${PLUGIN_DOCKER_COMPOSE_VERSION}:
|
82
|
+
run: metaractor
|
83
|
+
config:
|
84
|
+
- docker-compose.yml
|
85
|
+
|
86
|
+
- https://github.com/outstand/docker-cache-buildkite-plugin.git#${PLUGIN_DOCKER_CACHE_VERSION}:
|
87
|
+
name: bundler-cache
|
88
|
+
keys:
|
89
|
+
- v1-bundler-cache-{{ arch }}-{{ checksum "metaractor.gemspec" }}-{{ checksum "Gemfile" }}
|
90
|
+
- v1-bundler-cache-{{ arch }}-
|
91
|
+
volumes:
|
92
|
+
- bundler-data
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/Dockerfile
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
FROM
|
1
|
+
FROM outstand/fixuid as fixuid
|
2
|
+
|
3
|
+
FROM ruby:2.7.3-alpine
|
2
4
|
LABEL maintainer="Ryan Schlesinger <ryan@outstand.com>"
|
3
5
|
|
4
6
|
RUN addgroup -g 1000 -S metaractor && \
|
@@ -11,7 +13,14 @@ RUN addgroup -g 1000 -S metaractor && \
|
|
11
13
|
git \
|
12
14
|
openssh
|
13
15
|
|
14
|
-
|
16
|
+
COPY --from=fixuid /usr/local/bin/fixuid /usr/local/bin/fixuid
|
17
|
+
RUN chmod 4755 /usr/local/bin/fixuid && \
|
18
|
+
USER=metaractor && \
|
19
|
+
GROUP=metaractor && \
|
20
|
+
mkdir -p /etc/fixuid && \
|
21
|
+
printf "user: $USER\ngroup: $GROUP\n" > /etc/fixuid/config.yml
|
22
|
+
|
23
|
+
ENV BUNDLER_VERSION 2.2.16
|
15
24
|
RUN gem install bundler -v ${BUNDLER_VERSION} -i /usr/local/lib/ruby/gems/$(ls /usr/local/lib/ruby/gems) --force
|
16
25
|
|
17
26
|
WORKDIR /metaractor
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Metaractor
|
1
|
+
# Metaractor [](https://buildkite.com/outstand/metaractor)
|
2
2
|
Adds parameter validation and error control to [interactor](https://github.com/collectiveidea/interactor).
|
3
3
|
|
4
4
|
## Installation
|
@@ -103,6 +103,24 @@ This works with `allow_blank` and can also be anything that responds to `#call`.
|
|
103
103
|
parameter :role, allow_blank: true, default: -> { context.default_role }
|
104
104
|
```
|
105
105
|
|
106
|
+
#### Typecasting/Coersion
|
107
|
+
You can supply Metaractor with a callable that will typecast incoming parameters:
|
108
|
+
```ruby
|
109
|
+
optional :needs_to_be_a_string, type: ->(value) { value.to_s }
|
110
|
+
```
|
111
|
+
|
112
|
+
You can also configure Metaractor with named types and use them:
|
113
|
+
```ruby
|
114
|
+
Metaractor.configure do |config|
|
115
|
+
config.register_type(:boolean, ->(value) { ActiveModel::Type::Boolean.new.cast(value) })
|
116
|
+
end
|
117
|
+
```
|
118
|
+
```ruby
|
119
|
+
required :is_awesome, type: :boolean
|
120
|
+
```
|
121
|
+
|
122
|
+
**Note**: Typecasters will _not_ be called on `nil` values.
|
123
|
+
|
106
124
|
### Custom Validation
|
107
125
|
Metaractor supports doing custom validation before any user supplied before_hooks run.
|
108
126
|
```ruby
|
data/docker-compose.yml
CHANGED
@@ -5,6 +5,9 @@ services:
|
|
5
5
|
image: outstand/metaractor:dev
|
6
6
|
stdin_open: true
|
7
7
|
tty: true
|
8
|
+
environment:
|
9
|
+
FIXUID:
|
10
|
+
FIXGID:
|
8
11
|
volumes:
|
9
12
|
- bundler-data:/usr/local/bundle
|
10
13
|
- .:/metaractor
|
@@ -13,6 +16,9 @@ services:
|
|
13
16
|
stdin_open: true
|
14
17
|
tty: true
|
15
18
|
command: rake release
|
19
|
+
environment:
|
20
|
+
FIXUID:
|
21
|
+
FIXGID:
|
16
22
|
volumes:
|
17
23
|
- bundler-data:/usr/local/bundle
|
18
24
|
- ~/.gitconfig:/home/metaractor/.gitconfig
|
data/docker-entrypoint.sh
CHANGED
@@ -1,6 +1,19 @@
|
|
1
1
|
#!/bin/sh
|
2
|
+
|
2
3
|
set -e
|
3
4
|
|
5
|
+
su-exec ${FIXUID:?Missing FIXUID var}:${FIXGID:?Missing FIXGID var} fixuid
|
6
|
+
|
7
|
+
chown_dir() {
|
8
|
+
dir=$1
|
9
|
+
if [[ -d ${dir} ]] && [[ "$(stat -c %u:%g ${dir})" != "${FIXUID}:${FIXGID}" ]]; then
|
10
|
+
echo chown $dir
|
11
|
+
chown metaractor:metaractor $dir
|
12
|
+
fi
|
13
|
+
}
|
14
|
+
|
15
|
+
chown_dir /usr/local/bundle
|
16
|
+
|
4
17
|
if [ "$(which "$1")" = '' ]; then
|
5
18
|
if [ "$(ls -A /usr/local/bundle/bin)" = '' ]; then
|
6
19
|
echo 'command not in path and bundler not initialized'
|
data/lib/metaractor.rb
CHANGED
@@ -77,4 +77,16 @@ module Metaractor
|
|
77
77
|
def self.hash_formatter=(callable)
|
78
78
|
@hash_formatter = callable
|
79
79
|
end
|
80
|
+
|
81
|
+
def self.types
|
82
|
+
@types ||= {}
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.register_type(type, callable)
|
86
|
+
types[type] = callable
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.clear_types!
|
90
|
+
@types = {}
|
91
|
+
end
|
80
92
|
end
|
@@ -14,6 +14,7 @@ module Metaractor
|
|
14
14
|
before :remove_blank_values
|
15
15
|
before :apply_defaults
|
16
16
|
before :validate_required_parameters
|
17
|
+
before :apply_types
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
@@ -160,6 +161,23 @@ module Metaractor
|
|
160
161
|
end
|
161
162
|
end
|
162
163
|
|
164
|
+
def apply_types
|
165
|
+
parameters.each do |name, parameter|
|
166
|
+
next unless parameter[:type]
|
167
|
+
|
168
|
+
if context.has_key?(name) && context[name] != nil
|
169
|
+
callable = parameter[:type]
|
170
|
+
|
171
|
+
if callable.is_a?(Symbol)
|
172
|
+
callable = Metaractor.types[callable]
|
173
|
+
raise ArgumentError, "No such type: #{parameter[:type]}" if callable.nil?
|
174
|
+
end
|
175
|
+
|
176
|
+
context[name] = callable.call(context[name])
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
163
181
|
def validate_required_parameters
|
164
182
|
context.errors ||= []
|
165
183
|
|
data/lib/metaractor/version.rb
CHANGED
data/metaractor.gemspec
CHANGED
@@ -11,7 +11,10 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.email = ['ryan@outstand.com']
|
12
12
|
|
13
13
|
spec.summary = %q{Adds parameter validation and error control to interactor}
|
14
|
-
spec.
|
14
|
+
spec.metadata = {
|
15
|
+
"homepage_uri" => "https://github.com/outstand/metaractor",
|
16
|
+
"source_code_uri" => "https://github.com/outstand/metaractor"
|
17
|
+
}
|
15
18
|
|
16
19
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
20
|
spec.bindir = 'exe'
|
@@ -27,4 +30,5 @@ Gem::Specification.new do |spec|
|
|
27
30
|
spec.add_development_dependency 'rspec', '~> 3.9'
|
28
31
|
spec.add_development_dependency 'awesome_print', '~> 1.8'
|
29
32
|
spec.add_development_dependency 'pry-byebug', '~> 3.9'
|
33
|
+
spec.add_development_dependency 'activemodel', '~> 6.1'
|
30
34
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metaractor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Schlesinger
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: interactor
|
@@ -122,13 +122,28 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '3.9'
|
125
|
-
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: activemodel
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '6.1'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '6.1'
|
139
|
+
description:
|
126
140
|
email:
|
127
141
|
- ryan@outstand.com
|
128
142
|
executables: []
|
129
143
|
extensions: []
|
130
144
|
extra_rdoc_files: []
|
131
145
|
files:
|
146
|
+
- ".buildkite/pipeline.yml"
|
132
147
|
- ".gitignore"
|
133
148
|
- ".rspec"
|
134
149
|
- Dockerfile
|
@@ -153,11 +168,13 @@ files:
|
|
153
168
|
- lib/metaractor/spec.rb
|
154
169
|
- lib/metaractor/version.rb
|
155
170
|
- metaractor.gemspec
|
156
|
-
homepage:
|
171
|
+
homepage:
|
157
172
|
licenses:
|
158
173
|
- Apache-2.0
|
159
|
-
metadata:
|
160
|
-
|
174
|
+
metadata:
|
175
|
+
homepage_uri: https://github.com/outstand/metaractor
|
176
|
+
source_code_uri: https://github.com/outstand/metaractor
|
177
|
+
post_install_message:
|
161
178
|
rdoc_options: []
|
162
179
|
require_paths:
|
163
180
|
- lib
|
@@ -172,8 +189,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
172
189
|
- !ruby/object:Gem::Version
|
173
190
|
version: '0'
|
174
191
|
requirements: []
|
175
|
-
rubygems_version: 3.
|
176
|
-
signing_key:
|
192
|
+
rubygems_version: 3.1.6
|
193
|
+
signing_key:
|
177
194
|
specification_version: 4
|
178
195
|
summary: Adds parameter validation and error control to interactor
|
179
196
|
test_files: []
|