class AdequateSerialization::Rails::CacheVisualization
Constants
- FILES
- STATIC
Attributes
app[R]
server[R]
Public Class Methods
call(env)
click to toggle source
# File lib/adequate_serialization/rails/cache_visualization.rb, line 35 def self.call(env) (@app ||= new).call(env) end
new()
click to toggle source
# File lib/adequate_serialization/rails/cache_visualization.rb, line 21 def initialize @server = Rack::File.new(STATIC) end
Public Instance Methods
call(env)
click to toggle source
# File lib/adequate_serialization/rails/cache_visualization.rb, line 25 def call(env) if env[Rack::PATH_INFO] == '/' render_index(env) elsif FILES.include?(env[Rack::PATH_INFO]) server.call(env) else [404, { 'Content-Type' => 'text/plain' }, ['Not Found']] end end
to_dot()
click to toggle source
# File lib/adequate_serialization/rails/cache_visualization.rb, line 9 def to_dot "#{klass.name} -> #{active_record.name} [label=\"#{name}\"];" end
Private Instance Methods
reflections()
click to toggle source
# File lib/adequate_serialization/rails/cache_visualization.rb, line 83 def reflections serializers.each_with_object([]) do |serializer, selected| serializer.attributes.each do |attribute| serializes = serializer.serializes reflection = serializes.reflect_on_association(attribute.name) next if !reflection || reflection.polymorphic? selected << reflection end end end
render_index(env)
click to toggle source
# File lib/adequate_serialization/rails/cache_visualization.rb, line 62 def render_index(env) content = File.read(File.join(STATIC, 'index.html.erb')) locals = { svg: to_svg, script_name: env[Rack::SCRIPT_NAME] } result = ERB.new(content).result_with_hash(locals) [200, { 'Content-Type' => 'text/html' }, [result]] end
serializers()
click to toggle source
# File lib/adequate_serialization/rails/cache_visualization.rb, line 70 def serializers ::Rails.application.eager_load! base = Serializer ObjectSpace.each_object(base.singleton_class).select do |serializer| serializer < base && serializer.name && serializer.serializes < ActiveRecord::Base rescue AdequateSerialization::Serializer::ClassNotFoundError false end end
to_svg()
click to toggle source
# File lib/adequate_serialization/rails/cache_visualization.rb, line 50 def to_svg svg = IO.popen('dot -Tsvg', 'w+') do |f| f.write(to_dot) f.close_write f.readlines end 3.times { svg.shift } svg.join.gsub(/(height|width)="[^"]*"/, '') end