scenic 1.4.0 → 1.5.3

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.
Files changed (56) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +78 -0
  3. data/.gitignore +1 -0
  4. data/.hound.yml +2 -4
  5. data/.rubocop.yml +129 -0
  6. data/{NEWS.md → CHANGELOG.md} +65 -13
  7. data/CODE_OF_CONDUCT.md +76 -0
  8. data/CONTRIBUTING.md +7 -9
  9. data/Gemfile +13 -1
  10. data/LICENSE.txt +1 -1
  11. data/README.md +33 -25
  12. data/Rakefile +2 -2
  13. data/SECURITY.md +14 -0
  14. data/bin/setup +9 -4
  15. data/lib/generators/scenic/materializable.rb +9 -0
  16. data/lib/generators/scenic/model/model_generator.rb +2 -2
  17. data/lib/generators/scenic/view/USAGE +1 -0
  18. data/lib/generators/scenic/view/templates/db/migrate/create_view.erb +1 -1
  19. data/lib/generators/scenic/view/templates/db/migrate/update_view.erb +1 -1
  20. data/lib/generators/scenic/view/view_generator.rb +19 -9
  21. data/lib/scenic/adapters/postgres.rb +20 -7
  22. data/lib/scenic/adapters/postgres/refresh_dependencies.rb +21 -7
  23. data/lib/scenic/adapters/postgres/views.rb +10 -1
  24. data/lib/scenic/command_recorder.rb +2 -1
  25. data/lib/scenic/command_recorder/statement_arguments.rb +9 -1
  26. data/lib/scenic/configuration.rb +1 -1
  27. data/lib/scenic/definition.rb +1 -1
  28. data/lib/scenic/schema_dumper.rb +2 -2
  29. data/lib/scenic/statements.rb +24 -6
  30. data/lib/scenic/version.rb +1 -1
  31. data/lib/scenic/view.rb +1 -2
  32. data/scenic.gemspec +21 -23
  33. data/spec/acceptance/user_manages_views_spec.rb +2 -1
  34. data/spec/dummy/app/models/application_record.rb +5 -0
  35. data/spec/dummy/config/database.yml +5 -0
  36. data/spec/generators/scenic/model/model_generator_spec.rb +1 -1
  37. data/spec/generators/scenic/view/view_generator_spec.rb +10 -4
  38. data/spec/scenic/adapters/postgres/refresh_dependencies_spec.rb +66 -26
  39. data/spec/scenic/adapters/postgres_spec.rb +23 -3
  40. data/spec/scenic/command_recorder_spec.rb +15 -1
  41. data/spec/scenic/definition_spec.rb +7 -1
  42. data/spec/scenic/schema_dumper_spec.rb +17 -2
  43. data/spec/scenic/statements_spec.rb +48 -13
  44. data/spec/spec_helper.rb +1 -1
  45. data/spec/support/generator_spec_setup.rb +1 -1
  46. metadata +22 -41
  47. data/.travis.yml +0 -44
  48. data/Appraisals +0 -33
  49. data/bin/appraisal +0 -16
  50. data/gemfiles/rails40.gemfile +0 -8
  51. data/gemfiles/rails41.gemfile +0 -8
  52. data/gemfiles/rails42.gemfile +0 -8
  53. data/gemfiles/rails42_with_fg_rails.gemfile +0 -10
  54. data/gemfiles/rails50.gemfile +0 -8
  55. data/gemfiles/rails51.gemfile +0 -8
  56. data/gemfiles/rails_edge.gemfile +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5bf3b09e1e09c0e1256111963adf6345e7c48a95
4
- data.tar.gz: e3a945e6bb156e49837cc945c120096c9664cda9
2
+ SHA256:
3
+ metadata.gz: a5199c8d00d9c719110d712116605b4e7b55fe8094748e8532b6a61c7c36a88a
4
+ data.tar.gz: e9e5c90ed46501f15c09f3215e56a38ec7cd9e32b81008e651ec8d23d1a23916
5
5
  SHA512:
