class ApipieDiff::MainCmd
Public Instance Methods
execute()
click to toggle source
# File lib/apipie_diff/main_cmd.rb, line 15 def execute right_resources = normalize_docs(left_file_path, load_doc(left_file_path)) left_resources = normalize_docs(right_file_path, load_doc(right_file_path)) actions_stats = print_diff(left_resources, right_resources) print_stats(left_resources, right_resources, actions_stats) if stats? return 0 end
Private Instance Methods
colorize(str, color_name)
click to toggle source
# File lib/apipie_diff/main_cmd.rb, line 139 def colorize(str, color_name) if disable_colors? str else str.colorize(color_name) end end
diff_method(left_method, right_method)
click to toggle source
# File lib/apipie_diff/main_cmd.rb, line 121 def diff_method(left_method, right_method) left_dump = left_method.nil? ? '' : YAML.dump(left_method) right_dump = right_method.nil? ? '' : YAML.dump(right_method) Diffy::Diff.new(left_dump, right_dump).to_s end
heading(prefix, name, note = nil)
click to toggle source
# File lib/apipie_diff/main_cmd.rb, line 117 def heading(prefix, name, note = nil) puts "#{prefix} #{name}" + (note.nil? ? '' : " (#{note})") end
load_doc(file)
click to toggle source
# File lib/apipie_diff/main_cmd.rb, line 103 def load_doc(file) JSON.load(File.read(file)) rescue JSON::ParserError => e signal_usage_error("#{file} doesn't seem to be valid json file:\n#{e}") rescue Errno::ENOENT => e signal_usage_error("Couldn't read #{file}:\n#{e}") end
normalize_docs(file, docs)
click to toggle source
# File lib/apipie_diff/main_cmd.rb, line 111 def normalize_docs(file, docs) ApipieDiff::Normalizer.new.normalize(docs) rescue RuntimeError => e signal_usage_error("Couldn't process #{file}:\n#{e}") end
print_diff(left_resources, right_resources)
click to toggle source
# File lib/apipie_diff/main_cmd.rb, line 26 def print_diff(left_resources, right_resources) actions_stats = { :new => [], :removed => [], :changed => [] } resource_names = right_resources.keys | left_resources.keys resource_names.sort.each do |res| if !right_resources.has_key? res heading('#', res, colorize('REMOVED', :red)) else if !left_resources.has_key? res heading('#', res, colorize('NEW', :green)) left_methods = {} right_methods = right_resources[res]['methods'] else heading('#', res) left_methods = left_resources[res]['methods'] right_methods = right_resources[res]['methods'] end method_names = left_methods.keys | right_methods.keys method_names.sort.each do |m| if !right_methods.has_key? m heading(' *', m, colorize('REMOVED', :red)) actions_stats[:removed] << [res, m] elsif !left_methods.has_key? m diff = diff_method(left_methods[m], right_methods[m]) heading(' *', m, colorize('NEW', :green)) actions_stats[:new] << [res, m] puts_diff(diff, ' '*6) if diff.strip != '' else diff = diff_method(left_methods[m], right_methods[m]) if diff.strip != '' heading(' *', m, colorize('CHANGED', :yellow)) actions_stats[:changed] << [res, m] puts_diff(diff, ' '*6) else heading(' *', m) end end end end end actions_stats end
print_stats(left_resources, right_resources, actions_stats)
click to toggle source
# File lib/apipie_diff/main_cmd.rb, line 82 def print_stats(left_resources, right_resources, actions_stats) puts puts '-'*80 added_resources = right_resources.keys - left_resources.keys removed_resources = left_resources.keys - right_resources.keys puts colorize("#{added_resources.size} added resources:", :green) puts " #{added_resources.join("\n ")}" puts colorize("#{removed_resources.size} removed resources:", :red) puts " #{removed_resources.join("\n ")}" puts colorize("#{actions_stats[:new].size} new actions:", :green) puts " #{actions_stats[:new].map{|m| m.join(' # ') }.join("\n ")}" puts colorize("#{actions_stats[:changed].size} changed actions:", :yellow) puts " #{actions_stats[:changed].map{|m| m.join(' # ') }.join("\n ")}" puts end
puts_diff(diff, indent = '')
click to toggle source
# File lib/apipie_diff/main_cmd.rb, line 127 def puts_diff(diff, indent = '') diff.split("\n").each do |line| if line[0] == '+' puts indent + colorize(line, :green) elsif line[0] == '-' puts indent + colorize(line, :red) else puts indent + line end end end