rails_db 0.6 → 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.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +24 -0
  3. data/Gemfile.lock +159 -0
  4. data/app/assets/images/rails_db/railsdb.png +0 -0
  5. data/app/assets/images/rails_db/runsql.png +0 -0
  6. data/app/assets/javascripts/rails_db/application.js +2 -1
  7. data/app/assets/javascripts/rails_db/foundation.min.js +20 -0
  8. data/app/assets/javascripts/rails_db/foundation/foundation.abide.js +426 -0
  9. data/app/assets/javascripts/rails_db/foundation/foundation.accordion.js +125 -0
  10. data/app/assets/javascripts/rails_db/foundation/foundation.alert.js +43 -0
  11. data/app/assets/javascripts/rails_db/foundation/foundation.clearing.js +586 -0
  12. data/app/assets/javascripts/rails_db/foundation/foundation.dropdown.js +468 -0
  13. data/app/assets/javascripts/rails_db/foundation/foundation.equalizer.js +104 -0
  14. data/app/assets/javascripts/rails_db/foundation/foundation.interchange.js +360 -0
  15. data/app/assets/javascripts/rails_db/foundation/foundation.joyride.js +935 -0
  16. data/app/assets/javascripts/rails_db/foundation/foundation.js +732 -0
  17. data/app/assets/javascripts/rails_db/foundation/foundation.magellan.js +214 -0
  18. data/app/assets/javascripts/rails_db/foundation/foundation.offcanvas.js +225 -0
  19. data/app/assets/javascripts/rails_db/foundation/foundation.orbit.js +476 -0
  20. data/app/assets/javascripts/rails_db/foundation/foundation.reveal.js +522 -0
  21. data/app/assets/javascripts/rails_db/foundation/foundation.slider.js +296 -0
  22. data/app/assets/javascripts/rails_db/foundation/foundation.tab.js +247 -0
  23. data/app/assets/javascripts/rails_db/foundation/foundation.tooltip.js +348 -0
  24. data/app/assets/javascripts/rails_db/foundation/foundation.topbar.js +458 -0
  25. data/app/assets/javascripts/rails_db/sticky.js +4 -16
  26. data/app/assets/javascripts/rails_db/vendor/fastclick.js +8 -0
  27. data/app/assets/javascripts/rails_db/vendor/jquery.cookie.js +8 -0
  28. data/app/assets/javascripts/rails_db/vendor/jquery.js +26 -0
  29. data/app/assets/javascripts/rails_db/vendor/modernizr.js +8 -0
  30. data/app/assets/javascripts/rails_db/vendor/placeholder.js +2 -0
  31. data/app/assets/stylesheets/rails_db/application.css +1 -0
  32. data/app/assets/stylesheets/rails_db/foundation.css +6579 -0
  33. data/app/assets/stylesheets/rails_db/foundation.min.css +1 -0
  34. data/app/assets/stylesheets/rails_db/foundation_and_overrides.css.scss +7 -4
  35. data/app/assets/stylesheets/rails_db/normalize.css +424 -0
  36. data/app/views/layouts/rails_db/application.html.erb +0 -1
  37. data/app/views/rails_db/dashboard/index.html.erb +1 -0
  38. data/app/views/rails_db/dashboard/standalone.html.erb +19 -0
  39. data/app/views/rails_db/shared/_footer.html.erb +36 -35
  40. data/app/views/rails_db/shared/_header.html.erb +7 -0
  41. data/app/views/rails_db/tables/data.js.erb +3 -1
  42. data/app/views/rails_db/tables/show.js.erb +3 -1
  43. data/bin/rails_db +3 -0
  44. data/bin/railsdb +3 -0
  45. data/bin/runsql +50 -0
  46. data/config/routes.rb +1 -1
  47. data/lib/ext/string_ext.rb +10 -0
  48. data/lib/libs.rb +24 -0
  49. data/lib/rails_db.rb +16 -8
  50. data/lib/rails_db/adapters/base_adapter.rb +21 -2
  51. data/lib/rails_db/adapters/mysql.rb +8 -0
  52. data/lib/rails_db/blank_results.rb +8 -0
  53. data/lib/rails_db/database.rb +12 -0
  54. data/lib/rails_db/mysql_result.rb +18 -0
  55. data/lib/rails_db/table.rb +10 -10
  56. data/lib/rails_db/table_data.rb +4 -4
  57. data/lib/rails_db/table_pagination.rb +1 -1
  58. data/lib/rails_db/version.rb +1 -1
  59. data/lib/standalone.rb +49 -0
  60. data/rails_db.gemspec +32 -0
  61. data/test/dashboard_controller_test.rb +3 -0
  62. data/test/dummy/db/rails_db.sqlite3 +0 -0
  63. data/test/dummy/db/rails_db_dev.sqlite3 +0 -0
  64. data/test/dummy/db/schema.rb +40 -40
  65. data/test/sql_query_test.rb +13 -0
  66. data/test/standalone/Gemfile +17 -0
  67. data/test/standalone/Gemfile.lock +138 -0
  68. data/test/standalone/README.rdoc +28 -0
  69. data/test/standalone/Rakefile +6 -0
  70. data/test/standalone/app/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  71. data/test/standalone/app/assets/fonts/glyphicons-halflings-regular.svg +288 -0
  72. data/test/standalone/app/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  73. data/test/standalone/app/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  74. data/test/standalone/app/assets/fonts/glyphicons-halflings-regular.woff2 +0 -0
  75. data/test/standalone/app/assets/javascripts/application.js +13 -0
  76. data/test/standalone/app/assets/stylesheets/application.css +15 -0
  77. data/test/standalone/app/assets/stylesheets/bootstrap-theme.min.css +5 -0
  78. data/test/standalone/app/assets/stylesheets/bootstrap.min.css +5 -0
  79. data/test/standalone/app/controllers/application_controller.rb +5 -0
  80. data/test/standalone/app/controllers/home_controller.rb +7 -0
  81. data/test/standalone/app/helpers/application_helper.rb +2 -0
  82. data/test/standalone/app/views/home/index.html.erb +3 -0
  83. data/test/standalone/app/views/layouts/application.html.erb +16 -0
  84. data/test/standalone/bin/bundle +3 -0
  85. data/test/standalone/bin/rails +4 -0
  86. data/test/standalone/bin/rake +4 -0
  87. data/test/standalone/bin/setup +29 -0
  88. data/test/standalone/config.ru +4 -0
  89. data/test/standalone/config/application.rb +40 -0
  90. data/test/standalone/config/boot.rb +7 -0
  91. data/test/standalone/config/database.yml +0 -0
  92. data/test/standalone/config/environment.rb +5 -0
  93. data/test/standalone/config/environments/development.rb +43 -0
  94. data/test/standalone/config/environments/production.rb +82 -0
  95. data/test/standalone/config/environments/test.rb +46 -0
  96. data/test/standalone/config/initializers/assets.rb +11 -0
  97. data/test/standalone/config/initializers/backtrace_silencers.rb +7 -0
  98. data/test/standalone/config/initializers/cookies_serializer.rb +3 -0
  99. data/test/standalone/config/initializers/filter_parameter_logging.rb +4 -0
  100. data/test/standalone/config/initializers/inflections.rb +16 -0
  101. data/test/standalone/config/initializers/mime_types.rb +4 -0
  102. data/test/standalone/config/initializers/quite_assets.rb +11 -0
  103. data/test/standalone/config/initializers/rails_db.rb +23 -0
  104. data/test/standalone/config/initializers/session_store.rb +3 -0
  105. data/test/standalone/config/initializers/wrap_parameters.rb +14 -0
  106. data/test/standalone/config/locales/en.yml +23 -0
  107. data/test/standalone/config/routes.rb +5 -0
  108. data/test/standalone/config/secrets.yml +22 -0
  109. data/test/standalone/public/404.html +67 -0
  110. data/test/standalone/public/422.html +67 -0
  111. data/test/standalone/public/500.html +66 -0
  112. data/test/standalone/public/favicon.ico +0 -0
  113. metadata +160 -37
