rails_db_objects 0.1.1 → 1.0.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: 236a510b06b887a06f6b4ea958ed92cfb183d401
4
- data.tar.gz: 7af1e835809cf8108a8b93a743ae8cbca821cb28
3
+ metadata.gz: a34d7b5731efea0e2ae83c0e0a66f62eafbe7ab9
4
+ data.tar.gz: 6e9758078a65334f7d408ed25d3cc60bd1b8b3b9
5
5
  SHA512:
6
- metadata.gz: e8749705009d45ebd899118e3f803587f6061df240dd1508054a9e3a3cb0e00c92783de815686621962b98b03c2ab1da01ae008a602dafc15498bc9026b4c46e
7
- data.tar.gz: eb95b8974ffd4554d838252f4979ec1138654929792b500a8010f1db0fd2013459a84cc8a4b3ce059e20e1137470cfcf2e798d80406d6c218b9e995a48fc68aa
6
+ metadata.gz: 95fa51efaa72f6dffefa6600a6c02838f0739b093cd2d0b913c6f01140364498cbecaa7eb8e9783befaef0527e832b265a2f81f02571c3b3746aa5ed1c34dbfc
7
+ data.tar.gz: 9e506abd8ecc4c071100981d93d39f4ffa05f4afe39e80210a42e587c4c9a6fd39b884714d8e64d9ec77229ed70b6433e3f650ce102e0919c9eb3c74c454f5f4
data/Rakefile CHANGED
@@ -1,28 +1,28 @@
1
- begin
2
- require 'bundler/setup'
3
- rescue LoadError
4
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
- end
6
-
7
- require 'rdoc/task'
8
-
9
- RDoc::Task.new(:rdoc) do |rdoc|
10
- rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = 'RailsDbObjects'
12
- rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.rdoc')
14
- rdoc.rdoc_files.include('lib/**/*.rb')
15
- end
16
-
17
- Bundler::GemHelper.install_tasks
18
-
19
- require 'rake/testtask'
20
-
21
- Rake::TestTask.new(:test) do |t|
22
- t.libs << 'lib'
23
- t.libs << 'test'
24
- t.pattern = 'test/**/*_test.rb'
25
- t.verbose = false
26
- end
27
-
28
- task default: :test
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'RailsDbObjects'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ Bundler::GemHelper.install_tasks
18
+
19
+ require 'rake/testtask'
20
+
21
+ Rake::TestTask.new(:test) do |t|
22
+ t.libs << 'lib'
23
+ t.libs << 'test'
24
+ t.pattern = 'test/**/*_test.rb'
25
+ t.verbose = false
26
+ end
27
+
28
+ task default: :test
@@ -1,231 +1,318 @@
1
- module RailsDbObjects
2
- class DbObjectsCreator
3
- attr_reader :objects
4
-
5
- def initialize
6
- @objects = {}
7
- end
8
-
9
- def register_files(files)
10
- files.each do |file|
11
- object_name = File.basename(file, File.extname(file))
12
- object_type = File.dirname(file.to_s).to_s.split('/').last.upcase
13
-
14
- @objects[object_type] ||= {}
15
-
16
- content = File.read(file)
17
- content_lines = content.split("\n")
18
-
19
- # Reject the commented lines from the file
20
- sql_content = content_lines.reject { |x| x.strip =~ /^--/ || x.strip =~ /^#/ }.join("\n")
21
-
22
- file_obj = {
23
- path: file,
24
- sql_content: sql_content,
25
- status: :none,
26
- requires: [],
27
- silent: false,
28
- keep: false,
29
- deleted: false,
30
- dbschema: Rails.configuration.rails_db_objects[:objects_dbschema],
31
- dropsql: [],
32
- createsql: [],
33
- vanilla: false,
34
- condition: []
35
- }
36
-
37
- # Detect directives in commentary
38
- directives = extract_from_comments(content_lines)
39
-
40
- # puts "directives: #{directives.inspect}"
41
- directives.each { |directive| prepare_directive(file_obj, directive) }
42
-
43
- @objects[object_type][object_name] = file_obj
44
- end
45
- end
46
-
47
- def drop_objects
48
- reset_objects_status!
49
- @objects.keys.each do |object_type|
50
- @objects[object_type].each do |name, object|
51
- drop_object(object_type, name, object) unless object[:skip_pre]
52
- end
53
- end
54
- end
55
-
56
- def create_objects
57
- reset_objects_status!
58
- @objects.keys.each do |object_type|
59
- @objects[object_type].each do |name, object|
60
- create_object(object_type, name, object) unless object[:skip_post]
61
- end
62
- end
63
- end
64
-
65
- private
66
-
67
- def full(name)
68
- prefix = @dbschema.blank? ? '' : "#{@dbschema}."
69
- "#{prefix}#{wrap_name(name)}"
70
- end
71
-
72
- def wrap_name(name)
73
- adapter_name = ActiveRecord::Base.connection.adapter_name
74
-
75
- case adapter_name
76
- when 'PostgreSQL'
77
- "\"#{name}\""
78
- when 'MySQL'
79
- "`#{name}`"
80
- when 'SQLServer'
81
- "[#{name}]"
82
- end
83
- end
84
-
85
- def extract_from_comments(content_lines)
86
- dir_lines = content_lines.select { |x| x.strip =~ /^--/ || x.strip =~ /^#/ }.map(&:strip)
87
- dir_lines.map { |x| /^--/.match?(x) ? x[2..-1] : x[1..-1] }.select { |x| x =~ /^!/ }
88
- end
89
-
90
- def prepare_directive(file_obj, directive)
91
- file_obj[:requires] += directive.split(' ')[1..-1] if /^!require /.match?(directive)
92
- file_obj[:vanilla] = /^!vanilla/.match?(directive)
93
- file_obj[:skip_post] = /^!deleted/.match?(directive)
94
- file_obj[:silent] = /^!silent/.match?(directive)
95
- file_obj[:skip_pre] = /^!keep/.match?(directive)
96
- file_obj[:dbschema] = directive.split(' ')[1..-1] if /^!schema/.match?(directive)
97
- file_obj[:condition] << directive.split(' ')[1..-1].join(' ') if /^!condition /.match?(directive)
98
- file_obj[:dropsql] << directive.split(' ')[1..-1].join(' ') if /^!dropsql /.match?(directive)
99
- file_obj[:createsql] << directive.split(' ')[1..-1].join(' ') if /^!createsql /.match?(directive)
100
- end
101
-
102
- def reset_objects_status!
103
- @objects.keys.each do |object_type|
104
- @objects[object_type].each do |_name, object|
105
- object[:status] = :none
106
- end
107
- end
108
- end
109
-
110
- def drop_object(object_type, name, object)
111
- return if object[:status] == :loaded
112
-
113
- if object[:status] == :inprogress
114
- raise "Error: Circular file reference! (#{object_type} #{name})"
115
- end
116
-
117
- object[:requires].each do |requirement|
118
- requires = requirement.split('/', 2)
119
- required_object = requires.last
120
- required_type = requires.first.upcase if requires.length == 2
121
- required_type ||= object_type
122
- drop_object required_type, required_object, @objects[required_type.upcase][required_object]
123
- end
124
-
125
- @dbschema = (object[:dbschema] || []).clone
126
- full_name = full(name)
127
-
128
- sql = if object[:vanilla]
129
- object[:sql_content]
130
- elsif object[:dropsql].compact.empty?
131
- "DROP #{object_type} #{full_name};"
132
- else
133
- object[:dropsql].compact.join(";\n")
134
- end
135
-
136
- begin
137
- unless object[:condition].compact.empty?
138
- condition = !ActiveRecord::Base.connection.select_rows(object[:condition].join("\n")).empty?
139
- if condition
140
- puts "CONDITION MET FOR #{object_type} #{full_name}"
141
- else
142
- puts "CONDITION NOT MET FOR #{object_type} #{full_name}"
143
- return
144
- end
145
- end
146
- ActiveRecord::Base.connection.execute(sql)
147
- puts "#{sql}... OK"
148
- rescue StandardError => e
149
- unless object[:silent]
150
- puts '#' * 80
151
- puts e.message.to_s
152
- # puts "#"*80
153
- # puts "#{e.backtrace}"
154
- puts '#' * 80
155
- puts "WARNING: #{sql}... ERROR"
156
- puts '#' * 80
157
- # else
158
- # puts "WARNING: #{sql}... SILENT"
159
- end
160
- end
161
-
162
- object[:status] = :loaded
163
- end
164
-
165
- def create_object(object_type, name, object)
166
- # skip empty sql content
167
- if object[:sql_content].strip.blank?
168
- puts "#{object_type} #{name} EMPTY... SKIPPING"
169
- return
170
- end
171
-
172
- # object already loaded.
173
- return if object[:status] == :loaded
174
-
175
- raise "Error: Circular file reference! (#{object_type} #{name})" if object[:status] == :inprogress
176
-
177
- object[:status] = :inprogress
178
-
179
- create_dependencies(object, object_type)
180
-
181
- @dbschema = (object[:dbschema] || []).clone
182
- full_name = full(name)
183
-
184
- sql = if object[:vanilla]
185
- object[:sql_content]
186
- elsif object[:createsql].compact.empty?
187
- "CREATE #{object_type} #{full_name}\n#{object[:sql_content]}"
188
- else
189
- object[:createsql].compact.join("\n")
190
- end
191
-
192
- begin
193
- unless object[:condition].compact.empty?
194
- condition = ActiveRecord::Base.connection.select_rows(object[:condition].join("\n")).empty?
195
- if condition
196
- puts "CONDITION MET FOR #{object_type} #{full_name}"
197
- else
198
- puts "CONDITION NOT MET FOR #{object_type} #{full_name}"
199
- return
200
- end
201
- end
202
- ActiveRecord::Base.connection.execute(sql.to_s)
203
- puts "CREATE #{object_type} #{full_name}... OK"
204
- rescue StandardError => e
205
- unless object[:silent]
206
- puts '#' * 80
207
- puts e.message.to_s
208
- # puts "#"*80
209
- # puts "#{e.backtrace}"
210
- puts '#' * 80
211
- puts "WARNING: CREATE #{object_type} #{full_name}... ERROR"
212
- puts '#' * 80
213
- # else
214
- # puts "WARNING: CREATE #{object_type} #{full_name}... SILENT"
215
- end
216
- end
217
-
218
- object[:status] = :loaded
219
- end
220
-
221
- def create_dependencies(object, object_type)
222
- object[:requires].each do |requirement|
223
- requires = requirement.split('/', 2)
224
- required_object = requires.last
225
- required_type = requires.first.upcase if requires.length == 2
226
- required_type ||= object_type
227
- create_object required_type, required_object, @objects[required_type.upcase][required_object]
228
- end
229
- end
230
- end
231
- end
1
+ module RailsDbObjects
2
+ class DbObjectsCreator
3
+ attr_reader :objects
4
+
5
+ def initialize
6
+ @objects = {}
7
+ end
8
+
9
+ def register_files(files)
10
+ files.each do |file|
11
+ object_name = File.basename(file, File.extname(file))
12
+ object_type = File.dirname(file.to_s).to_s.split('/').last.upcase
13
+
14
+ @objects[object_type] ||= {}
15
+
16
+ content = File.read(file)
17
+ content_lines = content.split("\n")
18
+
19
+ # Reject the commented lines from the file
20
+ sql_content = content_lines.reject { |x| x.strip =~ /^--/ || x.strip =~ /^#/ }.join("\n")
21
+
22
+ file_obj = {
23
+ name: object_name,
24
+ type: object_type,
25
+ debug: false,
26
+ directives: [],
27
+ path: file,
28
+ sql_content: sql_content,
29
+ status: :none,
30
+ requires: [],
31
+ silent: false,
32
+ keep: false,
33
+ nodrop: false,
34
+ deleted: false,
35
+ nocreate: false,
36
+ dbschema: Rails.configuration.rails_db_objects[:objects_dbschema],
37
+ dropsql: [],
38
+ createsql: [],
39
+ vanilla: false,
40
+ condition: [],
41
+ dropconditionruby: [],
42
+ createconditionruby: [],
43
+ beforedropruby: [],
44
+ beforedropsql: [],
45
+ afterdropruby: [],
46
+ afterdropsql: [],
47
+ beforecreateruby: [],
48
+ beforecreatesql: [],
49
+ aftercreateruby: [],
50
+ aftercreatesql: []
51
+ }
52
+
53
+ # Detect directives in commentary
54
+ directives = extract_from_comments(content_lines)
55
+
56
+ # puts "directives: #{directives.inspect}"
57
+ directives.each { |directive| prepare_directive(file_obj, directive) }
58
+
59
+ @objects[object_type][object_name] = file_obj
60
+ end
61
+ end
62
+
63
+ def drop_objects
64
+ reset_objects_status!
65
+ @objects.keys.each do |object_type|
66
+ @objects[object_type].each do |_name, object|
67
+ drop_object(object)
68
+ end
69
+ end
70
+ end
71
+
72
+ def create_objects
73
+ reset_objects_status!
74
+ @objects.keys.each do |object_type|
75
+ @objects[object_type].each do |_name, object|
76
+ create_object(object)
77
+ end
78
+ end
79
+ end
80
+
81
+ private
82
+
83
+ def full(name)
84
+ prefix = @dbschema.blank? ? '' : "#{@dbschema}."
85
+ "#{prefix}#{wrap_name(name)}"
86
+ end
87
+
88
+ def wrap_name(name)
89
+ adapter_name = ActiveRecord::Base.connection.adapter_name
90
+
91
+ case adapter_name
92
+ when 'PostgreSQL'
93
+ "\"#{name}\""
94
+ when 'MySQL'
95
+ "`#{name}`"
96
+ when 'SQLServer'
97
+ "[#{name}]"
98
+ end
99
+ end
100
+
101
+ def extract_from_comments(content_lines)
102
+ dir_lines = content_lines.select { |x| x.strip =~ /^--/ || x.strip =~ /^#/ }.map(&:strip)
103
+ dir_lines.map { |x| /^--/.match?(x) ? x[2..-1] : x[1..-1] }.select { |x| x =~ /^!/ }
104
+ end
105
+
106
+ # rubocop:disable Metrics/AbcSize
107
+ def prepare_directive(file_obj, directive)
108
+ file_obj[:debug] = /^!debug/.match?(directive) unless file_obj[:debug]
109
+ file_obj[:directives] << directive
110
+ file_obj[:requires] += directive.split(' ')[1..-1] if /^!require /.match?(directive)
111
+ file_obj[:vanilla] = /^!vanilla/.match?(directive) unless file_obj[:vanilla]
112
+ file_obj[:nocreate] = file_obj[:deleted] = /^!deleted/.match?(directive) unless file_obj[:deleted]
113
+ file_obj[:silent] = /^!silent/.match?(directive) unless file_obj[:silent]
114
+ file_obj[:nodrop] = file_obj[:keep] = /^!keep/.match?(directive) unless file_obj[:keep]
115
+ file_obj[:dbschema] = directive.split(' ')[1..-1] if /^!schema/.match?(directive)
116
+ file_obj[:dropconditionruby] << directive.split(' ')[1..-1].join(' ') if /^!dropconditionruby /.match?(directive)
117
+ file_obj[:createconditionruby] << directive.split(' ')[1..-1].join(' ') if /^!createconditionruby /.match?(directive)
118
+ file_obj[:condition] << directive.split(' ')[1..-1].join(' ') if /^!condition /.match?(directive)
119
+ file_obj[:beforedropsql] << directive.split(' ')[1..-1].join(' ') if /^!beforedropsql /.match?(directive)
120
+ file_obj[:dropsql] << directive.split(' ')[1..-1].join(' ') if /^!dropsql /.match?(directive)
121
+ file_obj[:afterdropsql] << directive.split(' ')[1..-1].join(' ') if /^!afterdropsql /.match?(directive)
122
+ file_obj[:beforecreatesql] << directive.split(' ')[1..-1].join(' ') if /^!beforecreatesql /.match?(directive)
123
+ file_obj[:createsql] << directive.split(' ')[1..-1].join(' ') if /^!createsql /.match?(directive)
124
+ file_obj[:aftercreatesql] << directive.split(' ')[1..-1].join(' ') if /^!aftercreatesql /.match?(directive)
125
+ end
126
+ # rubocop:enable Metrics/AbcSize
127
+
128
+ def reset_objects_status!
129
+ @objects.keys.each do |object_type|
130
+ @objects[object_type].each do |_name, object|
131
+ object[:status] = :none
132
+ end
133
+ end
134
+ end
135
+
136
+ def conditional_ruby(condition, object)
137
+ interpolated_command = object.instance_eval('"' + condition.gsub(/\"/, '\"') + '"')
138
+ condition = object.instance_eval(interpolated_command)
139
+ if object[:debug]
140
+ puts '=' * 80
141
+ puts "interpolated_command: #{interpolated_command}"
142
+ puts '=' * 80
143
+ puts "condition: #{condition.inspect}"
144
+ puts '=' * 80
145
+ end
146
+ condition ? true : false
147
+ end
148
+
149
+ def interpolate_sql(sql, object)
150
+ object.instance_eval('"' + sql.gsub(/\"/, '\"') + '"')
151
+ end
152
+
153
+ # rubocop:disable Metrics/AbcSize
154
+ def drop_object(object)
155
+ return if object[:nodrop]
156
+
157
+ return if object[:status] == :loaded
158
+
159
+ object_type = object[:type]
160
+ name = object[:name]
161
+ @dbschema = (object[:dbschema] || []).clone
162
+
163
+ raise "Error: Circular file reference! (#{object_type} #{name})" if object[:status] == :inprogress
164
+
165
+ full_name = full(name)
166
+
167
+ if object[:dropconditionruby].compact.any?
168
+ condition = conditional_ruby(object[:dropconditionruby].join("\n"), object)
169
+ if condition
170
+ puts "RUBY CONDITION MET FOR #{object_type} #{full_name} #{condition}"
171
+ else
172
+ puts "RUBY CONDITION NOT MET FOR #{object_type} #{full_name} #{condition}"
173
+ return
174
+ end
175
+ elsif object[:condition].compact.any?
176
+ condition = !ActiveRecord::Base.connection.select_rows(object[:condition].join("\n")).empty?
177
+ if condition
178
+ puts "SQL CONDITION MET FOR #{object_type} #{full_name}"
179
+ else
180
+ puts "SQL CONDITION NOT MET FOR #{object_type} #{full_name}"
181
+ return
182
+ end
183
+ end
184
+
185
+ if object[:debug]
186
+ puts '=' * 80
187
+ puts "DROP OBJECT #{name} / #{object[:path]}"
188
+ puts '=' * 80
189
+ puts object.to_json
190
+ puts '=' * 80
191
+ end
192
+
193
+ object[:requires].each do |requirement|
194
+ requires = requirement.split('/', 2)
195
+ required_object = requires.last
196
+ required_type = requires.first.upcase if requires.length == 2
197
+ required_type ||= object_type
198
+ drop_object @objects[required_type.upcase][required_object]
199
+ end
200
+
201
+ sql = if object[:dropsql].compact.empty? && !object[:vanilla]
202
+ "DROP #{object_type} #{full_name};"
203
+ else
204
+ interpolate_sql(object[:dropsql].compact.join(";\n"), object)
205
+ end
206
+
207
+ begin
208
+ conditional_ruby(object[:beforedropruby].join("\n"), object) unless object[:beforedropruby].empty?
209
+ ActiveRecord::Base.connection.execute(object[:beforedropsql].join("\n")) unless object[:beforedropsql].empty?
210
+ ActiveRecord::Base.connection.execute(sql)
211
+ ActiveRecord::Base.connection.execute(object[:afterdropsql].join("\n")) unless object[:afterdropsql].empty?
212
+ puts "DROP #{object_type} #{full_name}... OK"
213
+ conditional_ruby(object[:afterdropruby].join("\n"), object) unless object[:afterdropruby].empty?
214
+ rescue StandardError => e
215
+ unless object[:debug]
216
+ puts '#' * 80
217
+ puts e.message.to_s
218
+ # puts "#"*80
219
+ # puts "#{e.backtrace}"
220
+ puts '#' * 80
221
+ puts "WARNING: #{sql}... ERROR"
222
+ puts '#' * 80
223
+ end
224
+ end
225
+
226
+ object[:status] = :loaded
227
+ end
228
+
229
+ def create_object(object)
230
+ return if object[:nocreate]
231
+
232
+ return if object[:status] == :loaded
233
+
234
+ object_type = object[:type]
235
+ name = object[:name]
236
+
237
+ raise "Error: Circular file reference! (#{object_type} #{name})" if object[:status] == :inprogress
238
+
239
+ object[:status] = :inprogress
240
+ @dbschema = (object[:dbschema] || []).clone
241
+
242
+ full_name = full(name)
243
+
244
+ if object[:createconditionruby].compact.any?
245
+ condition = conditional_ruby(object[:createconditionruby].join("\n"), object)
246
+ if condition
247
+ puts "RUBY CONDITION MET FOR #{object_type} #{full_name} / #{condition}"
248
+ else
249
+ puts "RUBY CONDITION NOT MET FOR #{object_type} #{full_name}"
250
+ return
251
+ end
252
+ elsif object[:condition].compact.any?
253
+ condition = ActiveRecord::Base.connection.select_rows(object[:condition].join("\n")).empty?
254
+ if condition
255
+ puts "CONDITION MET FOR #{object_type} #{full_name}"
256
+ else
257
+ puts "CONDITION NOT MET FOR #{object_type} #{full_name}"
258
+ return
259
+ end
260
+ end
261
+
262
+ if object[:debug]
263
+ puts '=' * 80
264
+ puts "CREATE OBJECT #{name} / #{object[:path]}"
265
+ puts '=' * 80
266
+ puts object.to_json
267
+ puts '=' * 80
268
+ end
269
+ # skip empty sql content
270
+ if object[:sql_content].strip.blank?
271
+ puts "#{object_type} #{name} EMPTY... SKIPPING"
272
+ return
273
+ end
274
+
275
+ create_dependencies(object, object_type)
276
+
277
+ sql = if object[:vanilla]
278
+ interpolate_sql(object[:sql_content], object)
279
+ elsif object[:createsql].compact.empty?
280
+ "CREATE #{object_type} #{full_name}\n#{object[:sql_content]}"
281
+ else
282
+ interpolate_sql(object[:createsql].compact.join(";\n"), object)
283
+ end
284
+
285
+ begin
286
+ conditional_ruby(object[:beforecreateruby].join("\n"), object) unless object[:beforecreateruby].empty?
287
+ ActiveRecord::Base.connection.execute(object[:beforecreatesql].join("\n")) unless object[:beforecreatesql].empty?
288
+ ActiveRecord::Base.connection.execute(sql.to_s)
289
+ ActiveRecord::Base.connection.execute(object[:aftercreatesql].join("\n")) unless object[:aftercreatesql].empty?
290
+ conditional_ruby(object[:aftercreateruby].join("\n"), object) unless object[:aftercreateruby].empty?
291
+ puts "CREATE #{object_type} #{full_name}... OK"
292
+ rescue StandardError => e
293
+ unless object[:silent]
294
+ puts '#' * 80
295
+ puts e.message.to_s
296
+ # puts '#' * 80
297
+ # puts "#{e.backtrace}"
298
+ puts '#' * 80
299
+ puts "WARNING: CREATE #{object_type} #{full_name}... ERROR"
300
+ puts '#' * 80
301
+ end
302
+ end
303
+
304
+ object[:status] = :loaded
305
+ end
306
+ # rubocop:enable Metrics/AbcSize
307
+
308
+ def create_dependencies(object, object_type)
309
+ object[:requires].each do |requirement|
310
+ requires = requirement.split('/', 2)
311
+ required_object = requires.last
312
+ required_type = requires.first.upcase if requires.length == 2
313
+ required_type ||= object_type
314
+ create_object(@objects[required_type.upcase][required_object])
315
+ end
316
+ end
317
+ end
318
+ end
@@ -1,15 +1,15 @@
1
- class Railtie < Rails::Railtie
2
- railtie_name :rails_db_objects
3
-
4
- config.rails_db_objects = ActiveSupport::OrderedHash.new
5
-
6
- initializer 'rails_db_objects.initialize' do |app|
7
- app.config.rails_db_objects[:objects_path] = %w[db/objects/**/]
8
- app.config.rails_db_objects[:objects_ext] = '*.sql'
9
- app.config.rails_db_objects[:objects_dbschema] = ['dbo']
10
- end
11
-
12
- rake_tasks do
13
- load 'tasks/rails_db_objects_tasks.rake'
14
- end
15
- end
1
+ class Railtie < Rails::Railtie
2
+ railtie_name :rails_db_objects
3
+
4
+ config.rails_db_objects = ActiveSupport::OrderedHash.new
5
+
6
+ initializer 'rails_db_objects.initialize' do |app|
7
+ app.config.rails_db_objects[:objects_path] = %w[db/objects/**/]
8
+ app.config.rails_db_objects[:objects_ext] = '*.sql'
9
+ app.config.rails_db_objects[:objects_dbschema] = ['dbo']
10
+ end
11
+
12
+ rake_tasks do
13
+ load 'tasks/rails_db_objects_tasks.rake'
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
- module RailsDbObjects
2
- VERSION = '0.1.1'.freeze
3
- end
1
+ module RailsDbObjects
2
+ VERSION = '1.0.0'.freeze
3
+ end
@@ -1,45 +1,45 @@
1
- namespace :db do
2
- desc 'Generate all the database objects of the current project'
3
- task create_objects: :environment do
4
- creator = RailsDbObjects::DbObjectsCreator.new
5
-
6
- objects_path = Rails.configuration.rails_db_objects[:objects_path]
7
- objects_ext = Rails.configuration.rails_db_objects[:objects_ext]
8
-
9
- objects_path.each do |path|
10
- creator.register_files(Dir[File.join(path, objects_ext)].map { |x| File.expand_path(x) })
11
- end
12
-
13
- creator.create_objects
14
- end
15
-
16
- desc 'Drop all the database objects of the current project'
17
- task drop_objects: :environment do
18
- creator = RailsDbObjects::DbObjectsCreator.new
19
-
20
- objects_path = Rails.configuration.rails_db_objects[:objects_path]
21
- objects_ext = Rails.configuration.rails_db_objects[:objects_ext]
22
-
23
- objects_path.each do |path|
24
- creator.register_files(Dir[File.join(path, objects_ext)].map { |x| File.expand_path(x) })
25
- end
26
-
27
- creator.drop_objects
28
- end
29
- end
30
-
31
- require 'rake/hooks'
32
-
33
- before 'db:migrate' do
34
- Rake::Task['db:drop_objects'].invoke
35
- end
36
- before 'db:rollback' do
37
- Rake::Task['db:drop_objects'].invoke
38
- end
39
-
40
- after 'db:migrate' do
41
- Rake::Task['db:create_objects'].invoke
42
- end
43
- after 'db:rollback' do
44
- Rake::Task['db:create_objects'].invoke
45
- end
1
+ namespace :db do
2
+ desc 'Generate all the database objects of the current project'
3
+ task create_objects: :environment do
4
+ creator = RailsDbObjects::DbObjectsCreator.new
5
+
6
+ objects_path = Rails.configuration.rails_db_objects[:objects_path]
7
+ objects_ext = Rails.configuration.rails_db_objects[:objects_ext]
8
+
9
+ objects_path.each do |path|
10
+ creator.register_files(Dir[File.join(path, objects_ext)].map { |x| File.expand_path(x) })
11
+ end
12
+
13
+ creator.create_objects
14
+ end
15
+
16
+ desc 'Drop all the database objects of the current project'
17
+ task drop_objects: :environment do
18
+ creator = RailsDbObjects::DbObjectsCreator.new
19
+
20
+ objects_path = Rails.configuration.rails_db_objects[:objects_path]
21
+ objects_ext = Rails.configuration.rails_db_objects[:objects_ext]
22
+
23
+ objects_path.each do |path|
24
+ creator.register_files(Dir[File.join(path, objects_ext)].map { |x| File.expand_path(x) })
25
+ end
26
+
27
+ creator.drop_objects
28
+ end
29
+ end
30
+
31
+ require 'rake/hooks'
32
+
33
+ before 'db:migrate' do
34
+ Rake::Task['db:drop_objects'].invoke
35
+ end
36
+ before 'db:rollback' do
37
+ Rake::Task['db:drop_objects'].invoke
38
+ end
39
+
40
+ after 'db:migrate' do
41
+ Rake::Task['db:create_objects'].invoke
42
+ end
43
+ after 'db:rollback' do
44
+ Rake::Task['db:create_objects'].invoke
45
+ end
data/test/dummy/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- # Add your own tasks in files placed in lib/tasks ending in .rake,
2
- # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
-
4
- require File.expand_path('config/application', __dir__)
5
-
6
- Rails.application.load_tasks
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('config/application', __dir__)
5
+
6
+ Rails.application.load_tasks
@@ -1,3 +1,3 @@
1
- #!/usr/bin/env ruby.exe
2
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
3
- load Gem.bin_path('bundler', 'bundle')
1
+ #!/usr/bin/env ruby.exe
2
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
3
+ load Gem.bin_path('bundler', 'bundle')
data/test/dummy/bin/rails CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby.exe
2
- APP_PATH = File.expand_path('../config/application', __dir__)
3
- require_relative '../config/boot'
4
- require 'rails/commands'
1
+ #!/usr/bin/env ruby.exe
2
+ APP_PATH = File.expand_path('../config/application', __dir__)
3
+ require_relative '../config/boot'
4
+ require 'rails/commands'
data/test/dummy/bin/rake CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby.exe
2
- require_relative '../config/boot'
3
- require 'rake'
4
- Rake.application.run
1
+ #!/usr/bin/env ruby.exe
2
+ require_relative '../config/boot'
3
+ require 'rake'
4
+ Rake.application.run
data/test/dummy/bin/setup CHANGED
@@ -1,29 +1,29 @@
1
- #!/usr/bin/env ruby.exe
2
- require 'pathname'
3
-
4
- # path to your application root.
5
- APP_ROOT = Pathname.new File.expand_path('..', __dir__)
6
-
7
- Dir.chdir APP_ROOT do
8
- # This script is a starting point to setup your application.
9
- # Add necessary setup steps to this file:
10
-
11
- puts '== Installing dependencies =='
12
- system 'gem install bundler --conservative'
13
- system 'bundle check || bundle install'
14
-
15
- # puts "\n== Copying sample files =="
16
- # unless File.exist?("config/database.yml")
17
- # system "cp config/database.yml.sample config/database.yml"
18
- # end
19
-
20
- puts "\n== Preparing database =="
21
- system 'bin/rake db:setup'
22
-
23
- puts "\n== Removing old logs and tempfiles =="
24
- system 'rm -f log/*'
25
- system 'rm -rf tmp/cache'
26
-
27
- puts "\n== Restarting application server =="
28
- system 'touch tmp/restart.txt'
29
- end
1
+ #!/usr/bin/env ruby.exe
2
+ require 'pathname'
3
+
4
+ # path to your application root.
5
+ APP_ROOT = Pathname.new File.expand_path('..', __dir__)
6
+
7
+ Dir.chdir APP_ROOT do
8
+ # This script is a starting point to setup your application.
9
+ # Add necessary setup steps to this file:
10
+
11
+ puts '== Installing dependencies =='
12
+ system 'gem install bundler --conservative'
13
+ system 'bundle check || bundle install'
14
+
15
+ # puts "\n== Copying sample files =="
16
+ # unless File.exist?("config/database.yml")
17
+ # system "cp config/database.yml.sample config/database.yml"
18
+ # end
19
+
20
+ puts "\n== Preparing database =="
21
+ system 'bin/rake db:setup'
22
+
23
+ puts "\n== Removing old logs and tempfiles =="
24
+ system 'rm -f log/*'
25
+ system 'rm -rf tmp/cache'
26
+
27
+ puts "\n== Restarting application server =="
28
+ system 'touch tmp/restart.txt'
29
+ end
@@ -1,25 +1,25 @@
1
- require File.expand_path('boot', __dir__)
2
-
3
- require 'rails/all'
4
-
5
- Bundler.require(*Rails.groups)
6
- require 'rails_db_objects'
7
-
8
- module Dummy
9
- class Application < Rails::Application
10
- # Settings in config/environments/* take precedence over those specified here.
11
- # Application configuration should go into files in config/initializers
12
- # -- all .rb files in that directory are automatically loaded.
13
-
14
- # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
15
- # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
16
- # config.time_zone = 'Central Time (US & Canada)'
17
-
18
- # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
19
- # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
20
- # config.i18n.default_locale = :de
21
-
22
- # Do not swallow errors in after_commit/after_rollback callbacks.
23
- config.active_record.raise_in_transactional_callbacks = true
24
- end
25
- end
1
+ require File.expand_path('boot', __dir__)
2
+
3
+ require 'rails/all'
4
+
5
+ Bundler.require(*Rails.groups)
6
+ require 'rails_db_objects'
7
+
8
+ module Dummy
9
+ class Application < Rails::Application
10
+ # Settings in config/environments/* take precedence over those specified here.
11
+ # Application configuration should go into files in config/initializers
12
+ # -- all .rb files in that directory are automatically loaded.
13
+
14
+ # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
15
+ # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
16
+ # config.time_zone = 'Central Time (US & Canada)'
17
+
18
+ # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
19
+ # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
20
+ # config.i18n.default_locale = :de
21
+
22
+ # Do not swallow errors in after_commit/after_rollback callbacks.
23
+ config.active_record.raise_in_transactional_callbacks = true
24
+ end
25
+ end
@@ -1,5 +1,5 @@
1
- # Set up gems listed in the Gemfile.
2
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../Gemfile', __dir__)
3
-
4
- require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
5
- $LOAD_PATH.unshift File.expand_path('../../../lib', __dir__)
1
+ # Set up gems listed in the Gemfile.
2
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../Gemfile', __dir__)
3
+
4
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
5
+ $LOAD_PATH.unshift File.expand_path('../../../lib', __dir__)
@@ -1,5 +1,5 @@
1
- # Load the Rails application.
2
- require File.expand_path('application', __dir__)
3
-
4
- # Initialize the Rails application.
5
- Rails.application.initialize!
1
+ # Load the Rails application.
2
+ require File.expand_path('application', __dir__)
3
+
4
+ # Initialize the Rails application.
5
+ Rails.application.initialize!
@@ -1,7 +1,7 @@
1
- require 'test_helper'
2
-
3
- class RailsDbObjectsTest < ActiveSupport::TestCase
4
- test 'truth' do
5
- assert_kind_of Module, RailsDbObjects
6
- end
7
- end
1
+ require 'test_helper'
2
+
3
+ class RailsDbObjectsTest < ActiveSupport::TestCase
4
+ test 'truth' do
5
+ assert_kind_of Module, RailsDbObjects
6
+ end
7
+ end
data/test/test_helper.rb CHANGED
@@ -1,20 +1,20 @@
1
- # Configure Rails Environment
2
- ENV['RAILS_ENV'] = 'test'
3
-
4
- require File.expand_path('../test/dummy/config/environment.rb', __dir__)
5
- ActiveRecord::Migrator.migrations_paths = [File.expand_path('../test/dummy/db/migrate', __dir__)]
6
- require 'rails/test_help'
7
-
8
- # Filter out Minitest backtrace while allowing backtrace from other libraries
9
- # to be shown.
10
- Minitest.backtrace_filter = Minitest::BacktraceFilter.new
11
-
12
- # Load support files
13
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
14
-
15
- # Load fixtures from the engine
16
- if ActiveSupport::TestCase.respond_to?(:fixture_path=)
17
- ActiveSupport::TestCase.fixture_path = File.expand_path('fixtures', __dir__)
18
- ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
19
- ActiveSupport::TestCase.fixtures :all
20
- end
1
+ # Configure Rails Environment
2
+ ENV['RAILS_ENV'] = 'test'
3
+
4
+ require File.expand_path('../test/dummy/config/environment.rb', __dir__)
5
+ ActiveRecord::Migrator.migrations_paths = [File.expand_path('../test/dummy/db/migrate', __dir__)]
6
+ require 'rails/test_help'
7
+
8
+ # Filter out Minitest backtrace while allowing backtrace from other libraries
9
+ # to be shown.
10
+ Minitest.backtrace_filter = Minitest::BacktraceFilter.new
11
+
12
+ # Load support files
13
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
14
+
15
+ # Load fixtures from the engine
16
+ if ActiveSupport::TestCase.respond_to?(:fixture_path=)
17
+ ActiveSupport::TestCase.fixture_path = File.expand_path('fixtures', __dir__)
18
+ ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
19
+ ActiveSupport::TestCase.fixtures :all
20
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_db_objects
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-18 00:00:00.000000000 Z
11
+ date: 2019-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-hooks