factory_bot-awesome_linter 0.0.1
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 +7 -0
- data/lib/factory_bot-awesome_linter.rb +116 -0
- data/lib/factory_bot-awesome_linter/version.rb +5 -0
- metadata +73 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 617261095c26b3a682b99159a3cde1ec380c854be48bef7be0828db2e50c02a0
|
4
|
+
data.tar.gz: 9d2ab786572209fb46735949648e2efb78c1dcfd55ee4a5e6ea1cac2bd51df4f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b5f9217d10a5ece6f8375f750866de7d77d9ea58be815a3296468ed095d518d471c4e5951138c1ab0e54e8784effcb559b35ba2b5de04bbeb3b6b0b6c80b0eff
|
7
|
+
data.tar.gz: dfdf9392b11e132c1fad5c3ce4f07182e1c1f599623ef72ed01132305d88f5afeb3d577f7d605fa44c8f30021ee9bf2c2185765a38e006e9578515fd8c33bb05
|
@@ -0,0 +1,116 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'factory_bot'
|
4
|
+
require 'ruby-progressbar'
|
5
|
+
|
6
|
+
module FactoryBot
|
7
|
+
class AwesomeLinter
|
8
|
+
def self.lint!(*args, **kwargs)
|
9
|
+
new(*args, **kwargs).lint!
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(*args, strategy: :create, traits: false, verbose: false)
|
13
|
+
if args.any?
|
14
|
+
@factories_to_lint = args[0]
|
15
|
+
else
|
16
|
+
FactoryBot.reload
|
17
|
+
@factories_to_lint = FactoryBot.factories
|
18
|
+
end
|
19
|
+
|
20
|
+
@factory_strategy = strategy
|
21
|
+
@traits = traits
|
22
|
+
@verbose = verbose
|
23
|
+
@progress_bar = ProgressBar.create(format: "\e[0;32m %c/%C |%w>%i| %e \e[0m")
|
24
|
+
@invalid_factories = []
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_reader :progress_bar, :factories_to_lint, :invalid_factories
|
28
|
+
|
29
|
+
def lint!
|
30
|
+
progress_bar.total = calculate_total
|
31
|
+
|
32
|
+
factories_to_lint.each do |factory|
|
33
|
+
lint_factory(factory)
|
34
|
+
progress_bar.increment
|
35
|
+
|
36
|
+
next unless @traits
|
37
|
+
|
38
|
+
factory.definition.defined_traits.each do |trait|
|
39
|
+
lint_trait(factory, trait)
|
40
|
+
progress_bar.increment
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
progress_bar.stop
|
45
|
+
|
46
|
+
output_invalid_factories
|
47
|
+
invalid_factories.empty?
|
48
|
+
end
|
49
|
+
|
50
|
+
def calculate_total
|
51
|
+
factories_to_lint.reduce(0) do |count, factory|
|
52
|
+
# Compile factory to count enum traits
|
53
|
+
factory.compile
|
54
|
+
|
55
|
+
count + 1 + factory.definition.defined_traits.size
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def lint_factory(factory)
|
60
|
+
cleaning do
|
61
|
+
FactoryBot.public_send(@factory_strategy, factory.name)
|
62
|
+
end
|
63
|
+
rescue StandardError => e
|
64
|
+
invalid_factory! e, factory
|
65
|
+
end
|
66
|
+
|
67
|
+
def lint_trait(factory, trait)
|
68
|
+
cleaning do
|
69
|
+
FactoryBot.public_send(@factory_strategy, factory.name, trait.name)
|
70
|
+
end
|
71
|
+
rescue StandardError => e
|
72
|
+
invalid_factory! e, factory
|
73
|
+
end
|
74
|
+
|
75
|
+
def invalid_factory!(error, factory, trait = nil)
|
76
|
+
name = ":#{factory.name}"
|
77
|
+
name += " + :#{trait.name}" if trait
|
78
|
+
|
79
|
+
invalid_factories << name
|
80
|
+
|
81
|
+
progress_bar.format = "\e[0;31m %c/%C |%w>%i| %e \e[0m"
|
82
|
+
|
83
|
+
progress_bar.log "\n - Invalid factory: #{name}"
|
84
|
+
progress_bar.log "\n \e[0;31m#{error.message}\e[0m"
|
85
|
+
|
86
|
+
error.backtrace[0..10].each do |s|
|
87
|
+
progress_bar.log " \e[0;36m# #{s}\e[0m"
|
88
|
+
end
|
89
|
+
|
90
|
+
progress_bar.log "\n"
|
91
|
+
end
|
92
|
+
|
93
|
+
def output_invalid_factories
|
94
|
+
return if invalid_factories.empty?
|
95
|
+
|
96
|
+
$stdout.puts "\nInvalid factories:"
|
97
|
+
|
98
|
+
invalid_factories.each do |name|
|
99
|
+
$stdout.puts " \e[0;31m- #{name}\e[0m"
|
100
|
+
end
|
101
|
+
|
102
|
+
$stdout.puts
|
103
|
+
end
|
104
|
+
|
105
|
+
def cleaning(&block)
|
106
|
+
if defined?(DatabaseCleaner)
|
107
|
+
DatabaseCleaner.cleaning(&block)
|
108
|
+
elsif defined?(ActiveRecord)
|
109
|
+
@activerecord_connection ||= ActiveRecord::Base.connection
|
110
|
+
@activerecord_connection.transaction(&block)
|
111
|
+
else
|
112
|
+
raise "No cleaning strategie available, you may require or include database-cleaner in your Gemfile"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: factory_bot-awesome_linter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Savater Sebastien
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-02-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: factory_bot
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 6.1.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 6.1.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ruby-progressbar
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.11.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.11.0
|
41
|
+
description:
|
42
|
+
email:
|
43
|
+
- savater.sebastien@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- lib/factory_bot-awesome_linter.rb
|
49
|
+
- lib/factory_bot-awesome_linter/version.rb
|
50
|
+
homepage: https://github.com/inkstak/factory_bot-awesome_linter
|
51
|
+
licenses:
|
52
|
+
- MIT
|
53
|
+
metadata: {}
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
requirements: []
|
69
|
+
rubygems_version: 3.0.8
|
70
|
+
signing_key:
|
71
|
+
specification_version: 4
|
72
|
+
summary: Enhanced linter for FactoryBot
|
73
|
+
test_files: []
|