@@ -0,0 +1,19 @@
1
+ <h1>Rails DB - Command Line</h1>
2
+
3
+ <p>
4
+ After installing Rails DB gem you can execute locally in any application folder following commands <code>railsdb</code> and <code>runsql</code>.
5
+ </p>
6
+
7
+ <h3>railsdb</h3>
8
+
9
+ <p><code>>railsdb</code> to start railsdb standalone application automatically connected to local <code>config/database.yml</code> file.</p>
10
+
11
+ <p><%= image_tag 'rails_db/railsdb.png' %>
12
+
13
+ <h3>runsql</h3>
14
+
15
+ <p><code>>runsql 'select count(*) from users'</code> to run sql within your database (configured in <code>config/database.yml</code> file).</p>
16
+
17
+ <p><%= image_tag 'rails_db/runsql.png' %>
18
+
19
+ <p>You can connect to production DB by using environment variable <code>RAILS_ENV=production</code>.</p>
@@ -7,48 +7,49 @@
7
7
  <div class="large-6 columns">
8
8
  <ul class="inline-list right">
9
9
  <li>
10
- <%= link_to '/' do %>
11
- <%= fa_icon 'home' %>
12
- Home
13
- <% end %>
10
+ <%= link_to '/' do %>
11
+ <%= fa_icon 'home' %>
12
+ Home
13
+ <% end %>
14
14
  </li>
15
15
  <li>|</li>
16
16
  <li>
17
- <%= link_to rails_db.root_path do %>
18
- <%= fa_icon 'list-ul' %>
19
- Dashboard
20
- <% end %>
17
+ <%= link_to rails_db.root_path do %>
18
+ <%= fa_icon 'list-ul' %>
19
+ Dashboard
20
+ <% end %>
21
21
  </li>
22
22
  <li>|</li>
23
23
  <li>
24
- <%= link_to rails_db.sql_path do %>
25
- <%= fa_icon 'database' %>
26
- SQL Editor
27
- <% end %>
28
- </li>
29
- <li>|</li>
30
- <li>
31
- <%= link_to rails_db.sql_import_path do %>
32
- <%= fa_icon 'download' %>
33
- Import
34
- <% end %>
35
- </li>
36
- <li>|</li>
37
- <li>
38
- <%= link_to rails_db.data_table_path do %>
39
- <%= fa_icon 'table' %>
40
- Data Table
41
- <% end %>
42
- </li>
43
- <li>|</li>
44
- <li>
45
- <a data-reveal-id="more_gems_modal">
46
- <%= fa_icon 'heart' %>
47
- More Gems
48
- </a>
49
- <%= render '/rails_db/shared/gems' %>
50
- </li>
24
+ <%= link_to rails_db.sql_path do %>
25
+ <%= fa_icon 'database' %>
26
+ SQL Editor
27
+ <% end %>
28
+ </li>
29
+ <li>|</li>
30
+ <li>
31
+ <%= link_to rails_db.sql_import_path do %>
32
+ <%= fa_icon 'download' %>
33
+ Import
34
+ <% end %>
35
+ </li>
36
+ <li>|</li>
37
+ <li>
38
+ <%= link_to rails_db.data_table_path do %>
39
+ <%= fa_icon 'table' %>
40
+ Data Table
41
+ <% end %>
42
+ </li>
43
+ <li>|</li>
44
+ <li>
45
+ <a data-reveal-id="more_gems_modal">
46
+ <%= fa_icon 'heart' %>
47
+ More Gems
48
+ </a>
49
+ </li>
51
50
  </ul>
51
+ <div class='clear'></div>
52
52
  </div>
53
53
  </div>
54
+ <%= render '/rails_db/shared/gems' %>
54
55
  </div>
@@ -31,6 +31,13 @@
31
31
  Data Table
32
32
  <% end %>
33
33
  </li>
34
+ <li>|</li>
35
+ <li>
36
+ <%= link_to rails_db.standalone_path do %>
37
+ <%= fa_icon 'circle' %>
38
+ Command Line
39
+ <% end %>
40
+ </li>
34
41
  </ul>
35
42
  <ul class="inline-list right main_nav">
36
43
  <li>
@@ -7,4 +7,6 @@ $('.sidebar_table_<%= @table.name %>').addClass('selected');
7
7
 
8
8
  stickyFooter();
9
9
 
10
- $(document).foundation('reflow');
10
+ $(document).foundation('reflow');
11
+
12
+ $(document).scrollTop(0);
@@ -7,4 +7,6 @@ $('.sidebar_table_<%= @table.name %>').addClass('selected');
7
7
 
8
8
  stickyFooter();
9
9
 
10
- $(document).foundation('reflow');
10
+ $(document).foundation('reflow');
11
+
12
+ $(document).scrollTop(0);
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require ::File.expand_path('../../lib/standalone', __FILE__)
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require ::File.expand_path('../../lib/standalone', __FILE__)
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'active_record'
4
+ require 'erb'
5
+ require 'yaml'
6
+ require 'terminal-table'
7
+
8
+ require_relative "../lib/rails_db"
9
+
10
+ debug = false
11
+
12
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
13
+ ENGINE_PATH = File.expand_path('../../lib/rails_db/engine', __FILE__)
14
+
15
+ require "#{ENGINE_ROOT}/lib/ext/string_ext"
16
+ require "#{ENGINE_ROOT}/lib/libs"
17
+
18
+ database_yml = ::File.expand_path(File.join('.', 'config', 'database.yml'))
19
+ app_path = ::File.expand_path(File.join('.'))
20
+
21
+ db_conf = YAML.load(ERB.new(File.open(database_yml).read).result) || {}
22
+ env = ENV['RAILS_ENV'] || ENV['ENV'] || 'development'
23
+ db_env = db_conf[env]
24
+
25
+ if db_env['adapter'] == 'sqlite3'
26
+ db_env['database'] = "#{app_path}/#{db_env['database']}"
27
+ end
28
+
29
+ if debug
30
+ puts "ENV: #{db_env.inspect}"
31
+ end
32
+
33
+ ActiveRecord::Base.establish_connection(db_env)
34
+
35
+ RailsDb.use_default_configuration!
36
+
37
+ sql = "#{ARGV[0]}".strip
38
+ puts "Executing: #{sql}".red
39
+
40
+ sql_query = RailsDb::SqlQuery.new(sql).execute
41
+
42
+ rows = sql_query.data.rows
43
+ cols = sql_query.data.columns
44
+
45
+ if rows.any?
46
+ table = Terminal::Table.new rows: rows, headings: cols
47
+ puts table
48
+ else
49
+ puts []
50
+ end
@@ -15,9 +15,9 @@ RailsDb::Engine.routes.draw do
15
15
  post '/import-start' => 'sql#import_start', as: :sql_start_import
16
16
 
17
17
  get '/data-table' => 'dashboard#data_table', as: :data_table
18
+ get '/standalone' => 'dashboard#standalone', as: :standalone
18
19
  end
19
20
 
20
-
21
21
  if RailsDb.automatic_routes_mount
22
22
  Rails.application.routes.draw do
23
23
  mount_rails_db_routes
@@ -0,0 +1,10 @@
1
+ class String
2
+ def red; colorize(self, "\e[1m\e[31m"); end
3
+ def green; colorize(self, "\e[1m\e[32m"); end
4
+ def dark_green; colorize(self, "\e[32m"); end
5
+ def yellow; colorize(self, "\e[1m\e[33m"); end
6
+ def blue; colorize(self, "\e[1m\e[34m"); end
7
+ def dark_blue; colorize(self, "\e[34m"); end
8
+ def pur; colorize(self, "\e[1m\e[35m"); end
9
+ def colorize(text, color_code) "#{color_code}#{text}\e[0m" end
10
+ end
@@ -0,0 +1,24 @@
1
+ require_relative 'rails_db/version'
2
+
3
+ require_relative 'rails_db/connection'
4
+ require_relative 'rails_db/database'
5
+ require_relative 'rails_db/blank_results'
6
+ require_relative 'rails_db/mysql_result'
7
+ require_relative 'rails_db/result'
8
+ require_relative 'rails_db/rails_db_error'
9
+ require_relative 'rails_db/history'
10
+
11
+ require_relative 'rails_db/sql_query_data'
12
+ require_relative 'rails_db/sql_explain'
13
+ require_relative 'rails_db/sql_import'
14
+ require_relative 'rails_db/sql_query'
15
+
16
+ require_relative 'rails_db/table_pagination'
17
+ require_relative 'rails_db/table'
18
+ require_relative 'rails_db/table_data'
19
+
20
+ require_relative 'rails_db/adapters/base_adapter'
21
+ require_relative 'rails_db/adapters/mysql'
22
+ require_relative 'rails_db/adapters/postgres'
23
+ require_relative 'rails_db/adapters/sqlite'
24
+
@@ -1,16 +1,17 @@
1
+ require "rails"
1
2
  require "font-awesome-rails"
