Skip to content

Commit d5d4b25

Browse files
Mykhaylo Sorochancalebhearth
authored andcommitted
Satisfy Hound (Rubocop)
1 parent c437ffc commit d5d4b25

File tree

2 files changed

+59
-43
lines changed

2 files changed

+59
-43
lines changed

lib/scenic/schema_dumper.rb

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,18 +50,19 @@ def views(stream)
5050
private
5151

5252
def dumpable_views_in_database
53-
return @ordered_dumpable_views_in_database if @ordered_dumpable_views_in_database
53+
@ordered_dumpable_views_in_database ||= begin
54+
existing_views = Scenic.database.views.reject do |view|
55+
ignored?(view.name)
56+
end
5457

55-
existing_views = Scenic.database.views.reject do |view|
56-
ignored?(view.name)
58+
tsorted_views(existing_views.map(&:name)).map do |view_name|
59+
existing_views.find { |ev| ev.name == view_name }
60+
end.compact
5761
end
58-
59-
@ordered_dumpable_views_in_database = tsorted_views(existing_views.map(&:name)).map do |view_name|
60-
existing_views.find { |ev| ev.name == view_name }
61-
end.compact
6262
end
6363

64-
# When dumping the views, their order must be topologically sorted to take into account dependencies
64+
# When dumping the views, their order must be topologically
65+
# sorted to take into account dependencies
6566
def tsorted_views(views_names)
6667
views_hash = TSortableHash.new
6768

@@ -75,7 +76,8 @@ def tsorted_views(views_names)
7576
views_names.delete(dependent)
7677
end
7778

78-
# after dependencies, there might be some views left that don't have any dependencies
79+
# after dependencies, there might be some views left
80+
# that don't have any dependencies
7981
views_names.sort.each { |v| views_hash[v] = [] }
8082

8183
views_hash.tsort

spec/scenic/schema_dumper_spec.rb

Lines changed: 48 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ class SearchInAHaystack < ActiveRecord::Base
4545

4646
it "dumps a create_view for a materialized view in the database" do
4747
view_definition = "SELECT 'needle'::text AS haystack"
48-
Search.connection.create_view :searches, materialized: true, sql_definition: view_definition
48+
Search.connection.create_view :searches,
49+
materialized: true, sql_definition: view_definition
4950

5051
expect(output).to include 'create_view "searches", materialized: true, sql_definition: <<-SQL'
5152
expect(output).to include view_definition
@@ -66,11 +67,11 @@ class SearchInAHaystack < ActiveRecord::Base
6667
stream = StringIO.new
6768

6869
ActiveRecord::SchemaDumper.dump(Search.connection, stream)
70+
6971
views = stream.string.lines.grep(/create_view/).map do |view_line|
7072
view_line.match('create_view "(?<name>.*)"')[:name]
7173
end
7274
expect(views).to eq(%w[scenic.bananas scenic.apples])
73-
7475
end
7576

7677
before(:each) do
@@ -112,12 +113,13 @@ class SearchInAHaystack < ActiveRecord::Base
112113
context "with views using unexpected characters in name" do
113114
it "dumps a create_view for a view in the database" do
114115
view_definition = "SELECT 'needle'::text AS haystack"
115-
Search.connection.create_view '"search in a haystack"', sql_definition: view_definition
116+
Search.connection.create_view '"search in a haystack"',
117+
sql_definition: view_definition
116118

117119
expect(output).to include 'create_view "\"search in a haystack\"",'
118120
expect(output).to include view_definition
119121

120-
Search.connection.drop_view :'"search in a haystack"'
122+
Search.connection.drop_view :"\"search in a haystack\""
121123

122124
silence_stream($stdout) { eval(output) } # standard:disable Security/Eval
123125

@@ -129,15 +131,15 @@ class SearchInAHaystack < ActiveRecord::Base
129131
it "dumps a create_view for a view in the database" do
130132
view_definition = "SELECT 'needle'::text AS haystack"
131133
Search.connection.execute(
132-
"CREATE SCHEMA scenic; SET search_path TO scenic, public",
134+
"CREATE SCHEMA scenic; SET search_path TO scenic, public"
133135
)
134136
Search.connection.create_view 'scenic."search in a haystack"',
135137
sql_definition: view_definition
136138

137139
expect(output).to include 'create_view "scenic.\"search in a haystack\"",'
138140
expect(output).to include view_definition
139141

140-
Search.connection.drop_view :'scenic."search in a haystack"'
142+
Search.connection.drop_view :"scenic.\"search in a haystack\""
141143

142144
silence_stream($stdout) { eval(output) } # standard:disable Security/Eval
143145

