satisfactory 0.0.0 → 0.2.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: d75154f80250b3760e281317aeb9dbe5943df83925488c3e66164ace3736f422
4
- data.tar.gz: a29f35668835598adc52196519d9ca849354c9c0ed23a62d1bbb3997a2343db6
3
+ metadata.gz: 4bb15c794b5397907577dbe90ac97815f6636d7c0268db9c553a91a2b51b1a56
4
+ data.tar.gz: 84336045dedaea44be72e4bd3a108624af18986b8d7cc7b5a07381b3910620c0
5
5
  SHA512:
6
- metadata.gz: 3dfcf2f1eaf54ffe8345fac3efd11351c26e0b3840457727bf378cbbfadb47d93a01f39fb26cc6e2753ee92016a4b048d55f9d1e99d3c54d93778cb6b8b68e78
7
- data.tar.gz: 514ed076dbc00f6313be39609a1b7cb48dbf309247870e6bda9a6af7ff3a6c21d59dbd126c0ee33197e4f07226a9b9c6a80972fb8d92c2fa40cf47a96c31d48c
6
+ metadata.gz: e018c58477288a2eac77a10889d31ba5a3c20b4c4c280d248789693d2c115849f88e42b7a759d471e8eadd4d46a079cb5496910248bb99a3f158bc420fb62d9b
7
+ data.tar.gz: bd5b099abce2a3d5b051a4c0e3343710d1305db4aa00a7b5c7e6a4c8614f84570afec990f86fe1d0c41228d803fd3db5bd61f1faaef9b2302e94e8fc4640573a
data/LICENCE ADDED
@@ -0,0 +1,2 @@
1
+ Satisfactory © 2022 by Smart/Casual Ltd is licensed under CC BY-NC-SA 4.0.
2
+ To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/
data/Rakefile CHANGED
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  require "bundler/gem_tasks"
4
2
  require "rubocop/rake_task"
5
3
 