2
- require "foundation-rails"
3
3
  require "sass"
4
4
  require "sass-rails"
5
5
  require "jquery-rails"
6
6
  require 'codemirror-rails'
7
+ require 'terminal-table'
7
8
 
8
9
  module RailsDb
9
10
  # Custom require relative that work with older rubies also
10
- def self.require_relative(path)
11
- full_path = File.expand_path(path, File.dirname(__FILE__))
12
- Kernel.require(full_path)
13
- end
11
+ # def self.require_relative(path)
12
+ # full_path = File.expand_path(path, File.dirname(__FILE__))
13
+ # Kernel.require(full_path)
14
+ # end
14
15
 
15
16
  # gem in enabled
16
17
  mattr_accessor :enabled
@@ -48,8 +49,15 @@ module RailsDb
48
49
  yield(self)
49
50
  end
50
51
 
51
- end
52
+ def self.use_default_configuration!
53
+ self.enabled = true
54
+ self.automatic_routes_mount = true
55
+ self.black_list_tables = white_list_tables = []
56
+ self.http_basic_authentication_enabled = false
57
+ self.verify_access_proc = proc { |controller| true }
58
+ end
52
59
 
53
- require "rails_db/engine"
60
+ end
54
61
 
55
- RailsDb.require_relative("rails/routes")
62
+ require_relative "rails_db/engine"
63
+ require_relative "rails/routes"
@@ -12,14 +12,21 @@ module RailsDb
12
12
  Time.now - t0
13
13
  end
14
14
 
15
- def self.exec_query(sql, log = true)
15
+ def self.exec_query(sql)
16
16
  t0 = Time.now
17
- Rails.logger.debug "--> Executing: #{sql}" if log
18
17
  results = connection.exec_query(sql)
19
18
  execution_time = Time.now - t0
20
19
  [results, execution_time]
21
20
  end
22
21
 
22
+ def self.select(sql)
23
+ BaseAdapter.exec_query(sql)
24
+ end
25
+
26
+ def self.explain(sql)
27
+ BaseAdapter.exec_query(sql)
28
+ end
29
+
23
30
  def self.adapter_name
24
31
  'base'
25
32
  end
@@ -36,6 +43,18 @@ module RailsDb
36
43
  execute("DELETE FROM #{table_name} WHERE #{pk_name} = #{pk_id};")
37
44
  end
38
45
 
46
+ def self.count(table_name)
47
+ select("SELECT COUNT(*) FROM #{table_name}")[0].rows.flatten.last.to_i
48
+ end
49
+
50
+ def self.primary_key(table_name)
51
+ connection.primary_key(table_name)
52
+ end
53
+
54
+ def self.indexes(table_name)
55
+ connection.indexes(table_name)
56
+ end
57
+
39
58
  private
40
59
 
41
60
  def self.multiple_execute(sql, divider = ";\n")
@@ -9,6 +9,14 @@ module RailsDb
9
9
  Time.now - t0
10
10
  end
11
11
 
12
+ def self.exec_query(sql, log = true)
13
+ t0 = Time.now
14
+ results = connection.execute(sql, 'SQL') # used from RoR mysql adapter source
15
+ result = MysqlResult.new(results)
16
+ execution_time = Time.now - t0
17
+ [result, execution_time]
18
+ end
19
+
12
20
  def self.adapter_name
