Module: DevMetrics

Defined in:
lib/dev_metrics.rb,
lib/dev_metrics/csv.rb,
lib/dev_metrics/json.rb,
lib/dev_metrics/client.rb,
lib/dev_metrics/version.rb,
lib/dev_metrics/markdown.rb,
lib/dev_metrics/format_base.rb,
lib/dev_metrics/metrics_calc.rb,
lib/dev_metrics/query_builder.rb,
lib/dev_metrics/pull_request_wrapper.rb

Defined Under Namespace

Classes: Client, Config, Csv, FormatBase, Json, Markdown, MetricsCalc, PullRequestWrapper, QueryBuilder

Constant Summary collapse

VERSION =
"0.2.5"

Class Method Summary collapse

Class Method Details

.configurationObject



43
44
45
# File 'lib/dev_metrics.rb', line 43

def self.configuration
  @configuration
end

.option_parse(argv) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/dev_metrics.rb', line 47

def self.option_parse(argv)
  options = {
    period: (Date.today << 1).strftime("%Y-%m"),
    format: "csv",
    config: "dev_metrics_config.yml"
  }
  OptionParser.new do |opts|
    opts.banner = "Usage: dev_metrics [options]"

    opts.on("-c", "--config FILE", "Specify config YAML file (default: dev_metrics_config.yml)") do |file|
      options[:config] = file
    end

    opts.on("-p", "--period PERIOD", "Specify the period for metrics (e.g., '2025-05' or '2025-05-01..2025-05-31')") do |period|
      options[:period] = period
    end

    opts.on("-f", "--format FORMAT", "Specify the output format (e.g., 'csv', 'json', 'markdown')") do |format|
      options[:format] = format
    end

    opts.on("-h", "--help", "Display this help message") do
      puts opts
      exit
    end
  end.parse!(argv)
  options
end

.run(argv: nil) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/dev_metrics.rb', line 76

def self.run(argv: nil)
  argv ||= ARGV
  options = option_parse(argv)
  config_file = options[:config] || "dev_metrics_config.yml"
  @configuration.load_from_yaml(config_file)
  period = options[:period]
  format = options[:format]

  client = DevMetrics::Client.new(@configuration)
  prs = client.fetch(period: period)

  case format
  when "csv"
    DevMetrics::Csv.new(prs).call
  when "markdown"
    DevMetrics::Markdown.new(prs).call
  when "json"
    DevMetrics::Json.new(prs).call
  else
    warn "Unknown format: #{format}"
    warn "Available formats: csv, markdown, json"
    exit 1
  end
end