factory_bot_instrumentation 0.8.0 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8794ba99bd73700545f3106b65facc07d8f90ae0701f5be87791a1e6ddcd070c
4
- data.tar.gz: d9584ba5ebc51c7158d99b437f920a3cef8b34cc0f540efbe987a6946cfa3019
3
+ metadata.gz: 106c1aa5ca524b01dbff80a366493e8e921d2b65aba880d156da6481f6798d74
4
+ data.tar.gz: 538be239cc2016d21996c85d96730c8501dfca703f5d7a1d259dc198aa0da880
5
5
  SHA512:
6
- metadata.gz: 4fd871835d825fa92c6a6313b9b952f004ad776ca6a795166e828babedbd4f802a4f783127146f34966f2bd293a4856d0a0797604388f138a0ab4dd1b898fa22
7
- data.tar.gz: d5af83c7a13d2d3a73ee5de68105c5a56132dbe48351d04fc9fe8e00bf8ff59cca1dfa700cd411625461111e8fbb0d6939456d8037b945585fd01d0b2532828a
6
+ metadata.gz: 423b35d7c9c7e590a1b312206f5f05a93407fa1fe3f5dff3790ae0ba9d263f782e7a3e8cbd24ae48307e422dd4806e15284b378b71f35792384d0fbf1739e449
7
+ data.tar.gz: 6f2211b069039602f7e74bfa6a5d737acf2a651953ce81e6c758fed27625719f4128abb419dd5a66accfa5614c89e7663e65e9944bca09674e58f05244158b28
@@ -9,16 +9,17 @@ concurrency:
9
9
  jobs:
10
10
  docs:
11
11
  name: Build gem documentation
12
- runs-on: ubuntu-20.04
12
+ runs-on: ubuntu-22.04
13
13
  timeout-minutes: 5
14
14
  steps:
15
- - uses: actions/checkout@v2
15
+ - uses: actions/checkout@v3
16
16
 
17
17
  - name: Install the correct Ruby version
18
18
  uses: ruby/setup-ruby@v1
19
19
  with:
20
20
  ruby-version: 2.5
21
21
  bundler-cache: true
22
+ rubygems: '3.3.26'
22
23
 
23
24
  - name: Prepare the virtual environment
24
25
  uses: hausgold/actions/ci@master
@@ -13,23 +13,24 @@ concurrency:
13
13
  jobs:
14
14
  test:
15
15
  name: 'Test the gem (Ruby ${{ matrix.ruby }}, Rails ${{ matrix.rails }})'
16
- runs-on: ubuntu-20.04
16
+ runs-on: ubuntu-22.04
17
17
  timeout-minutes: 5
18
18
  strategy:
19
19
  fail-fast: false
20
20
  matrix:
21
- ruby: [2.4, 2.5, 2.6]
22
- rails: ['5.0', 5.1, 5.2]
21
+ ruby: ['2.5', '2.7']
22
+ rails: ['5.2']
23
23
  env:
24
24
  BUNDLE_GEMFILE: 'gemfiles/rails_${{ matrix.rails }}.gemfile'
25
25
  steps:
26
- - uses: actions/checkout@v2
26
+ - uses: actions/checkout@v3
27
27
 
28
28
  - name: Install the correct Ruby version
29
29
  uses: ruby/setup-ruby@v1
30
30
  with:
31
31
  ruby-version: ${{ matrix.ruby }}
32
32
  bundler-cache: true
33
+ rubygems: '3.3.26'
33
34
 
34
35
  - name: Prepare the virtual environment
35
36
  uses: hausgold/actions/ci@master
@@ -46,7 +47,7 @@ jobs:
46
47
 
47
48
  trigger-docs:
48
49
  name: Trigger the documentation upload
49
- runs-on: ubuntu-20.04
50
+ runs-on: ubuntu-22.04
50
51
  timeout-minutes: 2
51
52
  needs: test
52
53
  if: github.ref == 'refs/heads/master'
data/.rspec CHANGED
@@ -1,3 +1,3 @@
1
+ --backtrace
2
+ --force-color
1
3
  --format documentation
2
- --color
3
- --require spec_helper
data/.rubocop.yml CHANGED
@@ -1,14 +1,19 @@
1
- require: rubocop-rspec
1
+ require:
2
+ - rubocop-rspec
3
+ - rubocop-rails
2
4
 
3
5
  Rails:
4
6
  Enabled: true
5
7
 
6
- Documentation:
8
+ Style/Documentation:
7
9
  Enabled: true
8
10
 
9
11
  AllCops:
12
+ NewCops: enable
13
+ SuggestExtensions: false
10
14
  DisplayCopNames: true
11
15
  TargetRubyVersion: 2.5
16
+ TargetRailsVersion: 5.2
12
17
  Exclude:
13
18
  - bin/**/*
14
19
  - vendor/**/*
@@ -24,6 +29,14 @@ Metrics/BlockLength:
24
29
  - '**/*.rake'
25
30
  - doc/**/*.rb
26
31
 
32
+ # MFA is not yet enabled for our gems yet.
33
+ Gemspec/RequireMFA:
34
+ Enabled: false
35
+
36
+ # We stay with the original Ruby Style Guide recommendation.
37
+ Layout/LineLength:
38
+ Max: 80
39
+
27
40
  # Document all the things.
28
41
  Style/DocumentationMethod:
29
42
  Enabled: true
