mascut 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/HISTORY.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ = 0.0.4
2
+ * remove sinatra dependency, mascut is now a Rack middleware (use Mascut::Mascut)
3
+ * add command line option
4
+
1
5
  = 0.0.3 (2010-04-08)
2
6
  * add Rack option
3
7
 
data/README.rdoc CHANGED
@@ -19,6 +19,9 @@ Simply execute this command at the top of your working directory
19
19
  Accessing <http://localhost:9203/working_html.html> with your browser, you can see it works as comet.
20
20
  When you edit your working stuffs, your browser will automatically be reloaded!!
21
21
 
22
+ For Additional Information, just see helps
23
+ % mascut --help
24
+
22
25
  == Copyright
23
26
 
24
- Copyright (c) 2009 okitan. See LICENSE for details.
27
+ Copyright (c) 2009-2010 okitan. See LICENSE for details.
data/Rakefile CHANGED
@@ -11,8 +11,6 @@ begin
11
11
  gem.homepage = 'http://github.com/okitan/mascut'
12
12
  gem.authors = %w[ okitan ]
13
13
 
14
- gem.add_dependency 'sinatra', '>=0.9.4'
15
-
16
14
  gem.add_development_dependency 'rspec', '>= 1.2.9'
17
15
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
18
16
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/bin/mascut CHANGED
@@ -14,14 +14,17 @@ rescue LoadError
14
14
  end
15
15
 
16
16
  Version = Mascut::VERSION
17
- p opts = Mascut::Option.parse
17
+ opts = Mascut::Option.parse
18
18
 
19
19
  app = Rack::Builder.new do
20
20
  use Rack::CommonLogger, $stdout
21
21
  use Rack::ShowExceptions
22
22
  use Rack::ShowStatus
23
+
24
+ use Rack::ContentLength
23
25
 
24
- run Rack::Cascade.new([ Mascut::Mascut.new, Rack::File.new('.') ])
26
+ use Mascut::Mascut, opts[:mascut], opts[:files], opts
27
+ run Rack::File.new('.')
25
28
  end.to_app
26
29
 
27
30
  begin
data/lib/mascut/mascut.rb CHANGED
@@ -1,32 +1,51 @@
1
- require 'sinatra/base'
2
-
3
1
  module Mascut
4
- class Mascut < Sinatra::Base
5
- get '/mascut' do
6
- headers 'Cache-Control' => 'no-cache', 'Pragma' => 'no-cache'
7
-
2
+ class Mascut
3
+ def initialize(app, path = nil, files = nil, opts = nil)
4
+ @app = app
5
+ @path = path || '/mascut'
6
+ @files = files || Dir['**/*']
7
+ @opts = opts || {}
8
+ end
9
+
10
+ def call(env)
11
+ if env['PATH_INFO'] == @path
12
+ mascut
13
+ else
14
+ status, headers, body = @app.call(env)
15
+ if status == 200 and headers['Content-Type'] =~ /^text\/html/
16
+ body = [ File.read(body.path) ] if body.is_a?(Rack::File)
17
+ body.map! {|html| mascutize(html) }
18
+ headers['Content-Length'] = body.to_a.inject(0) { |len, part| len + Rack::Utils.bytesize(part) }.to_s
19
+
20
+ [ status, headers, [mascutize(body.first)] ]
21
+ else
22
+ [ status, headers, body ]
23
+ end
24
+ end
25
+ end
26
+
27
+ def mascut
8
28
  now = Time.now
9
- files = Dir['**/*']
10
29
 
11
30
  catch :reload do
12
31
  loop do
13
- files.each {|file| throw(:reload, 'reload') if File.exist?(file) and now < File.mtime(file) }
14
- sleep 1
32
+ @files.each {|file| throw(:reload, 'reload') if File.exist?(file) and now < File.mtime(file) }
33
+ sleep (@opts[:interval] || 1.0)
15
34
  end
16
35
  end
17
- end
18
-
19
- get %r{^/(.+\.html)$} do |name|
20
- halt(404) unless File.exist?(name)
21
36
 
