搜索

PythonReactSEOPDF
GitHub Skill

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.

nateberkopec☆ 63 仓库 Stars2 仓库 Forks

安装与使用

请根据来源仓库和你的 AI 工具说明安装此技能。先阅读技能文件和依赖要求,再添加到工作流。

查看来源 ↗使用指南

技能说明

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 Gemfile for flog and flay entries.
  • Search for existing :flog or :flay rake tasks in Rakefile and rakelib/ to avoid duplicates.
  • Check git config core.hooksPath to determine the hooks directory (default is .git/hooks when unset).
2) Ensure dependencies
  • Add gem "flay" and gem "flog" to Gemfile if missing (no version pinning).
  • Run bundle install if needed.
3) Define tasks in Rakefile
  • Define :flog and :flay tasks directly in Rakefile.
  • Use env-configurable thresholds with defaults.
  • Use bundle exec for both tools.
  • Log only on failure using puts and 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/:flay tasks in rakelib/ to avoid duplicate definitions.
  • Ensure the default task includes flog and flay if the project expects them to run in CI.
4) Install pre-commit hook
  • Create or update pre-commit in the hooks directory from core.hooksPath (or .git/hooks).
  • Use bash and run bundle exec rake unconditionally.
  • 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 rake and confirm it succeeds.
  • Make a test commit if needed to confirm the hook blocks failing builds.

使用示例

查看来源仓库中的使用示例与配置说明。

查看来源 ↗

来源历史

收录时间
2026-01-20
索引更新时间
2026-01-31
Branch
main

收录与同步日期属于本站记录。源码修改历史请查看来源仓库。

GitHub ↗

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!