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