ruby-flog-flay-setup
Install standardized flog/flay Rake tasks and a pre-commit hook that runs bundle exec rake for Ruby projects. Use when adding or normalizing code complexity and duplication checks.
Installation
Suivez les instructions du dépôt pour votre agent. Consultez les fichiers et dépendances avant l’installation.
Voir la source ↗GuidesInstructions
Ruby Flog Flay Setup
Overview
Install flog/flay Rake tasks with env-configurable thresholds and a pre-commit hook that runs bundle exec rake.
Workflow
1) Inspect existing setup
- Check
Gemfileforflogandflayentries. - Search for existing
:flogor:flayrake tasks inRakefileandrakelib/to avoid duplicates. - Check
git config core.hooksPathto determine the hooks directory (default is.git/hookswhen unset).
2) Ensure dependencies
- Add
gem "flay"andgem "flog"toGemfileif missing (no version pinning). - Run
bundle installif needed.
3) Define tasks in Rakefile
- Define
:flogand:flaytasks directly inRakefile. - Use env-configurable thresholds with defaults.
- Use
bundle execfor both tools. - Log only on failure using
putsand exit non-zero; stay silent on success. - Do not filter out any files or paths.
- Allow flay duplication when
Total score <= FLAY_THRESHOLD.
Example task definitions:
desc "Run flog"
task :flog do
output = `bundle exec flog -a lib`
threshold = (ENV["FLOG_THRESHOLD"] || 25).to_i
method_scores = []
output.each_line do |line|
if line =~ /^\s*(\d+\.\d+):\s+(.+#.+)\s+(.+\.rb)/
score = $1.to_f
method_name = $2.strip
file_path = $3.strip
method_scores << [score, "#{method_name} #{file_path}"]
end
end
failing_methods = method_scores.select { |score, _| score > threshold }
if failing_methods.any?
puts "\nFlog failed: Methods with complexity score > #{threshold}:"
failing_methods.each { |score, method_name| puts " #{score}: #{method_name}" }
exit 1
end
end
desc "Run flay"
task :flay do
output = `bundle exec flay lib`
threshold = (ENV["FLAY_THRESHOLD"] || 0).to_i
if (match = output.match(/Total score \(lower is better\) = (\d+)/))
score = match[1].to_i
if score > threshold
puts "\nFlay failed: Total duplication score is #{score}, must be <= #{threshold}"
puts output
exit 1
end
end
end
- Remove or update any conflicting
:flog/:flaytasks inrakelib/to avoid duplicate definitions. - Ensure the default task includes
flogandflayif the project expects them to run in CI.
4) Install pre-commit hook
- Create or update
pre-commitin the hooks directory fromcore.hooksPath(or.git/hooks). - Use bash and run
bundle exec rakeunconditionally. - Exit non-zero if rake fails.
Example hook:
#!/usr/bin/env bash
bundle exec rake
result=$?
if [ $result -ne 0 ]; then
echo "bundle exec rake failed. Commit aborted."
exit $result
fi
- Ensure the hook is executable.
5) Verify
- Run
bundle exec rakeand confirm it succeeds. - Make a test commit if needed to confirm the hook blocks failing builds.
Exemples
Consultez les exemples du dépôt source.
Voir la source ↗Historique source
- Date d’indexation
- 2026-01-20
- Mise à jour de l’index
- 2026-01-31
- Branch
- main
Les dates concernent ce répertoire. Consultez le dépôt pour l’historique du code.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!