irxrb-rails 0.0.3 → 0.0.4
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/README.rdoc +1 -3
- data/lib/irxrb-rails.rb +2 -0
- data/lib/irxrb-rails/core_ext/adapter.rb +47 -0
- data/lib/irxrb-rails/db_view_migrator.rb +34 -33
- data/lib/irxrb-rails/railtie.rb +14 -0
- data/lib/irxrb-rails/tasks/irxrb-rails_tasks.rake +24 -0
- data/lib/irxrb-rails/version.rb +7 -1
- metadata +30 -23
- checksums.yaml +0 -7
- data/lib/tasks/irxrb-rails_tasks.rake +0 -13
data/README.rdoc
CHANGED
data/lib/irxrb-rails.rb
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
|
2
|
+
module ActiveRecord::ConnectionAdapters
|
3
|
+
|
4
|
+
class AbstractAdapter
|
5
|
+
def drop_all_views
|
6
|
+
raise "#{self.class.name} is not supported."
|
7
|
+
end
|
8
|
+
end
|
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}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
if defined? PostgreSQLAdapter
|
30
|
+
class PostgreSQLAdapter
|
31
|
+
def drop_all_views
|
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
|
+
result.each do |row|
|
40
|
+
name = row['viewname']
|
41
|
+
execute "DROP VIEW IF EXISTS #{name} CASCADE"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -4,9 +4,25 @@ module Irxrb::Rails
|
|
4
4
|
# ===== ===== ===== CLASS METHODS ===== ===== =====
|
5
5
|
|
6
6
|
class << self
|
7
|
-
def
|
7
|
+
def drop_all
|
8
|
+
announce 'DROP VIEWS'
|
9
|
+
ActiveRecord::Base.connection.drop_all_views
|
10
|
+
end
|
11
|
+
|
12
|
+
def migrate(paths = nil)
|
13
|
+
if block_given?
|
14
|
+
drop_all
|
15
|
+
yield
|
16
|
+
migrate(paths)
|
17
|
+
return
|
18
|
+
end
|
19
|
+
|
20
|
+
announce 'CREATE VIEWS'
|
21
|
+
|
22
|
+
paths = paths.presence || ActiveRecord::Migrator.migrations_paths
|
23
|
+
paths = Array.wrap(paths)
|
8
24
|
@holder = new
|
9
|
-
Dir[
|
25
|
+
Dir[*paths.map { |path| path + '/views/**/*.rb' }].each { |f| require f }
|
10
26
|
@holder.migrate
|
11
27
|
@holder = nil
|
12
28
|
end
|
@@ -14,6 +30,14 @@ module Irxrb::Rails
|
|
14
30
|
def define(&block)
|
15
31
|
@holder.instance_eval &block
|
16
32
|
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def announce(text)
|
37
|
+
if ActiveRecord::Migration.verbose
|
38
|
+
ActiveRecord::Migration.announce text
|
39
|
+
end
|
40
|
+
end
|
17
41
|
end
|
18
42
|
|
19
43
|
# ===== ===== ===== INSTANCE METHODS ===== ===== =====
|
@@ -42,9 +66,6 @@ module Irxrb::Rails
|
|
42
66
|
end
|
43
67
|
|
44
68
|
def migrate
|
45
|
-
title = 'CREATE VIEW'
|
46
|
-
puts "== #{title} " + '=' * [74 - title.size, 0].max
|
47
|
-
|
48
69
|
@executed = {}
|
49
70
|
while @views.size > 0
|
50
71
|
name = @views.keys.first
|
@@ -53,6 +74,7 @@ module Irxrb::Rails
|
|
53
74
|
end
|
54
75
|
|
55
76
|
private
|
77
|
+
|
56
78
|
def execute(name)
|
57
79
|
return if @executed[name] == true
|
58
80
|
raise 'Infinite Loop' if @executed[name] == false
|
@@ -61,42 +83,21 @@ module Irxrb::Rails
|
|
61
83
|
depends, block = @views.delete name
|
62
84
|
@executed[name] = false
|
63
85
|
depends.each{|name| execute(name) }
|
64
|
-
|
86
|
+
execute_core(name, &block)
|
65
87
|
@executed[name] = true
|
66
88
|
end
|
67
89
|
|
68
|
-
def
|
69
|
-
|
90
|
+
def execute_core(name, &block)
|
91
|
+
say name
|
70
92
|
query = yield
|
71
93
|
query_str = (query.respond_to?(:to_sql) ? query.to_sql : query).to_s
|
72
|
-
|
73
|
-
send_sql "CREATE VIEW #{name} AS\n" + query_str
|
94
|
+
ActiveRecord::Base.connection.execute "CREATE VIEW #{name} AS\n" + query_str
|
74
95
|
end
|
75
96
|
|
76
|
-
def
|
77
|
-
|
78
|
-
|
79
|
-
when postgresql?
|
80
|
-
con.execute "DROP VIEW #{name} CASCADE" if con.table_exists? name
|
81
|
-
when sqlite?
|
82
|
-
con.execute "DROP VIEW #{name}" rescue nil
|
83
|
-
else
|
84
|
-
raise NotImplementedError, "#{con.class.name} is not supported."
|
97
|
+
def say(text)
|
98
|
+
if ActiveRecord::Migration.verbose
|
99
|
+
ActiveRecord::Migration.say text
|
85
100
|
end
|
86
101
|
end
|
87
|
-
|
88
|
-
def send_sql(query)
|
89
|
-
ActiveRecord::Base.connection.execute(query)
|
90
|
-
end
|
91
|
-
|
92
|
-
def sqlite?
|
93
|
-
defined?(ActiveRecord::ConnectionAdapters::SQLiteAdapter) and
|
94
|
-
ActiveRecord::ConnectionAdapters::SQLiteAdapter
|
95
|
-
end
|
96
|
-
|
97
|
-
def postgresql?
|
98
|
-
defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter) and
|
99
|
-
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
|
100
|
-
end
|
101
102
|
end
|
102
103
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Irxrb
|
2
|
+
module Rails
|
3
|
+
class Railtie < ::Rails::Railtie
|
4
|
+
rake_tasks do
|
5
|
+
load 'irxrb-rails/tasks/irxrb-rails_tasks.rake'
|
6
|
+
end
|
7
|
+
|
8
|
+
initializer 'irxrb-rails.core_ext', after: 'active_record.initialize_database' do
|
9
|
+
load 'irxrb-rails/core_ext/adapter.rb'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
namespace :db do
|
2
|
+
namespace :views do
|
3
|
+
desc 'Drop All DB Views'
|
4
|
+
task :drop => [:environment]do
|
5
|
+
Irxrb::Rails::DBViewMigrator.drop_all
|
6
|
+
end
|
7
|
+
|
8
|
+
desc 'Migrate DB Views'
|
9
|
+
task :migrate => [:environment] do
|
10
|
+
Irxrb::Rails::DBViewMigrator.migrate
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# add hook
|
15
|
+
task :migrate => 'db:views:drop' do
|
16
|
+
Rake::Task['db:views:migrate'].invoke
|
17
|
+
end
|
18
|
+
namespace :test do
|
19
|
+
task :prepare do
|
20
|
+
Rake::Task['db:views:migrate'].invoke
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
data/lib/irxrb-rails/version.rb
CHANGED
metadata
CHANGED
@@ -1,41 +1,46 @@
|
|
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.4
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- irxground
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2013-01-09 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: rails
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
21
|
+
version: 3.2.8
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
29
|
+
version: 3.2.8
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: sqlite3
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- -
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '0'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- -
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '0'
|
41
46
|
description: Rails extension
|
@@ -45,21 +50,20 @@ executables: []
|
|
45
50
|
extensions: []
|
46
51
|
extra_rdoc_files: []
|
47
52
|
files:
|
48
|
-
-
|
49
|
-
- README.rdoc
|
50
|
-
- Rakefile
|
51
|
-
- lib/irxrb-rails.rb
|
53
|
+
- lib/irxrb-rails/core_ext/adapter.rb
|
52
54
|
- lib/irxrb-rails/db_view_migrator.rb
|
55
|
+
- lib/irxrb-rails/railtie.rb
|
56
|
+
- lib/irxrb-rails/tasks/irxrb-rails_tasks.rake
|
53
57
|
- lib/irxrb-rails/version.rb
|
54
|
-
- lib/
|
55
|
-
-
|
56
|
-
-
|
58
|
+
- lib/irxrb-rails.rb
|
59
|
+
- MIT-LICENSE
|
60
|
+
- Rakefile
|
61
|
+
- README.rdoc
|
57
62
|
- spec/dummy/app/assets/javascripts/application.js
|
58
63
|
- spec/dummy/app/assets/stylesheets/application.css
|
59
64
|
- spec/dummy/app/controllers/application_controller.rb
|
60
65
|
- spec/dummy/app/helpers/application_helper.rb
|
61
66
|
- spec/dummy/app/views/layouts/application.html.erb
|
62
|
-
- spec/dummy/config.ru
|
63
67
|
- spec/dummy/config/application.rb
|
64
68
|
- spec/dummy/config/boot.rb
|
65
69
|
- spec/dummy/config/database.yml
|
@@ -75,37 +79,41 @@ files:
|
|
75
79
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
76
80
|
- spec/dummy/config/locales/en.yml
|
77
81
|
- spec/dummy/config/routes.rb
|
82
|
+
- spec/dummy/config.ru
|
78
83
|
- spec/dummy/db/test.sqlite3
|
79
84
|
- spec/dummy/log/test.log
|
80
85
|
- spec/dummy/public/404.html
|
81
86
|
- spec/dummy/public/422.html
|
82
87
|
- spec/dummy/public/500.html
|
83
88
|
- spec/dummy/public/favicon.ico
|
89
|
+
- spec/dummy/Rakefile
|
90
|
+
- spec/dummy/README.rdoc
|
84
91
|
- spec/dummy/script/rails
|
85
92
|
- spec/irxrb-rails_spec.rb
|
86
93
|
- spec/spec_helper.rb
|
87
|
-
homepage:
|
94
|
+
homepage:
|
88
95
|
licenses: []
|
89
|
-
metadata: {}
|
90
96
|
post_install_message:
|
91
97
|
rdoc_options: []
|
92
98
|
require_paths:
|
93
99
|
- lib
|
94
100
|
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
95
102
|
requirements:
|
96
|
-
- -
|
103
|
+
- - ! '>='
|
97
104
|
- !ruby/object:Gem::Version
|
98
105
|
version: '0'
|
99
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
100
108
|
requirements:
|
101
|
-
- -
|
109
|
+
- - ! '>='
|
102
110
|
- !ruby/object:Gem::Version
|
103
111
|
version: '0'
|
104
112
|
requirements: []
|
105
113
|
rubyforge_project:
|
106
|
-
rubygems_version:
|
114
|
+
rubygems_version: 1.8.24
|
107
115
|
signing_key:
|
108
|
-
specification_version:
|
116
|
+
specification_version: 3
|
109
117
|
summary: Rails extension
|
110
118
|
test_files:
|
111
119
|
- spec/dummy/app/assets/javascripts/application.js
|
@@ -140,4 +148,3 @@ test_files:
|
|
140
148
|
- spec/dummy/script/rails
|
141
149
|
- spec/irxrb-rails_spec.rb
|
142
150
|
- spec/spec_helper.rb
|
143
|
-
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 1ee67d2031b4ecced2b80f70915d18d99c99c1ba
|
4
|
-
data.tar.gz: a5678a29ecefe1c9415c539f6be677c4fc33cffd
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: cfa78558b2e53eaac9a6bffa9678d7d381e0394219e251db86b7f7edacc098aaf14c0f1b7faaf3429d487b751d1dc83c81e2070cca81720418ed22413cfbe4c3
|
7
|
-
data.tar.gz: c29feeb277ca41b81967adcb4161fd9a8727af6ae00ea2cad273ec9d0f727b35d3dacd08da1a7956406b0d95a7641d1312b803ce3850d5bef5a7cd8f1df331f1
|