data/bin/console ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+ require "bundler/setup"
3
+ require "satisfactory"
4
+
5
+ # You can add fixtures and/or initialization code here to make experimenting
6
+ # with your gem easier. You can also use a different console, if you like.
7
+
8
+ # (If you use this, don't forget to add pry to your Gemfile!)
9
+ # require "pry"
10
+ # Pry.start
11
+
12
+ require "irb"
13
+ IRB.start(__FILE__)
data/bin/rubocop ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rubocop' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
12
+
13
+ bundle_binstub = File.expand_path("bundle", __dir__)
14
+
15
+ if File.file?(bundle_binstub)
16
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
17
+ load(bundle_binstub)
18
+ else
19
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
20
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
21
+ end
22
+ end
23
+
24
+ require "rubygems"
25
+ require "bundler/setup"
26
+
27
+ load Gem.bin_path("rubocop", "rubocop")
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/bin/yard ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'yard' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
12
+
13
+ bundle_binstub = File.expand_path("bundle", __dir__)
14
+
15
+ if File.file?(bundle_binstub)
16
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
17
+ load(bundle_binstub)
18
+ else
19
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
20
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
21
+ end
22
+ end
23
+
24
+ require "rubygems"
25
+ require "bundler/setup"
26
+
27
+ load Gem.bin_path("yard", "yard")
data/bin/yardoc ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'yardoc' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
12
+
13
+ bundle_binstub = File.expand_path("bundle", __dir__)
14
+
15
+ if File.file?(bundle_binstub)
16
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
17
+ load(bundle_binstub)
18
+ else
19
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
20
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
21
+ end
22
+ end
23
+
24
+ require "rubygems"
25
+ require "bundler/setup"
26
+
27
+ load Gem.bin_path("yard", "yardoc")
data/bin/yri ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'yri' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
12
+
13
+ bundle_binstub = File.expand_path("bundle", __dir__)
14
+
15
+ if File.file?(bundle_binstub)
16
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
17
+ load(bundle_binstub)
18
+ else
19
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
20
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
21
+ end
22
+ end
23
+
24
+ require "rubygems"
25
+ require "bundler/setup"
26
+
27
+ load Gem.bin_path("yard", "yri")
@@ -0,0 +1,61 @@
1
+ require_relative "upstream_record_finder"
2
+
3
+ module Satisfactory
4
+ # Represents a collection of homogenous records.
5
+ class Collection < Array
6
+ # @api private
7
+ def initialize(*args, upstream:, **kwargs, &block)
8
+ super(*args, **kwargs, &block)
9
+ @upstream = upstream
10
+ end
11
+
12
+ # @api private
13
+ attr_reader :upstream
14
+
15
+ # @!method and
16
+ # Delegates to the upstream record.
17
+ # @return (see Satisfactory::Record#and)
18
+ # @see Satisfactory::Record#and
19
+ # @!method create
20
+ # Delegates to the upstream record.
21
+ # @return (see Satisfactory::Record#create)
22
+ # @see Satisfactory::Record#create
23
+ # @!method to_plan
24
+ # Delegates to the upstream record.
25
+ # @return (see Satisfactory::Record#to_plan)
26
+ # @see Satisfactory::Record#to_plan
27
+ delegate :and, :create, :to_plan, to: :upstream
28
+
29
+ # Calls {#with} on each entry in the collection.
30
+ #
31
+ # @return [Satisfactory::Collection]
32
+ def with(...)
33
+ self.class.new(map { |entry| entry.with(...) }, upstream:)
34
+ end
35
+ alias each_with with
36
+
37
+ # Calls {#which_is} on each entry in the collection.
38
+ #
39
+ # @param (see Satisfactory::Record#which_is)
40
+ # @return [Satisfactory::Collection]
41
+ def which_are(...)
42
+ self.class.new(map { |entry| entry.which_is(...) }, upstream:)
43
+ end
44
+ alias which_is which_are
45
+
46
+ # (see Satisfactory::Record#and_same)
47
+ def and_same(upstream_type)
48
+ Satisfactory::UpstreamRecordFinder.new(upstream:).find(upstream_type)
49
+ end
50
+
51
+ # @api private
52
+ def build
53
+ flat_map(&:build)
54
+ end
55
+
56
+ # @api private
57
+ def build_plan
58
+ flat_map(&:build_plan)
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,43 @@
1
+ require "factory_bot_rails"
2
+
3
+ module Satisfactory
4
+ # Loads factory configurations from FactoryBot.
5
+ #
6
+ # @api private
7
+ class Loader
8
+ class << self
9
+ # Skips factories that don't have a model that inherits from ApplicationRecord.
10
+ #
11
+ # @return [{Symbol => Hash}] a hash of factory configurations by factory name
12
+ def factory_configurations # rubocop:disable Metrics/AbcSize
13
+ FactoryBot.factories.each.with_object({}) do |(factory, model), configurations|
14
+ next unless (model = factory.build_class)
15
+ next unless model < ApplicationRecord
16
+
17
+ associations = associations_for(model)
18
+ parent_factory = factory.send(:parent)
19
+
20
+ configurations[factory.name] = {
21
+ associations: associations.transform_values { |a| a.map(&:name) },
22
+ model:,
23
+ name: factory.name,
24
+ parent: (parent_factory.name unless parent_factory.is_a?(FactoryBot::NullFactory)),
25
+ traits: factory.defined_traits.map(&:name),
26
+ }
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def associations_for(model)
33
+ all = model.reflect_on_all_associations.reject(&:polymorphic?)
34
+ plural = model.reflect_on_all_associations(:has_many).reject(&:polymorphic?)
35
+
36
+ {
37
+ plural:,
38
+ singular: all - plural,
39
+ }
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,208 @@
1
+ require_relative "collection"
2
+ require_relative "upstream_record_finder"
3
+
4
+ module Satisfactory
5
+ # Represents a usage of a type.
6
+ #
7
+ # @todo This whole class needs a tidy up
8
+ class Record # rubocop:disable Metrics/ClassLength
9
+ # @api private
10
+ # @param type [Symbol] The type of record to create. Must be a known factory.
11
+ # @param factory_name [Symbol] The name of the factory to use (if different).
12
+ # @param upstream [Satisfactory::Record, Satisfactory::Collection, Satisfactory::Root] The upstream record-ish.
13
+ # @param attributes [Hash] The attributes to use when creating the record.
14
+ def initialize(type:, factory_name: nil, upstream: nil, attributes: {})
15
+ @factory_name = factory_name || type
16
+
17
+ config = Satisfactory.factory_configurations[type]
18
+ raise ArgumentError, "Unknown factory #{type}" unless config
19
+
20
+ @type = config[:parent] || type
21
+ @type_config = Satisfactory.factory_configurations[@type]
22
+ @traits = []
23
+ @upstream = upstream
24
+
25
+ @attributes = attributes
26
+
27
+ @associations = type_config.dig(:associations, :plural).each.with_object({}) do |name, hash|
28
+ hash[name] = Satisfactory::Collection.new(upstream: self)
29
+ end
30
+ end
31
+
32
+ # @api private
33
+ attr_accessor :type, :type_config, :traits, :upstream, :factory_name, :attributes
34
+
35
+ # Add an associated record to this record's build plan.
36
+ #
37
+ # @param count [Integer] The number of records to create.
38
+ # @param downstream_type [Symbol] The type of record to create.
39
+ # @param force [Boolean] Whether to force the creation of the record.
40
+ # For internal use only. Use {#and} instead.
41
+ # @param attributes [Hash] The attributes to use when creating the record.
42
+ # @return [Satisfactory::Record, Satisfactory::Collection]
43
+ def with(count = nil, downstream_type, force: false, **attributes) # rubocop:disable Style/OptionalArguments, Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
44
+ if singular?(downstream_type)
45
+ if count && count > 1 # rubocop:disable Style/IfUnlessModifier
46
+ raise ArgumentError, "Cannot create multiple of singular associations (e.g. belongs_to)"
47
+ end
48
+
49
+ add_singular_association(downstream_type, factory_name: downstream_type, force:, attributes:)
50
+ elsif plural?(downstream_type) && (singular = singular_from_plural(downstream_type))
51
+ add_plural_association(downstream_type, factory_name: singular, count:, force:, attributes:)
52
+ elsif (config = Satisfactory.factory_configurations[downstream_type])
53
+ singular = config[:parent] || downstream_type
54
+ plural = plural_from_singular(singular)
55
+ add_singular_for_plural_association(plural, singular:, factory_name: downstream_type, force:, attributes:)
56
+ elsif (config = Satisfactory.factory_configurations[downstream_type.to_s.singularize])
57
+ unless (parent = config[:parent])
58
+ raise ArgumentError, "Cannot create multiple of singular associations (e.g. belongs_to)"
59
+ end
60
+
61
+ plural = plural_from_singular(parent)
62
+ add_plural_association(plural, factory_name: downstream_type.to_s.singularize, count:, force:, attributes:)
63
+ else
64
+ raise ArgumentError, "Unknown association #{type}->#{downstream_type}"
65
+ end
66
+ end
67
+
68
+ # Add a sibling record to the parent record's build plan.
69
+ # e.g. adding a second user to a project.
70
+ #
71
+ # @param count [Integer] The number of records to create.
72
+ # @param downstream_type [Symbol] The type of record to create.
73
+ # @param attributes [Hash] The attributes to use when creating the record.
74
+ # @return (see #with)
75
+ def and(count = nil, downstream_type, **attributes) # rubocop:disable Style/OptionalArguments
76
+ upstream.with(count, downstream_type, force: true, **attributes)
77
+ end
78
+
79
+ # Apply one or more traits to this record's build plan.
80
+ #
81
+ # @param *traits [Symbol, ...] The traits to apply.
82
+ def which_is(*traits)
83
+ traits.each { |trait| self.traits << trait }
84
+ self
85
+ end
86
+
87
+ # Locate the nearest ancestor of the given type.
88
+ #
89
+ # @param upstream_type [Symbol] The type of ancestor to find.
90
+ # @return [Satisfactory::Record, Satisfactory::Collection, Satisfactory::Root]
91
+ def and_same(upstream_type)
92
+ Satisfactory::UpstreamRecordFinder.new(upstream:).find(upstream_type)
93
+ end
94
+
95
+ # @api private
96
+ def modify
97
+ yield(self).upstream
98
+ end
99
+
100
+ # Trigger the creation of this tree's build plan.
101
+ #
102
+ # @return (see Satisfactory::Root#create)
103
+ # @todo Check if we still need the upstream check.
104
+ def create
105
+ if upstream
106
+ upstream.create
107
+ else
108
+ create_self
109
+ end
110
+ end
111
+
112
+ # Construct this tree's build plan.
113
+ #
114
+ # @return [Hash]
115
+ def to_plan
116
+ if upstream
117
+ upstream.to_plan
118
+ else
119
+ build_plan
120
+ end
121
+ end
122
+
123
+ # @api private
124
+ def build_plan
125
+ {
126
+ traits:,
127
+ }.merge(associations_plan).compact_blank
128
+ end
129
+
130
+ # @api private
131
+ # @return (see #reify)
132
+ def build
133
+ reify(:build)
134
+ end
135
+
136
+ # @api private
137
+ # @return (see #reify)
138
+ def create_self
139
+ reify(:create)
140
+ end
141
+
142
+ private
143
+
144
+ attr_reader :associations
145
+
146
+ # @return [ApplicationRecord]
147
+ def reify(method)
148
+ FactoryBot.public_send(method, factory_name, *traits, attributes.merge(associations.transform_values(&:build)))
149
+ end
150
+
151
+ def associations_plan
152
+ associations.transform_values(&:build_plan).compact_blank
153
+ end
154
+
155
+ def plural?(association_name)
156
+ type_config.dig(:associations, :plural).include?(association_name)
157
+ end
158
+
159
+ def singular?(association_name)
160
+ type_config.dig(:associations, :singular).include?(association_name)
161
+ end
162
+
163
+ def plural_from_singular(singular_association_name)
164
+ type_config.dig(:associations, :plural).find do |name|
165
+ singular_association_name.to_s == name.to_s.singularize
166
+ end
167
+ end
168
+
169
+ def singular_from_plural(plural_association_name)
170
+ Satisfactory.factory_configurations.keys.find do |name|
171
+ plural_association_name.to_s == name.to_s.pluralize
172
+ end
173
+ end
174
+
175
+ def add_singular_association(name, factory_name:, force: false, attributes: {})
176
+ if force || associations[name].blank?
177
+ associations[name] = self.class.new(type: name, factory_name:, upstream: self, attributes:)
178
+ else
179
+ associations[name]
180
+ end
181
+ end
182
+
183
+ def add_plural_association(name, factory_name:, count: nil, force: false, attributes: {})
184
+ count ||= 1
185
+ singular_name = name.to_s.singularize.to_sym
186
+
187
+ Satisfactory::Collection.new(upstream: self).tap do |new_associations|
188
+ count.times do
189
+ new_associations << self.class.new(type: singular_name, factory_name:, upstream: self, attributes:)
190
+ end
191
+
192
+ if force
193
+ associations[name] << new_associations
194
+ else
195
+ associations[name] = new_associations
196
+ end
197
+ end
198
+ end
199
+
200
+ def add_singular_for_plural_association(name, singular:, factory_name:, force: false, attributes: {})
201
+ if force || associations[name].empty?
202
+ associations[name] << self.class.new(type: singular, factory_name:, upstream: self, attributes:)
203
+ end
204
+
205
+ associations[name].last
206
+ end
207
+ end
208
+ end
@@ -0,0 +1,47 @@
1
+ require_relative "record"
2
+
3
+ module Satisfactory
4
+ # The root of the factory graph.
5
+ # This is where you begin creating records.
6
+ class Root
7
+ # @api private
8
+ def initialize
9
+ @root_records = Hash.new { |h, k| h[k] = [] }
10
+ end
11
+
12
+ # Add a top-level record to the root.
13
+ # This is your entry point into the factory graph, and
14
+ # the way to begin creating records.
15
+ def add(factory_name, **attributes)
16
+ raise FactoryNotDefinedError, factory_name unless Satisfactory.factory_configurations.key?(factory_name)
17
+
18
+ Satisfactory::Record.new(
19
+ type: factory_name,
20
+ upstream: self,
21
+ attributes:,
22
+ ).tap { |r| @root_records[factory_name] << r }
23
+ end
24
+
25
+ # @api private
26
+ # @return [Hash<Symbol, Array<ApplicationRecord>>]
27
+ def create
28
+ @root_records.transform_values do |records|
29
+ records.map(&:create_self)
30
+ end
31
+ end
32
+
33
+ # @api private
34
+ # @return [Hash<Symbol, Array<Hash>>]
35
+ def to_plan
36
+ @root_records.transform_values do |records|
37
+ records.map(&:build_plan)
38
+ end
39
+ end
40
+
41
+ # @api private
42
+ # @return [nil]
43
+ def upstream
44
+ nil
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,30 @@
1
+ module Satisfactory
2
+ # Finds the upstream record of a given type.
3
+ #
4
+ # @api private
5
+ class UpstreamRecordFinder
6
+ def initialize(upstream:)
7
+ @upstream = upstream
8
+ end
9
+
10
+ attr_accessor :upstream
11
+
12
+ def find(type)
13
+ raise MissingUpstreamRecordError, type if upstream.nil?
14
+
15
+ if type == upstream.type
16
+ self
17
+ else
18
+ self.upstream = upstream.upstream
19
+ find(type)
20
+ end
21
+ end
22
+
23
+ def with(*args, **kwargs)
24
+ upstream.with(*args, force: true, **kwargs)
25
+ end
26
+
27
+ # @api private
28
+ class MissingUpstreamRecordError < StandardError; end
29
+ end
30
+ end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Satisfactory
4
- VERSION = "0.0.0"
2
+ VERSION = "0.2.0".freeze
5
3
  end