6
- metadata.gz: 64fee8693cc22dd425049c19efde6f47ca19cf42a3002dd1a3b89f511e6fd9801a1f5d040988819457551e8db54e7b4d03662af373489bad2b442e3078ddaff0
7
- data.tar.gz: bf1ca04759e648a4422289e1c2b84b13598956c5470518b354a114b802c2b8aff5788d65a34d2fefb5d5a7339ed9f06b185615efda273ba12f42902b093911df
6
+ metadata.gz: b75a5a869a500feddb5b45ec1f2b93eb9eb605c76d1326462eda78fddd888c2010f8692de141c275133553d200caef74c087c60a8b0c6e2e87b2cbdc751ef43d
7
+ data.tar.gz: 4580819daacf5bd817e1ef4a2fb127c825615286173bedb2a0ba61be19aaac5e7a963d5a6cdd9a435c09db13337a188c8c2fb4c4fa718276d3980d938ad4aa4b
@@ -0,0 +1,78 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: master
6
+ pull_request:
7
+ branches: "*"
8
+
9
+ jobs:
10
+ build:
11
+ name: Ruby ${{ matrix.ruby }}, Rails ${{ matrix.rails }}
12
+
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ ruby: ["2.7","2.4"]
17
+ rails: ["5.2", "6.0", "master"]
18
+ exclude:
19
+ - ruby: "2.4"
20
+ rails: "6.0"
21
+ - ruby: "2.4"
22
+ rails: "master"
23
+ include:
24
+ - rails: "master"
25
+ continue-on-error: true
26
+
27
+ runs-on: ubuntu-latest
28
+
29
+ services:
30
+ postgres:
31
+ image: postgres
32
+ env:
33
+ POSTGRES_USER: "postgres"
34
+ POSTGRES_PASSWORD: "postgres"
35
+ ports:
36
+ - 5432:5432
37
+ options: >-
38
+ --health-cmd pg_isready
39
+ --health-interval 10s
40
+ --health-timeout 5s
41
+ --health-retries 5
42
+
43
+ env:
44
+ RAILS_VERSION: ${{ matrix.rails }}
45
+ POSTGRES_USER: "postgres"
46
+ POSTGRES_PASSWORD: "postgres"
47
+
48
+ steps:
49
+ - name: Checkout
50
+ uses: actions/checkout@v2
51
+
52
+ - name: Install Ruby ${{ matrix.ruby }}
53
+ uses: ruby/setup-ruby@v1.14.1
54
+ with:
55
+ ruby-version: ${{ matrix.ruby }}
56
+
57
+ - name: Install dependent libraries
58
+ run: sudo apt-get install libpq-dev
59
+
60
+ - name: Generate lockfile
61
+ run: bundle lock
62
+
63
+ - name: Cache dependencies
64
+ uses: actions/cache@v1
65
+ with:
66
+ path: vendor/bundle
67
+ key: bundle-${{ hashFiles('Gemfile.lock') }}
68
+
69
+ - name: Set up Scenic
70
+ run: bin/setup
71
+
72
+ - name: Run fast tests
73
+ run: bundle exec rake spec
74
+ continue-on-error: ${{ matrix.continue-on-error }}
75
+
76
+ - name: Run acceptance tests
77
+ run: bundle exec rake spec:acceptance
78
+ continue-on-error: ${{ matrix.continue-on-error }}
data/.gitignore CHANGED
@@ -16,3 +16,4 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  gemfiles/*.lock
19
+ .DS_Store
data/.hound.yml CHANGED
@@ -1,4 +1,2 @@
1
- DotPosition:
2
- EnforcedStyle: leading
3
- Style/AlignParameters:
4
- EnforcedStyle: with_fixed_indentation
1
+ rubocop:
2
+ config_file: .rubocop.yml
@@ -0,0 +1,129 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.3.0
3
+ Exclude:
4
+ - "tmp/**/*"
5
+ - "bin/*"
6
+ - "spec/dummy/**/*"
7
+
8
+ Bundler/OrderedGems:
9
+ Enabled: false
10
+
11
+ Gemspec/OrderedDependencies:
12
+ Enabled: false
13
+
14
+ Layout/AlignParameters:
15
+ Enabled: true
16
+ EnforcedStyle: with_fixed_indentation
17
+ Layout/ConditionPosition:
18
+ Enabled: false
19
+ Layout/DotPosition:
20
+ EnforcedStyle: leading
21
+ Layout/ExtraSpacing:
22
+ Enabled: true
23
+ Layout/IndentAssignment:
24
+ Enabled: False
25
+ Layout/MultilineOperationIndentation:
26
+ Enabled: true
27
+ EnforcedStyle: indented
28
+ Layout/MultilineMethodCallIndentation:
29
+ Enabled: true
30
+ EnforcedStyle: indented
31
+
32
+ Lint/AmbiguousOperator:
33
+ Enabled: true
34
+ Lint/AmbiguousRegexpLiteral:
35
+ Enabled: true
36
+ Lint/DuplicatedKey:
37
+ Enabled: true
38
+
39
+ Metrics/ClassLength:
40
+ Enabled: false
41
+ Metrics/ModuleLength:
42
+ Enabled: false
43
+ Metrics/AbcSize:
44
+ Enabled: false
45
+ Metrics/BlockLength:
46
+ CountComments: true # count full line comments?
47
+ Max: 25
48
+ ExcludedMethods: []
49
+ Exclude:
50
+ - "spec/**/*"
51
+ - "*.gemspec"
52
+ Metrics/CyclomaticComplexity:
53
+ Enabled: false
54
+ Metrics/LineLength:
55
+ Max: 80
56
+ Metrics/MethodLength:
57
+ Enabled: false
58
+
59
+ Security/Eval:
60
+ Enabled: true
61
+ Exclude:
62
+ - "spec/scenic/schema_dumper_spec.rb"
63
+ Style/BlockDelimiters:
64
+ Enabled: false
65
+ Style/CollectionMethods:
66
+ Enabled: true
67
+ PreferredMethods:
68
+ find: find
69
+ inject: reduce
70
+ collect: map
71
+ find_all: select
72
+ Style/ConditionalAssignment:
73
+ Enabled: false
74
+ Style/ClassAndModuleChildren:
75
+ Enabled: true
76
+ Exclude:
77
+ - "spec/**/*"
78
+ Style/Documentation:
79
+ Enabled: false
80
+ Style/FrozenStringLiteralComment:
81
+ Description: >-
82
+ Add the frozen_string_literal comment to the top of files
83
+ to help transition from Ruby 2.3.0 to Ruby 3.0.
84
+ Enabled: false
85
+ Style/GuardClause:
86
+ Enabled: false
87
+ Style/IfUnlessModifier:
88
+ Enabled: false
89
+ Style/Lambda:
90
+ Enabled: false
91
+ Style/NumericLiterals:
92
+ Enabled: false
93
+ Style/OneLineConditional:
94
+ Enabled: false
95
+ Style/PercentLiteralDelimiters:
96
+ Enabled: false
97
+ Style/StringLiterals:
98
+ EnforcedStyle: double_quotes
99
+ Enabled: true
100
+ Style/TrailingCommaInArguments:
101
+ Description: 'Checks for trailing comma in argument lists.'
102
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
103
+ EnforcedStyleForMultiline: comma
104
+ SupportedStylesForMultiline:
105
+ - comma
106
+ - consistent_comma
107
+ - no_comma
108
+ Enabled: true
109
+ Style/TrailingCommaInArrayLiteral:
110
+ Description: 'Checks for trailing comma in array literals.'
111
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
112
+ EnforcedStyleForMultiline: comma
113
+ SupportedStylesForMultiline:
114
+ - comma
115
+ - consistent_comma
116
+ - no_comma
117
+ Enabled: true
118
+ Style/TrailingCommaInHashLiteral:
119
+ Description: 'Checks for trailing comma in hash literals.'
120
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas'
121
+ EnforcedStyleForMultiline: comma
122
+ SupportedStylesForMultiline:
123
+ - comma
124
+ - consistent_comma
125
+ - no_comma
126
+ Enabled: true
127
+ Style/WordArray:
128
+ Enabled: false
129
+
@@ -1,9 +1,59 @@
1
- # News
1
+ # Changelog
2
2
 
