module SqlView::SchemaDumper
@api private
Public Instance Methods
tables(stream)
click to toggle source
Calls superclass method
# File lib/sql_view/schema_dumper.rb, line 32 def tables(stream) super views(stream) end
views(stream)
click to toggle source
# File lib/sql_view/schema_dumper.rb, line 37 def views(stream) if dumpable_views_in_database.any? stream.puts end dumpable_views_in_database.each do |viewname| next if already_indexed?(viewname) view = DBView.new(get_view_info(viewname)) stream.puts(view.to_schema) indexes(viewname, stream) end end
Private Instance Methods
already_indexed?(viewname)
click to toggle source
make sure view was added one time, because somehow was adding views two times
# File lib/sql_view/schema_dumper.rb, line 53 def already_indexed?(viewname) @already_indexed ||= [] return true if @already_indexed.include?(viewname) @already_indexed << viewname false end
dumpable_views_in_database()
click to toggle source
# File lib/sql_view/schema_dumper.rb, line 60 def dumpable_views_in_database @dumpable_views_in_database ||= ActiveRecord::Base.connection.views.reject do |viewname| ignored?(viewname) end end
get_view_info(viewname)
click to toggle source
# File lib/sql_view/schema_dumper.rb, line 66 def get_view_info(viewname) views_schema.detect{|e| e['viewname'] == viewname} end
ignored?(table_name)
click to toggle source
This method will be present in Rails 4.2.0 and can be removed then.
# File lib/sql_view/schema_dumper.rb, line 90 def ignored?(table_name) ["schema_migrations", ignore_tables].flatten.any? do |ignored| case ignored when String then remove_prefix_and_suffix(table_name) == ignored when Regexp then remove_prefix_and_suffix(table_name) =~ ignored else raise StandardError, "ActiveRecord::SchemaDumper.ignore_tables accepts an array of String and / or Regexp values." end end end
views_schema()
click to toggle source
# File lib/sql_view/schema_dumper.rb, line 70 def views_schema @views_schema ||= ActiveRecord::Base.connection.execute(<<-SQL) SELECT c.relname as viewname, pg_get_viewdef(c.oid) AS definition, c.relkind AS kind, n.nspname AS namespace FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN ('m', 'v') AND c.relname NOT IN (SELECT extname FROM pg_extension) AND n.nspname = ANY (current_schemas(false)) ORDER BY c.oid SQL .to_a end