data/lib/satisfactory.rb CHANGED
@@ -1,8 +1,24 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "satisfactory/version"
1
+ require_relative "satisfactory/loader"
2
+ require_relative "satisfactory/root"
4
3
 
4
+ # Satisfactory is a factory library for Ruby,
5
+ # helping you to navigate your factory associations.
6
+ #
7
+ # Currently implemented atop FactoryBot, but
8
+ # could be extended to support other factory libraries.
9
+ #
10
+ # @since 0.2.0
5
11
  module Satisfactory
6
- class Error < StandardError; end
7
- # Your code goes here...
12
+ # @!attribute [r] factory_configurations
13
+ class << self
14
+ def root
15
+ Root.new
16
+ end
17
+
18
+ # @api private
19
+ # @return (see Loader.factory_configurations)
20
+ def factory_configurations
21
+ @factory_configurations ||= Loader.factory_configurations
22
+ end
23
+ end
8
24
  end
@@ -0,0 +1,39 @@
1
+ require_relative "lib/satisfactory/version"
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "satisfactory"
5
+ spec.version = Satisfactory::VERSION
6
+ spec.authors = ["Elliot Crosby-McCullough"]
7
+ spec.email = ["elliot.cm@gmail.com"]
8
+
9
+ spec.summary = "A DSL for navigating your factories and building test data"
10
+ spec.homepage = "https://github.com/SmartCasual/satisfactory"
11
+ spec.license = "CC-BY-NC-SA-4.0"
12
+
13
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/v#{spec.version}/CHANGELOG.md"
14
+ spec.metadata["homepage_uri"] = spec.homepage
15
+ spec.metadata["source_code_uri"] = spec.homepage
16
+
17
+ spec.metadata["rubygems_mfa_required"] = "true"
18
+ spec.required_ruby_version = ">= 3.1.0"
19
+
20
+ spec.files = Dir.chdir(File.expand_path(__dir__)) {
21
+ Dir[
22
+ "{bin,lib}/**/*",
23
+ "CHANGELOG.md",
24
+ "LICENCE",
25
+ "Rakefile",
26
+ "README.md",
27
+ "satisfactory.gemspec",
28
+ ]
29
+ }
30
+
31
+ spec.bindir = "bin"
32
+ spec.executables = spec.files.grep(%r{\Abin/}) { |f| File.basename(f) }
33
+ spec.require_paths = ["lib"]
34
+
35
+ spec.add_dependency "factory_bot_rails", "~> 6.2"
36
+
37
+ spec.add_development_dependency "rubocop", "~> 1.40"
38
+ spec.add_development_dependency "yard", "~> 0.9"
39
+ end
metadata CHANGED
@@ -1,35 +1,96 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: satisfactory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elliot Crosby-McCullough
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-09 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2022-12-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: factory_bot_rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '6.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '6.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.40'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.40'
41
+ - !ruby/object:Gem::Dependency
42
+ name: yard
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.9'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.9'
13
55
  description:
