Sha256: ce91f29262d140a48ca2b5c73758b7a9a5f2fd93bdfc3409e45b915fadc06369

Contents?: true

Size: 1.81 KB

Versions: 2

Compression:

Stored size: 1.81 KB

Contents

module SchemaPlus::Views
  module Middleware

    module Dumper
      module Tables

        # Dump views
        def after(env)
          re_view_referent = %r{(?:(?i)FROM|JOIN) \S*\b(\S+)\b}
          env.connection.views.each do |view_name|
            next if env.dumper.ignored?(view_name)
            view = View.new(name: view_name, definition: env.connection.view_definition(view_name))
            env.dump.tables[view.name] = view
            env.dump.depends(view.name, view.definition.scan(re_view_referent).flatten)
          end
        end

        # quacks like a SchemaMonkey Dump::Table
        class View < KeyStruct[:name, :definition]
          def assemble(stream)
            heredelim = "END_VIEW_#{name.upcase}"
            stream.puts <<-ENDVIEW
  create_view "#{name}", <<-'#{heredelim}', :force => true
#{definition}
  #{heredelim}

            ENDVIEW
          end
        end
      end
    end

    module Schema
      module Tables

        module Mysql
          def after(env)
            Tables.filter_out_views(env)
          end
        end

        module Sqlite3
          def after(env)
            Tables.filter_out_views(env)
          end
        end

        def self.filter_out_views(env)
          env.tables -= env.connection.views(env.query_name)
        end
      end
    end

    #
    # Define new middleware stacks patterned on SchemaPlus::Core's naming
    # for tables

    module Schema
      module Views
        ENV = [:connection, :query_name, :views]
      end
      module ViewDefinition
        ENV = [:connection, :view_name, :query_name, :definition]
      end
    end

    module Migration
      module CreateView
        ENV = [:connection, :view_name, :definition, :options]
      end
      module DropView
        ENV = [:connection, :view_name, :options]
      end
    end
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
schema_plus_views-0.3.1 lib/schema_plus/views/middleware.rb
schema_plus_views-0.3.0 lib/schema_plus/views/middleware.rb