scenic 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b88bfc7421d9fff9dabb78192437422bff78a008
4
- data.tar.gz: 707fd7687db5ad21240ee8d3f0b8eafa16db4b01
3
+ metadata.gz: e1617d9008cabf9f0117f71f812735e8f89bf932
4
+ data.tar.gz: 31babdfa7c8fc2bc200f9457bc6f8fcab9f16a8e
5
5
  SHA512:
6
- metadata.gz: d1dc5196a72602f964093cbbd1b2976de5d31d73f887e8d21b8938262b6b15cffdc8e536073a482cb988da653d022be850f052727bc62d932738676d4ca42a4a
7
- data.tar.gz: 0ef40094617d1adde567078bc066887afb92ae3102925358450a05bd3a4beafd05f7d116929ccbcc25577337bdcdb437abf92cd5bd4a9855ef2b47f0daf28333
6
+ metadata.gz: aebbd7f6d99c20b35420a68977a4231849543393c01d2a37487cfcde775cc26b33af792d13b61a4618db12dfe4eef0fc0a581ad27a5b76842d4701c0452302db
7
+ data.tar.gz: 05ea1809e4c4777903a297a9ee1e8c83d59ac3550aa455a82ef2d0e52f0a5f715211ed721e1f425aa87f4d08e7f04c7e7c9b1bec284861ab667e555eefe226c0
data/Appraisals CHANGED
@@ -13,13 +13,14 @@ appraise "rails42" do
13
13
  gem "railties", "~> 4.2.0"
14
14
  end
15
15
 
16
- appraise "rails50" do
17
- gem "activerecord", "~> 5.0.0.beta1"
18
- gem "railties", "~> 5.0.0.beta1"
19
- gem "rspec-rails", github: "rspec/rspec-rails"
20
- gem "rspec-support", github: "rspec/rspec-support"
21
- gem "rspec-core", github: "rspec/rspec-core"
22
- gem "rspec-mocks", github: "rspec/rspec-mocks"
23
- gem "rspec-expectations", github: "rspec/rspec-expectations"
24
- gem "rspec", github: "rspec/rspec"
16
+ if RUBY_VERSION > "2.2.0"
17
+ appraise "rails50" do
18
+ gem "rails", github: "rails/rails"
19
+ gem "rspec-rails", github: "rspec/rspec-rails"
20
+ gem "rspec-support", github: "rspec/rspec-support"
21
+ gem "rspec-core", github: "rspec/rspec-core"
22
+ gem "rspec-mocks", github: "rspec/rspec-mocks"
23
+ gem "rspec-expectations", github: "rspec/rspec-expectations"
24
+ gem "rspec", github: "rspec/rspec"
25
+ end
25
26
  end
data/NEWS.md CHANGED
@@ -5,6 +5,26 @@ changelog, see the [CHANGELOG] for each version via the version links.
5
5
 
6
6
  [CHANGELOG]: https://github.com/thoughtbot/scenic/commits/master
7
7
 
8
+ ## [1.2.0] - February 5, 2016
9
+
10
+ ### Added
11
+ - The generators now accept namespaced view definitions. For example: `rails
12
+ generate scenic:view my_app.users`.
13
+
14
+ ### Fixed
15
+ - Materialized view indexes are now properly dumped to `db/schema.rb`. This was
16
+ an oversight in previous releases, meaning `rake db:schema:load` was missing
17
+ indexes.
18
+ - Calling `update_view` for a materialized view now properly finds associated
19
+ indexes for automatic reapplication. An issue in the previous index query was
20
+ returning no indexes.
21
+
22
+ **Note**: Dumping materialized view indexes will produce an invalid
23
+ `db/schema.rb` file under Rails 5 beta 1 and beta 2. This is fixed on Rails
24
+ master.
25
+
26
+ [1.2.0]: https://github.com/thoughtbot/scenic/compare/v1.1.1...v1.2.0
27
+
8
28
  ## [1.1.1] - January 29, 2016
9
29
 
10
30
  ### Fixed
@@ -2,8 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 5.0.0.beta1"
6
- gem "railties", "~> 5.0.0.beta1"
5
+ gem "rails", :github => "rails/rails"
7
6
  gem "rspec-rails", :github => "rspec/rspec-rails"
8
7
  gem "rspec-support", :github => "rspec/rspec-support"
9
8
  gem "rspec-core", :github => "rspec/rspec-core"
@@ -1,5 +1,5 @@
1
1
  class <%= migration_class_name %> < ActiveRecord::Migration
2
2
  def change
3
- create_view :<%= plural_name %><%= ", materialized: true" if materialized? %>
3
+ create_view <%= formatted_plural_name %><%= ", materialized: true" if materialized? %>
4
4
  end
5
5
  end
@@ -1,12 +1,12 @@
1
1
  class <%= migration_class_name %> < ActiveRecord::Migration
2
2
  def change
3
3
  <%- if materialized? -%>
4
- update_view :<%= plural_name %>,
4
+ update_view <%= formatted_plural_name %>,
5
5
  version: <%= version %>,
6
6
  revert_to_version: <%= previous_version %>,
7
7
  materialized: true
8
8
  <%- else -%>
9
- update_view :<%= plural_name %>, version: <%= version %>, revert_to_version: <%= previous_version %>
9
+ update_view <%= formatted_plural_name %>, version: <%= version %>, revert_to_version: <%= previous_version %>
10
10
  <%- end -%>
11
11
  end
12
12
  end
@@ -56,7 +56,7 @@ module Scenic
56
56
 
57
57
  def migration_class_name
58
58
  if creating_new_view?
59
- super
59
+ "Create#{class_name.gsub('.', '').pluralize}"
60
60
  else
