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
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
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.
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-01-20
- Index updated
- 2026-01-31
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!