3
3
  The noteworthy changes for each Scenic version are included here. For a complete
4
- changelog, see the [CHANGELOG] for each version via the version links.
4
+ changelog, see the [commits] for each version via the version links.
5
5
 
6
- [CHANGELOG]: https://github.com/thoughtbot/scenic/commits/master
6
+ [commits]: https://github.com/scenic-views/scenic/commits/master
7
+
8
+ ## [1.5.2] - February 6, 2020
9
+
10
+ ### Fixed
11
+
12
+ - The schema statement `create_view` is now reversible when passed a `version`
13
+ argument.
14
+ - Calling `refresh_materialized_view` with both `concurrently` and `cascade` set
15
+ to `true` now correctly cascades the concurrent refresh to dependent views.
16
+ - File generation and lookup now operates correctly for schema-qualified names
17
+ like `warehouse.archived_posts`.
18
+
19
+ [1.5.2]: https://github.com/scenic-views/scenic/compare/v1.5.1...v1.5.2
20
+
21
+ ## [1.5.1] - February 10, 2019
22
+
23
+ ### Fixed
24
+
25
+ - Passing `no_data: true` when creating a materialized view would error if the
26
+ corresponding SQL file had statement-terminating semicolon.
27
+
28
+ [1.5.1]: https://github.com/scenic-views/scenic/compare/v1.5.0...v1.5.1
29
+
30
+ ## [1.5.0] - February 8, 2019
31
+
32
+ ### Added
33
+
34
+ - `create_view` can now be passed `materialized: { no_data: true }` to create
35
+ the materialized view without populating it. Generators have been updated to
36
+ accept a `--no-data` option.
37
+
38
+ ### Fixed
39
+
40
+ - Passing `cascade: true` when refreshing a materialized view will no longer
41
+ error when the view in question has no dependencies.
42
+ - Fixed runtime deprecation warnings when using `pg` 0.21 and newer.
43
+ - Fixed a cascading refresh issue when the name of the view to trigger the
44
+ refresh is a substring of one of its dependencies.
45
+
46
+
47
+ [1.5.0]: https://github.com/scenic-views/scenic/compare/v1.4.1...v1.5.0
48
+
49
+ ## [1.4.1] - December 15, 2017
50
+
51
+ ### Fixed
52
+
53
+ - View migrations created under Rails 5 and newer will use the current migration
54
+ version in the generated migration class rather than always using `5.0`.
55
+
56
+ [1.4.1]: https://github.com/scenic-views/scenic/compare/v1.4.0...v1.4.1
7
57
 