@@ -148,11 +150,11 @@ class SearchInAHaystack < ActiveRecord::Base
148150
context "with views ordered by name" do
149151
it "sorts views without dependencies" do
150152
Search.connection.create_view "cucumber_needles",
151-
sql_definition: "SELECT 'kukumbas'::text as needle"
153+
sql_definition: "SELECT 'kukumbas'::text AS needle"
152154
Search.connection.create_view "vip_needles",
153-
sql_definition: "SELECT 'vip'::text as needle"
155+
sql_definition: "SELECT 'vip'::text AS needle"
154156
Search.connection.create_view "none_needles",
155-
sql_definition: "SELECT 'none_needles'::text as needle"
157+
sql_definition: "SELECT 'none_needles'::text AS needle"
156158

157159
# Same here, no dependencies among existing views, all views are sorted
158160
sorted_views = %w[cucumber_needles vip_needles none_needles].sort
@@ -162,15 +164,15 @@ class SearchInAHaystack < ActiveRecord::Base
162164

163165
it "sorts according to dependencies" do
164166
Search.connection.create_table(:tasks) { |t| t.integer :performer_id }
165-
Search.connection.create_table(:notes) { |t|
167+
Search.connection.create_table(:notes) do |t|
166168
t.text :title
167169
t.integer :author_id
168-
}
170+
end
169171
Search.connection.create_table(:users) { |t| t.text :nickname }
170-
Search.connection.create_table(:roles) { |t|
172+
Search.connection.create_table(:roles) do |t|
171173
t.text :name
172174
t.integer :user_id
173-
}
175+
end
174176

175177
Search.connection.create_view "recent_tasks", sql_definition: <<-SQL
176178
SELECT id, performer_id FROM tasks WHERE id > 42
@@ -186,26 +188,26 @@ class SearchInAHaystack < ActiveRecord::Base
186188
Search.connection.create_view "angry_zombies", sql_definition: <<-SQL
187189
SELECT
188190
users.nickname,
189-
recent_tasks.id AS task_id,
190-
nirvana_notes.title AS talk
191+
recent_tasks.id AS task_id,
192+
nirvana_notes.title AS talk
191193
FROM users
192194
JOIN roles ON roles.user_id = users.id
193195
JOIN nirvana_notes ON nirvana_notes.author_id = roles.id
194196
JOIN recent_tasks ON recent_tasks.performer_id = roles.id
195197
SQL
196198
Search.connection.create_view "doctor_zombies", sql_definition: <<-SQL
197-
SELECT id FROM old_roles WHERE name LIKE '%Dr%'
199+
SELECT id FROM old_roles WHERE name LIKE '%dr%'
198200
SQL
199201
Search.connection.create_view "xenomorphs", sql_definition: <<-SQL
200202
SELECT id, name FROM roles WHERE name = 'xeno'
201203
SQL
202204
Search.connection.create_view "important_messages", sql_definition: <<-SQL
203-
SELECT id, title FROM notes WHERE title LIKE '%IMPORTANT%'
205+
SELECT id, title FROM notes WHERE title LIKE '%important%'
204206
SQL
205207

206-
# Converted with https://github.com/ggerganov/dot-to-ascii
208+
# converted with https://github.com/ggerganov/dot-to-ascii
207209
# digraph {
208-
# rankdir = "RL";
210+
# rankdir = "bt";
209211
# xenomorphs;
210212
# important_messages;
211213
# doctor_zombies -> old_roles;
@@ -214,21 +216,33 @@ class SearchInAHaystack < ActiveRecord::Base
214216
# angry_zombies -> recent_tasks;
215217
# }
216218
#
217-
# +--------------------+
218-
# | recent_tasks |
219-
# +--------------------+
220-
# ^
221-
# |
222-
# |
223-
# +----------------+ +-----------+ +---------------+ +--------------------+
224-
# | doctor_zombies | --> | old_roles | <-- | nirvana_notes | <-- | angry_zombies |
225-
# +----------------+ +-----------+ +---------------+ +--------------------+
226-
# +--------------------+
227-
# | important_messages |
228-
# +--------------------+
229-
# +--------------------+
230-
# | xenomorphs |
231-
# +--------------------+
219+
# +--------------------+
220+
# | doctor_zombies |
221+
# +--------------------+
222+
# |
223+
# |
224+
# v
225+
# +--------------------+
226+
# | old_roles |
227+
# +--------------------+
228+
# ^
229+
# |
230+
# |
231+
# +--------------------+
232+
# | nirvana_notes |
233+
# +--------------------+
234+
# ^
235+
# |
236+
# |
237+
# +--------------------+ +--------------+
238+
# | angry_zombies | --> | recent_tasks |
239+
# +--------------------+ +--------------+
240+
# +--------------------+
241+
# | important_messages |
242+
# +--------------------+
243+
# +--------------------+
244+
# | xenomorphs |
245+
# +--------------------+
232246
expect(views_in_output_order).to eq(%w[
233247
old_roles
234248
nirvana_notes

0 commit comments

Comments
 (0)