console_util 0.1.0

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/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in console_util.gemspec
4
+ gemspec
data/README.rdoc ADDED
@@ -0,0 +1,6 @@
1
+ = ConsoleUtil
2
+
3
+ Contains various utilities for working in the Rails console.
4
+
5
+ Author:: Clyde Law (mailto:clyde@futureadvisor.com)
6
+ License:: Released under the MIT license
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "console_util/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "console_util"
7
+ s.version = ConsoleUtil::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Clyde Law"]
10
+ s.email = ["clyde@futureadvisor.com"]
11
+ s.homepage = %q{http://github.com/FutureAdvisor/console_util}
12
+ s.summary = %q{Contains various utilities for working in the Rails console.}
13
+ s.description = %q{Contains various utilities for working in the Rails console.}
14
+ s.license = 'MIT'
15
+
16
+ s.add_dependency('rails', '>= 2.1.0')
17
+
18
+ s.rubyforge_project = "console_util"
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ["lib"]
24
+ end
@@ -0,0 +1,88 @@
1
+ module ConsoleUtil
2
+ class Color
3
+ @@colors = [:black, :red, :green, :yellow, :blue, :magenta, :cyan, :white]
4
+
5
+ @@color_codes = {
6
+ :reset => 0, # Reset all current console color attributes.
7
+ :bright => 1, # Set intensity of current console foreground color to bright.
8
+ :underline => 4, # Underline console output.
9
+ :blink => 5, # Blink console output.
10
+ :negative => 7, # Invert the current console foreground and background colors.
11
+ :normal => 22, # Set intensity of current console foreground color to normal.
12
+ :no_underline => 24, # Do not underline console output.
13
+ :no_blink => 25, # Do not blink console output.
14
+ :positive => 27 # Do not invert the current console foreground and background colors.
15
+ }
16
+
17
+ @@fg_color_base = 30
18
+ @@bg_color_base = 40
19
+
20
+ # Define constants that return the ANSI escape codes corresponding to each
21
+ # of the predefined color attributes.
22
+ @@color_codes.each do |color_attr, code|
23
+ color_const = color_attr.to_s.upcase
24
+ self.class_eval <<-COLOR_CONST, __FILE__, __LINE__ + 1
25
+ #{color_const} = "\e[#{code}m"
26
+ COLOR_CONST
27
+ end
28
+
29
+ class << self
30
+ # Used to create magic constants for every supported color combination.
31
+ def const_missing(const)
32
+ # Attempt to parse the method name as a color string.
33
+ color_escape_code = convert_color_string(const.to_s)
34
+
35
+ if color_escape_code
36
+ # Define a constant for the ANSI escape code that corresponds to the
37
+ # specified color and return it.
38
+ self.class_eval <<-COLOR_CONST, __FILE__, __LINE__ + 1
39
+ #{const} = "#{color_escape_code}"
40
+ COLOR_CONST
41
+ else
42
+ super
43
+ end
44
+ end
45
+
46
+ def valid_escape_code?(color_escape_code)
47
+ !color_escape_code.match(/^\e\[[0-9;]*m$/).nil?
48
+ end
49
+
50
+ private
51
+ def convert_color_string(color_string)
52
+ bright = nil
53
+ fg = nil
54
+ bg = nil
55
+
56
+ # Parse the color string; supported formats are:
57
+ # - FG
58
+ # - FG_ON_BG
59
+ # - ON_BG
60
+ # - BRIGHT_FG
61
+ # - BRIGHT_FG_ON_BG
62
+ case color_string
63
+ when /^ON_([A-Z]+)$/
64
+ bg = @@colors.index($1.downcase.to_sym)
65
+ return nil if bg.nil?
66
+ when /^(BRIGHT_)?([A-Z]+)(_ON_([A-Z]+))?$/
67
+ bright = !$1.nil?
68
+ fg = @@colors.index($2.downcase.to_sym)
69
+ return nil if fg.nil?
70
+ if $4
71
+ bg = @@colors.index($4.downcase.to_sym)
72
+ return nil if bg.nil?
73
+ end
74
+ else
75
+ return nil
76
+ end
77
+
78
+ # Convert the color to an ANSI escape code sequence that sets the current
79
+ # console color.
80
+ color_codes = []
81
+ color_codes << (bright ? @@color_codes[:bright] : @@color_codes[:normal]) unless bright.nil?
82
+ color_codes << (fg + @@fg_color_base).to_s if fg
83
+ color_codes << (bg + @@bg_color_base).to_s if bg
84
+ "\e[#{color_codes.join(';')}m"
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,3 @@
1
+ module ConsoleUtil
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,32 @@
1
+ require 'console_util/color'
2
+
3
+ module ConsoleUtil
4
+ class << self
5
+ # Monkey-patch the ActiveRecord connection to output the SQL query before
6
+ # executing it.
7
+ def output_sql_to_console(options = {})
8
+ color = Color::CYAN
9
+ if options[:color]
10
+ raise ArgumentError.new("invalid color option: #{options[:color].inspect}") unless Color.valid_escape_code?(options[:color])
11
+ color = options[:color]
12
+ end
13
+
14
+ ActiveRecord::Base.connection.class_eval do
15
+ define_method(:execute) do |sql, *name|
16
+ puts "#{color}#{sql}#{Color::RESET}"
17
+ super
18
+ end
19
+ end
20
+
21
+ true
22
+ end
23
+
24
+ # Load all models into the environment
25
+ def load_all_models
26
+ Rails.root.join('app/models').each_entry do |model_file|
27
+ model_match = model_file.to_s.match(/^(.*)\.rb$/)
28
+ model_match[1].classify.constantize if model_match
29
+ end
30
+ end
31
+ end
32
+ end
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: console_util
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Clyde Law
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-04-20 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rails
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 11
29
+ segments:
30
+ - 2
31
+ - 1
32
+ - 0
33
+ version: 2.1.0
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ description: Contains various utilities for working in the Rails console.
37
+ email:
38
+ - clyde@futureadvisor.com
39
+ executables: []
40
+
41
+ extensions: []
42
+
43
+ extra_rdoc_files: []
44
+
45
+ files:
46
+ - .gitignore
47
+ - Gemfile
48
+ - README.rdoc
49
+ - Rakefile
50
+ - console_util.gemspec
51
+ - lib/console_util.rb
52
+ - lib/console_util/color.rb
53
+ - lib/console_util/version.rb
54
+ homepage: http://github.com/FutureAdvisor/console_util
55
+ licenses:
56
+ - MIT
57
+ post_install_message:
58
+ rdoc_options: []
59
+
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ hash: 3
68
+ segments:
69
+ - 0
70
+ version: "0"
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 3
77
+ segments:
78
+ - 0
79
+ version: "0"
80
+ requirements: []
81
+
82
+ rubyforge_project: console_util
83
+ rubygems_version: 1.7.2
84
+ signing_key:
85
+ specification_version: 3
86
+ summary: Contains various utilities for working in the Rails console.
87
+ test_files: []
88
+