dbview_cti 0.0.1 → 0.0.2

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/.travis.yml ADDED
@@ -0,0 +1,15 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - rbx-19mode
6
+ env:
7
+ - "RAILS_VERSION=3.2.0"
8
+ - "RAILS_VERSION=4.0.0"
9
+ script: bundle exec rspec spec
10
+ before_script:
11
+ - psql -c "CREATE USER cti WITH ENCRYPTED PASSWORD 'cti';" -U postgres
12
+ - psql -c "CREATE DATABASE dbview_cti_test WITH OWNER cti;" -U postgres
13
+ - ruby ./migrate_up.rb
14
+ after_success_script:
15
+ - ruby ./migrate_down.rb
data/Gemfile CHANGED
@@ -28,4 +28,9 @@ else
28
28
  "~> #{rails_version}"
29
29
  end
30
30
 
31
- gem "rails", rails
31
+ gem "rails", rails
32
+
33
+ group :test, :development do
34
+ gem "activerecord-postgresql-adapter", :platforms => [:ruby, :mswin, :mingw]
35
+ gem "activerecord-jdbcpostgresql-adapter", :platforms => [:jruby]
36
+ end
data/dbview_cti.gemspec CHANGED
@@ -19,6 +19,5 @@ Gem::Specification.new do |s|
19
19
  s.add_dependency "rails", ">= 3.2.0"
20
20
 
21
21
  s.add_development_dependency "rspec-rails"
22
- s.add_development_dependency "activerecord-postgresql-adapter"
23
22
  s.add_development_dependency "foreigner"
24
23
  end
@@ -25,6 +25,11 @@ module DBViewCTI
25
25
  yield # perform table changes in block (e.g. add column)
26
26
  # recreate views in forward order
27
27
  classes.each do |kklass|
28
+ # any column changes are reflected in the real table cache, but not in the
29
+ # view cache, so we have to make sure it is cleared
30
+ true_klass = kklass.constantize
31
+ true_klass.connection.schema_cache.clear_table_cache!(true_klass.table_name)
32
+ true_klass.reset_column_information
28
33
  cti_create_view(kklass, options)
29
34
  end
30
35
  end
@@ -5,6 +5,10 @@ module DBViewCTI
5
5
  include DBViewCTI::ConnectionAdapters::SchemaStatements
6
6
  end
7
7
 
8
+ ActiveRecord::SchemaDumper.class_eval do
9
+ include DBViewCTI::SchemaDumper
10
+ end
11
+
8
12
  if defined?(ActiveRecord::Migration::CommandRecorder)
9
13
  ActiveRecord::Migration::CommandRecorder.class_eval do
10
14
  include DBViewCTI::Migration::CommandRecorder
@@ -0,0 +1,45 @@
1
+ # this file is inspired by schema_dumper.rb in the foreigner gem
2
+ # ( https://github.com/matthuhiggins/foreigner )
3
+ module DBViewCTI
4
+ module SchemaDumper
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ alias_method_chain :tables, :cti_views
9
+ end
10
+
11
+ def tables_with_cti_views(stream)
12
+ tables_without_cti_views(stream)
13
+ base_classes = []
14
+ @connection.tables.sort.each do |table|
15
+ next if ignore_table?(table)
16
+ klass = DBViewCTI::Names.table_to_class_name(table).constantize
17
+ base_classes << klass if klass.respond_to?('cti_base_class?') && klass.cti_base_class?
18
+ end
19
+ base_classes.each do |klass|
20
+ dump_cti_hierarchy(klass, stream)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def ignore_table?(table)
27
+ ['schema_migrations', ignore_tables].flatten.any? do |ignored|
28
+ case ignored
29
+ when String; table == ignored
30
+ when Regexp; table =~ ignored
31
+ else
32
+ raise StandardError, 'ActiveRecord::SchemaDumper.ignore_tables accepts an array of String and / or Regexp values.'
33
+ end
34
+ end
35
+ end
36
+
37
+ def dump_cti_hierarchy(base_class, stream)
38
+ base_class.cti_all_descendants.each do |class_name|
39
+ stream.puts(" cti_create_view('#{class_name}')")
40
+ end
41
+ stream.puts('')
42
+ end
43
+
44
+ end
45
+ end
@@ -1,3 +1,3 @@
1
1
  module DBViewCTI
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/dbview_cti.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module DBViewCTI
2
2
  extend ActiveSupport::Autoload
3
3
  autoload :Names
4
+ autoload :SchemaDumper
4
5
 
5
6
  module ConnectionAdapters
6
7
  extend ActiveSupport::Autoload
