scenic 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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