module WhatsnewTracker
Constants
- BUILD_SUCCESS_PATTERN
- MAX_SUMMARY_LENGTH
Public Instance Methods
Source
# File lib/whatsnew_tracker.rb, line 145 def default_plugins_dir File.expand_path("../plugins", __dir__) end
Source
# File lib/whatsnew_tracker.rb, line 117 def handle_build_success(message:, network:, channel:, now: Time.now, store: RabbotDb, plugins_dir: default_plugins_dir) filename = parse_build_success(message) return { action: :ignored } unless filename plugin = normalize_plugin_name(filename) pending = WhatsnewStore.load_pending(network: network, channel: channel, store: store) summary = pending_summary(pending, plugin: plugin, plugins_dir: plugins_dir) kind = pending_kind(pending) record_build(plugin: plugin, kind: kind, summary: summary, now: now, store: store, plugins_dir: plugins_dir) WhatsnewStore.clear_pending(network: network, channel: channel, store: store) { action: :recorded, plugin: plugin } end
Source
# File lib/whatsnew_tracker.rb, line 81 def handle_user_command(message:, network:, channel:, now: Time.now, store: RabbotDb) parsed = parse_build_command(message) return { action: :ignored } unless parsed WhatsnewStore.save_pending( network: network, channel: channel, pending: { "kind" => parsed[:kind].to_s, "plugin" => parsed[:plugin], "summary" => parsed[:summary], "started_at" => RabbotDb.iso_time(now) }, store: store ) { action: :pending } end
Source
# File lib/whatsnew_tracker.rb, line 16 def normalize_plugin_name(value) name = value.to_s.strip return nil if name.empty? File.basename(name, ".rb").downcase end
Source
# File lib/whatsnew_tracker.rb, line 33 def parse_build_command(message) text = message.to_s.strip return nil unless text.match?(/\A!rabbot\s+/i) if (match = text.match(/\A!rabbot\s+pluginenhance\s+(.+)\z/i)) plugin, summary = parse_enhance_args(match[1]) return nil if plugin.to_s.empty? || summary.empty? return { kind: :enhance, plugin: normalize_plugin_name(plugin), summary: summary } end if (match = text.match(/\A!rabbot\s+plugin\s+(.+)\z/i)) summary = sanitize_summary(match[1]) return nil if summary.empty? return { kind: :new, plugin: nil, summary: summary } end nil end
Source
# File lib/whatsnew_tracker.rb, line 62 def parse_build_success(message) match = message.to_s.strip.match(BUILD_SUCCESS_PATTERN) return nil unless match match[1] end
Source
# File lib/whatsnew_tracker.rb, line 23 def parse_enhance_args(args) text = args.to_s.strip return [nil, ""] if text.empty? match = text.match(/\A(\S+)\s+(.+)\z/m) return [text, ""] unless match [match[1], sanitize_summary(match[2])] end
Source
# File lib/whatsnew_tracker.rb, line 140 def pending_kind(pending) kind = pending.is_a?(Hash) ? pending["kind"].to_s.strip : "" kind.empty? ? "new" : kind end
Source
# File lib/whatsnew_tracker.rb, line 133 def pending_summary(pending, plugin:, plugins_dir:) summary = pending.is_a?(Hash) ? pending["summary"].to_s.strip : "" return summary unless summary.empty? plugin_summary_from_file(plugin, plugins_dir: plugins_dir) end
Source
# File lib/whatsnew_tracker.rb, line 69 def plugin_summary_from_file(plugin_name, plugins_dir:) path = File.join(plugins_dir.to_s, "#{plugin_name}.rb") return plugin_name.to_s unless File.file?(path) content = File.read(path) description = HelpParser.file_description_for(content) description = description.split(/\s*—\s*responders:/i, 2).first.to_s.strip description.empty? ? plugin_name.to_s : description rescue StandardError plugin_name.to_s end
Source
# File lib/whatsnew_tracker.rb, line 99 def record_build(plugin:, kind:, summary:, now: Time.now, store: RabbotDb, plugins_dir: default_plugins_dir) plugin_name = normalize_plugin_name(plugin) return { action: :ignored } unless plugin_name text = sanitize_summary(summary) text = pending_summary({ "summary" => text }, plugin: plugin_name, plugins_dir: plugins_dir) WhatsnewStore.add_entry( plugin: plugin_name, kind: kind, summary: text, recorded_at: RabbotDb.iso_time(now), store: store ) { action: :recorded, plugin: plugin_name } end
Source
# File lib/whatsnew_tracker.rb, line 12 def sanitize_summary(text) text.to_s.strip.gsub(/[\x00-\x1f]/, "")[0, MAX_SUMMARY_LENGTH] end