data/migrate_down.rb ADDED
@@ -0,0 +1,13 @@
1
+ # Small script to roll back migrations (mainly for use in Travis CI)
2
+ # (we do this to make sure 'rake db:rollback' is also tested)
3
+
4
+ # set correct rails version
5
+ rails_major_version = 3
6
+ rails_major_version = ENV["RAILS_VERSION"][0] unless ENV["RAILS_VERSION"].nil?
7
+
8
+ # switch to dummy-app for rails version and run migrations
9
+ Dir.chdir("./spec/dummy-rails-#{rails_major_version}") do
10
+ 1.upto(Dir.glob('./db/migrate/*.rb').length) do
11
+ system "bundle exec rake db:rollback"
12
+ end
13
+ end
data/migrate_up.rb ADDED
@@ -0,0 +1,10 @@
1
+ # Small script to run migrations (mainly for use in Travis CI)
2
+
3
+ # set correct rails version
4
+ rails_major_version = 3
5
+ rails_major_version = ENV["RAILS_VERSION"][0] unless ENV["RAILS_VERSION"].nil?
6
+
7
+ # switch to dummy-app for rails version and run migrations
8
+ Dir.chdir("./spec/dummy-rails-#{rails_major_version}") do
9
+ system "bundle exec rake db:migrate"
10
+ end
@@ -10,6 +10,9 @@ require "sprockets/railtie"
10
10
  Bundler.require(*Rails.groups)
11
11
  require "dbview_cti"
12
12
 
13
+ # for some strange reason, we have to manually require foreigner, it doesn't work through the gemspec file
14
+ require 'foreigner'
15
+
13
16
  module Dummy
14
17
  class Application < Rails::Application
15
18
  # Settings in config/environments/* take precedence over those specified here.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dbview_cti
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-21 00:00:00.000000000 Z
12
+ date: 2013-08-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -43,22 +43,6 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: activerecord-postgresql-adapter
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
46
  - !ruby/object:Gem::Dependency
63
47
  name: foreigner
64
48
  requirement: !ruby/object:Gem::Requirement
@@ -84,6 +68,7 @@ extensions: []
84
68
  extra_rdoc_files: []
85
69
  files:
86
70
  - .gitignore
71
+ - .travis.yml
87
72
  - Gemfile
88
73
  - MIT-LICENSE
89
74
  - README.md
@@ -96,6 +81,7 @@ files:
96
81
  - lib/db_view_cti/model/extensions.rb
97
82
  - lib/db_view_cti/names.rb
98
83
  - lib/db_view_cti/railtie.rb
84
+ - lib/db_view_cti/schema_dumper.rb
99
85
  - lib/db_view_cti/sql_generation/migration/base.rb
100
86
  - lib/db_view_cti/sql_generation/migration/factory.rb
101
87
  - lib/db_view_cti/sql_generation/migration/postgresql.rb
@@ -103,6 +89,8 @@ files:
103
89
  - lib/db_view_cti/version.rb
104
90
  - lib/dbview_cti.rb
105
91
  - lib/tasks/view-based-cti_tasks.rake
92
+ - migrate_down.rb
93
+ - migrate_up.rb
106
94
  - spec/dummy-rails-3/.rspec
107
95
  - spec/dummy-rails-3/Rakefile
108
96
  - spec/dummy-rails-3/app/assets/javascripts/application.js
@@ -144,7 +132,6 @@ files:
144
132
  - spec/dummy-rails-3/db/migrate/20130817014120_create_space_shuttles.rb
145
133
  - spec/dummy-rails-3/db/migrate/20130817024220_create_rocket_engines.rb
146
134
  - spec/dummy-rails-3/db/migrate/20130819040414_add_reliability_to_space_ships.rb
147
- - spec/dummy-rails-3/db/schema.rb
148
135
  - spec/dummy-rails-3/lib/assets/.gitkeep
149
136
  - spec/dummy-rails-3/log/.gitkeep
150
137
  - spec/dummy-rails-3/public/404.html
@@ -183,7 +170,6 @@ files:
183
170
  - spec/dummy-rails-4/config/initializers/wrap_parameters.rb
184
171
  - spec/dummy-rails-4/config/locales/en.yml
185
172
  - spec/dummy-rails-4/config/routes.rb
186
- - spec/dummy-rails-4/db/schema.rb
187
173
  - spec/dummy-rails-4/lib/assets/.keep
188
174
  - spec/dummy-rails-4/log/.keep
189
175
  - spec/dummy-rails-4/public/404.html
@@ -209,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
195
  version: '0'
210
196
  segments:
211
197
  - 0
212
- hash: -2210923641893845422
198
+ hash: -3953511305276262662
213
199
  required_rubygems_version: !ruby/object:Gem::Requirement
214
200
  none: false
215
201
  requirements:
@@ -218,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
218
204
  version: '0'
219
205
  segments:
220
206
  - 0
221
- hash: -2210923641893845422
207
+ hash: -3953511305276262662
222
208
  requirements: []
223
209
  rubyforge_project:
224
210
  rubygems_version: 1.8.25