61
61
  "Update#{class_name.pluralize}ToVersion#{version}"
62
62
  end
@@ -85,10 +85,22 @@ module Scenic
85
85
  Scenic::Definition.new(plural_file_name, previous_version)
86
86
  end
87
87
 
88
+ def plural_file_name
89
+ @plural_file_name ||= file_name.pluralize.gsub(".", "_")
90
+ end
91
+
88
92
  def destroying?
89
93
  behavior == :revoke
90
94
  end
91
95
 
96
+ def formatted_plural_name
97
+ if plural_name.include?(".")
98
+ "\"#{plural_name}\""
99
+ else
100
+ ":#{plural_name}"
101
+ end
102
+ end
103
+
92
104
  def destroying_initial_view?
93
105
  destroying? && version == 1
94
106
  end
@@ -34,7 +34,7 @@ module Scenic
34
34
  LEFT JOIN pg_namespace n ON n.oid = i.relnamespace
35
35
  WHERE i.relkind = 'i'
36
36
  AND d.indisprimary = 'f'
37
- AND t.relname = '#{quote_table_name(name)}'
37
+ AND t.relname = '#{name}'
38
38
  AND n.nspname = ANY (current_schemas(false))
39
39
  ORDER BY i.relname
40
40
  SQL
@@ -9,17 +9,24 @@ module Scenic
9
9
  end
10
10
 
11
11
  def views(stream)
12
- views_in_database.select { |view| !ignored?(view.name) }.each do |view|
13
- stream.puts(view.to_schema)
12
+ if dumpable_views_in_database.any?
13
+ stream.puts
14
14
  end
15
- end
16
15
 
17
- def views_in_database
18
- @views_in_database ||= Scenic.database.views
16
+ dumpable_views_in_database.each do |view|
17
+ stream.puts(view.to_schema)
18
+ indexes(view.name, stream)
19
+ end
19
20
  end
20
21
 
21
22
  private
22
23
 
24
+ def dumpable_views_in_database
25
+ @dumpable_views_in_database ||= Scenic.database.views.reject do |view|
26
+ ignored?(view.name)
27
+ end
28
+ end
29
+
23
30
  unless ActiveRecord::SchemaDumper.instance_methods(false).include?(:ignored?)
24
31
  # This method will be present in Rails 4.2.0 and can be removed then.
25
32
  def ignored?(table_name)
@@ -1,3 +1,3 @@
1
1
  module Scenic
2
- VERSION = "1.1.1"
2
+ VERSION = "1.2.0".freeze
3
3
  end
@@ -44,10 +44,10 @@ module Scenic
44
44
  def to_schema
45
45
  materialized_option = materialized ? "materialized: true, " : ""
46
46
  <<-DEFINITION
47
-
48
47
  create_view :#{name}, #{materialized_option} sql_definition: <<-\SQL
49
48
  #{definition.indent(2)}
50
49
  SQL
50
+
51
51
  DEFINITION
52
52
  end
53
53
  end
@@ -36,4 +36,16 @@ describe Scenic::Generators::ViewGenerator, :generator do
36
36
  expect(migration).to contain "materialized: true"
37
37
  end
38
38
  end
39
+
40
+ context "for views created in a schema other than 'public'" do
41
+ it "creates view definition and migration files" do
42
+ migration = file("db/migrate/create_non_public_searches.rb")
43
+ view_definition = file("db/views/non_public_searches_v01.sql")
44
+
45
+ run_generator ["non_public.search"]
46
+
47
+ expect(migration).to be_a_migration
48
+ expect(view_definition).to exist
49
+ end
50
+ end
39
51
  end
data/spec/smoke CHANGED
@@ -26,6 +26,13 @@ verifySearchResults() {
26
26
  echo "[success]"
27
27
  }
28
28
 
29
+ verifySchemaContains() {
30
+ local expectedString=$1
31
+ echo "verify schema contains '$expectedString'"
32
+ grep -q "$expectedString" db/schema.rb || exit 1
33
+ echo "[success]"
34
+ }
35
+
29
36
  writeToFileAndMigrateAndVerifySearchResults() {
30
37
  echo "write search definition and migrate"
31
38
  local version=$1
@@ -98,8 +105,8 @@ main() {
98
105
  echo "[success]"
99
106
 
100
107
  echo "add indexes to materialized view"
101
- rails runner "ActiveRecord::Base.connection.execute 'CREATE INDEX searches_test_1 ON searches USING btree (results);'" || exit 1
102
- rails runner "ActiveRecord::Base.connection.execute 'CREATE INDEX searches_test_2 ON searches USING btree (user_id);'" || exit 1
108
+ rails runner 'ActiveRecord::Migration.add_index :searches, :results' || exit 1
109
+ rails runner 'ActiveRecord::Migration.add_index :searches, :user_id' || exit 1
103
110
  echo "[success]"
104
111
 
105
112
  echo "update materialized view"
@@ -107,6 +114,7 @@ main() {
107
114
  echo "SELECT 'test'::text AS results" > db/views/searches_v02.sql
108
115
  rake db:migrate
109
116
  verifySearchResults 'test'
117
+ verifySchemaContains 'add_index "searches"'
110
118
 
111
119
  echo "rake db:rollback"
112
120
  rake db:rollback
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scenic
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derek Prior
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-01-29 00:00:00.000000000 Z
12
+ date: 2016-02-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: appraisal
@@ -282,7 +282,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
282
282
  version: '0'
283
283
  requirements: []
284
284
  rubyforge_project:
285
- rubygems_version: 2.4.8
285
+ rubygems_version: 2.2.5
286
286
  signing_key:
287
287
  specification_version: 4
288
288
  summary: Support for database views in Rails migrations