8
58
  ## [1.4.0] - May 11, 2017
9
59
 
@@ -23,6 +73,8 @@ changelog, see the [CHANGELOG] for each version via the version links.
23
73
  and newer apps.
24
74
  - Using the `scenic:model` generator will no longer create a fixture or factory.
25
75
 
76
+ [1.4.0]: https://github.com/scenic-views/scenic/compare/v1.3.0...v1.4.0
77
+
26
78
  ## [1.3.0] - May 27, 2016
27
79
 
28
80
  ### Added
@@ -37,7 +89,7 @@ changelog, see the [CHANGELOG] for each version via the version links.
37
89
  attempt to insert model code into the pluralized model file.
38
90
  * Convert shell-based smoke tests to RSpec syntax.
39
91
 
40
- [1.3.0]: https://github.com/thoughtbot/scenic/compare/v1.2.0...v1.3.0
92
+ [1.3.0]: https://github.com/scenic-views/scenic/compare/v1.2.0...v1.3.0
41
93
 
42
94
  ## [1.2.0] - February 5, 2016
43
95
 
@@ -57,7 +109,7 @@ changelog, see the [CHANGELOG] for each version via the version links.
57
109
  `db/schema.rb` file under Rails 5 beta 1 and beta 2. This is fixed on Rails
58
110
  master.
59
111
 
60
- [1.2.0]: https://github.com/thoughtbot/scenic/compare/v1.1.1...v1.2.0
112
+ [1.2.0]: https://github.com/scenic-views/scenic/compare/v1.1.1...v1.2.0
61
113
 
62
114
  ## [1.1.1] - January 29, 2016
63
115
 