14
56
  email:
15
57
  - elliot.cm@gmail.com
16
- executables: []
58
+ executables:
59
+ - console
60
+ - rubocop
61
+ - setup
62
+ - yard
63
+ - yardoc
64
+ - yri
17
65
  extensions: []
18
66
  extra_rdoc_files: []
19
67
  files:
20
- - ".rubocop.yml"
21
68
  - CHANGELOG.md
22
- - Gemfile
69
+ - LICENCE
23
70
  - README.md
24
71
  - Rakefile
72
+ - bin/console
73
+ - bin/rubocop
74
+ - bin/setup
75
+ - bin/yard
76
+ - bin/yardoc
77
+ - bin/yri
25
78
  - lib/satisfactory.rb
79
+ - lib/satisfactory/collection.rb
80
+ - lib/satisfactory/loader.rb
81
+ - lib/satisfactory/record.rb
82
+ - lib/satisfactory/root.rb
83
+ - lib/satisfactory/upstream_record_finder.rb
26
84
  - lib/satisfactory/version.rb
27
- - sig/satisfactory.rbs
85
+ - satisfactory.gemspec
28
86
  homepage: https://github.com/SmartCasual/satisfactory
29
- licenses: []
87
+ licenses:
88
+ - CC-BY-NC-SA-4.0
30
89
  metadata:
