bright_serializer 0.1.0 → 0.2.3
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/.rubocop.yml +3 -0
- data/CHANGELOG.md +34 -0
- data/Gemfile.lock +40 -33
- data/README.md +22 -0
- data/bright_serializer.gemspec +3 -3
- data/lib/bright_serializer/attribute.rb +5 -2
- data/lib/bright_serializer/entity/base.rb +42 -0
- data/lib/bright_serializer/entity/parser.rb +18 -0
- data/lib/bright_serializer/inflector.rb +47 -0
- data/lib/bright_serializer/serializer.rb +25 -2
- data/lib/bright_serializer/version.rb +1 -1
- metadata +6 -5
- data/.github/workflows/build.yml +0 -24
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 77aa6c33f823a9f96b4d8a73fac9f7a87cf7892431d6e0f3cd1186b9da9fdf6b
|
|
4
|
+
data.tar.gz: b9820f01f3cf1d5d86588741b0f7af93521c4b55c5dc7352940b3cb1bebdc3e7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2093dc003212c566476fb83ebb95cc0e9951e5652d0e4a0e1ee667a110581c09cf48ea6170948d3636792f70fa7c10be8acc5f1ff068d567c51fee81fa87235b
|
|
7
|
+
data.tar.gz: f1163513f3b3d2085f13165fd9f9f29712a9f2cab7486c8041daa7fb04d6719dc102df7fea428451c14eb7ff8677c7bde0c62f8ba4d64f0cef0262e7604387bd
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Change log
|
|
2
|
+
|
|
3
|
+
## master (unreleased)
|
|
4
|
+
|
|
5
|
+
* Your contribution
|
|
6
|
+
|
|
7
|
+
## 0.2.3 (2021-01-04)
|
|
8
|
+
|
|
9
|
+
* Update dependencies ([v0.2.2...v0.2.3](https://github.com/petalmd/bright_serializer/compare/v0.2.2...v0.2.3))
|
|
10
|
+
|
|
11
|
+
## 0.2.2 (2020-07-22)
|
|
12
|
+
|
|
13
|
+
* Run CI build on all supported Ruby versions ([#11](https://github.com/petalmd/bright_serializer/pull/11))
|
|
14
|
+
* Update Rubocop 0.78.0 => 0.88.0 and run auto-correction
|
|
15
|
+
* Deep transform entity keys ([#12](https://github.com/petalmd/bright_serializer/pull/12))
|
|
16
|
+
|
|
17
|
+
## 0.2.1 (2020-07-21)
|
|
18
|
+
|
|
19
|
+
* Handle set_key_transform inherited from a parent serializer ([#10](https://github.com/petalmd/bright_serializer/pull/10))
|
|
20
|
+
|
|
21
|
+
## 0.2.0 (2020-07-17)
|
|
22
|
+
|
|
23
|
+
* Add RubyGems version badge
|
|
24
|
+
* Handle inherit from a parent serializer
|
|
25
|
+
* Define entity in serializer for grape_swagger ([#9](https://github.com/petalmd/bright_serializer/pull/9))
|
|
26
|
+
|
|
27
|
+
## 0.1.1 (2020-07-13)
|
|
28
|
+
|
|
29
|
+
* Add description in gemspec file
|
|
30
|
+
* Add content in CHANGELOG.md
|
|
31
|
+
|
|
32
|
+
## 0.1.0 (2020-07-13)
|
|
33
|
+
|
|
34
|
+
* First release
|
data/Gemfile.lock
CHANGED
|
@@ -1,52 +1,59 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
bright_serializer (0.
|
|
4
|
+
bright_serializer (0.2.3)
|
|
5
5
|
oj (~> 3)
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: https://rubygems.org/
|
|
9
9
|
specs:
|
|
10
|
-
ast (2.4.
|
|
11
|
-
concurrent-ruby (1.1.
|
|
10
|
+
ast (2.4.1)
|
|
11
|
+
concurrent-ruby (1.1.7)
|
|
12
12
|
diff-lcs (1.4.4)
|
|
13
|
-
faker (2.
|
|
14
|
-
i18n (>= 1.6, <
|
|
15
|
-
i18n (1.
|
|
13
|
+
faker (2.15.1)
|
|
14
|
+
i18n (>= 1.6, < 2)
|
|
15
|
+
i18n (1.8.5)
|
|
16
16
|
concurrent-ruby (~> 1.0)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
ast (~> 2.4.0)
|
|
17
|
+
oj (3.10.18)
|
|
18
|
+
parallel (1.20.1)
|
|
19
|
+
parser (3.0.0.0)
|
|
20
|
+
ast (~> 2.4.1)
|
|
22
21
|
rainbow (3.0.0)
|
|
23
|
-
rake (13.0.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
rspec-
|
|
28
|
-
|
|
29
|
-
rspec-
|
|
30
|
-
rspec-
|
|
22
|
+
rake (13.0.3)
|
|
23
|
+
regexp_parser (2.0.3)
|
|
24
|
+
rexml (3.2.4)
|
|
25
|
+
rspec (3.10.0)
|
|
26
|
+
rspec-core (~> 3.10.0)
|
|
27
|
+
rspec-expectations (~> 3.10.0)
|
|
28
|
+
rspec-mocks (~> 3.10.0)
|
|
29
|
+
rspec-core (3.10.0)
|
|
30
|
+
rspec-support (~> 3.10.0)
|
|
31
|
+
rspec-expectations (3.10.0)
|
|
31
32
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
32
|
-
rspec-support (~> 3.
|
|
33
|
-
rspec-mocks (3.
|
|
33
|
+
rspec-support (~> 3.10.0)
|
|
34
|
+
rspec-mocks (3.10.0)
|
|
34
35
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
35
|
-
rspec-support (~> 3.
|
|
36
|
-
rspec-support (3.
|
|
37
|
-
rubocop (0.
|
|
38
|
-
jaro_winkler (~> 1.5.1)
|
|
36
|
+
rspec-support (~> 3.10.0)
|
|
37
|
+
rspec-support (3.10.0)
|
|
38
|
+
rubocop (0.93.1)
|
|
39
39
|
parallel (~> 1.10)
|
|
40
|
-
parser (>= 2.
|
|
40
|
+
parser (>= 2.7.1.5)
|
|
41
41
|
rainbow (>= 2.2.2, < 4.0)
|
|
42
|
+
regexp_parser (>= 1.8)
|
|
43
|
+
rexml
|
|
44
|
+
rubocop-ast (>= 0.6.0)
|
|
42
45
|
ruby-progressbar (~> 1.7)
|
|
43
|
-
unicode-display_width (>= 1.4.0, <
|
|
44
|
-
rubocop-
|
|
45
|
-
|
|
46
|
-
rubocop-
|
|
47
|
-
rubocop (>= 0.
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
|
47
|
+
rubocop-ast (1.4.0)
|
|
48
|
+
parser (>= 2.7.1.5)
|
|
49
|
+
rubocop-performance (1.9.2)
|
|
50
|
+
rubocop (>= 0.90.0, < 2.0)
|
|
51
|
+
rubocop-ast (>= 0.4.0)
|
|
52
|
+
rubocop-rspec (1.44.1)
|
|
53
|
+
rubocop (~> 0.87)
|
|
54
|
+
rubocop-ast (>= 0.7.1)
|
|
55
|
+
ruby-progressbar (1.11.0)
|
|
56
|
+
unicode-display_width (1.7.0)
|
|
50
57
|
|
|
51
58
|
PLATFORMS
|
|
52
59
|
ruby
|
data/README.md
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
[](https://github.com/petalmd/bright_serializer/actions?query=workflow%3ABuild)
|
|
2
|
+
[](https://badge.fury.io/rb/bright_serializer)
|
|
2
3
|
|
|
3
4
|
# BrightSerializer
|
|
4
5
|
|
|
@@ -124,6 +125,27 @@ class AccountSerializer
|
|
|
124
125
|
end
|
|
125
126
|
```
|
|
126
127
|
|
|
128
|
+
### Entity
|
|
129
|
+
|
|
130
|
+
You can define the entity of your serializer to generate documentation with the option `entity`.
|
|
131
|
+
The feature was build to work with [grape-swagger](https://github.com/ruby-grape/grape-swagger).
|
|
132
|
+
For more information about defining a model entity see the [Swagger documentation](https://swagger.io/specification/v2/?sbsearch=array%20response#schema-object).
|
|
133
|
+
|
|
134
|
+
```ruby
|
|
135
|
+
class AccountSerializer
|
|
136
|
+
include BrightSerializer::Serializer
|
|
137
|
+
attribute :id, entity: { type: :string, description: 'The id of the account' }
|
|
138
|
+
attribute :name
|
|
139
|
+
|
|
140
|
+
attribute :friends,
|
|
141
|
+
entity: {
|
|
142
|
+
type: :array, items: { ref: 'FriendSerializer' }, description: 'The list the account friends.'
|
|
143
|
+
} do |object|
|
|
144
|
+
FriendSerializer.new(object.friends)
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
```
|
|
148
|
+
|
|
127
149
|
## Development
|
|
128
150
|
|
|
129
151
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/bright_serializer.gemspec
CHANGED
|
@@ -10,8 +10,8 @@ Gem::Specification.new do |spec|
|
|
|
10
10
|
spec.authors = ['Jean-Francis Bastien']
|
|
11
11
|
spec.email = ['jfbastien@petalmd.com']
|
|
12
12
|
|
|
13
|
-
spec.summary = '
|
|
14
|
-
spec.description = '
|
|
13
|
+
spec.summary = 'Light and fast Ruby serializer'
|
|
14
|
+
spec.description = 'BrightSerializer is a minimalist implementation serializer for Ruby objects.'
|
|
15
15
|
spec.homepage = 'https://github.com/petalmd/bright_serializer'
|
|
16
16
|
spec.license = 'MIT'
|
|
17
17
|
spec.required_ruby_version = '>= 2.5'
|
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
|
30
30
|
# Specify which files should be added to the gem when it is released.
|
|
31
31
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
32
32
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
33
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
33
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|.github)/}) }
|
|
34
34
|
end
|
|
35
35
|
spec.bindir = 'exe'
|
|
36
36
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative 'entity/base'
|
|
4
|
+
|
|
3
5
|
module BrightSerializer
|
|
4
6
|
class Attribute
|
|
5
|
-
attr_reader :key, :block, :condition
|
|
7
|
+
attr_reader :key, :block, :condition, :entity
|
|
6
8
|
attr_accessor :transformed_key
|
|
7
9
|
|
|
8
|
-
def initialize(key, condition, &block)
|
|
10
|
+
def initialize(key, condition, entity, &block)
|
|
9
11
|
@key = key
|
|
10
12
|
@condition = condition
|
|
11
13
|
@block = block
|
|
14
|
+
@entity = entity ? Entity::Base.new(entity) : nil
|
|
12
15
|
end
|
|
13
16
|
|
|
14
17
|
def serialize(object, params)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'parser'
|
|
4
|
+
|
|
5
|
+
module BrightSerializer
|
|
6
|
+
module Entity
|
|
7
|
+
class Base
|
|
8
|
+
DEFAULT_DEFINITION = { type: :undefined }.freeze
|
|
9
|
+
|
|
10
|
+
# https://swagger.io/specification/v2/?sbsearch=array%20response#schema-object
|
|
11
|
+
|
|
12
|
+
def initialize(definition)
|
|
13
|
+
@definition = definition
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def to_h
|
|
17
|
+
Inflector.deep_transform_keys_in_object!(@definition) { |k| Inflector.camel_lower k.to_s }
|
|
18
|
+
parse_ref!
|
|
19
|
+
@definition
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def parse_ref!
|
|
23
|
+
object = nested_hash(@definition, 'ref')
|
|
24
|
+
return unless object
|
|
25
|
+
|
|
26
|
+
ref_entity_name = Inflector.constantize(object.delete('ref')).entity_name
|
|
27
|
+
relation = "#/definitions/#{ref_entity_name}"
|
|
28
|
+
object['$ref'] = relation
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def nested_hash(obj, key)
|
|
32
|
+
if obj.respond_to?(:key?) && obj.key?(key)
|
|
33
|
+
obj
|
|
34
|
+
elsif obj.respond_to?(:each)
|
|
35
|
+
r = nil
|
|
36
|
+
obj.find { |*a| r = nested_hash(a.last, key) }
|
|
37
|
+
r
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BrightSerializer
|
|
4
|
+
module Entity
|
|
5
|
+
class Parser
|
|
6
|
+
attr_reader :model, :endpoint
|
|
7
|
+
|
|
8
|
+
def initialize(model, endpoint)
|
|
9
|
+
@model = model
|
|
10
|
+
@endpoint = endpoint
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def call
|
|
14
|
+
@model.entity
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -28,5 +28,52 @@ class Inflector
|
|
|
28
28
|
underscored_word.tr!('_', '-')
|
|
29
29
|
underscored_word
|
|
30
30
|
end
|
|
31
|
+
|
|
32
|
+
# File activesupport/lib/active_support/inflector/methods.rb, line 271
|
|
33
|
+
def constantize(camel_cased_word)
|
|
34
|
+
names = camel_cased_word.split('::')
|
|
35
|
+
|
|
36
|
+
# Trigger a built-in NameError exception including the ill-formed constant in the message.
|
|
37
|
+
Object.const_get(camel_cased_word) if names.empty?
|
|
38
|
+
|
|
39
|
+
# Remove the first blank element in case of '::ClassName' notation.
|
|
40
|
+
names.shift if names.size > 1 && names.first.empty?
|
|
41
|
+
|
|
42
|
+
names.inject(Object) do |constant, name|
|
|
43
|
+
if constant == Object
|
|
44
|
+
constant.const_get(name)
|
|
45
|
+
else
|
|
46
|
+
candidate = constant.const_get(name)
|
|
47
|
+
next candidate if constant.const_defined?(name, false)
|
|
48
|
+
next candidate unless Object.const_defined?(name)
|
|
49
|
+
|
|
50
|
+
# Go down the ancestors to check if it is owned directly. The check
|
|
51
|
+
# stops when we reach Object or the end of ancestors tree.
|
|
52
|
+
constant = constant.ancestors.each_with_object(constant) do |ancestor, const|
|
|
53
|
+
break const if ancestor == Object
|
|
54
|
+
break ancestor if ancestor.const_defined?(name, false)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# owner is in Object, so raise
|
|
58
|
+
constant.const_get(name, false)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# File active_support/core_ext/hash/keys.rb, line 156
|
|
64
|
+
def deep_transform_keys_in_object!(object, &block)
|
|
65
|
+
case object
|
|
66
|
+
when Hash
|
|
67
|
+
object.keys.each do |key| # rubocop:disable Style/HashEachMethods
|
|
68
|
+
value = object.delete(key)
|
|
69
|
+
object[yield(key)] = deep_transform_keys_in_object!(value, &block)
|
|
70
|
+
end
|
|
71
|
+
object
|
|
72
|
+
when Array
|
|
73
|
+
object.map! { |e| deep_transform_keys_in_object!(e, &block) }
|
|
74
|
+
else
|
|
75
|
+
object
|
|
76
|
+
end
|
|
77
|
+
end
|
|
31
78
|
end
|
|
32
79
|
end
|
|
@@ -4,6 +4,7 @@ require 'oj'
|
|
|
4
4
|
require 'set'
|
|
5
5
|
require_relative 'attribute'
|
|
6
6
|
require_relative 'inflector'
|
|
7
|
+
require_relative 'entity/base'
|
|
7
8
|
|
|
8
9
|
module BrightSerializer
|
|
9
10
|
module Serializer
|
|
@@ -11,6 +12,7 @@ module BrightSerializer
|
|
|
11
12
|
DEFAULT_OJ_OPTIONS = { mode: :compat, time_format: :ruby, use_to_json: true }.freeze
|
|
12
13
|
|
|
13
14
|
def self.included(base)
|
|
15
|
+
super
|
|
14
16
|
base.extend ClassMethods
|
|
15
17
|
base.instance_variable_set(:@attributes_to_serialize, [])
|
|
16
18
|
end
|
|
@@ -31,7 +33,7 @@ module BrightSerializer
|
|
|
31
33
|
end
|
|
32
34
|
|
|
33
35
|
def serializable_hash
|
|
34
|
-
if @object.respond_to?(:
|
|
36
|
+
if @object.respond_to?(:each) && !@object.respond_to?(:each_pair)
|
|
35
37
|
@object.map { |o| serialize o }
|
|
36
38
|
else
|
|
37
39
|
serialize(@object)
|
|
@@ -49,9 +51,16 @@ module BrightSerializer
|
|
|
49
51
|
module ClassMethods
|
|
50
52
|
attr_reader :attributes_to_serialize, :transform_method
|
|
51
53
|
|
|
54
|
+
def inherited(subclass)
|
|
55
|
+
super
|
|
56
|
+
subclass.instance_variable_set(:@attributes_to_serialize, []) unless subclass.attributes_to_serialize
|
|
57
|
+
subclass.attributes_to_serialize.concat(@attributes_to_serialize)
|
|
58
|
+
subclass.instance_variable_set(:@transform_method, @transform_method) unless subclass.transform_method
|
|
59
|
+
end
|
|
60
|
+
|
|
52
61
|
def attributes(*attributes, **options, &block)
|
|
53
62
|
attributes.each do |key|
|
|
54
|
-
attribute = Attribute.new(key, options[:if], &block)
|
|
63
|
+
attribute = Attribute.new(key, options[:if], options[:entity], &block)
|
|
55
64
|
attribute.transformed_key = run_transform_key(key)
|
|
56
65
|
@attributes_to_serialize << attribute
|
|
57
66
|
end
|
|
@@ -74,6 +83,20 @@ module BrightSerializer
|
|
|
74
83
|
input.to_sym
|
|
75
84
|
end
|
|
76
85
|
end
|
|
86
|
+
|
|
87
|
+
def entity
|
|
88
|
+
{}.tap do |result|
|
|
89
|
+
@attributes_to_serialize.each do |attribute|
|
|
90
|
+
entity_value = attribute.entity&.to_h ||
|
|
91
|
+
BrightSerializer::Entity::Base::DEFAULT_DEFINITION
|
|
92
|
+
result.merge!(attribute.transformed_key => entity_value)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def entity_name
|
|
98
|
+
name.split('::').last.downcase
|
|
99
|
+
end
|
|
77
100
|
end
|
|
78
101
|
end
|
|
79
102
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bright_serializer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jean-Francis Bastien
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-01-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: oj
|
|
@@ -80,14 +80,13 @@ dependencies:
|
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '3.0'
|
|
83
|
-
description:
|
|
83
|
+
description: BrightSerializer is a minimalist implementation serializer for Ruby objects.
|
|
84
84
|
email:
|
|
85
85
|
- jfbastien@petalmd.com
|
|
86
86
|
executables: []
|
|
87
87
|
extensions: []
|
|
88
88
|
extra_rdoc_files: []
|
|
89
89
|
files:
|
|
90
|
-
- ".github/workflows/build.yml"
|
|
91
90
|
- ".gitignore"
|
|
92
91
|
- ".rspec"
|
|
93
92
|
- ".rubocop.yml"
|
|
@@ -101,6 +100,8 @@ files:
|
|
|
101
100
|
- bright_serializer.gemspec
|
|
102
101
|
- lib/bright_serializer.rb
|
|
103
102
|
- lib/bright_serializer/attribute.rb
|
|
103
|
+
- lib/bright_serializer/entity/base.rb
|
|
104
|
+
- lib/bright_serializer/entity/parser.rb
|
|
104
105
|
- lib/bright_serializer/inflector.rb
|
|
105
106
|
- lib/bright_serializer/serializer.rb
|
|
106
107
|
- lib/bright_serializer/version.rb
|
|
@@ -129,5 +130,5 @@ requirements: []
|
|
|
129
130
|
rubygems_version: 3.1.2
|
|
130
131
|
signing_key:
|
|
131
132
|
specification_version: 4
|
|
132
|
-
summary:
|
|
133
|
+
summary: Light and fast Ruby serializer
|
|
133
134
|
test_files: []
|
data/.github/workflows/build.yml
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
name: Build
|
|
2
|
-
|
|
3
|
-
on: [push]
|
|
4
|
-
|
|
5
|
-
jobs:
|
|
6
|
-
build:
|
|
7
|
-
|
|
8
|
-
runs-on: ubuntu-latest
|
|
9
|
-
|
|
10
|
-
steps:
|
|
11
|
-
- uses: actions/checkout@v1
|
|
12
|
-
- name: Set up Ruby 2.7
|
|
13
|
-
uses: actions/setup-ruby@v1
|
|
14
|
-
with:
|
|
15
|
-
ruby-version: 2.7
|
|
16
|
-
- name: Bundle install
|
|
17
|
-
run: |
|
|
18
|
-
gem install bundler
|
|
19
|
-
bundle install --jobs 4 --retry 3
|
|
20
|
-
- name: Specs
|
|
21
|
-
run: bundle exec rake
|
|
22
|
-
- name: Rubocop
|
|
23
|
-
run: bundle exec rubocop
|
|
24
|
-
|