lib/ridgepole/migration_ext.rb in ridgepole-0.2.0 vs lib/ridgepole/migration_ext.rb in ridgepole-0.2.1

- old
+ new

@@ -1,9 +1,57 @@ require 'active_record/migration' class ActiveRecord::Migration + cattr_accessor :time_recorder + def write_with_logging(text = '') logger = Ridgepole::Logger.instance logger.info(text) + parse_text(text) end alias_method_chain :write, :logging + + def parse_text(text) + return unless self.time_recorder + + case text + when /\A--\s+(.+)\Z/ + self.time_recorder.add_key($1) + when /\A\s+->\s+(\d+\.\d+)s\Z/ + self.time_recorder.add_value($1.to_f) + end + end + + def self.record_time + result = nil + + begin + self.time_recorder = TimeRecorder.new + yield + result = self.time_recorder.result + ensure + self.time_recorder = nil + end + + return result + end + + class TimeRecorder + attr_reader :result + + def initialize + @result = {} + end + + def add_key(key) + @key = key + end + + def add_value(value) + if @key + @result[@key] = value + end + + @key = nil + end + end end