@@ -66,7 +118,7 @@ master.
66
118
  closed` error. This has been fixed by ensuring we grab a fresh connection for
67
119
  all operations.
68
120
 
69
- [1.1.1]: https://github.com/thoughtbot/scenic/compare/v1.1.0...v1.1.1
121
+ [1.1.1]: https://github.com/scenic-views/scenic/compare/v1.1.0...v1.1.1
70
122
 
71
123
  ## [1.1.0] - January 8, 2016
72
124
 
@@ -86,7 +138,7 @@ master.
86
138
  - Fixed inability to dump materialized views in Rails 5.0.0.beta1.
87
139
 
88
140
  [supported versions of Postgres]: http://www.postgresql.org/support/versioning/
89
- [1.1.0]: https://github.com/thoughtbot/scenic/compare/v1.0.0...v1.1.0
141
+ [1.1.0]: https://github.com/scenic-views/scenic/compare/v1.0.0...v1.1.0
90
142
 
91
143
  ## [1.0.0] - November 23, 2015
92
144
 
@@ -101,8 +153,8 @@ master.
101
153
  - Eliminated `alias_method_chain` deprecation when running with Rails master
102
154
  (5.0).
103
155
 
104
- [materialized views]:https://github.com/thoughtbot/scenic/blob/v1.0.0/README.md
105
- [1.0.0]: https://github.com/thoughtbot/scenic/compare/v0.3.0...v1.0.0
156
+ [materialized views]:https://github.com/scenic-views/scenic/blob/v1.0.0/README.md
157
+ [1.0.0]: https://github.com/scenic-views/scenic/compare/v0.3.0...v1.0.0
106
158
 
107
159
  ## [0.3.0] - January 23, 2015
108
160
 
@@ -114,14 +166,14 @@ master.
114
166
  - We avoid dumping views that belong to Postgres extensions.
115
167
  - `db/schema.rb` is prettier thanks to a blank line after each view definition.
116
168
 
117
- [0.3.0]: https://github.com/thoughtbot/scenic/compare/v0.2.1...v0.3.0
169
+ [0.3.0]: https://github.com/scenic-views/scenic/compare/v0.2.1...v0.3.0
118
170
 
119
171
  ## [0.2.1] - January 5, 2015
120
172
 
121
173
  ### Fixed
122
174
  - View generator will now create `db/views` directory if necessary.
123
175
 
124
- [0.2.1]: https://github.com/thoughtbot/scenic/compare/v0.2.0...v0.2.1
176
+ [0.2.1]: https://github.com/scenic-views/scenic/compare/v0.2.0...v0.2.1
125
177
 
126
178
  ## [0.2.0] - August 11, 2014
127
179
 
@@ -131,7 +183,7 @@ master.
131
183
  ### Fixed
132
184
  - Raise an error if view definition is empty.
133
185
 
134
- [0.2.0]: https://github.com/thoughtbot/scenic/compare/v0.1.0...v0.2.0
186
+ [0.2.0]: https://github.com/scenic-views/scenic/compare/v0.1.0...v0.2.0
135
187
 
136
188
  ## [0.1.0] - August 4, 2014
137
189
 
@@ -144,4 +196,4 @@ definition files.
144
196
 
145
197
  In short, go add a view to your app.
146
198
 
147
- [0.1.0]: https://github.com/thoughtbot/scenic/compare/8599daa132880cd6c07efb0395c0fb023b171f47...v0.1.0
199
+ [0.1.0]: https://github.com/scenic-views/scenic/compare/8599daa132880cd6c07efb0395c0fb023b171f47...v0.1.0
@@ -0,0 +1,76 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, sex characteristics, gender identity and
9
+ expression, level of experience, education, socio-economic status, nationality,
10
+ personal appearance, race, religion, or sexual identity and orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at derekprior@gmail.com. All complaints
59
+ will be reviewed and investigated and will result in a response that is deemed
60
+ necessary and appropriate to the circumstances. The project team is obligated to
61
+ maintain confidentiality with regard to the reporter of an incident. Further
62
+ details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
71
+ version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72
+
73
+ [homepage]: https://www.contributor-covenant.org
74
+
75
+ For answers to common questions about this code of conduct, see
76
+ https://www.contributor-covenant.org/faq