irxrb-rails 0.0.6 → 0.0.7
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.
- checksums.yaml +4 -4
- data/README.md +54 -0
- data/lib/irxrb-rails.rb +3 -1
- data/lib/irxrb-rails/core_ext/adapter.rb +12 -34
- data/lib/irxrb-rails/db_view_migrator.rb +4 -3
- data/lib/irxrb-rails/postgresql_adaplter.rb +14 -0
- data/lib/irxrb-rails/sqlite_adapter.rb +16 -0
- data/lib/irxrb-rails/tasks/irxrb-rails_tasks.rake +5 -3
- data/lib/irxrb-rails/version.rb +1 -1
- metadata +4 -2
- data/README.rdoc +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4de6c0444d0cce9db109e3eface340cd71280718
|
4
|
+
data.tar.gz: 8e5f4e14917e27164bece42b71f037f748707a6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9c7c31fab02ec8ec616fc6952384fc77791aa52e6d22da0f31b7035b806eaa60ab598c8bb455c71e8e3d41b6311331ecf1d8b1b4dac8ad4a92cbc0a5d7279d5
|
7
|
+
data.tar.gz: 3c25fc7145f2acc898401844393aa70ec1a966059f278a2da61bb5d165fb556daad188f2dde732c4171e14ea732ffcaefb47bf043f2383d2244d19929034201b
|
data/README.md
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
IrxrbRails
|
2
|
+
==========
|
3
|
+
|
4
|
+
This gem provide some rails feature
|
5
|
+
|
6
|
+
- Database View
|
7
|
+
|
8
|
+
|
9
|
+
Database View
|
10
|
+
-------------
|
11
|
+
|
12
|
+
### Install
|
13
|
+
|
14
|
+
If you use (Rails.version < 4.1.0), nothing to do.
|
15
|
+
|
16
|
+
If you use (Rails.version >= 4.1.0) and test, you must rewrite `rails_helper` following way.
|
17
|
+
|
18
|
+
from:
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
ActiveRecord::Migration.maintain_test_schema!
|
22
|
+
```
|
23
|
+
|
24
|
+
after:
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
Irxrb::Rails::DBViewMigrator.migrate do
|
28
|
+
ActiveRecord::Migration.maintain_test_schema!
|
29
|
+
end
|
30
|
+
```
|
31
|
+
|
32
|
+
|
33
|
+
### How this work.
|
34
|
+
|
35
|
+
RakeTask `db:migrate:drop` is invoked before `db:migrate` and `db:views:migrate` is invoked after `db:migrate`
|
36
|
+
|
37
|
+
`db:views:drop` task drop all DB views.
|
38
|
+
`db:views:migrate` task create DB views from `db/migrate/views` directories.
|
39
|
+
|
40
|
+
### Sample
|
41
|
+
|
42
|
+
Following script in `db/migrate/views/concat_user.rb` create `concat_user` view.
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
Irxrb::Rails::DBViewMigrator.define do
|
46
|
+
create_view :concat_user do
|
47
|
+
"SELECT id, (first_name || ' ' || last_name) concat_name FROM users"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
```
|
51
|
+
|
52
|
+
[Learn more](doc/db_view_migrator.md)
|
53
|
+
|
54
|
+
|
data/lib/irxrb-rails.rb
CHANGED
@@ -2,7 +2,9 @@ require 'irxrb-rails/version'
|
|
2
2
|
|
3
3
|
module Irxrb
|
4
4
|
module Rails
|
5
|
-
autoload :DBViewMigrator,
|
5
|
+
autoload :DBViewMigrator, 'irxrb-rails/db_view_migrator'
|
6
|
+
autoload :SQLiteAdapter, 'irxrb-rails/sqlite_adaplter.rb'
|
7
|
+
autoload :PostgreSQLAdapter, 'irxrb-rails/postgresql_adaplter.rb'
|
6
8
|
end
|
7
9
|
end
|
8
10
|
|
@@ -1,45 +1,23 @@
|
|
1
|
-
|
2
1
|
module ActiveRecord::ConnectionAdapters
|
3
|
-
|
4
2
|
class AbstractAdapter
|
5
3
|
def drop_all_views
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
if defined? SQLiteAdapter
|
11
|
-
class SQLiteAdapter
|
12
|
-
def drop_all_views
|
13
|
-
table = Arel::Table.new('sqlite_master')
|
14
|
-
ActiveRecord::Base.transaction do
|
15
|
-
result = execute(
|
16
|
-
table
|
17
|
-
.where(table[:type].eq 'view')
|
18
|
-
.project(table[:name])
|
19
|
-
.to_sql)
|
20
|
-
result.each do |row|
|
21
|
-
name = row['name']
|
22
|
-
execute "DROP VIEW #{name}"
|
4
|
+
if defined?(SQLiteAdapter) && is_a?(SQLiteAdapter)
|
5
|
+
unless SQLiteAdapter.include? Irxrb::Rails::SQLiteAdapter
|
6
|
+
SQLiteAdapter.class_eval do
|
7
|
+
include Irxrb::Rails::SQLiteAdapter
|
23
8
|
end
|
9
|
+
return self.__send__(__method__)
|
24
10
|
end
|
25
11
|
end
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
table = Arel::Table.new('pg_views')
|
33
|
-
ActiveRecord::Base.transaction do
|
34
|
-
result = execute(
|
35
|
-
table
|
36
|
-
.where(table[:schemaname].eq 'public')
|
37
|
-
.project(table[:viewname])
|
38
|
-
.to_sql)
|
39
|
-
names = result.map{|row| row['viewname'] }.join(', ')
|
40
|
-
execute "DROP VIEW IF EXISTS #{names} CASCADE"
|
12
|
+
if defined?(PostgreSQLAdapter) && is_a?(PostgreSQLAdapter)
|
13
|
+
unless PostgreSQLAdapter.include? Irxrb::Rails::PostgreSQLAdapter
|
14
|
+
PostgreSQLAdapter.class_eval do
|
15
|
+
include Irxrb::Rails::PostgreSQLAdapter
|
16
|
+
end
|
17
|
+
return self.__send__(__method__)
|
41
18
|
end
|
42
19
|
end
|
20
|
+
raise "#{self.class.name} is not supported."
|
43
21
|
end
|
44
22
|
end
|
45
23
|
end
|
@@ -4,6 +4,7 @@ module Irxrb::Rails
|
|
4
4
|
# ===== ===== ===== CLASS METHODS ===== ===== =====
|
5
5
|
|
6
6
|
class << self
|
7
|
+
|
7
8
|
def drop_all
|
8
9
|
announce 'DROP VIEWS'
|
9
10
|
ActiveRecord::Base.connection.drop_all_views
|
@@ -12,9 +13,9 @@ module Irxrb::Rails
|
|
12
13
|
def migrate(paths = nil)
|
13
14
|
if block_given?
|
14
15
|
drop_all
|
15
|
-
yield
|
16
|
+
ret = yield
|
16
17
|
migrate(paths)
|
17
|
-
return
|
18
|
+
return ret
|
18
19
|
end
|
19
20
|
|
20
21
|
announce 'CREATE VIEWS'
|
@@ -22,7 +23,7 @@ module Irxrb::Rails
|
|
22
23
|
paths = paths.presence || ActiveRecord::Migrator.migrations_paths
|
23
24
|
paths = Array.wrap(paths)
|
24
25
|
@holder = new
|
25
|
-
Dir[*paths.map { |path| path + '/views/**/*.rb' }].each { |f|
|
26
|
+
Dir[*paths.map { |path| path + '/views/**/*.rb' }].each { |f| load f }
|
26
27
|
@holder.migrate
|
27
28
|
@holder = nil
|
28
29
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Irxrb::Rails::PostgreSQLAdapter
|
2
|
+
def drop_all_views
|
3
|
+
table = Arel::Table.new('pg_views')
|
4
|
+
ActiveRecord::Base.transaction do
|
5
|
+
result = execute(
|
6
|
+
table
|
7
|
+
.where(table[:schemaname].eq 'public')
|
8
|
+
.project(table[:viewname])
|
9
|
+
.to_sql)
|
10
|
+
names = result.map{|row| row['viewname'] }.join(', ')
|
11
|
+
execute "DROP VIEW IF EXISTS #{names} CASCADE"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Irxrb::Rails::SQLiteAdapter
|
2
|
+
def drop_all_views
|
3
|
+
table = Arel::Table.new('sqlite_master')
|
4
|
+
ActiveRecord::Base.transaction do
|
5
|
+
result = execute(
|
6
|
+
table
|
7
|
+
.where(table[:type].eq 'view')
|
8
|
+
.project(table[:name])
|
9
|
+
.to_sql)
|
10
|
+
result.each do |row|
|
11
|
+
name = row['name']
|
12
|
+
execute "DROP VIEW #{name}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -15,9 +15,11 @@ namespace :db do
|
|
15
15
|
task :migrate => 'db:views:drop' do
|
16
16
|
Rake::Task['db:views:migrate'].invoke
|
17
17
|
end
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
if Rails.gem_version < Gem::Version.new('4.1.0')
|
19
|
+
namespace :test do
|
20
|
+
task :prepare do
|
21
|
+
Rake::Task['db:views:migrate'].invoke
|
22
|
+
end
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
data/lib/irxrb-rails/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: irxrb-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- irxground
|
@@ -46,12 +46,14 @@ extensions: []
|
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
48
|
- MIT-LICENSE
|
49
|
-
- README.
|
49
|
+
- README.md
|
50
50
|
- Rakefile
|
51
51
|
- lib/irxrb-rails.rb
|
52
52
|
- lib/irxrb-rails/core_ext/adapter.rb
|
53
53
|
- lib/irxrb-rails/db_view_migrator.rb
|
54
|
+
- lib/irxrb-rails/postgresql_adaplter.rb
|
54
55
|
- lib/irxrb-rails/railtie.rb
|
56
|
+
- lib/irxrb-rails/sqlite_adapter.rb
|
55
57
|
- lib/irxrb-rails/tasks/irxrb-rails_tasks.rake
|
56
58
|
- lib/irxrb-rails/version.rb
|
57
59
|
- spec/dummy/README.rdoc
|