@@ -1,74 +0,0 @@
1
- # encoding: UTF-8
2
- # This file is auto-generated from the current state of the database. Instead
3
- # of editing this file, please use the migrations feature of Active Record to
4
- # incrementally modify your database, and then regenerate this schema definition.
5
- #
6
- # Note that this schema.rb definition is the authoritative source for your
7
- # database schema. If you need to create the application database on another
8
- # system, you should be using db:schema:load, not running all the migrations
9
- # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
- # you'll amass, the slower it'll run and the greater likelihood for issues).
11
- #
12
- # It's strongly recommended to check this file into your version control system.
13
-
14
- ActiveRecord::Schema.define(:version => 20130819040414) do
15
-
16
- create_table "cars", :force => true do |t|
17
- t.integer "motor_vehicle_id"
18
- t.boolean "stick_shift"
19
- t.boolean "convertible"
20
- t.datetime "created_at", :null => false
21
- t.datetime "updated_at", :null => false
22
- end
23
-
24
- create_table "motor_cycles", :force => true do |t|
25
- t.integer "motor_vehicle_id"
26
- t.boolean "offroad"
27
- t.datetime "created_at", :null => false
28
- t.datetime "updated_at", :null => false
29
- end
30
-
31
- create_table "motor_vehicles", :force => true do |t|
32
- t.integer "vehicle_id"
33
- t.string "fuel"
34
- t.integer "number_of_wheels"
35
- t.datetime "created_at", :null => false
36
- t.datetime "updated_at", :null => false
37
- end
38
-
39
- create_table "rocket_engines", :force => true do |t|
40
- t.integer "space_ship_id"
41
- t.string "name"
42
- t.datetime "created_at", :null => false
43
- t.datetime "updated_at", :null => false
44
- end
45
-
46
- create_table "space_ships", :force => true do |t|
47
- t.integer "vehicle_id"
48
- t.boolean "single_use"
49
- t.datetime "created_at", :null => false
50
- t.datetime "updated_at", :null => false
51
- t.integer "reliability"
52
- end
53
-
54
- create_table "space_shuttles", :force => true do |t|
55
- t.integer "space_ship_id"
56
- t.integer "power"
57
- t.datetime "created_at", :null => false
58
- t.datetime "updated_at", :null => false
59
- end
60
-
61
- create_table "vehicles", :force => true do |t|
62
- t.string "name"
63
- t.integer "mass"
64
- t.datetime "created_at", :null => false
65
- t.datetime "updated_at", :null => false
66
- end
67
-
68
- add_foreign_key "rocket_engines", "space_ships", :name => "rocket_engines_space_ship_id_fk"
69
-
70
- add_foreign_key "space_ships", "vehicles", :name => "space_ships_vehicle_id_fk"
71
-
72
- add_foreign_key "space_shuttles", "space_ships", :name => "space_shuttles_space_ship_id_fk"
73
-
74
- end
@@ -1,74 +0,0 @@
1
- # encoding: UTF-8
2
- # This file is auto-generated from the current state of the database. Instead
3
- # of editing this file, please use the migrations feature of Active Record to
4
- # incrementally modify your database, and then regenerate this schema definition.
5
- #
6
- # Note that this schema.rb definition is the authoritative source for your
7
- # database schema. If you need to create the application database on another
8
- # system, you should be using db:schema:load, not running all the migrations
9
- # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
- # you'll amass, the slower it'll run and the greater likelihood for issues).
11
- #
12
- # It's strongly recommended that you check this file into your version control system.
13
-
14
- ActiveRecord::Schema.define(version: 20130819040414) do
15
-
16
- create_table "cars", force: true do |t|
17
- t.integer "motor_vehicle_id"
18
- t.boolean "stick_shift"
19
- t.boolean "convertible"
20
- t.datetime "created_at"
21
- t.datetime "updated_at"
22
- end
23
-
24
- create_table "motor_cycles", force: true do |t|
25
- t.integer "motor_vehicle_id"
26
- t.boolean "offroad"
27
- t.datetime "created_at"
28
- t.datetime "updated_at"
29
- end
30
-
31
- create_table "motor_vehicles", force: true do |t|
32
- t.integer "vehicle_id"
33
- t.string "fuel"
34
- t.integer "number_of_wheels"
35
- t.datetime "created_at"
36
- t.datetime "updated_at"
37
- end
38
-
39
- create_table "rocket_engines", force: true do |t|
40
- t.integer "space_ship_id"
41
- t.string "name"
42
- t.datetime "created_at"
43
- t.datetime "updated_at"
44
- end
45
-
46
- create_table "space_ships", force: true do |t|
47
- t.integer "vehicle_id"
48
- t.boolean "single_use"
49
- t.datetime "created_at"
50
- t.datetime "updated_at"
51
- t.integer "reliability"
52
- end
53
-
54
- create_table "space_shuttles", force: true do |t|
55
- t.integer "space_ship_id"
56
- t.integer "power"
57
- t.datetime "created_at"
58
- t.datetime "updated_at"
59
- end
60
-
61
- create_table "vehicles", force: true do |t|
62
- t.string "name"
63
- t.integer "mass"
64
- t.datetime "created_at"
65
- t.datetime "updated_at"
66
- end
67
-
68
- add_foreign_key "rocket_engines", "space_ships", :name => "rocket_engines_space_ship_id_fk"
69
-
70
- add_foreign_key "space_ships", "vehicles", :name => "space_ships_vehicle_id_fk"
71
-
72
- add_foreign_key "space_shuttles", "space_ships", :name => "space_shuttles_space_ship_id_fk"
73
-
74
- end