convert_file_value(hash)
click to toggle source
def convert_file_value hash
hash.each do |k, v|
if (v.is_a?(Rack::Test::UploadedFile) || v.is_a?(ActionDispatch::Http::UploadedFile))
hash[k] = "<FILE CONTENT '#{v.original_filename}'>"
elsif v.is_a?(Hash)
hash[k] = convert_file_value(v)
end
end
hash
end
deep_merge_examples(new_examples, old_examples)
click to toggle source
def deep_merge_examples(new_examples, old_examples)
new_examples.map do |new_example|
new_example_ordered = ordered_call(new_example.dup)
if old_example = old_examples.find{ |old_example| old_example["verb"] == new_example_ordered["verb"] && old_example["versions"] == new_example_ordered["versions"] && old_example["query"] == new_example_ordered["query"]}
new_example[:show_in_doc] = old_example["show_in_doc"] if Apipie.configuration.persist_show_in_doc && old_example["show_in_doc"].to_i > 0
new_example[:title] ||= old_example["title"] if old_example["title"].present?
end
new_example
end
end
desc_to_s(description)
click to toggle source
def desc_to_s(description)
"#{description[:controller].name}##{description[:action]}"
end
hash_nodes_count(node)
click to toggle source
def hash_nodes_count(node)
case node
when Hash
1 + (node.values.map { |v| hash_nodes_count(v) }.reduce(:+) || 0)
when Array
node.map { |v| hash_nodes_count(v) }.reduce(:+) || 1
else
1
end
end
load_new_examples()
click to toggle source
def load_new_examples
@collector.records.reduce({}) do |h, (method, calls)|
showed_in_versions = Set.new
recorded_examples = calls.map do |call|
method_descriptions = Apipie.get_method_descriptions(call[:controller], call[:action])
call[:versions] = method_descriptions.map(&:version)
if Apipie.configuration.show_all_examples
show_in_doc = 1
elsif call[:versions].any? { |v| ! showed_in_versions.include?(v) }
call[:versions].each { |v| showed_in_versions << v }
show_in_doc = 1
else
show_in_doc = 0
end
example = call.merge(:show_in_doc => show_in_doc.to_i, :recorded => true)
example
end
h.update(method => recorded_examples)
end
end
load_old_examples()
click to toggle source
def load_old_examples
if File.exists?(@examples_file)
if defined? SafeYAML
return YAML.load_file(@examples_file, :safe=>false)
else
return YAML.load_file(@examples_file)
end
end
return {}
end
load_recorded_examples()
click to toggle source
def load_recorded_examples
self.class.load_recorded_examples
end
logger()
click to toggle source
def logger
self.class.logger
end
merge_old_new_examples()
click to toggle source
def merge_old_new_examples
new_examples = self.load_new_examples
old_examples = self.load_recorded_examples
merged_examples = []
(new_examples.keys + old_examples.keys).uniq.each do |key|
if new_examples.has_key?(key)
if old_examples.has_key?(key)
records = deep_merge_examples(new_examples[key], old_examples[key])
else
records = new_examples[key]
end
else
records = old_examples[key]
end
merged_examples << [key, records.map { |r| ordered_call(r) } ]
end
return merged_examples
end
ordered_call(call)
click to toggle source
def ordered_call(call)
call = call.stringify_keys
ordered_call = OrderedHash.new
%w[title verb path versions query request_data response_data code show_in_doc recorded].each do |k|
next unless call.has_key?(k)
ordered_call[k] = case call[k]
when ActiveSupport::HashWithIndifferentAccess
convert_file_value(call[k]).to_hash
else
call[k]
end
end
return ordered_call
end
showable_in_doc?(call)
click to toggle source
def showable_in_doc?(call)
if hash_nodes_count(call["request_data"]) + hash_nodes_count(call["response_data"]) > 100
return false
else
return 1
end
end