rom-factory 0.10.2 → 0.11.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/.action_hero.yml +21 -0
- data/.devtools/templates/changelog.erb +3 -0
- data/.devtools/templates/release.erb +36 -0
- data/.github/FUNDING.yml +1 -0
- data/.github/ISSUE_TEMPLATE/{---bug-report.md → bug-report.md} +6 -10
- data/.github/ISSUE_TEMPLATE/config.yml +5 -0
- data/.github/SUPPORT.md +3 -0
- data/.github/workflows/ci.yml +14 -23
- data/.github/workflows/docsite.yml +5 -4
- data/.github/workflows/rubocop.yml +46 -0
- data/.github/workflows/sync_configs.yml +17 -17
- data/.rubocop.yml +135 -16
- data/CHANGELOG.md +44 -0
- data/CODEOWNERS +1 -0
- data/CONTRIBUTING.md +3 -3
- data/Gemfile +20 -19
- data/Gemfile.devtools +6 -5
- data/LICENSE +1 -1
- data/README.md +3 -3
- data/Rakefile +1 -1
- data/benchmarks/basic.rb +10 -10
- data/changelog.yml +23 -0
- data/docsite/source/index.html.md +162 -1
- data/lib/rom/factory/attribute_registry.rb +2 -2
- data/lib/rom/factory/attributes/association.rb +52 -12
- data/lib/rom/factory/attributes/callable.rb +1 -1
- data/lib/rom/factory/attributes/value.rb +1 -1
- data/lib/rom/factory/attributes.rb +4 -6
- data/lib/rom/factory/builder/persistable.rb +3 -5
- data/lib/rom/factory/builder.rb +8 -18
- data/lib/rom/factory/constants.rb +1 -1
- data/lib/rom/factory/dsl.rb +36 -24
- data/lib/rom/factory/factories.rb +13 -15
- data/lib/rom/factory/registry.rb +2 -2
- data/lib/rom/factory/sequences.rb +1 -1
- data/lib/rom/factory/tuple_evaluator.rb +18 -22
- data/lib/rom/factory/version.rb +1 -1
- data/lib/rom/factory.rb +8 -5
- data/lib/rom-factory.rb +1 -1
- data/project.yml +1 -0
- data/rom-factory.gemspec +9 -10
- metadata +38 -24
- data/.github/ISSUE_TEMPLATE/----please-don-t-ask-for-support-via-issues.md +0 -10
- data/.github/ISSUE_TEMPLATE/----please-don-t-report-feature-requests-via-issues.md +0 -10
- data/.github/ISSUE_TEMPLATE/---a-detailed-bug-report.md +0 -30
- data/.github/ISSUE_TEMPLATE/---feature-request.md +0 -18
- data/.github/workflows/custom/ci.yml +0 -26
- data/Appraisals +0 -9
- data/LICENSE.txt +0 -21
data/lib/rom/factory/dsl.rb
CHANGED
@@ -1,26 +1,30 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require 'dry/core/inflector'
|
3
|
+
require "faker"
|
5
4
|
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
5
|
+
require "rom/factory/builder"
|
6
|
+
require "rom/factory/attribute_registry"
|
7
|
+
require "rom/factory/attributes"
|
9
8
|
|
10
9
|
module ROM
|
11
10
|
module Factory
|
11
|
+
extend ::Dry::Core::Cache
|
12
|
+
|
12
13
|
class << self
|
13
14
|
# @api private
|
14
|
-
def fake(
|
15
|
-
api =
|
15
|
+
def fake(*args, **options)
|
16
|
+
api = fetch_or_store(:faker, *args) do
|
17
|
+
*ns, method_name = args
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
const = ns.reduce(::Faker) do |obj, name|
|
20
|
+
obj.const_get(::Dry::Core::Inflector.camelize(name))
|
21
|
+
end
|
22
|
+
|
23
|
+
const.method(method_name)
|
21
24
|
end
|
25
|
+
|
26
|
+
api.(**options)
|
22
27
|
end
|
23
|
-
ruby2_keywords(:fake) if respond_to?(:ruby2_keywords, true)
|
24
28
|
end
|
25
29
|
|
26
30
|
# Factory builder DSL
|
@@ -33,7 +37,7 @@ module ROM
|
|
33
37
|
attr_reader :_traits
|
34
38
|
|
35
39
|
# @api private
|
36
|
-
def initialize(name,
|
40
|
+
def initialize(name, relation:, factories:, struct_namespace:, attributes: AttributeRegistry.new)
|
37
41
|
@_name = name
|
38
42
|
@_relation = relation
|
39
43
|
@_factories = factories
|
@@ -83,28 +87,36 @@ module ROM
|
|
83
87
|
#
|
84
88
|
# @param [Symbol] type The value type to generate
|
85
89
|
#
|
86
|
-
# @overload fake(
|
90
|
+
# @overload fake(genre, type)
|
87
91
|
# @example
|
88
92
|
# f.email { fake(:internet, :email) }
|
89
93
|
#
|
90
|
-
# @param [Symbol]
|
94
|
+
# @param [Symbol] genre The faker API identifier ie. :internet, :product etc.
|
91
95
|
# @param [Symbol] type The value type to generate
|
92
96
|
#
|
93
|
-
# @overload fake(
|
97
|
+
# @overload fake(genre, type, **options)
|
94
98
|
# @example
|
95
|
-
# f.email { fake(:number, :between, 10, 100) }
|
99
|
+
# f.email { fake(:number, :between, from: 10, to: 100) }
|
96
100
|
#
|
97
|
-
# @param [Symbol]
|
101
|
+
# @param [Symbol] genre The faker API identifier ie. :internet, :product etc.
|
98
102
|
# @param [Symbol] type The value type to generate
|
99
|
-
# @param [
|
103
|
+
# @param [Hash] options Additional arguments
|
104
|
+
#
|
105
|
+
# @overload fake(genre, subgenre, type, **options)
|
106
|
+
# @example
|
107
|
+
# f.quote { fake(:books, :dune, :quote, character: 'stilgar') }
|
108
|
+
#
|
109
|
+
# @param [Symbol] genre The Faker genre of API i.e. :books, :creature, :games etc
|
110
|
+
# @param [Symbol] subgenre The subgenre of API i.e. :dune, :bird, :myst etc
|
111
|
+
# @param [Symbol] type the value type to generate
|
112
|
+
# @param [Hash] options Additional arguments
|
100
113
|
#
|
101
|
-
# @see https://github.com/
|
114
|
+
# @see https://github.com/faker-ruby/faker/tree/master/doc
|
102
115
|
#
|
103
116
|
# @api public
|
104
|
-
def fake(*args)
|
105
|
-
::ROM::Factory.fake(*args)
|
117
|
+
def fake(type, *args, **options)
|
118
|
+
::ROM::Factory.fake(type, *args, **options)
|
106
119
|
end
|
107
|
-
ruby2_keywords(:fake) if respond_to?(:ruby2_keywords, true)
|
108
120
|
|
109
121
|
def trait(name, parents = [], &block)
|
110
122
|
_traits[name] = DSL.new(
|
@@ -136,7 +148,7 @@ module ROM
|
|
136
148
|
assoc = _relation.associations[name]
|
137
149
|
|
138
150
|
if assoc.is_a?(::ROM::SQL::Associations::OneToOne) && options.fetch(:count, 1) > 1
|
139
|
-
::Kernel.raise ::ArgumentError,
|
151
|
+
::Kernel.raise ::ArgumentError, "count cannot be greater than 1 on a OneToOne"
|
140
152
|
end
|
141
153
|
|
142
154
|
builder = -> { _factories.for_relation(assoc.target) }
|
@@ -1,12 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
|
6
|
-
require
|
7
|
-
require 'rom/struct'
|
8
|
-
require 'rom/factory/dsl'
|
9
|
-
require 'rom/factory/registry'
|
3
|
+
require "rom/initializer"
|
4
|
+
require "rom/struct"
|
5
|
+
require "rom/factory/dsl"
|
6
|
+
require "rom/factory/registry"
|
10
7
|
|
11
8
|
module ROM::Factory
|
12
9
|
# In-memory builder API
|
@@ -42,7 +39,7 @@ module ROM::Factory
|
|
42
39
|
#
|
43
40
|
# @api public
|
44
41
|
def [](name, *traits, **attrs)
|
45
|
-
registry[name].struct_namespace(struct_namespace).create(*traits, attrs)
|
42
|
+
registry[name].struct_namespace(struct_namespace).create(*traits, **attrs)
|
46
43
|
end
|
47
44
|
end
|
48
45
|
|
@@ -147,7 +144,7 @@ module ROM::Factory
|
|
147
144
|
name,
|
148
145
|
relation: relation,
|
149
146
|
factories: self,
|
150
|
-
struct_namespace:
|
147
|
+
struct_namespace: builder_struct_namespace(namespace),
|
151
148
|
&block
|
152
149
|
).call
|
153
150
|
end
|
@@ -164,13 +161,14 @@ module ROM::Factory
|
|
164
161
|
# MyFactory[:user, name: "Jane"]
|
165
162
|
#
|
166
163
|
# @param [Symbol] name The name of the registered factory
|
167
|
-
# @param [
|
164
|
+
# @param [Array<Symbol>] traits List of traits to apply
|
165
|
+
# @param [Hash] attrs optional attributes to override the defaults
|
168
166
|
#
|
169
167
|
# @return [ROM::Struct]
|
170
168
|
#
|
171
169
|
# @api public
|
172
|
-
def [](name, *
|
173
|
-
registry[name].struct_namespace(struct_namespace).persistable.create(*
|
170
|
+
def [](name, *traits, **attrs)
|
171
|
+
registry[name].struct_namespace(struct_namespace).persistable.create(*traits, **attrs)
|
174
172
|
end
|
175
173
|
|
176
174
|
# Return in-memory struct builder
|
@@ -204,8 +202,8 @@ module ROM::Factory
|
|
204
202
|
end
|
205
203
|
|
206
204
|
# @api private
|
207
|
-
def
|
208
|
-
ns ? {
|
205
|
+
def builder_struct_namespace(ns)
|
206
|
+
ns ? {namespace: ns, overridable: false} : {namespace: struct_namespace, overridable: true}
|
209
207
|
end
|
210
208
|
|
211
209
|
# @api private
|
@@ -226,7 +224,7 @@ module ROM::Factory
|
|
226
224
|
# @api private
|
227
225
|
def extend_builder(name, parent, relation_name, ns, &block)
|
228
226
|
namespace = parent.options[:struct_namespace]
|
229
|
-
namespace =
|
227
|
+
namespace = builder_struct_namespace(ns) if ns
|
230
228
|
relation = rom.relations.fetch(relation_name) { parent.relation }
|
231
229
|
DSL.new(
|
232
230
|
name,
|
data/lib/rom/factory/registry.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "rom/factory/constants"
|
4
4
|
|
5
5
|
module ROM
|
6
6
|
module Factory
|
@@ -28,7 +28,7 @@ module ROM
|
|
28
28
|
# @api private
|
29
29
|
def [](name)
|
30
30
|
elements.fetch(name) do
|
31
|
-
raise FactoryNotDefinedError
|
31
|
+
raise FactoryNotDefinedError, name
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "rom/factory/sequences"
|
4
4
|
|
5
5
|
module ROM
|
6
6
|
module Factory
|
@@ -31,13 +31,13 @@ module ROM
|
|
31
31
|
end
|
32
32
|
|
33
33
|
# @api private
|
34
|
-
def defaults(traits, attrs, opts
|
35
|
-
|
34
|
+
def defaults(traits, attrs, **opts)
|
35
|
+
mergeable_attrs = select_mergeable_attrs(traits, attrs)
|
36
|
+
evaluate(traits, attrs, opts).merge(mergeable_attrs)
|
36
37
|
end
|
37
38
|
|
38
39
|
# @api private
|
39
|
-
def struct(*
|
40
|
-
traits, attrs = extract_tuple(args)
|
40
|
+
def struct(*traits, **attrs)
|
41
41
|
merged_attrs = struct_attrs.merge(defaults(traits, attrs, persist: false))
|
42
42
|
is_callable = proc { |_name, value| value.respond_to?(:call) }
|
43
43
|
|
@@ -92,28 +92,17 @@ module ROM
|
|
92
92
|
relation.primary_key
|
93
93
|
end
|
94
94
|
|
95
|
-
# @api private
|
96
|
-
def extract_tuple(args)
|
97
|
-
if !args.empty? && args.last.is_a?(::Hash)
|
98
|
-
*traits, attrs = args
|
99
|
-
|
100
|
-
[traits, attrs]
|
101
|
-
else
|
102
|
-
[args, EMPTY_HASH]
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
95
|
private
|
107
96
|
|
108
97
|
# @api private
|
109
98
|
def evaluate(traits, attrs, opts)
|
110
|
-
evaluate_values(attrs
|
99
|
+
evaluate_values(attrs)
|
111
100
|
.merge(evaluate_associations(attrs, opts))
|
112
101
|
.merge(evaluate_traits(traits, attrs, opts))
|
113
102
|
end
|
114
103
|
|
115
104
|
# @api private
|
116
|
-
def evaluate_values(attrs
|
105
|
+
def evaluate_values(attrs)
|
117
106
|
attributes.values.tsort.each_with_object({}) do |attr, h|
|
118
107
|
deps = attr.dependency_names.map { |k| h[k] }.compact
|
119
108
|
result = attr.(attrs, *deps)
|
@@ -129,7 +118,7 @@ module ROM
|
|
129
118
|
|
130
119
|
traits_attrs = self.traits.values_at(*traits).flat_map(&:elements)
|
131
120
|
registry = AttributeRegistry.new(traits_attrs)
|
132
|
-
self.class.new(registry, relation).defaults([], attrs, opts)
|
121
|
+
self.class.new(registry, relation).defaults([], attrs, **opts)
|
133
122
|
end
|
134
123
|
|
135
124
|
# @api private
|
@@ -148,9 +137,9 @@ module ROM
|
|
148
137
|
|
149
138
|
# @api private
|
150
139
|
def struct_attrs
|
151
|
-
struct_attrs = relation.schema
|
152
|
-
reject(&:primary_key?)
|
153
|
-
map { |attr| [attr.name, nil] }.to_h
|
140
|
+
struct_attrs = relation.schema
|
141
|
+
.reject(&:primary_key?)
|
142
|
+
.map { |attr| [attr.name, nil] }.to_h
|
154
143
|
|
155
144
|
if primary_key
|
156
145
|
struct_attrs.merge(primary_key => next_id)
|
@@ -163,6 +152,13 @@ module ROM
|
|
163
152
|
def next_id
|
164
153
|
sequence.()
|
165
154
|
end
|
155
|
+
|
156
|
+
def select_mergeable_attrs(traits, attrs)
|
157
|
+
unmergeable = assocs(traits).select(&:through?).map do |a|
|
158
|
+
Dry::Core::Inflector.singularize(a.assoc.target.name.to_sym).to_sym
|
159
|
+
end
|
160
|
+
attrs.dup.delete_if { |key, _| unmergeable.include?(key) }
|
161
|
+
end
|
166
162
|
end
|
167
163
|
end
|
168
164
|
end
|
data/lib/rom/factory/version.rb
CHANGED
data/lib/rom/factory.rb
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "dry/core"
|
4
|
+
require "dry/configurable"
|
5
|
+
require "dry/struct"
|
6
|
+
|
7
|
+
require "rom/factory/factories"
|
5
8
|
|
6
9
|
module ROM
|
7
10
|
# Main ROM::Factory API
|
8
11
|
#
|
9
12
|
# @api public
|
10
13
|
module Factory
|
11
|
-
DEFAULT_NAME =
|
14
|
+
DEFAULT_NAME = "Factories"
|
12
15
|
|
13
16
|
# Configure a new factory
|
14
17
|
#
|
@@ -23,8 +26,8 @@ module ROM
|
|
23
26
|
#
|
24
27
|
# @api public
|
25
28
|
def self.configure(name = DEFAULT_NAME, &block)
|
26
|
-
klass = Dry::Core::ClassBuilder.new(name: name, parent: Factories).call do |
|
27
|
-
|
29
|
+
klass = Dry::Core::ClassBuilder.new(name: name, parent: Factories).call do |c|
|
30
|
+
c.configure(&block)
|
28
31
|
end
|
29
32
|
|
30
33
|
klass.new(klass.config.rom)
|
data/lib/rom-factory.rb
CHANGED
data/project.yml
CHANGED
data/rom-factory.gemspec
CHANGED
@@ -11,26 +11,25 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.authors = ["Janis Miezitis", "Piotr Solnica"]
|
12
12
|
spec.email = ["janjiss@gmail.com", "piotr.solnica@gmail.com"]
|
13
13
|
|
14
|
-
spec.summary = %q{ROM based builder library to make your specs awesome. DSL partially inspired by
|
14
|
+
spec.summary = %q{ROM based builder library to make your specs awesome. DSL partially inspired by FactoryBot.}
|
15
15
|
spec.description = %q{}
|
16
16
|
spec.homepage = "https://github.com/rom-rb/rom-factory"
|
17
17
|
spec.license = "MIT"
|
18
18
|
|
19
19
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
20
20
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
21
|
-
|
22
|
-
spec.metadata['allowed_push_host'] = "https://rubygems.org"
|
23
|
-
else
|
24
|
-
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
25
|
-
end
|
21
|
+
spec.metadata['allowed_push_host'] = "https://rubygems.org"
|
26
22
|
|
27
23
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
28
24
|
spec.bindir = "exe"
|
29
25
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
30
26
|
spec.require_paths = ["lib"]
|
31
27
|
|
32
|
-
spec.
|
33
|
-
|
34
|
-
spec.
|
35
|
-
spec.
|
28
|
+
spec.required_ruby_version = ">= 2.7.0"
|
29
|
+
|
30
|
+
spec.add_runtime_dependency "dry-configurable", "~> 1.0"
|
31
|
+
spec.add_runtime_dependency "dry-core", "~> 1.0"
|
32
|
+
spec.add_runtime_dependency "dry-struct", "~> 1.6"
|
33
|
+
spec.add_runtime_dependency "faker", ">= 2.0", "< 3.0"
|
34
|
+
spec.add_runtime_dependency "rom-core", "~> 5.3"
|
36
35
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rom-factory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Janis Miezitis
|
8
8
|
- Piotr Solnica
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-11-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: dry-configurable
|
@@ -17,35 +17,49 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '0
|
20
|
+
version: '1.0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '0
|
27
|
+
version: '1.0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: dry-core
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '0
|
34
|
+
version: '1.0'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '0
|
41
|
+
version: '1.0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: dry-struct
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '1.6'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '1.6'
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: faker
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
45
59
|
requirements:
|
46
60
|
- - ">="
|
47
61
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
62
|
+
version: '2.0'
|
49
63
|
- - "<"
|
50
64
|
- !ruby/object:Gem::Version
|
51
65
|
version: '3.0'
|
@@ -55,7 +69,7 @@ dependencies:
|
|
55
69
|
requirements:
|
56
70
|
- - ">="
|
57
71
|
- !ruby/object:Gem::Version
|
58
|
-
version: '
|
72
|
+
version: '2.0'
|
59
73
|
- - "<"
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '3.0'
|
@@ -65,14 +79,14 @@ dependencies:
|
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '5.
|
82
|
+
version: '5.3'
|
69
83
|
type: :runtime
|
70
84
|
prerelease: false
|
71
85
|
version_requirements: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '5.
|
89
|
+
version: '5.3'
|
76
90
|
description: ''
|
77
91
|
email:
|
78
92
|
- janjiss@gmail.com
|
@@ -81,28 +95,28 @@ executables: []
|
|
81
95
|
extensions: []
|
82
96
|
extra_rdoc_files: []
|
83
97
|
files:
|
98
|
+
- ".action_hero.yml"
|
84
99
|
- ".devtools/templates/changelog.erb"
|
85
|
-
- ".
|
86
|
-
- ".github/
|
87
|
-
- ".github/ISSUE_TEMPLATE
|
88
|
-
- ".github/ISSUE_TEMPLATE
|
89
|
-
- ".github/
|
100
|
+
- ".devtools/templates/release.erb"
|
101
|
+
- ".github/FUNDING.yml"
|
102
|
+
- ".github/ISSUE_TEMPLATE/bug-report.md"
|
103
|
+
- ".github/ISSUE_TEMPLATE/config.yml"
|
104
|
+
- ".github/SUPPORT.md"
|
90
105
|
- ".github/workflows/ci.yml"
|
91
|
-
- ".github/workflows/custom/ci.yml"
|
92
106
|
- ".github/workflows/docsite.yml"
|
107
|
+
- ".github/workflows/rubocop.yml"
|
93
108
|
- ".github/workflows/sync_configs.yml"
|
94
109
|
- ".gitignore"
|
95
110
|
- ".rspec"
|
96
111
|
- ".rubocop.yml"
|
97
112
|
- ".yardopts"
|
98
|
-
- Appraisals
|
99
113
|
- CHANGELOG.md
|
114
|
+
- CODEOWNERS
|
100
115
|
- CODE_OF_CONDUCT.md
|
101
116
|
- CONTRIBUTING.md
|
102
117
|
- Gemfile
|
103
118
|
- Gemfile.devtools
|
104
119
|
- LICENSE
|
105
|
-
- LICENSE.txt
|
106
120
|
- README.md
|
107
121
|
- Rakefile
|
108
122
|
- benchmarks/basic.rb
|
@@ -132,7 +146,7 @@ licenses:
|
|
132
146
|
- MIT
|
133
147
|
metadata:
|
134
148
|
allowed_push_host: https://rubygems.org
|
135
|
-
post_install_message:
|
149
|
+
post_install_message:
|
136
150
|
rdoc_options: []
|
137
151
|
require_paths:
|
138
152
|
- lib
|
@@ -140,16 +154,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
140
154
|
requirements:
|
141
155
|
- - ">="
|
142
156
|
- !ruby/object:Gem::Version
|
143
|
-
version:
|
157
|
+
version: 2.7.0
|
144
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
159
|
requirements:
|
146
160
|
- - ">="
|
147
161
|
- !ruby/object:Gem::Version
|
148
162
|
version: '0'
|
149
163
|
requirements: []
|
150
|
-
rubygems_version: 3.
|
151
|
-
signing_key:
|
164
|
+
rubygems_version: 3.3.7
|
165
|
+
signing_key:
|
152
166
|
specification_version: 4
|
153
167
|
summary: ROM based builder library to make your specs awesome. DSL partially inspired
|
154
|
-
by
|
168
|
+
by FactoryBot.
|
155
169
|
test_files: []
|
@@ -1,30 +0,0 @@
|
|
1
|
-
---
|
2
|
-
name: "\U0001F41B A detailed bug report"
|
3
|
-
about: Report a bug
|
4
|
-
title: ''
|
5
|
-
labels: bug
|
6
|
-
assignees: ''
|
7
|
-
|
8
|
-
---
|
9
|
-
|
10
|
-
**Before you submit this: WE ONLY ACCEPT BUG REPORTS**
|
11
|
-
|
12
|
-
For more information see [our contribution guidelines](https://github.com/rom-rb/rom/blob/master/CONTRIBUTING.md)
|
13
|
-
|
14
|
-
**Describe the bug**
|
15
|
-
|
16
|
-
A clear and concise description of what the bug is.
|
17
|
-
|
18
|
-
**To Reproduce**
|
19
|
-
|
20
|
-
Provide detailed steps to reproduce, an executable script would be best.
|
21
|
-
|
22
|
-
**Expected behavior**
|
23
|
-
|
24
|
-
A clear and concise description of what you expected to happen.
|
25
|
-
|
26
|
-
**Your environment**
|
27
|
-
|
28
|
-
- Affects my production application: **YES/NO**
|
29
|
-
- Ruby version: ...
|
30
|
-
- OS: ...
|
@@ -1,18 +0,0 @@
|
|
1
|
-
---
|
2
|
-
name: "\U0001F6E0 Feature request"
|
3
|
-
about: See CONTRIBUTING.md for more information
|
4
|
-
title: ''
|
5
|
-
labels: feature
|
6
|
-
assignees: ''
|
7
|
-
|
8
|
-
---
|
9
|
-
|
10
|
-
Summary of what the feature is supposed to do.
|
11
|
-
|
12
|
-
## Examples
|
13
|
-
|
14
|
-
Code examples showing how the feature could be used.
|
15
|
-
|
16
|
-
## Resources
|
17
|
-
|
18
|
-
Additional information, like a link to the discussion forum thread where the feature was discussed etc.
|
@@ -1,26 +0,0 @@
|
|
1
|
-
jobs:
|
2
|
-
tests:
|
3
|
-
services:
|
4
|
-
db:
|
5
|
-
image: postgres:10.8
|
6
|
-
env:
|
7
|
-
POSTGRES_USER: runner
|
8
|
-
POSTGRES_PASSWORD: ""
|
9
|
-
POSTGRES_DB: rom_factory
|
10
|
-
ports:
|
11
|
-
- 5432:5432
|
12
|
-
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
|
13
|
-
strategy:
|
14
|
-
matrix:
|
15
|
-
faker:
|
16
|
-
- faker-1
|
17
|
-
- faker-2
|
18
|
-
include:
|
19
|
-
- ruby: "2.6"
|
20
|
-
faker: faker-2
|
21
|
-
coverage: "true"
|
22
|
-
- ruby: jruby
|
23
|
-
database_url: jdbc:postgresql://localhost/rom_factory
|
24
|
-
env:
|
25
|
-
FAKER: ${{matrix.faker}}
|
26
|
-
APT_DEPS: "libpq-dev libmysqlclient-dev libsqlite3-dev"
|