22
- # I don't use nokogiri because it corercts wrong html.
23
- File.read(name).sub('</head>', <<-JS)
37
+ [ 200, { 'Cache-Control' => 'no-cache', 'Pragma' => 'no-cache', 'Content-Type' => 'text/plain' }, ['reload'] ]
38
+ end
39
+
40
+ def mascutize(html)
41
+ # I don't use html parser like nokogiri, because it corrects html to be debugged
42
+ html.sub('</head>', <<-JS)
24
43
  <script src='http://www.google.com/jsapi'></script>
25
44
  <script>
26
45
  var comet = function() {
27
46
  $.ajax({
28
47
  type: 'GET',
29
- url: '/mascut',
48
+ url: '#{@path}',
30
49
  success: function(msg) {
31
50
  msg == 'reload' ? location.reload() : comet();
32
51
  }
@@ -39,10 +58,5 @@ google.setOnLoadCallback(comet);
39
58
  </head>
40
59
  JS
41
60
  end
42
-
43
- get %r{^/(.+\.css)$} do |name|
44
- content_type :css
45
- File.exist?(name) ? File.read(name) : halt(404)
46
- end
47
61
  end
48
62
  end
data/lib/mascut/option.rb CHANGED
@@ -9,28 +9,38 @@ module Mascut
9
9
  :Port => 9203
10
10
  }.tap do |options|
11
11
  OptionParser.new do |opts|
12
+ opts.banner = "Usage: mascut [files] [rack options] [mascut options]"
13
+
12
14
  opts.separator 'Rack options:' # almost same as rack
13
- opts.on('-s', '--server SERVER', 'serve using SERVER (default: mongrel)') { |s|
15
+ opts.on('-s', '--server SERVER', 'serve using SERVER (default: mongrel)') do |s|
14
16
  options[:server] = s
15
- }
17
+ end
16
18
 
17
- opts.on('-o', '--host HOST', 'listen on HOST (default: 0.0.0.0)') { |host|
19
+ opts.on('-o', '--host HOST', 'listen on HOST (default: 0.0.0.0)') do |host|
18
20
  options[:Host] = host
19
- }
21
+ end
20
22
 
21
- opts.on('-p', '--port PORT', 'use PORT (default: 9203)') { |port|
23
+ opts.on('-p', '--port PORT', 'use PORT (default: 9203)') do |port|
22
24
  options[:Port] = port
23
- }
25
+ end
24
26
 
25
- opts.on('-D', '--daemonize', 'run daemonized in the background') { |d|
27
+ opts.on('-D', '--daemonize', 'run daemonized in the background') do |d|
26
28
  options[:daemonize] = d ? true : false
27
- }
29
+ end
28
30
 
29
31
  opts.separator ''
30
- opts.separator 'Mascut options:(TODO)'
32
+ opts.separator 'Mascut options:'
33
+
34
+ opts.on('-m', '--mascut PATH', 'absolute path for comet(default on Mascut::Mascut: /mascut)') do |path|
35
+ options[:mascut] = path.index('/') == 0 ? path : "/#{path}"
36
+ end
37
+
38
+ opts.on('-i', '--interval SEC', Float, 'interval to monitor files(default on Mascut::Mascut: 1.0 sec)') do |sec|
39
+ options[:interval] = sec
40
+ end
31
41
 
32
42
  opts.permute!(args)
33
- options[:files] = args
43
+ options[:files] = args.size > 0 ? args : nil
34
44
  end
35
45
  end
36
46
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - okitan
@@ -14,27 +14,13 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-08 00:00:00 +09:00
17
+ date: 2010-04-12 00:00:00 +09:00
18
18
  default_executable: mascut
19
19
  dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: sinatra
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- - 9
30
- - 4
31
- version: 0.9.4
32
- type: :runtime
33
- version_requirements: *id001
34
20
  - !ruby/object:Gem::Dependency
35
21
  name: rspec
36
22
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
38
24
  requirements:
39
25
  - - ">="
40
26
  - !ruby/object:Gem::Version
@@ -44,7 +30,7 @@ dependencies:
44
30
  - 9
45
31
  version: 1.2.9
46
32
  type: :development
47
- version_requirements: *id002
33
+ version_requirements: *id001
48
34
  description: instant comet-like server in order to debug web pages
49
35
  email: okitakunio@gmail.com
50
36
  executables: