irxrb-rails 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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