diff --git a/lib/scenic/adapters/postgres.rb b/lib/scenic/adapters/postgres.rb index 2c94e015..4fc81cf7 100644 --- a/lib/scenic/adapters/postgres.rb +++ b/lib/scenic/adapters/postgres.rb @@ -58,7 +58,7 @@ def views # # @return [void] def create_view(name, sql_definition) - execute "CREATE VIEW #{quote_table_name(name)} AS #{sql_definition};" + execute "CREATE VIEW #{quote_table_name(name)} WITH (security_invoker = true) AS #{sql_definition};" end # Updates a view in the database. diff --git a/lib/scenic/definition.rb b/lib/scenic/definition.rb index 58195107..aa908dc8 100644 --- a/lib/scenic/definition.rb +++ b/lib/scenic/definition.rb @@ -3,11 +3,11 @@ module Scenic class Definition def initialize(name, version) @name = name.to_s - @version = version.to_i + @version = version end def to_sql - File.read(full_path).tap do |content| + ERB.new(File.read(full_path)).result.tap do |content| if content.empty? raise "Define view query in #{path} before migrating." end @@ -23,7 +23,8 @@ def path end def version - @version.to_s.rjust(2, "0") + @version = latest_version if @version == :latest + @version.to_i.to_s.rjust(2, "0") end private @@ -33,5 +34,10 @@ def version def filename "#{UnaffixedName.for(name).tr('.', '_')}_v#{version}.sql" end + + def latest_version + Dir.glob(Rails.root.join('db', 'views', "#{name}*.sql")).sort.last =~ /#{name}_v(\d*).sql/i + $1 + end end end diff --git a/lib/scenic/version.rb b/lib/scenic/version.rb index 4c87f6e7..15c07b90 100644 --- a/lib/scenic/version.rb +++ b/lib/scenic/version.rb @@ -1,3 +1,3 @@ module Scenic - VERSION = "1.7.0".freeze + VERSION = "1.7.1".freeze end diff --git a/spec/scenic/definition_spec.rb b/spec/scenic/definition_spec.rb index e840ac6b..53009bac 100644 --- a/spec/scenic/definition_spec.rb +++ b/spec/scenic/definition_spec.rb @@ -65,6 +65,16 @@ module Scenic expect(definition.version).to eq "15" end + + it "returns latest version" do + with_view_definition 'a_versioned_file', 1, "Select 1 from somethings" do + with_view_definition 'a_versioned_file', 5, "Select * from somethings" do + definition = Definition.new('a_versioned_file', :latest) + + expect(definition.version).to eq "05" + end + end + end end end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b3dfc3a9..908c70ae 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -7,6 +7,9 @@ require "support/view_definition_helpers" RSpec.configure do |config| + config.filter_run focus: true + config.run_all_when_everything_filtered = true + config.order = "random" config.include ViewDefinitionHelpers config.include RailsConfigurationHelpers