data/.simplecov CHANGED
@@ -1,3 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'simplecov-html'
4
+ require 'simplecov_json_formatter'
5
+
6
+ SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new(
7
+ [
8
+ SimpleCov::Formatter::HTMLFormatter,
9
+ SimpleCov::Formatter::JSONFormatter
10
+ ]
11
+ )
12
+
1
13
  SimpleCov.start 'test_frameworks' do
2
14
  add_filter '/vendor/bundle/'
3
15
  end
data/Appraisals CHANGED
@@ -1,13 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- appraise 'rails-5.0' do
4
- gem 'rails', '~> 5.0.7'
5
- end
6
-
7
- appraise 'rails-5.1' do
8
- gem 'rails', '~> 5.1.6'
9
- end
10
-
11
3
  appraise 'rails-5.2' do
12
- gem 'rails', '~> 5.2.2'
4
+ gem 'rails', '~> 5.2.0'
13
5
  end
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ ### 1.0.1
2
+
3
+ * Added a retry logic to the FactoryBot reloading on the POST/create endpoint
4
+ in order to handle parallel requests properly (#13)
5
+
6
+ ### 1.0.0
7
+
8
+ * Bundler >= 2.3 is from now on required as minimal version (#12)
9
+ * Dropped support for Ruby < 2.5 (#12)
10
+ * Dropped support for Rails < 5.2 (#12)
11
+ * Updated all development/runtime gems to their latest
12
+ Ruby 2.5 compatible version (#12)
13
+
1
14
  ### 0.8.0
2
15
 
3
16
  * Added `FactoryBot.reload` to the initializer code to ensure the factories
data/Dockerfile ADDED
@@ -0,0 +1,28 @@
1
+ FROM hausgold/ruby:2.5
2
+ MAINTAINER Hermann Mayer <hermann.mayer@hausgold.de>
3
+
4
+ # Update system gem
5
+ RUN gem update --system '3.3.26'
6
+
7
+ # Install system packages and the latest bundler
8
+ RUN apt-get update -yqqq && \
9
+ apt-get install -y \
10
+ build-essential locales sudo vim \
11
+ ca-certificates \
12
+ bash-completion inotify-tools && \
13
+ echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen && /usr/sbin/locale-gen && \
14
+ gem install bundler -v '~> 2.3.0' --no-document --no-prerelease
15
+
16
+ # Add new web user
17
+ RUN mkdir /app && \
18
+ adduser web --home /home/web --shell /bin/bash \
19
+ --disabled-password --gecos ""
20
+ COPY config/docker/* /home/web/
21
+ RUN chown web:web -R /app /home/web /usr/local/bundle && \
22
+ mkdir -p /home/web/.ssh
23
+
24
+ # Set the root password and grant root access to web
25
+ RUN echo 'root:root' | chpasswd
26
+ RUN echo 'web ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
27
+
28
+ WORKDIR /app
data/Envfile ADDED
@@ -0,0 +1,3 @@
1
+ LANG=en_US.UTF-8
2
+ LANGUAGE=en_US.UTF-8
3
+ LC_ALL=en_US.UTF-8
data/Guardfile ADDED
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A sample Guardfile
4
+ # More info at https://github.com/guard/guard#readme
5
+
6
+ ## Uncomment and set this to only include directories you want to watch
7
+ (directories %w[app lib spec]).select do |d|
8
+ if Dir.exist?(d)
9
+ d
10
+ else
11
+ UI.warning("Directory #{d} does not exist")
12
+ end
13
+ end
14
+
15
+ ## Note: if you are using the `directories` clause above and you are not
16
+ ## watching the project directory ('.'), then you will want to move
17
+ ## the Guardfile to a watched dir and symlink it back, e.g.
18
+ #
19
+ # $ mkdir config
20
+ # $ mv Guardfile config/
21
+ # $ ln -s config/Guardfile .
22
+ #
23
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
24
+
25
+ # NOTE: The cmd option is now required due to the increasing number of ways
26
+ # rspec may be run, below are examples of the most common uses.
27
+ # * bundler: 'bundle exec rspec'
28
+ # * bundler binstubs: 'bin/rspec'
29
+ # * spring: 'bin/rspec' (This will use spring if running and you have
30
+ # installed the spring binstubs per the docs)
31
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
32
+ # * 'just' rspec: 'rspec'
33
+
34
+ guard :rspec, cmd: 'bundle exec rspec' do
35
+ watch('spec/spec_helper.rb') { 'spec' }
36
+ watch(%r{^lib/factory_bot_instrumentation.rb}) { 'spec' }
37
+ watch(%r{^spec/.+_spec\.rb$})
38
+ watch(%r{^app/controllers/([^\\]+)/(.*)\.rb$}) do |m|
39
+ "spec/controllers/#{m[1]}/#{m[2]}_spec.rb"
40
+ end
41
+ watch(%r{^lib/factory_bot/instrumentation/([^\\]+)\.rb$}) do |m|
42
+ "spec/#{m[1]}_spec.rb"
43
+ end
44
+ watch(%r{^lib/factory_bot/instrumentation/([^\\]+)/(.*)\.rb$}) do |m|
45
+ "spec/#{m[1]}/#{m[2]}_spec.rb"
46
+ end
47
+ end
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2017 HAUSGOLD | talocasa GmbH
3
+ Copyright (c) 2023 HAUSGOLD | talocasa GmbH
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/Makefile CHANGED
@@ -9,6 +9,7 @@ SHELL := bash
9
9
  # Environment switches
10
10
  MAKE_ENV ?= docker
11
11
  COMPOSE_RUN_SHELL_FLAGS ?= --rm
12
+ BASH_RUN_SHELL_FLAGS ?=
12
13
 
13
14
  # Directories
14
15
  VENDOR_DIR ?= vendor/bundle
@@ -22,9 +23,11 @@ MKDIR ?= mkdir
22
23
  RM ?= rm
23
24
 
24
25
  # Container binaries
25
- BUNDLE ?= bundle
26
26
  APPRAISAL ?= appraisal
27
+ BUNDLE ?= bundle
28
+ GUARD ?= guard
27
29
  RAKE ?= rake
30
+ RSPEC ?= rspec
28
31
  RUBOCOP ?= rubocop
29
32
  YARD ?= yard
30
33
 
@@ -39,8 +42,9 @@ ifeq ($(MAKE_ENV),docker)
39
42
  define run-shell
40
43
  $(COMPOSE) run $(COMPOSE_RUN_SHELL_FLAGS) \
41
44
  -e LANG=en_US.UTF-8 -e LANGUAGE=en_US.UTF-8 -e LC_ALL=en_US.UTF-8 \
42
- -e HOME=/tmp -e BUNDLE_APP_CONFIG=/app/.bundle \
43
- -u `$(ID) -u` test bash -c 'sleep 0.1; echo; $(1)'
45
+ -e HOME=/home/web -e BUNDLE_APP_CONFIG=/app/.bundle \
46
+ -u `$(ID) -u` test \
47
+ bash $(BASH_RUN_SHELL_FLAGS) -c 'sleep 0.1; echo; $(1)'
44
48
  endef
45
49
  else ifeq ($(MAKE_ENV),baremetal)
46
50
  define run-shell
@@ -52,9 +56,13 @@ all:
52
56
  # factory_bot_instrumentation
53
57
  #
54
58
  # install Install the dependencies
55
- # test Run the whole test suite
59
+ # update Update the local Gemset dependencies
56
60
  # clean Clean the dependencies
57
61
  #
62
+ # test Run the whole test suite
63
+ # test-style Test the code styles
64
+ # watch Watch for code changes and rerun the test suite
65
+ #
58
66
  # docs Generate the Ruby documentation of the library
59
67
  # stats Print the code statistics (library and test suite)
60
68
  # notes Print all the notes from the code
@@ -63,12 +71,25 @@ all:
63
71
  # shell Run an interactive shell on the container
64
72
  # shell-irb Run an interactive IRB shell on the container
65
73
 
74
+ .interactive:
75
+ @$(eval BASH_RUN_SHELL_FLAGS = --login)
76
+
66
77
  install:
67
78
  # Install the dependencies
68
79
  @$(MKDIR) -p $(VENDOR_DIR)
69
80
  @$(call run-shell,$(BUNDLE) check || $(BUNDLE) install --path $(VENDOR_DIR))
70
81
  @$(call run-shell,$(BUNDLE) exec $(APPRAISAL) install)
71
82
 
83
+ update:
84
+ # Install the dependencies
85
+ @$(MKDIR) -p $(VENDOR_DIR)
86
+ @$(call run-shell,$(BUNDLE) update)
87
+ @$(call run-shell,$(BUNDLE) exec $(APPRAISAL) update)
88
+
89
+ watch: install .interactive
90
+ # Watch for code changes and rerun the test suite
91
+ @$(call run-shell,$(BUNDLE) exec $(GUARD))
92
+
72
93
  test: \
73
94
  test-specs \
74
95
  test-style
@@ -80,7 +101,7 @@ test-specs:
80
101
  $(TEST_GEMFILES): GEMFILE=$(@:test-%=%)
81
102
  $(TEST_GEMFILES):
82
103
  # Run the whole test suite ($(GEMFILE))
83
- @$(call run-shell,$(BUNDLE) exec $(APPRAISAL) $(GEMFILE) $(RAKE))
104
+ @$(call run-shell,$(BUNDLE) exec $(APPRAISAL) $(GEMFILE) $(RSPEC))
84
105
 
85
106
  test-style: \
86
107
  test-style-ruby
@@ -92,6 +113,10 @@ test-style-ruby:
92
113
  clean:
93
114
  # Clean the dependencies
94
115
  @$(RM) -rf $(VENDOR_DIR)
116
+ @$(RM) -rf $(GEMFILES_DIR)/vendor
117
+ @$(RM) -rf $(GEMFILES_DIR)/*.lock
118
+ @$(RM) -rf .bundle .yardoc coverage pkg Gemfile.lock doc/api \
119
+ .rspec_status
95
120
 
96
121
  clean-containers:
97
122
  # Clean running containers
@@ -99,7 +124,15 @@ ifeq ($(MAKE_ENV),docker)
99
124
  @$(COMPOSE) down
100
125
  endif
101
126
 
102
- distclean: clean clean-containers
127
+ clean-images:
128
+ # Clean build images
129
+ ifeq ($(MAKE_ENV),docker)
130
+ @-$(DOCKER) images | $(GREP) $(shell basename "`pwd`") \
131
+ | $(AWK) '{ print $$3 }' \
132
+ | $(XARGS) -rn1 $(DOCKER) rmi -f
133
+ endif
134
+
135
+ distclean: clean clean-containers clean-images
103
136
 
104
137
  shell:
105
138
  # Run an interactive shell on the container
data/Rakefile CHANGED
@@ -4,11 +4,9 @@
4
4
  ENV['RAILS_ENV'] = 'test'
5
5
  ENV['DISABLE_DATABASE_ENVIRONMENT_CHECK'] = '1'
6
6
 
7
- require 'bundler/setup'
8
7
  require 'bundler/gem_tasks'
9
8
  require 'rspec/core/rake_task'
10
- require 'rails/code_statistics'
11
- require 'pp'
9
+ require 'countless/rake_tasks'
12
10
 
13
11
  APP_RAKEFILE = File.expand_path('spec/dummy/Rakefile', __dir__)
14
12
  load 'rails/tasks/engine.rake'
@@ -17,9 +15,6 @@ Bundler::GemHelper.install_tasks
17
15
 
18
16
  Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each { |f| load f }
19
17
 
20
- require 'rspec/core'
21
- require 'rspec/core/rake_task'
22
-
23
18
  desc 'Run all specs in spec directory (excluding plugin specs)'
24
19
  RSpec::Core::RakeTask.new(spec: [
25
20
  'db:drop', 'db:create', 'db:migrate', 'db:setup'
@@ -27,66 +22,20 @@ RSpec::Core::RakeTask.new(spec: [
27
22
 
28
23
  task default: :spec
29
24
 
30
- # Load some railties tasks
31
- load 'rails/tasks/statistics.rake'
32
- load 'rails/tasks/annotations.rake'
33
-
34
- # Clear the default statistics directory constant
35
- #
36
- # rubocop:disable Style/MutableConstant because we define it
37
- Object.send(:remove_const, :STATS_DIRECTORIES)
38
- ::STATS_DIRECTORIES = []
39
- # rubocop:enable Style/MutableConstant
40
-
41
- # Monkey patch the Rails +CodeStatistics+ class to support configurable
42
- # patterns per path. This is reuqired to support top-level only file matches.
43
- class CodeStatistics
44
- DEFAULT_PATTERN = /^(?!\.).*?\.(rb|js|coffee|rake)$/.freeze
45
-
46
- # Pass the possible +pattern+ argument down to the
47
- # +calculate_directory_statistics+ method call.
48
- def calculate_statistics
49
- Hash[@pairs.map do |pair|
50
- [pair.first, calculate_directory_statistics(*pair[1..-1])]
51
- end]
52
- end
53
-
54
- # Match the pattern against the individual file name and the relative file
55
- # path. This allows top-level only matches.
56
- def calculate_directory_statistics(directory, pattern = DEFAULT_PATTERN)
57
- stats = CodeStatisticsCalculator.new
58
-
59
- Dir.foreach(directory) do |file_name|
60
- path = "#{directory}/#{file_name}"
61
-
62
- if File.directory?(path) && (/^\./ !~ file_name)
63
- stats.add(calculate_directory_statistics(path, pattern))
64
- elsif file_name =~ pattern || path =~ pattern
65
- stats.add_by_file_path(path)
66
- end
67
- end
68
-
69
- stats
70
- end
71
- end
72
-
73
25
  # Configure all code statistics directories
74
- vendors = [
75
- [:unshift, 'Top-levels', 'lib'],
76
- [:unshift, 'Top-levels specs', 'spec', %r{spec/[^/]+_spec\.rb$}],
77
- [:unshift, 'Javascript', 'app/assets'],
78
- [:unshift, 'Controllers', 'app/controllers'],
79
- [:unshift, 'Controllers specs', 'spec/controllers']
80
- ].reverse
81
-
82
- vendors.each do |method, type, dir, pattern|
83
- ::STATS_DIRECTORIES.send(method, [type, dir, pattern].compact)
84
- ::CodeStatistics::TEST_TYPES << type if type.include? 'specs'
85
- end
86
-
87
- # Setup annotations
88
- ENV['SOURCE_ANNOTATION_DIRECTORIES'] = 'spec,doc'
89
- desc 'Enumerate all annotations'
90
- task :notes do
91
- SourceAnnotationExtractor.enumerate '@?OPTIMIZE|@?FIXME|@?TODO', tag: true
26
+ Countless.configure do |config|
27
+ config.stats_base_directories = [
28
+ { name: 'Top-levels', dir: 'lib',
29
+ pattern: %r{/lib/[^/]+\.rb$} },
30
+ { name: 'Top-levels specs', test: true, dir: 'spec',
31
+ pattern: %r{/spec/[^/]+_spec\.rb$} },
32
+ { name: 'Libraries',
33
+ pattern: 'lib/factory_bot/**/*_spec.rb' },
34
+ { name: 'Javascript', pattern: 'app/assets/**/*.js' },
35
+ { name: 'Stylesheets', pattern: 'app/assets/**/*.css' },
36
+ { name: 'Views', pattern: 'app/views/**/*.erb' },
37
+ { name: 'Controllers', pattern: 'app/controllers/**/*.rb' },
38
+ { name: 'Controllers specs', test: true,
39
+ pattern: 'spec/controllers/**/*_spec.rb' }
40
+ ]
92
41
  end
@@ -37,20 +37,23 @@ module FactoryBot
37
37
  #
38
38
  # The result is the API v1 representation of the created entity.
39
39
  def create
40
- # Reload the factories to improve the test development experience
41
- FactoryBot.reload
40
+ # Reload the factories to improve the test development experience.
41
+ # In parallel request conditions this may lead to +Factory already
42
+ # registered+ errors as this call is not thread safe as it seems,
43
+ # so we retry it multiple times.
44
+ with_retries(max_tries: 15) { FactoryBot.reload }
42
45
  # Call the factory construction with the user given parameters
43
46
  entity = FactoryBot.create(*factory_params)
44
47
  # Render the resulting entity with the configured rendering block
45
48
  FactoryBot::Instrumentation.configuration.render_entity.call(
46
49
  self, entity
47
50
  )
48
- rescue StandardError => err
51
+ rescue StandardError => e
49
52
  # Handle any error gracefully with the configured error handler
50
- FactoryBot::Instrumentation.configuration.render_error.call(self, err)
53
+ FactoryBot::Instrumentation.configuration.render_error.call(self, e)
51
54
  end
52
55
 
53
- private
56
+ protected
54
57
 
55
58
  # Parse the given parameters from the request and build
56
59
  # a valid FactoryBot options set.
@@ -72,7 +75,7 @@ module FactoryBot
72
75
  [
73
76
  data.fetch(:factory).to_sym,
74
77
  *data.fetch(:traits, []).map(&:to_sym),
75
- **overwrite
78
+ { **overwrite }
76
79
  ]
77
80
  end
78
81
  # rubocop:enable Metrics/MethodLength
@@ -109,8 +112,8 @@ module FactoryBot
109
112
  #
110
113
  # @return [Hash{Regexp => String}] the group mapping
111
114
  def groups
112
- instrumentation['groups'].each_with_object({}) do |(key, val), memo|
113
- memo[Regexp.new(Regexp.quote(key))] = val
115
+ instrumentation['groups'].transform_keys do |key|
116
+ Regexp.new(Regexp.quote(key))
114
117
  end
115
118
  end
116
119
 
@@ -0,0 +1,3 @@
1
+ if [ -f ~/.bashrc ]; then
2
+ . ~/.bashrc
3
+ fi
@@ -0,0 +1,48 @@
1
+ # ~/.bashrc: executed by bash(1) for non-login shells.
2
+ # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
3
+ # for examples
4
+
5
+ _GEM_PATHS=$(ls -d1 ${HOME}/.gem/ruby/*/bin 2>/dev/null | paste -sd ':')
6
+ _APP_PATHS=$(ls -d1 /app/vendor/bundle/ruby/*/bin 2>/dev/null | paste -sd ':')
7
+
8
+ export PATH="${_GEM_PATHS}:${_APP_PATHS}:${PATH}"
9
+ export PATH="/app/node_modules/.bin:${HOME}/.bin:/app/bin:${PATH}"
10
+ export MAKE_ENV=baremetal
11
+
12
+ # Disable the autostart of all supervisord units
13
+ sudo sed -i 's/autostart=.*/autostart=false/g' /etc/supervisor/conf.d/*
14
+
15
+ # Start the supervisord (empty, no units)
16
+ sudo supervisord >/dev/null 2>&1 &
17
+
18
+ # Wait for supervisord
19
+ while ! supervisorctl status >/dev/null 2>&1; do sleep 1; done
20
+
21
+ # Boot the mDNS stack
22
+ echo '# Start the mDNS stack'
23
+ sudo supervisorctl start dbus avahi
24
+ echo
25
+
26
+ function watch-make-test()
27
+ {
28
+ while [ 1 ]; do
29
+ inotifywait --quiet -r `pwd` -e close_write --format '%e -> %w%f'
30
+ make test
31
+ done
32
+ }
33
+
34
+ function watch-make()
35
+ {
36
+ while [ 1 ]; do
37
+ inotifywait --quiet -r `pwd` -e close_write --format '%e -> %w%f'
38
+ make $@
39
+ done
40
+ }
41
+
42
+ function watch-run()
43
+ {
44
+ while [ 1 ]; do
45
+ inotifywait --quiet -r `pwd` -e close_write --format '%e -> %w%f'
46
+ bash -c "$@"
47
+ done
48
+ }
@@ -0,0 +1,17 @@
1
+ # mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
2
+ "\e[1;5C": forward-word
3
+ "\e[1;5D": backward-word
4
+ "\e[5C": forward-word
5
+ "\e[5D": backward-word
6
+ "\e\e[C": forward-word
7
+ "\e\e[D": backward-word
8
+
9
+ # handle common Home/End escape codes
10
+ "\e[1~": beginning-of-line
11
+ "\e[4~": end-of-line
12
+ "\e[7~": beginning-of-line
13
+ "\e[8~": end-of-line
14
+ "\eOH": beginning-of-line
15
+ "\eOF": end-of-line
16
+ "\e[H": beginning-of-line
17
+ "\e[F": end-of-line
data/docker-compose.yml CHANGED
@@ -1,7 +1,8 @@
1
1
  version: "3"
2
2
  services:
3
3
  test:
4
- image: ruby:2.4
4
+ build: .
5
+ env_file: Envfile
5
6
  network_mode: bridge
6
7
  working_dir: /app
7
8
  volumes:
@@ -5,34 +5,50 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'factory_bot/instrumentation/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = 'factory_bot_instrumentation'
9
- spec.version = FactoryBot::Instrumentation::VERSION
10
- spec.authors = ['Hermann Mayer']
11
- spec.email = ['hermann.mayer92@gmail.com']
8
+ spec.name = 'factory_bot_instrumentation'
9
+ spec.version = FactoryBot::Instrumentation::VERSION
10
+ spec.authors = ['Hermann Mayer']
11
+ spec.email = ['hermann.mayer92@gmail.com']
12
12
 
13
- spec.summary = 'Allow your testers to generate test data on demand'
14
- spec.description = 'Allow your testers to generate test data on demand'
15
- spec.homepage = 'https://github.com/hausgold/factory_bot_instrumentation'
13
+ spec.license = 'MIT'
14
+ spec.summary = 'Allow your testers to generate test data on demand'
15
+ spec.description = 'Allow your testers to generate test data on demand'
16
+
17
+ base_uri = "https://github.com/hausgold/#{spec.name}"
18
+ spec.metadata = {
19
+ 'homepage_uri' => base_uri,
20
+ 'source_code_uri' => base_uri,
21
+ 'changelog_uri' => "#{base_uri}/blob/master/CHANGELOG.md",
22
+ 'bug_tracker_uri' => "#{base_uri}/issues",
23
+ 'documentation_uri' => "https://www.rubydoc.info/gems/#{spec.name}"
24
+ }
16
25
 
17
26
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
27
  f.match(%r{^(test|spec|features)/})
19
28
  end
20
- spec.bindir = 'exe'
21
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
+
30
+ spec.bindir = 'exe'
31
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
32
  spec.require_paths = ['lib']
23
33
 
24
- spec.add_runtime_dependency 'factory_bot'
25
- spec.add_runtime_dependency 'rails', '>= 5.0'
26
-
27
- spec.add_development_dependency 'appraisal'
28
- spec.add_development_dependency 'bundler', '>= 1.16', '< 3'
29
- spec.add_development_dependency 'railties', '>= 4.2.0', '< 6.1'
30
- spec.add_development_dependency 'rspec-rails', '~> 3.8'
31
- spec.add_development_dependency 'rubocop', '~> 0.63.1'
32
- spec.add_development_dependency 'rubocop-rspec', '~> 1.31'
33
- spec.add_development_dependency 'simplecov', '< 0.18'
34
- spec.add_development_dependency 'sqlite3', '~> 1.3.6'
35
- spec.add_development_dependency 'timecop', '~> 0.9.1'
36
- spec.add_development_dependency 'yard', '~> 0.9.18'
37
- spec.add_development_dependency 'yard-activesupport-concern', '~> 0.0.1'
34
+ spec.required_ruby_version = '>= 2.5'
35
+
36
+ spec.add_runtime_dependency 'factory_bot', '~> 6.2'
37
+ spec.add_runtime_dependency 'rails', '>= 5.2'
38
+ spec.add_runtime_dependency 'retries', '>= 0.0.5'
39
+
40
+ spec.add_development_dependency 'appraisal', '~> 2.4'
41
+ spec.add_development_dependency 'bundler', '~> 2.3'
42
+ spec.add_development_dependency 'countless', '~> 1.1'
43
+ spec.add_development_dependency 'guard-rspec', '~> 4.7'
44
+ spec.add_development_dependency 'railties', '>= 5.2'
45
+ spec.add_development_dependency 'rspec-rails', '~> 5.1'
46
+ spec.add_development_dependency 'rubocop', '~> 1.28'
47
+ spec.add_development_dependency 'rubocop-rails', '~> 2.14'
48
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.10'
49
+ spec.add_development_dependency 'simplecov', '>= 0.22'
50
+ spec.add_development_dependency 'sqlite3', '~> 1.5'
51
+ spec.add_development_dependency 'timecop', '>= 0.9.6'
52
+ spec.add_development_dependency 'yard', '>= 0.9.28'
53
+ spec.add_development_dependency 'yard-activesupport-concern', '>= 0.0.1'
38
54
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "rails", "~> 5.2.2"
5
+ gem "rails", "~> 5.2.0"
6
6
 
7
7
  gemspec path: "../"
@@ -15,8 +15,13 @@ module FactoryBot
15
15
 
16
16
  FactoryBot::Instrumentation.configure do |conf|
17
17
  # Set the application name dynamically
18
- conf.application_name \
19
- ||= Rails.application.class.parent_name.titleize
18
+ conf.application_name ||= begin
19
+ app_class = Rails.application.class
20
+ parent_name = app_class.module_parent_name \
21
+ if app_class.respond_to?(:module_parent_name)
22
+ parent_name ||= app_class.parent_name
23
+ parent_name.titleize
24
+ end
20
25
  end
21
26
  end
22
27
  end
@@ -1,7 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FactoryBot
4
+ # The gem version details.
4
5
  module Instrumentation
5
- VERSION = '0.8.0'
6
+ # The version of the +factory_bot_instrumentation+ gem
7
+ VERSION = '1.0.1'
8
+
9
+ class << self
10
+ # Returns the version of gem as a string.
11
+ #
12
+ # @return [String] the gem version as string
13
+ def version
14
+ VERSION
15
+ end
16
+
17
+ # Returns the version of the gem as a +Gem::Version+.
18
+ #
19
+ # @return [Gem::Version] the gem version as object
20
+ def gem_version
21
+ Gem::Version.new VERSION
22
+ end
23
+ end
6
24
  end
7
25
  end
@@ -7,6 +7,7 @@ require 'active_support/cache'
7
7
  require 'active_support/core_ext/hash'
8
8
  require 'active_support/time'
9
9
  require 'active_support/time_with_zone'
10
+ require 'retries'
10
11
 
11
12
  require 'factory_bot'
12
13
  require 'factory_bot/instrumentation/configuration'
metadata CHANGED
@@ -1,207 +1,251 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_bot_instrumentation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hermann Mayer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-10 00:00:00.000000000 Z
11
+ date: 2023-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: factory_bot
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: rails
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - ">="
18
32
  - !ruby/object:Gem::Version
19
- version: '0'
33
+ version: '5.2'
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: '0'
40
+ version: '5.2'
27
41
  - !ruby/object:Gem::Dependency
28
- name: rails
42
+ name: retries
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
32
46
  - !ruby/object:Gem::Version
33
- version: '5.0'
47
+ version: 0.0.5
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: '5.0'
54
+ version: 0.0.5
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: appraisal
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ">="
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '0'
61
+ version: '2.4'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ">="
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '0'
68
+ version: '2.4'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ">="
73
+ - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '1.16'
62
- - - "<"
75
+ version: '2.3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
63
81
  - !ruby/object:Gem::Version
64
- version: '3'
82
+ version: '2.3'
83
+ - !ruby/object:Gem::Dependency
84
+ name: countless
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.1'
65
90
  type: :development
66
91
  prerelease: false
67
92
  version_requirements: !ruby/object:Gem::Requirement
68
93
  requirements:
69
- - - ">="
94
+ - - "~>"
70
95
  - !ruby/object:Gem::Version
71
- version: '1.16'
72
- - - "<"
96
+ version: '1.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard-rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
73
102
  - !ruby/object:Gem::Version
74
- version: '3'
103
+ version: '4.7'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '4.7'
75
111
  - !ruby/object:Gem::Dependency
76
112
  name: railties
77
113
  requirement: !ruby/object:Gem::Requirement
78
114
  requirements:
79
115
  - - ">="
80
116
  - !ruby/object:Gem::Version
81
- version: 4.2.0
82
- - - "<"
83
- - !ruby/object:Gem::Version
84
- version: '6.1'
117
+ version: '5.2'
85
118
  type: :development
86
119
  prerelease: false
87
120
  version_requirements: !ruby/object:Gem::Requirement
88
121
  requirements:
89
122
  - - ">="
90
123
  - !ruby/object:Gem::Version
91
- version: 4.2.0
92
- - - "<"
93
- - !ruby/object:Gem::Version
94
- version: '6.1'
124
+ version: '5.2'
95
125
  - !ruby/object:Gem::Dependency
96
126
  name: rspec-rails
97
127
  requirement: !ruby/object:Gem::Requirement
98
128
  requirements:
99
129
  - - "~>"
100
130
  - !ruby/object:Gem::Version
101
- version: '3.8'
131
+ version: '5.1'
102
132
  type: :development
103
133
  prerelease: false
104
134
  version_requirements: !ruby/object:Gem::Requirement
105
135
  requirements:
106
136
  - - "~>"
107
137
  - !ruby/object:Gem::Version
108
- version: '3.8'
138
+ version: '5.1'
109
139
  - !ruby/object:Gem::Dependency
110
140
  name: rubocop
111
141
  requirement: !ruby/object:Gem::Requirement
112
142
  requirements:
113
143
  - - "~>"
114
144
  - !ruby/object:Gem::Version
115
- version: 0.63.1
145
+ version: '1.28'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '1.28'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-rails
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '2.14'
116
160
  type: :development
117
161
  prerelease: false
118
162
  version_requirements: !ruby/object:Gem::Requirement
119
163
  requirements:
120
164
  - - "~>"
121
165
  - !ruby/object:Gem::Version
122
- version: 0.63.1
166
+ version: '2.14'
123
167
  - !ruby/object:Gem::Dependency
124
168
  name: rubocop-rspec
125
169
  requirement: !ruby/object:Gem::Requirement
126
170
  requirements:
127
171
  - - "~>"
128
172
  - !ruby/object:Gem::Version
129
- version: '1.31'
173
+ version: '2.10'
130
174
  type: :development
131
175
  prerelease: false
132
176
  version_requirements: !ruby/object:Gem::Requirement
133
177
  requirements:
134
178
  - - "~>"
135
179
  - !ruby/object:Gem::Version
136
- version: '1.31'
180
+ version: '2.10'
137
181
  - !ruby/object:Gem::Dependency
138
182
  name: simplecov
139
183
  requirement: !ruby/object:Gem::Requirement
140
184
  requirements:
141
- - - "<"
185
+ - - ">="
142
186
  - !ruby/object:Gem::Version
143
- version: '0.18'
187
+ version: '0.22'
144
188
  type: :development
145
189
  prerelease: false
146
190
  version_requirements: !ruby/object:Gem::Requirement
147
191
  requirements:
148
- - - "<"
192
+ - - ">="
149
193
  - !ruby/object:Gem::Version
150
- version: '0.18'
194
+ version: '0.22'
151
195
  - !ruby/object:Gem::Dependency
152
196
  name: sqlite3
153
197
  requirement: !ruby/object:Gem::Requirement
154
198
  requirements:
155
199
  - - "~>"
156
200
  - !ruby/object:Gem::Version
157
- version: 1.3.6
201
+ version: '1.5'
158
202
  type: :development
159
203
  prerelease: false
160
204
  version_requirements: !ruby/object:Gem::Requirement
161
205
  requirements:
162
206
  - - "~>"
163
207
  - !ruby/object:Gem::Version
164
- version: 1.3.6
208
+ version: '1.5'
165
209
  - !ruby/object:Gem::Dependency
166
210
  name: timecop
167
211
  requirement: !ruby/object:Gem::Requirement
168
212
  requirements:
169
- - - "~>"
213
+ - - ">="
170
214
  - !ruby/object:Gem::Version
171
- version: 0.9.1
215
+ version: 0.9.6
172
216
  type: :development
173
217
  prerelease: false
174
218
  version_requirements: !ruby/object:Gem::Requirement
175
219
  requirements:
176
- - - "~>"
220
+ - - ">="
177
221
  - !ruby/object:Gem::Version
178
- version: 0.9.1
222
+ version: 0.9.6
179
223
  - !ruby/object:Gem::Dependency
180
224
  name: yard
181
225
  requirement: !ruby/object:Gem::Requirement
182
226
  requirements:
183
- - - "~>"
227
+ - - ">="
184
228
  - !ruby/object:Gem::Version
185
- version: 0.9.18
229
+ version: 0.9.28
186
230
  type: :development
187
231
  prerelease: false
188
232
  version_requirements: !ruby/object:Gem::Requirement
189
233
  requirements:
190
- - - "~>"
234
+ - - ">="
191
235
  - !ruby/object:Gem::Version
192
- version: 0.9.18
236
+ version: 0.9.28
193
237
  - !ruby/object:Gem::Dependency
194
238
  name: yard-activesupport-concern
195
239
  requirement: !ruby/object:Gem::Requirement
196
240
  requirements:
197
- - - "~>"
241
+ - - ">="
198
242
  - !ruby/object:Gem::Version
199
243
  version: 0.0.1
200
244
  type: :development
201
245
  prerelease: false
202
246
  version_requirements: !ruby/object:Gem::Requirement
203
247
  requirements:
204
- - - "~>"
248
+ - - ">="
205
249
  - !ruby/object:Gem::Version
206
250
  version: 0.0.1
207
251
  description: Allow your testers to generate test data on demand
@@ -221,7 +265,10 @@ files:
221
265
  - ".yardopts"
222
266
  - Appraisals
223
267
  - CHANGELOG.md
268
+ - Dockerfile
269
+ - Envfile
224
270
  - Gemfile
271
+ - Guardfile
225
272
  - LICENSE
226
273
  - Makefile
227
274
  - README.md
@@ -246,6 +293,9 @@ files:
246
293
  - app/views/factory_bot_instrumentation/_styles.html.erb
247
294
  - app/views/layouts/factory_bot/instrumentation/application.html.erb
248
295
  - bin/rails
296
+ - config/docker/.bash_profile
297
+ - config/docker/.bashrc
298
+ - config/docker/.inputrc
249
299
  - config/instrumentation.yml
250
300
  - config/routes.rb
251
301
  - doc/assets/blocks.png
@@ -255,16 +305,20 @@ files:
255
305
  - doc/assets/regular.png
256
306
  - docker-compose.yml
257
307
  - factory_bot_instrumentation.gemspec
258
- - gemfiles/rails_5.0.gemfile
259
- - gemfiles/rails_5.1.gemfile
260
308
  - gemfiles/rails_5.2.gemfile
261
309
  - lib/factory_bot/instrumentation/configuration.rb
262
310
  - lib/factory_bot/instrumentation/engine.rb
263
311
  - lib/factory_bot/instrumentation/version.rb
264
312
  - lib/factory_bot_instrumentation.rb
265
- homepage: https://github.com/hausgold/factory_bot_instrumentation
266
- licenses: []
267
- metadata: {}
313
+ homepage:
314
+ licenses:
315
+ - MIT
316
+ metadata:
317
+ homepage_uri: https://github.com/hausgold/factory_bot_instrumentation
318
+ source_code_uri: https://github.com/hausgold/factory_bot_instrumentation
319
+ changelog_uri: https://github.com/hausgold/factory_bot_instrumentation/blob/master/CHANGELOG.md
320
+ bug_tracker_uri: https://github.com/hausgold/factory_bot_instrumentation/issues
321
+ documentation_uri: https://www.rubydoc.info/gems/factory_bot_instrumentation
268
322
  post_install_message:
269
323
  rdoc_options: []
270
324
  require_paths:
@@ -273,14 +327,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
273
327
  requirements:
274
328
  - - ">="
275
329
  - !ruby/object:Gem::Version
276
- version: '0'
330
+ version: '2.5'
277
331
  required_rubygems_version: !ruby/object:Gem::Requirement
278
332
  requirements:
279
333
  - - ">="
280
334
  - !ruby/object:Gem::Version
281
335
  version: '0'
282
336
  requirements: []
283
- rubygems_version: 3.2.16
337
+ rubygems_version: 3.3.8
284
338
  signing_key:
285
339
  specification_version: 4
286
340
  summary: Allow your testers to generate test data on demand
@@ -1,7 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rails", "~> 5.0.7"
6
-
7
- gemspec path: "../"
@@ -1,7 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rails", "~> 5.1.6"
6
-
7
- gemspec path: "../"