irxrb-rails 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f15e0f0e541886150073868e80769e0a354b3565
4
- data.tar.gz: b8f1925fea015ad3dd0dc5c5f1bc4df8dc26f733
3
+ metadata.gz: 4de6c0444d0cce9db109e3eface340cd71280718
4
+ data.tar.gz: 8e5f4e14917e27164bece42b71f037f748707a6d
5
5
  SHA512:
6
- metadata.gz: b1edcd2b37c69c2e16844f770e92c7529c33415dfa57afb3db794c39c69aaa66a9bcd1ea84a875dcfc06bf12625ba87af5ea99f05f4172bbf686c6359206792c
7
- data.tar.gz: e7eef4d6d4dfd83c88aee93b64ab54e62ef64708d1703ccbc9e8a01cf2f5c0ddb8d8157b1df3d19859c0b598b939bf23daabe3e99e1c93a2508d6ddd129a9045
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, 'irxrb-rails/db_view_migrator'
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
- 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}"
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
- 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
- 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| require 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
- namespace :test do
19
- task :prepare do
20
- Rake::Task['db:views:migrate'].invoke
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
@@ -3,7 +3,7 @@ module Irxrb
3
3
  module VERSION
4
4
  MAJOR = 0
5
5
  MINOR = 0
6
- TINY = 6
6
+ TINY = 7
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY].join('.')
9
9
  end
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.6
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.rdoc
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
data/README.rdoc DELETED
@@ -1,5 +0,0 @@
1
- = IrxrbRails
2
-
3
- https://rubygems.org/gems/irxrb-rails
4
-
5
- This project rocks and uses MIT-LICENSE.