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 CHANGED
@@ -1,5 +1,3 @@
1
1
  = IrxrbRails
2
2
 
3
- https://rubygems.org/gems/irxrb-rails
4
-
5
- This project rocks and uses MIT-LICENSE.
3
+ This project rocks and uses MIT-LICENSE.
data/lib/irxrb-rails.rb CHANGED
@@ -5,3 +5,5 @@ module Irxrb
5
5
  autoload :DBViewMigrator, 'irxrb-rails/db_view_migrator'
6
6
  end
7
7
  end
8
+
9
+ require 'irxrb-rails/railtie' if defined?(Rails)
@@ -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 run
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[Rails.root + 'db/migrate/views/**/*.rb'].each{|f| require f }
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
- create(name, &block)
86
+ execute_core(name, &block)
65
87
  @executed[name] = true
66
88
  end
67
89
 
68
- def create(name, &block)
69
- puts "-- #{name}"
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
- try_drop_view name
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 try_drop_view(name)
77
- con = ActiveRecord::Base.connection
78
- case con
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
+
@@ -1,5 +1,11 @@
1
1
  module Irxrb
2
2
  module Rails
3
- VERSION = "0.0.3"
3
+ module VERSION
4
+ MAJOR = 0
5
+ MINOR = 0
6
+ TINY = 4
7
+
8
+ STRING = [MAJOR, MINOR, TINY].join('.')
9
+ end
4
10
  end
5
11
  end
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.3
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: 2015-01-06 00:00:00.000000000 Z
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: '3.0'
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: '3.0'
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
- - MIT-LICENSE
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/tasks/irxrb-rails_tasks.rake
55
- - spec/dummy/README.rdoc
56
- - spec/dummy/Rakefile
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: https://github.com/irxground/irxrb-rails
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: 2.2.2
114
+ rubygems_version: 1.8.24
107
115
  signing_key:
108
- specification_version: 4
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
@@ -1,13 +0,0 @@
1
- # desc "Explaining what the task does"
2
- # task :irxrb-rails do
3
- # # Task goes here
4
- # end
5
-
6
- namespace :db do
7
- namespace :migrate do
8
- desc 'migrate sql views'
9
- task :views do
10
- puts "HELLO"
11
- end
12
- end
13
- end