90
+ changelog_uri: https://github.com/SmartCasual/satisfactory/blob/v0.2.0/CHANGELOG.md
31
91
  homepage_uri: https://github.com/SmartCasual/satisfactory
32
92
  source_code_uri: https://github.com/SmartCasual/satisfactory
93
+ rubygems_mfa_required: 'true'
33
94
  post_install_message:
34
95
  rdoc_options: []
35
96
  require_paths:
@@ -38,7 +99,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
38
99
  requirements:
39
100
  - - ">="
40
101
  - !ruby/object:Gem::Version
41
- version: 2.6.0
102
+ version: 3.1.0
42
103
  required_rubygems_version: !ruby/object:Gem::Requirement
43
104
  requirements:
44
105
  - - ">="
@@ -48,5 +109,5 @@ requirements: []
48
109
  rubygems_version: 3.3.7
49
110
  signing_key:
50
111
  specification_version: 4
51
- summary: Write a short summary, because RubyGems requires one.
112
+ summary: A DSL for navigating your factories and building test data
52
113
  test_files: []
data/.rubocop.yml DELETED
@@ -1,13 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 2.6
3
-
4
- Style/StringLiterals:
5
- Enabled: true
6
- EnforcedStyle: double_quotes
7
-
8
- Style/StringLiteralsInInterpolation:
9
- Enabled: true
10
- EnforcedStyle: double_quotes
11
-
12
- Layout/LineLength:
13
- Max: 120
data/Gemfile DELETED
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- # Specify your gem's dependencies in satisfactory.gemspec
6
- gemspec
7
-
8
- gem "rake", "~> 13.0"
9
-
10
- gem "rubocop", "~> 1.21"
data/sig/satisfactory.rbs DELETED
@@ -1,4 +0,0 @@
1
- module Satisfactory
2
- VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end