13
21
  'mysql'
14
22
  end
@@ -0,0 +1,8 @@
1
+ module RailsDb
2
+ class BlankResults
3
+
4
+ def rows; [] end
5
+ def columns; [] end
6
+
7
+ end
8
+ end
@@ -2,6 +2,18 @@ module RailsDb
2
2
  class Database
3
3
  extend Connection
4
4
 
5
+ class << self
6
+ delegate :count, to: :adapter
7
+ delegate :truncate, to: :adapter
8
+ delegate :delete, to: :adapter
9
+ delegate :execute, to: :adapter
10
+ delegate :select, to: :adapter
11
+ delegate :explain, to: :adapter
12
+ delegate :exec_query, to: :adapter
13
+ delegate :primary_key, to: :adapter
14
+ delegate :indexes, to: :adapter
15
+ end
16
+
5
17
  def self.tables
6
18
  connection.tables.sort - ['schema_migrations']
7
19
  end
@@ -0,0 +1,18 @@
1
+ module RailsDb
2
+ class MysqlResult
3
+
4
+ attr_reader :columns, :rows
5
+
6
+ delegate :each, :to => :rows
7
+
8
+ def initialize(result)
9
+ @columns = []
10
+ @rows = []
11
+ if result
12
+ @columns = result.fields
13
+ @rows = result.entries
14
+ end
15
+ end
16
+
17
+ end
18
+ end
@@ -7,12 +7,12 @@ module RailsDb
7
7
 
8
8
  attr_reader :name, :data
9
9
 
10
- delegate :count, :to => :data
11
- delegate :paginate, :to => :data
12
- delegate :limit, :to => :data
13
- delegate :order, :to => :data
14
- delegate :asc, :to => :data
15
- delegate :desc, :to => :data
10
+ delegate :count, to: :data
11
+ delegate :paginate, to: :data
12
+ delegate :limit, to: :data
13
+ delegate :order, to: :data
14
+ delegate :asc, to: :data
15
+ delegate :desc, to: :data
16
16
 
17
17
  def initialize(table_name)
18
18
  throw 'Access Denied' unless RailsDb::Database.accessible_tables.include?(table_name)
@@ -30,19 +30,19 @@ module RailsDb
30
30
  end
31
31
 
32
32
  def indexes
33
- connection.indexes(name)
33
+ RailsDb::Database.indexes(name)
34
34
  end
35
35
 
36
36
  def truncate
37
- RailsDb::Database.adapter.truncate(name)
37
+ RailsDb::Database.truncate(name)
38
38
  end
39
39
 
40
40
  def primary_key
41
- connection.primary_key(name)
41
+ RailsDb::Database.primary_key(name)
42
42
  end
43
43
 
44
44
  def delete(id)
45
- RailsDb::Database.adapter.delete(name, primary_key, id)
45
+ RailsDb::Database.delete(name, primary_key, id)
46
46
  end
47
47
 
48
48
  end # module
@@ -6,8 +6,8 @@ module RailsDb
6
6
  attr_reader :table, :time
7
7
  attr_accessor :current_page, :offset, :per_page, :sort_column, :sort_order, :select_columns
8
8
 
9
- delegate :each, :to => :data
10
- delegate :count, :to => :table
9
+ delegate :each, to: :data
10
+ delegate :count, to: :table
11
11
 
12
12
  def initialize(table)
13
13
  @table = table
@@ -27,7 +27,7 @@ module RailsDb
27
27
  if per_page
28
28
  commands.push("LIMIT #{per_page.to_i} OFFSET #{offset.to_i}")
29
29
  end
30
- results, @time = Database.adapter.exec_query(commands.join(' '))
30
+ results, @time = Database.select(commands.join(' '))
31
31
  results
32
32
  end
33
33
  end
@@ -71,7 +71,7 @@ module RailsDb
71
71
  end
72
72
 
73
73
  def count
74
- Database.adapter.exec_query("SELECT COUNT(*) FROM #{table.name}")[0].rows.flatten.last.to_i
74
+ Database.count(table.name)
75
75
  end
76
76
 
77
77
  end