jsdebug-rails 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/lib/generators/jsdebug/install/install_generator.rb +18 -0
- data/lib/generators/jsdebug/install/templates/jsdebug.js +203 -0
- data/lib/jsdebug-rails.rb +19 -0
- data/lib/jsdebug/directive_processor.rb +11 -0
- data/lib/jsdebug/processor.rb +63 -0
- data/lib/jsdebug/railtie.rb +13 -0
- data/lib/jsdebug/version.rb +5 -0
- metadata +118 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
module Jsdebug
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < ::Rails::Generators::Base
|
4
|
+
source_root File.expand_path("../templates", __FILE__)
|
5
|
+
|
6
|
+
def generate_install
|
7
|
+
copy_file "jsdebug.js", "app/assets/javascripts/jsdebug.js"
|
8
|
+
end
|
9
|
+
|
10
|
+
def inject_jsdebug
|
11
|
+
inject_into_file "app/assets/javascripts/application.js", :before => "//= require_tree" do
|
12
|
+
"//= require_environment 'jsdebug' 'development'\n"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,203 @@
|
|
1
|
+
/*!
|
2
|
+
* Rails Jsdebug
|
3
|
+
* Dual licensed under the MIT and GPL licenses.
|
4
|
+
*
|
5
|
+
* Based upon the plugin by "Cowboy" Ben Alman
|
6
|
+
* http://benalman.com/projects/javascript-debug-console-log/
|
7
|
+
*/
|
8
|
+
|
9
|
+
// Script: JavaScript Debug: A simple wrapper for console.log
|
10
|
+
// Tested with Internet Explorer 6-8, Firefox 3-3.6, Safari 3-4, Chrome 3-5, Opera 9.6-10.5
|
11
|
+
//
|
12
|
+
// About: License
|
13
|
+
// Dual licensed under the MIT and GPL licenses.
|
14
|
+
//
|
15
|
+
// About: Support and Testing
|
16
|
+
// Information about what browsers this code has been tested in.
|
17
|
+
//
|
18
|
+
// Browsers Tested - Internet Explorer 6-8, Firefox 3-3.6, Safari 3-4, Chrome
|
19
|
+
// 3-5, Opera 9.6-10.5
|
20
|
+
//
|
21
|
+
// About: Examples
|
22
|
+
//
|
23
|
+
// These working examples, complete with fully commented code, illustrate a few
|
24
|
+
// ways in which this plugin can be used.
|
25
|
+
//
|
26
|
+
// Examples - http://benalman.com/code/projects/javascript-debug/examples/debug/
|
27
|
+
//
|
28
|
+
// Topic: Pass-through console methods
|
29
|
+
//
|
30
|
+
// assert, clear, count, dir, dirxml, exception, group, groupCollapsed,
|
31
|
+
// groupEnd, profile, profileEnd, table, time, timeEnd, trace
|
32
|
+
//
|
33
|
+
// These console methods are passed through (but only if both the console and
|
34
|
+
// the method exists), so use them without fear of reprisal.
|
35
|
+
|
36
|
+
window.debug = (function(){
|
37
|
+
var window = this,
|
38
|
+
|
39
|
+
// Some convenient shortcuts.
|
40
|
+
aps = Array.prototype.slice,
|
41
|
+
con = window.console,
|
42
|
+
|
43
|
+
// Public object to be returned.
|
44
|
+
that = {},
|
45
|
+
|
46
|
+
callback_func,
|
47
|
+
callback_force,
|
48
|
+
|
49
|
+
// Logging methods, in "priority order". Not all console implementations
|
50
|
+
// will utilize these, but they will be used in the callback passed to
|
51
|
+
// setCallback.
|
52
|
+
log_methods = [ 'error', 'warn', 'info', 'debug', 'log' ],
|
53
|
+
|
54
|
+
// Pass these methods through to the console if they exist, otherwise just
|
55
|
+
// fail gracefully. These methods are provided for convenience.
|
56
|
+
pass_methods = 'assert clear count dir dirxml exception group groupCollapsed groupEnd profile profileEnd table time timeEnd trace'.split(' '),
|
57
|
+
idx = pass_methods.length,
|
58
|
+
|
59
|
+
// Logs are stored here so that they can be recalled as necessary.
|
60
|
+
logs = [];
|
61
|
+
|
62
|
+
while ( --idx >= 0 ) {
|
63
|
+
(function( method ){
|
64
|
+
|
65
|
+
// Generate pass-through methods. These methods will be called, if they
|
66
|
+
// exist, as long as the logging level is non-zero.
|
67
|
+
that[ method ] = function() {
|
68
|
+
con && con[ method ]
|
69
|
+
&& con[ method ].apply( con, arguments );
|
70
|
+
}
|
71
|
+
|
72
|
+
})( pass_methods[idx] );
|
73
|
+
}
|
74
|
+
|
75
|
+
idx = log_methods.length;
|
76
|
+
while ( --idx >= 0 ) {
|
77
|
+
(function( idx, level ){
|
78
|
+
|
79
|
+
// Method: debug.log
|
80
|
+
//
|
81
|
+
// Call the console.log method if available. Adds an entry into the logs
|
82
|
+
// array for a callback .
|
83
|
+
//
|
84
|
+
// Usage:
|
85
|
+
//
|
86
|
+
// debug.log( object [, object, ...] ); - -
|
87
|
+
//
|
88
|
+
// Arguments:
|
89
|
+
// object - (Object) Any valid JavaScript object.
|
90
|
+
|
91
|
+
// Method: debug.debug
|
92
|
+
//
|
93
|
+
// Call the console.debug method if available, otherwise call console.log.
|
94
|
+
// Adds an entry into the logs array.
|
95
|
+
//
|
96
|
+
// Usage:
|
97
|
+
//
|
98
|
+
// debug.debug( object [, object, ...] ); - -
|
99
|
+
//
|
100
|
+
// Arguments:
|
101
|
+
//
|
102
|
+
// object - (Object) Any valid JavaScript object.
|
103
|
+
|
104
|
+
// Method: debug.info
|
105
|
+
//
|
106
|
+
// Call the console.info method if available, otherwise call console.log.
|
107
|
+
// Adds an entry into the logs array.
|
108
|
+
//
|
109
|
+
// Usage:
|
110
|
+
//
|
111
|
+
// debug.info( object [, object, ...] ); - -
|
112
|
+
//
|
113
|
+
// Arguments:
|
114
|
+
//
|
115
|
+
// object - (Object) Any valid JavaScript object.
|
116
|
+
|
117
|
+
// Method: debug.warn
|
118
|
+
//
|
119
|
+
// Call the console.warn method if available, otherwise call console.log.
|
120
|
+
// Adds an entry into the logs array.
|
121
|
+
//
|
122
|
+
// Usage:
|
123
|
+
//
|
124
|
+
// debug.warn( object [, object, ...] ); - -
|
125
|
+
//
|
126
|
+
// Arguments:
|
127
|
+
//
|
128
|
+
// object - (Object) Any valid JavaScript object.
|
129
|
+
|
130
|
+
// Method: debug.error
|
131
|
+
//
|
132
|
+
// Call the console.error method if available, otherwise call console.log.
|
133
|
+
// Adds an entry into the logs array.
|
134
|
+
//
|
135
|
+
// Usage:
|
136
|
+
//
|
137
|
+
// debug.error( object [, object, ...] ); - -
|
138
|
+
//
|
139
|
+
// Arguments:
|
140
|
+
//
|
141
|
+
// object - (Object) Any valid JavaScript object.
|
142
|
+
|
143
|
+
that[ level ] = function() {
|
144
|
+
var args = aps.call( arguments ),
|
145
|
+
log_arr = [ level ].concat( args );
|
146
|
+
|
147
|
+
logs.push( log_arr );
|
148
|
+
exec_callback( log_arr );
|
149
|
+
|
150
|
+
if ( !con ) { return; }
|
151
|
+
|
152
|
+
con.firebug ? con[ level ].apply( window, args )
|
153
|
+
: con[ level ] ? con[ level ]( args )
|
154
|
+
: con.log( args );
|
155
|
+
};
|
156
|
+
|
157
|
+
})( idx, log_methods[idx] );
|
158
|
+
}
|
159
|
+
|
160
|
+
// Execute the callback function if set.
|
161
|
+
function exec_callback( args ) {
|
162
|
+
if ( callback_func && (callback_force || !con || !con.log) ) {
|
163
|
+
callback_func.apply( window, args );
|
164
|
+
}
|
165
|
+
};
|
166
|
+
|
167
|
+
// Method: debug.setCallback
|
168
|
+
//
|
169
|
+
// Set a callback to be used if logging isn't possible due to console.log
|
170
|
+
// not existing. If unlogged logs exist when callback is set, they will all
|
171
|
+
// be logged immediately unless a limit is specified.
|
172
|
+
//
|
173
|
+
// Usage:
|
174
|
+
//
|
175
|
+
// debug.setCallback( callback [, force ] [, limit ] )
|
176
|
+
//
|
177
|
+
// Arguments:
|
178
|
+
//
|
179
|
+
// callback - (Function) The aforementioned callback function. The first
|
180
|
+
// argument is the logging level, and all subsequent arguments are those
|
181
|
+
// passed to the initial debug logging method.
|
182
|
+
// force - (Boolean) If false, log to console.log if available, otherwise
|
183
|
+
// callback. If true, log to both console.log and callback.
|
184
|
+
// limit - (Number) If specified, number of lines to limit initial scrollback
|
185
|
+
// to.
|
186
|
+
|
187
|
+
that.setCallback = function() {
|
188
|
+
var args = aps.call( arguments ),
|
189
|
+
max = logs.length,
|
190
|
+
i = max;
|
191
|
+
|
192
|
+
callback_func = args.shift() || null;
|
193
|
+
callback_force = typeof args[0] === 'boolean' ? args.shift() : false;
|
194
|
+
|
195
|
+
i -= typeof args[0] === 'number' ? args.shift() : max;
|
196
|
+
|
197
|
+
while ( i < max ) {
|
198
|
+
exec_callback( logs[i++] );
|
199
|
+
}
|
200
|
+
};
|
201
|
+
|
202
|
+
return that;
|
203
|
+
})();
|
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
module Jsdebug
|
3
|
+
module Rails
|
4
|
+
require 'jsdebug/directive_processor'
|
5
|
+
require 'jsdebug/processor'
|
6
|
+
require 'jsdebug/railtie'
|
7
|
+
require "jsdebug/version"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
# TODO: Remove in 1.0.0 Version
|
12
|
+
if defined?(Rails::VERSION::STRING) && Rails::VERSION::STRING.match(/^3\.1\.0\.beta/)
|
13
|
+
message = "WARNING: Jsdebug-rails #{Jsdebug::Rails::VERSION} is incompatible with Rails #{Rails::VERSION::STRING}. Please upgrade to Rails 3.1.0.rc1 or higher."
|
14
|
+
if defined?(Rails.logger) && Rails.logger
|
15
|
+
Rails.logger.warn(message)
|
16
|
+
else
|
17
|
+
warn(message)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Jsdebug
|
2
|
+
module Rails
|
3
|
+
|
4
|
+
class DirectiveProcessor < Sprockets::DirectiveProcessor
|
5
|
+
|
6
|
+
def process_require_environment_directive(path, environment="production development test")
|
7
|
+
process_require_directive(path) if environment.include? ::Rails.env
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'tilt'
|
2
|
+
|
3
|
+
module Jsdebug
|
4
|
+
module Rails
|
5
|
+
class Processor < Tilt::Template
|
6
|
+
# TODO: More control can be given here for customization.
|
7
|
+
# log levels are(0..4): :debug, :info, :warn, :error, and :fatal
|
8
|
+
def is_jsdebug_allowed?
|
9
|
+
::Rails.logger.level == 0
|
10
|
+
end
|
11
|
+
|
12
|
+
def prepare
|
13
|
+
end
|
14
|
+
|
15
|
+
def evaluate(context, locals, &block)
|
16
|
+
# return data if is_jsdebug_allowed?
|
17
|
+
|
18
|
+
log_methods = %w[log debug info warn error].
|
19
|
+
map{|c| Regexp.escape "debug.#{c}"}
|
20
|
+
block_methods = %w[start end].
|
21
|
+
map{|c| Regexp.escape "debug_#{c}"}
|
22
|
+
pass_methods = %w[assert clear count dir dirxml exception group groupCollapsed groupEnd profile profileEnd table time timeEnd trace].
|
23
|
+
map{|c| Regexp.escape "debug.#{c}"}
|
24
|
+
|
25
|
+
|
26
|
+
log_regex = Regexp.new log_methods.map{|c| "#{c}#{Regexp.escape '('}"}.join("|")
|
27
|
+
debug_regex = Regexp.new (log_methods + pass_methods).join("|")
|
28
|
+
any_debug_regex = Regexp.new (log_methods + pass_methods + block_methods).join("|")
|
29
|
+
|
30
|
+
if %w[jsdebug jquery jquery_ujs jquery-ui].include? name || !data =~ any_debug_regex
|
31
|
+
return data
|
32
|
+
end
|
33
|
+
|
34
|
+
new_data = []
|
35
|
+
index = 0
|
36
|
+
debug_block = false
|
37
|
+
data.each_line do |line|
|
38
|
+
index += 1
|
39
|
+
|
40
|
+
if(is_jsdebug_allowed? && line.match(log_regex))
|
41
|
+
cmd = line.scan(log_regex).first
|
42
|
+
new_data << line.gsub(cmd, "#{cmd}'[#{name}::#{index}]', ")
|
43
|
+
else
|
44
|
+
if (!is_jsdebug_allowed?)
|
45
|
+
if line.match(/debug_start/)
|
46
|
+
debug_block = true
|
47
|
+
elsif line.match(/debug_end/)
|
48
|
+
debug_block = false
|
49
|
+
next
|
50
|
+
end
|
51
|
+
|
52
|
+
next if debug_block
|
53
|
+
end
|
54
|
+
|
55
|
+
new_data << line if !line.match(debug_regex)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
return new_data.join("")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "rails"
|
2
|
+
module Jsdebug
|
3
|
+
module Rails
|
4
|
+
class Railtie < ::Rails::Railtie
|
5
|
+
config.after_initialize do |app|
|
6
|
+
app.assets.unregister_processor 'application/javascript', Sprockets::DirectiveProcessor
|
7
|
+
app.assets.register_processor 'application/javascript', Jsdebug::Rails::DirectiveProcessor
|
8
|
+
|
9
|
+
app.assets.register_processor 'application/javascript', Jsdebug::Rails::Processor
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
metadata
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jsdebug-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jeremy Peterson
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-07-12 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: tilt
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ~>
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "1.1"
|
24
|
+
- - "!="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.3.0
|
27
|
+
type: :runtime
|
28
|
+
version_requirements: *id001
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: sprockets
|
31
|
+
prerelease: false
|
32
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - "="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 2.0.0.beta.10
|
38
|
+
type: :runtime
|
39
|
+
version_requirements: *id002
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: thor
|
42
|
+
prerelease: false
|
43
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ~>
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: "0.14"
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id003
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: mocha
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - "="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 0.9.8
|
60
|
+
type: :development
|
61
|
+
version_requirements: *id004
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: bundler
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 1.0.0.rc.6
|
71
|
+
type: :development
|
72
|
+
version_requirements: *id005
|
73
|
+
description: Jsdebug extends the asset pipeline for javascript logging.
|
74
|
+
email:
|
75
|
+
- jeremy.g.peterson@gmail.com
|
76
|
+
executables: []
|
77
|
+
|
78
|
+
extensions: []
|
79
|
+
|
80
|
+
extra_rdoc_files: []
|
81
|
+
|
82
|
+
files:
|
83
|
+
- lib/generators/jsdebug/install/install_generator.rb
|
84
|
+
- lib/generators/jsdebug/install/templates/jsdebug.js
|
85
|
+
- lib/jsdebug/directive_processor.rb
|
86
|
+
- lib/jsdebug/processor.rb
|
87
|
+
- lib/jsdebug/railtie.rb
|
88
|
+
- lib/jsdebug/version.rb
|
89
|
+
- lib/jsdebug-rails.rb
|
90
|
+
homepage: http://rubygems.org/gems/jsdebug-rails
|
91
|
+
licenses: []
|
92
|
+
|
93
|
+
post_install_message:
|
94
|
+
rdoc_options: []
|
95
|
+
|
96
|
+
require_paths:
|
97
|
+
- lib
|
98
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: "0"
|
104
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.3.6
|
110
|
+
requirements: []
|
111
|
+
|
112
|
+
rubyforge_project: jsdebug-rails
|
113
|
+
rubygems_version: 1.8.5
|
114
|
+
signing_key:
|
115
|
+
specification_version: 3
|
116
|
+
summary: Provides javascript loging for development and removes statements when in production.
|
117
|
+
test_files: []
|
118
|
+
|