mirror of
https://github.com/ivuorinen/homebrew-tap.git
synced 2026-03-13 15:00:56 +00:00
refactor: fix Style/OneClassPerFile by extracting top-level definitions into separate files (#18)
This commit is contained in:
@@ -9,146 +9,9 @@ require "pathname"
|
||||
require "time"
|
||||
require "terser"
|
||||
require "cssminify2"
|
||||
|
||||
# Simple polyfill for Homebrew extensions
|
||||
class Array
|
||||
def exclude?(item)
|
||||
!include?(item)
|
||||
end
|
||||
end
|
||||
|
||||
# Simple static site generator for homebrew tap documentation
|
||||
# Module for formatting timestamps and dates
|
||||
module TimeFormatter
|
||||
SECONDS_PER_MINUTE = 60
|
||||
SECONDS_PER_HOUR = 3600
|
||||
SECONDS_PER_DAY = 86_400
|
||||
SECONDS_PER_WEEK = 604_800
|
||||
SECONDS_PER_MONTH = 2_419_200
|
||||
SECONDS_PER_YEAR = 31_536_000
|
||||
|
||||
def format_relative_time(timestamp)
|
||||
return "" unless timestamp
|
||||
|
||||
begin
|
||||
diff = calculate_time_difference(timestamp)
|
||||
return "just now" if diff < SECONDS_PER_MINUTE
|
||||
|
||||
format_time_by_category(diff)
|
||||
rescue
|
||||
""
|
||||
end
|
||||
end
|
||||
|
||||
def format_date(timestamp)
|
||||
return "" unless timestamp
|
||||
|
||||
begin
|
||||
Time.parse(timestamp).strftime("%b %d, %Y")
|
||||
rescue
|
||||
""
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def calculate_time_difference(timestamp)
|
||||
time = Time.parse(timestamp)
|
||||
Time.now - time
|
||||
end
|
||||
|
||||
def format_time_by_category(diff)
|
||||
case diff
|
||||
when SECONDS_PER_MINUTE...SECONDS_PER_HOUR
|
||||
format_time_unit(diff / SECONDS_PER_MINUTE, "minute")
|
||||
when SECONDS_PER_HOUR...SECONDS_PER_DAY
|
||||
format_time_unit(diff / SECONDS_PER_HOUR, "hour")
|
||||
when SECONDS_PER_DAY...SECONDS_PER_WEEK
|
||||
format_time_unit(diff / SECONDS_PER_DAY, "day")
|
||||
when SECONDS_PER_WEEK...SECONDS_PER_MONTH
|
||||
format_time_unit(diff / SECONDS_PER_WEEK, "week")
|
||||
when SECONDS_PER_MONTH...SECONDS_PER_YEAR
|
||||
format_time_unit(diff / SECONDS_PER_MONTH, "month")
|
||||
else
|
||||
format_time_unit(diff / SECONDS_PER_YEAR, "year")
|
||||
end
|
||||
end
|
||||
|
||||
def format_time_unit(value, unit)
|
||||
count = value.to_i
|
||||
"#{count} #{unit}#{"s" if count != 1} ago"
|
||||
end
|
||||
end
|
||||
|
||||
# Module for processing and copying assets
|
||||
module AssetProcessor
|
||||
DOCS_DIR = File.expand_path("../docs", __dir__).freeze
|
||||
OUTPUT_DIR = DOCS_DIR
|
||||
THEME_SOURCE_DIR = File.expand_path("../theme", __dir__).freeze
|
||||
|
||||
def copy_assets
|
||||
copy_asset_files
|
||||
end
|
||||
|
||||
def generate_css
|
||||
css_path = File.join(THEME_SOURCE_DIR, "style.css")
|
||||
output_path = File.join(OUTPUT_DIR, "style.css")
|
||||
|
||||
return unless File.exist?(css_path)
|
||||
|
||||
css_content = File.read(css_path)
|
||||
minified_css = CSSminify2.compress(css_content)
|
||||
File.write(output_path, minified_css)
|
||||
puts "📄 Generated CSS file: #{output_path}"
|
||||
end
|
||||
|
||||
def minify_js
|
||||
js_path = File.join(THEME_SOURCE_DIR, "main.js")
|
||||
output_path = File.join(OUTPUT_DIR, "main.js")
|
||||
|
||||
return unless File.exist?(js_path)
|
||||
|
||||
js_content = File.read(js_path)
|
||||
minified_js = Terser.new.compile(js_content)
|
||||
File.write(output_path, minified_js)
|
||||
puts "🔧 Generated JS file: #{output_path}"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def copy_asset_files
|
||||
assets_source_dir = File.join(THEME_SOURCE_DIR, "assets")
|
||||
assets_output_dir = File.join(OUTPUT_DIR, "assets")
|
||||
|
||||
FileUtils.mkdir_p(assets_output_dir)
|
||||
|
||||
return handle_missing_assets(assets_source_dir) unless Dir.exist?(assets_source_dir)
|
||||
|
||||
copy_files_recursively(assets_source_dir, assets_output_dir)
|
||||
end
|
||||
|
||||
def handle_missing_assets(assets_source_dir)
|
||||
puts "⚠️ Assets source directory not found: #{assets_source_dir}"
|
||||
end
|
||||
|
||||
def copy_files_recursively(source_dir, output_dir)
|
||||
asset_files = Dir.glob(File.join(source_dir, "**", "*")).reject { |f| File.directory?(f) }
|
||||
|
||||
asset_files.each do |source_file|
|
||||
copy_single_asset(source_file, source_dir, output_dir)
|
||||
end
|
||||
|
||||
puts "📁 Copied #{asset_files.count} asset files to #{output_dir}"
|
||||
end
|
||||
|
||||
def copy_single_asset(source_file, source_dir, output_dir)
|
||||
relative_path = Pathname.new(source_file).relative_path_from(Pathname.new(source_dir))
|
||||
output_file = File.join(output_dir, relative_path)
|
||||
|
||||
FileUtils.mkdir_p(File.dirname(output_file))
|
||||
FileUtils.cp(source_file, output_file)
|
||||
end
|
||||
end
|
||||
require_relative "array_extensions"
|
||||
require_relative "time_formatter"
|
||||
require_relative "asset_processor"
|
||||
|
||||
# Static site generator for homebrew tap documentation
|
||||
class SiteBuilder
|
||||
|
||||
Reference in New Issue
Block a user