dp_publico 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile ADDED
@@ -0,0 +1,14 @@
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', __FILE__)
5
+ require 'rake'
6
+
7
+ AdministracaoAcademica::Application.load_tasks
8
+
9
+ desc "Run RSpec 2"
10
+ RSpec::Core::RakeTask.new do |t|
11
+ t.name = :spec_2
12
+ t.verbose = false
13
+ t.skip_bundler = true
14
+ end
@@ -0,0 +1,8 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "dp_publico"
3
+ s.version = "0.0.1"
4
+ s.description = "Webservice da base DP"
5
+ s.summary = "DP Publico"
6
+ s.author = "Tatiana Barboza"
7
+ s.files = Dir["{lib/**/*.rb,README.rdoc,test/**/*.rb,Rakefile,*.gemspec}"]
8
+ end
@@ -0,0 +1,2 @@
1
+ class Historico < ActiveRecord::Base
2
+ end
@@ -0,0 +1,10 @@
1
+ module Arel
2
+ class Table
3
+ def table_exists?
4
+ # If we're checking the other database, assume the table always exists.
5
+ return @table_exists = true if name.to_s.include?(".")
6
+ # Otherwise, use the stock Arel 2.0.9 method...
7
+ @table_exists ||= tables.key?(@name) || engine.connection.table_exists?(name)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ if Rails.env.development? || Rails.env.test?
2
+ require 'database_cleaner'
3
+ require 'database_cleaner/base'
4
+ require 'database_cleaner/active_record/base'
5
+ require 'database_cleaner/active_record/truncation'
6
+ module DatabaseCleaner::ActiveRecord
7
+ class Truncation
8
+ private
9
+ def tables_to_truncate(connection)
10
+ (@only || connection.tables) - @tables_to_exclude - connection.views + IduffPublico.added_cucumber_truncation_tables
11
+ end
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,26 @@
1
+ require 'rake'
2
+
3
+ module IduffPublico::RakeUtils
4
+
5
+ # We want to provide a way to alias tasks so we can hook our custom logic
6
+ # into the existing rails framework. For more information and usage, see:
7
+ # http://www.metaskills.net/2010/5/26/the-alias_method_chain-of-rake-override-rake-task
8
+ Rake::TaskManager.class_eval do
9
+ def alias_task(fq_name)
10
+ new_name = "#{fq_name}:original"
11
+ @tasks[new_name] = @tasks.delete(fq_name)
12
+ end
13
+ end
14
+
15
+ def self.alias_task(fq_name)
16
+ Rake.application.alias_task(fq_name)
17
+ end
18
+
19
+ def self.override_task(*args, &block)
20
+ name, params, deps = Rake.application.resolve_args(args.dup)
21
+ fq_name = Rake.application.instance_variable_get(:@scope).dup.push(name).join(':')
22
+ self.alias_task(fq_name)
23
+ Rake::Task.define_task(*args, &block)
24
+ end
25
+
26
+ end
@@ -0,0 +1,253 @@
1
+ # Baseado em https://github.com/karledurante/secondbase/blob/master/lib/secondbase/tasks.rb
2
+ require "dp_publico/rake_utils.rb"
3
+
4
+ namespace :db do
5
+ DpPublico::RakeUtils.override_task :create do
6
+ DpPublico.tasks_up
7
+ Rake::Task["db:create:original"].invoke
8
+ DpPublico.tasks_down
9
+ Rake::Task["db:create:publico"].invoke if DpPublico.tasks_allowed?
10
+ end
11
+
12
+ DpPublico::RakeUtils.override_task :migrate do
13
+ DpPublico.tasks_up
14
+ Rake::Task["db:migrate:original"].invoke
15
+ DpPublico.tasks_down
16
+ Rake::Task["db:migrate:publico"].invoke if DpPublico.tasks_allowed?
17
+ end
18
+
19
+ DpPublico::RakeUtils.override_task :abort_if_pending_migrations do
20
+ DpPublico.tasks_up
21
+ Rake::Task["db:abort_if_pending_migrations:original"].invoke
22
+ DpPublico.tasks_down
23
+ Rake::Task["db:abort_if_pending_migrations:publico"].invoke if DpPublico.tasks_allowed?
24
+ end
25
+
26
+ namespace :test do
27
+ DpPublico::RakeUtils.override_task :prepare do
28
+ DpPublico.tasks_up
29
+ Rake::Task["db:test:prepare:original"].invoke
30
+ DpPublico.tasks_down
31
+ Rake::Task["db:test:prepare:publico"].invoke if DpPublico.tasks_allowed?
32
+ end
33
+ DpPublico::RakeUtils.override_task :load do
34
+ DpPublico.tasks_up
35
+ Rake::Task["db:test:load:original"].invoke
36
+ DpPublico.tasks_down
37
+ Rake::Task["db:test:load:publico"].invoke if DpPublico.tasks_allowed?
38
+ end
39
+ end
40
+
41
+ namespace :structure do
42
+ DpPublico::RakeUtils.override_task :dump do
43
+ DpPublico.tasks_up
44
+ Rake::Task["db:structure:dump:original"].invoke
45
+ DpPublico.tasks_down
46
+ Rake::Task["db:structure:dump:publico"].invoke if DpPublico.tasks_allowed?
47
+ end
48
+ end
49
+
50
+ namespace :schema do
51
+ DpPublico::RakeUtils.override_task :dump do
52
+ DpPublico.tasks_up
53
+ Rake::Task["db:schema:dump:original"].invoke
54
+ DpPublico.tasks_down
55
+ Rake::Task["db:schema:dump:publico"].invoke if DpPublico.tasks_allowed?
56
+ end
57
+
58
+ DpPublico::RakeUtils.override_task :load do
59
+ DpPublico.tasks_up
60
+ Rake::Task["db:schema:load:original"].invoke
61
+ DpPublico.tasks_down
62
+ Rake::Task["db:schema:load:publico"].invoke if DpPublico.tasks_allowed?
63
+ end
64
+ end
65
+
66
+ ##################################
67
+ # Tarefas específicas do publico
68
+ #
69
+ namespace :abort_if_pending_migrations do
70
+ task :publico => :environment do
71
+ if DpPublico.tasks_allowed?
72
+ DpPublico::publico_connect(Rails.env)
73
+
74
+ pending_migrations = ActiveRecord::Migrator.new(:up, DpPublico::MIGRATION_PATH).pending_migrations
75
+
76
+ # if pending_migrations.any?
77
+ # puts "Você tem #{pending_migrations.size} migrações pendentes no banco de dados publico:"
78
+ # pending_migrations.each do |pending_migration|
79
+ # puts ' %4d %s' % [pending_migration.version, pending_migration.name]
80
+ # end
81
+ # abort %{Execute "rake db:migrate" para atualizar o banco de dados e então tente novamente.}
82
+ # end
83
+ DpPublico::application_connect(Rails.env)
84
+ end
85
+ end
86
+ end
87
+
88
+ namespace :migrate do
89
+ # desc "Migra o banco de dados publico"
90
+ task :publico => [:environment, :load_config] do
91
+ if DpPublico.tasks_allowed?
92
+ DpPublico::publico_connect(Rails.env)
93
+
94
+ ActiveRecord::Migration.verbose = true
95
+ ActiveRecord::Migrator.migrate(DpPublico::MIGRATION_PATH, ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
96
+ Rake::Task["db:schema:dump:publico"].invoke if ActiveRecord::Base.schema_format == :ruby
97
+ DpPublico::application_connect(Rails.env)
98
+ end
99
+ end
100
+
101
+ namespace :up do
102
+ # desc 'Roda a tarefa "up" para uma determinada VERSION do publico.'
103
+ task :publico => :environment do
104
+ if DpPublico.tasks_allowed?
105
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
106
+ raise "VERSION é necessario" unless version
107
+
108
+ DpPublico::publico_connect(Rails.env)
109
+
110
+ ActiveRecord::Migrator.run(:up, DpPublico::MIGRATION_PATH, version)
111
+ Rake::Task["db:schema:dump:publico"].invoke if ActiveRecord::Base.schema_format == :ruby
112
+ DpPublico::application_connect(Rails.env)
113
+ end
114
+ end
115
+ end
116
+
117
+ namespace :down do
118
+ # desc 'Roda a tarefa "down" para uma determinada VERSION do publico.'
119
+ task :publico => :environment do
120
+ if DpPublico.tasks_allowed?
121
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
122
+ raise "VERSION necessario" unless version
123
+
124
+ DpPublico::publico_connect(Rails.env)
125
+
126
+ ActiveRecord::Migrator.run(:down, DpPublico::MIGRATION_PATH, version)
127
+ Rake::Task["db:schema:dump:publico"].invoke if ActiveRecord::Base.schema_format == :ruby
128
+ DpPublico::application_connect(Rails.env)
129
+ end
130
+ end
131
+ end
132
+ end
133
+
134
+ namespace :create do
135
+ # desc 'Cria o banco de dados especificado no config/database.yml para o RAILS_ENV atual'
136
+ task :publico => :load_config do
137
+ if DpPublico.tasks_allowed?
138
+ if Rails.env.development? && DpPublico.publico_config('test')
139
+ create_database(DpPublico.publico_config('test'))
140
+ end
141
+ create_database(DpPublico.publico_config(Rails.env))
142
+ end
143
+ end
144
+ end
145
+
146
+ namespace :structure do
147
+ namespace :dump do
148
+ # desc "Faz dump da estrutura do database publico."
149
+ task :publico => :environment do
150
+ dump_file = "#{Rails.root}/db/publico_#{Rails.env}_structure.sql"
151
+
152
+ DpPublico::publico_connect(Rails.env)
153
+
154
+ File.open(dump_file, "w+") do |f|
155
+ f << ActiveRecord::Base.connection.structure_dump
156
+ end
157
+
158
+ if ActiveRecord::Base.connection.supports_migrations?
159
+ File.open(dump_file, "a") { |f| f << ActiveRecord::Base.connection.dump_schema_information }
160
+ end
161
+ DpPublico::application_connect(Rails.env)
162
+ end
163
+ end
164
+ end
165
+
166
+ namespace :test do
167
+ namespace :prepare do
168
+ #desc 'Prepara o ambiente de testes do banco publico'
169
+ task :publico => 'db:abort_if_pending_migrations:publico' do
170
+ Rails.env = "test"
171
+ DpPublico::publico_connect("test")
172
+ Rake::Task["db:test:clone_structure:publico"].invoke
173
+ #Rake::Task["db:test:load:publico"].invoke
174
+ DpPublico::application_connect('test')
175
+ end
176
+ end
177
+
178
+ namespace :load do
179
+ #desc 'Prepara o ambiente de testes do banco publico'
180
+ task :publico => 'db:abort_if_pending_migrations:publico' do
181
+ Rails.env = "test"
182
+ DpPublico::publico_connect("test")
183
+ ActiveRecord::Schema.verbose = false
184
+ Rake::Task["db:schema:load:publico"].invoke
185
+ DpPublico::application_connect('test')
186
+ end
187
+ end
188
+
189
+ namespace :purge do
190
+ task :publico do
191
+ Rails.env = "test"
192
+ conn = DpPublico.publico_config('test')
193
+ case conn['adapter']
194
+ when /mysql/
195
+ ActiveRecord::Base.connection.recreate_database(conn["database"], conn)
196
+ else
197
+ raise "Task not supported by '#{conn['test']['adapter']}'"
198
+ end
199
+ DpPublico::application_connect('test')
200
+ end
201
+ end
202
+
203
+ namespace :clone_structure do
204
+ task :publico => ['db:structure:dump:publico', 'db:test:purge:publico'] do
205
+ Rails.env = "test"
206
+ if DpPublico.publico_config("test")['adapter'][/mysql/]
207
+
208
+ DpPublico::publico_connect("test")
209
+
210
+ ActiveRecord::Base.connection.execute('SET foreign_key_checks = 0')
211
+
212
+ IO.readlines("#{Rails.root}/db/publico_#{Rails.env}_structure.sql").join.split("\n\n").each do |table|
213
+ ActiveRecord::Base.connection.execute(table)
214
+ end
215
+ else
216
+ raise "Esta tarefa ainda não foi implementada para o adaptador '#{DpPublico.publico_config("test")['adapter']}'"
217
+ end
218
+ DpPublico::application_connect('test')
219
+ end
220
+ end
221
+ end
222
+
223
+ namespace :schema do
224
+ namespace :dump do
225
+ # desc 'Cria o arquivo db/schema_publico.rb que pode ser portado usando qualquer banco de dados suportado pelo AR'
226
+ task :publico => :load_config do
227
+ require 'active_record/schema_dumper'
228
+
229
+ DpPublico::publico_connect(Rails.env)
230
+
231
+ File.open(ENV['SCHEMA'] || "#{Rails.root}/db/schema_publico.rb", "w:utf-8") do |file|
232
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
233
+ end
234
+ Rake::Task["db:schema:dump:publico"].reenable
235
+ DpPublico::application_connect(Rails.env)
236
+ end
237
+ end
238
+
239
+ namespace :load do
240
+ # desc 'Carrega um arquivo schema_publico.rb para o banco de dados publico'
241
+ task :publico do
242
+ file = ENV['SCHEMA'] || "#{Rails.root}/db/schema_publico.rb"
243
+ if File.exists?(file)
244
+ DpPublico::publico_connect(Rails.env)
245
+ load(file)
246
+ else
247
+ abort %{#{file} não existe ainda. Execute "rake db:migrate" para cria-lo.}
248
+ end
249
+ DpPublico::application_connect(Rails.env)
250
+ end
251
+ end
252
+ end
253
+ end
@@ -0,0 +1,3 @@
1
+ module DpPublico
2
+ VERSION = "0.0.1"
3
+ end
data/lib/dp_publico.rb ADDED
@@ -0,0 +1,91 @@
1
+ require 'active_record'
2
+ #require 'ruby-debug'
3
+ require 'dp_publico/arel_patch'
4
+ require 'dp_publico/database_cleaner_patch'
5
+ require 'dp_publico/app/models/pub'
6
+ require 'dp_publico/app/models/pub/historico'
7
+
8
+ module DpPublico
9
+
10
+ MIGRATION_PATH = "#{File.dirname(__FILE__)}/dp_publico/db/migrate"
11
+
12
+ @@added_cucumber_truncation_tables = []
13
+ def self.added_cucumber_truncation_tables
14
+ @@added_cucumber_truncation_tables
15
+ end
16
+
17
+ @tasks_allowed = 0
18
+
19
+ def self.tasks_allowed?
20
+ @tasks_allowed == 0
21
+ end
22
+
23
+ def self.tasks_up
24
+ @tasks_allowed += 1
25
+ end
26
+
27
+ def self.tasks_down
28
+ @tasks_allowed -= 1
29
+ end
30
+
31
+ def self.publico_config(env)
32
+ publico_config = ActiveRecord::Base.configurations["publico"]
33
+ return publico_config[env] if publico_config
34
+ nil
35
+ end
36
+
37
+ def self.publico_connect(env)
38
+ ActiveRecord::Base.establish_connection(publico_config(env))
39
+ end
40
+
41
+ def self.application_connect(env)
42
+ ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[env])
43
+ end
44
+
45
+
46
+ class DpPublicoEngine < Rails::Engine
47
+
48
+ initializer "dp_publico_engine.configurar_banco_publico" do
49
+ abort "As configurações do publico para o ambiente #{Rails.env} não foram definidas.\nInformaçoes lidas: #{Marshal.dump(ActiveRecord::Base.configurations)}" unless DpPublico.publico_config(Rails.env)
50
+ end
51
+
52
+ rake_tasks do
53
+ load "dp_publico/tasks.rb"
54
+ end
55
+
56
+ config.to_prepare do
57
+ DpPublico.inject_table_names!
58
+ end
59
+
60
+ console do
61
+ DpPublico.inject_table_names!
62
+ end
63
+ end
64
+
65
+
66
+ def self.inject_table_names!
67
+
68
+ # TODO: Remover o warning de constantes já carregadas
69
+ Dir[File.join("#{Rails.root}/app/models", '*.rb')].each { |f| require f }
70
+ Dir[File.join("#{Rails.root}/app/models/pub", '*.rb')].each { |f| require f }
71
+
72
+ database_name = ActiveRecord::Base.configurations[Rails.env]["database"]
73
+ model_names = ActiveRecord::Base.descendants.collect { |klass| klass.name unless klass.abstract_class? }.compact
74
+ model_names.each do |model_name|
75
+ klass = model_name.constantize
76
+ table_name = klass.table_name
77
+ next if table_name.include? '.'
78
+
79
+ if klass.respond_to?(:dp_publico?) && klass.dp_publico?
80
+ new_table_name = "#{DpPublico.publico_config(Rails.env)["database"]}.#{table_name}"
81
+ DpPublico.added_cucumber_truncation_tables << new_table_name
82
+ klass.set_table_name new_table_name
83
+ else
84
+ klass.set_table_name "#{database_name}.#{table_name}"
85
+ end
86
+ end
87
+ end
88
+
89
+ end
90
+
91
+
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dp_publico
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Tatiana Barboza
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-02-09 00:00:00 Z
19
+ dependencies: []
20
+
21
+ description: Webservice da base DP
22
+ email:
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - lib/dp_publico/version.rb
31
+ - lib/dp_publico/tasks.rb
32
+ - lib/dp_publico/app/models/dp/historico.rb
33
+ - lib/dp_publico/database_cleaner_patch.rb
34
+ - lib/dp_publico/arel_patch.rb
35
+ - lib/dp_publico/rake_utils.rb
36
+ - lib/dp_publico.rb
37
+ - Rakefile
38
+ - dp_publico.gemspec
39
+ homepage:
40
+ licenses: []
41
+
42
+ post_install_message:
43
+ rdoc_options: []
44
+
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ hash: 3
53
+ segments:
54
+ - 0
55
+ version: "0"
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 3
62
+ segments:
63
+ - 0
64
+ version: "0"
65
+ requirements: []
66
+
67
+ rubyforge_project:
68
+ rubygems_version: 1.8.5
69
+ signing_key:
70
+ specification_version: 3
71
+ summary: DP Publico
72
+ test_files: []
73
+