dp_publico 0.0.1

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.
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
+