ramaze 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/Rakefile +13 -7
  2. data/doc/README +1 -1
  3. data/doc/README.html +729 -0
  4. data/doc/meta/users.kml +61 -59
  5. data/doc/readme_chunks/installing.txt +1 -1
  6. data/examples/auth/auth.rb +13 -8
  7. data/examples/element.rb +1 -2
  8. data/examples/ramaise.rb +139 -0
  9. data/examples/simple.rb +2 -5
  10. data/examples/sourceview/public/coderay.css +104 -0
  11. data/examples/sourceview/public/jquery.treeview.css +10 -9
  12. data/examples/sourceview/public/jquery.treeview.js +7 -7
  13. data/examples/sourceview/public/sourceview.js +43 -7
  14. data/examples/sourceview/sourceview.rb +36 -33
  15. data/examples/sourceview/template/index.haml +33 -17
  16. data/examples/wikore/spec/wikore.rb +1 -0
  17. data/examples/wikore/src/controller.rb +0 -1
  18. data/examples/wikore/src/model.rb +17 -16
  19. data/lib/proto/src/controller/main.rb +1 -1
  20. data/lib/proto/start.rb +2 -3
  21. data/lib/ramaze.rb +3 -0
  22. data/lib/ramaze/contrib/auto_params.rb +3 -3
  23. data/lib/ramaze/contrib/gzip_filter.rb +3 -4
  24. data/lib/ramaze/contrib/route.rb +5 -0
  25. data/lib/ramaze/controller/resolve.rb +1 -1
  26. data/lib/ramaze/dispatcher/action.rb +1 -1
  27. data/lib/ramaze/dispatcher/error.rb +7 -4
  28. data/lib/ramaze/gestalt.rb +1 -2
  29. data/lib/ramaze/helper.rb +8 -4
  30. data/lib/ramaze/helper/auth.rb +1 -1
  31. data/lib/ramaze/helper/cache.rb +4 -0
  32. data/lib/ramaze/helper/identity.rb +2 -2
  33. data/lib/ramaze/snippets/{string/DIVIDE.rb → divide.rb} +11 -8
  34. data/lib/ramaze/snippets/string/unindent.rb +7 -0
  35. data/lib/ramaze/snippets/thread/into.rb +5 -12
  36. data/lib/ramaze/spec/helper/wrap.rb +1 -1
  37. data/lib/ramaze/template/haml.rb +4 -14
  38. data/lib/ramaze/template/sass.rb +4 -14
  39. data/lib/ramaze/trinity/request.rb +34 -1
  40. data/lib/ramaze/version.rb +1 -1
  41. data/rake_tasks/coverage.rake +46 -0
  42. data/rake_tasks/spec.rake +1 -1
  43. data/spec/contrib/auto_params.rb +6 -1
  44. data/spec/contrib/route.rb +0 -2
  45. data/spec/contrib/sequel/fill.rb +6 -4
  46. data/spec/ramaze/controller/resolve.rb +31 -0
  47. data/spec/ramaze/helper/cache.rb +14 -7
  48. data/spec/ramaze/template/haml.rb +14 -0
  49. data/spec/ramaze/template/sass.rb +23 -1
  50. data/spec/ramaze/trinity/request.rb +19 -0
  51. data/spec/snippets/{string/DIVIDE.rb → divide.rb} +5 -1
  52. data/spec/snippets/kernel/__dir__.rb +1 -1
  53. data/spec/snippets/string/unindent.rb +22 -0
  54. data/spec/snippets/thread/into.rb +21 -0
  55. metadata +90 -80
@@ -13,12 +13,13 @@
13
13
  float: left;
14
14
  cursor: pointer;
15
15
  }
16
+
16
17
  /* fix for IE6 */
17
18
  * html div.hitarea {
18
19
  background: #fff;
19
20
  filter: alpha(opacity=0);
20
21
  display: inline;
21
- float:none;
22
+ float: none;
22
23
  }
23
24
 
24
25
  .treeview li {
@@ -34,14 +35,14 @@
34
35
 
35
36
  .treeview .hover { color: red; cursor: pointer; }
36
37
 
37
- .treeview li { background: url(/images/tv-item.gif) 0 0 no-repeat; }
38
- .treeview .collapsable { background-image: url(/images/tv-collapsable.gif); }
39
- .treeview .expandable { background-image: url(/images/tv-expandable.gif); }
40
- .treeview .last { background-image: url(/images/tv-item-last.gif); }
41
- .treeview .lastCollapsable { background-image: url(/images/tv-collapsable-last.gif); }
42
- .treeview .lastExpandable { background-image: url(/images/tv-expandable-last.gif); }
38
+ .treeview li { background: url(images/tv-item.gif) 0 0 no-repeat; }
39
+ .treeview .collapsable { background-image: url(images/tv-collapsable.gif); }
40
+ .treeview .expandable { background-image: url(images/tv-expandable.gif); }
41
+ .treeview .last { background-image: url(images/tv-item-last.gif); }
42
+ .treeview .lastCollapsable { background-image: url(images/tv-collapsable-last.gif); }
43
+ .treeview .lastExpandable { background-image: url(images/tv-expandable-last.gif); }
43
44
 
44
45
  .filetree li { padding: 3px 0 1px 16px; }
45
46
  .filetree span.folder, .filetree span.file { padding-left: 16px; display: block; height: 15px; }
46
- .filetree span.folder { background: url(/images/folder.gif) 0 0 no-repeat; }
47
- .filetree span.file { background: url(/images/file.gif) 0 0 no-repeat; }
47
+ .filetree span.folder { background: url(images/folder.gif) 0 0 no-repeat; }
48
+ .filetree span.file { background: url(images/file.gif) 0 0 no-repeat; }
@@ -3,13 +3,13 @@
3
3
  *
4
4
  * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
5
5
  *
6
- * Copyright (c) 2006 Jörn Zaefferer, Myles Angell
6
+ * Copyright (c) 2007 Jörn Zaefferer
7
7
  *
8
8
  * Dual licensed under the MIT and GPL licenses:
9
9
  * http://www.opensource.org/licenses/mit-license.php
10
10
  * http://www.gnu.org/licenses/gpl.html
11
11
  *
12
- * Revision: $Id: jquery.treeview.js 3522 2007-10-03 08:39:11Z joern.zaefferer $
12
+ * Revision: $Id: jquery.treeview.js 3752 2007-10-28 02:53:07Z joern.zaefferer $
13
13
  *
14
14
  */
15
15
 
@@ -64,7 +64,7 @@
64
64
  },
65
65
  heightHide: function(animated, callback) {
66
66
  if (animated) {
67
- this.animate({ height: "hide" }, animated, callback)
67
+ this.animate({ height: "hide" }, animated, callback);
68
68
  } else {
69
69
  this.hide();
70
70
  if (callback)
@@ -73,7 +73,7 @@
73
73
  },
74
74
  prepareBranches: function(settings) {
75
75
  // mark last tree items
76
- this.filter(":last-child").addClass(CLASSES.last);
76
+ this.filter(":last-child:not(ul)").addClass(CLASSES.last);
77
77
  // collapse whole tree, or only those marked as closed, anyway except those marked as open
78
78
  this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
79
79
  // return all items with sublists
@@ -98,7 +98,7 @@
98
98
 
99
99
  // create hitarea
100
100
  this.prepend("<div class=\"" + CLASSES.hitarea + "\"/>")
101
- .find("div." + CLASSES.hitarea).click( toggler )
101
+ .find("div." + CLASSES.hitarea).click( toggler );
102
102
  },
103
103
  treeview: function(settings) {
104
104
 
@@ -113,7 +113,7 @@
113
113
  var callback = settings.toggle;
114
114
  settings.toggle = function() {
115
115
  return callback.apply($(this).parent()[0], arguments);
116
- }
116
+ };
117
117
  }
118
118
 
119
119
  // factory for treecontroller
@@ -128,7 +128,7 @@
128
128
  return filter ? $(this).parent("." + filter).length : true;
129
129
  }) );
130
130
  return false;
131
- }
131
+ };
132
132
  }
133
133
  // click on first element to collapse tree
134
134
  $(":eq(0)", control).click( handler(CLASSES.collapsable) );
@@ -1,16 +1,52 @@
1
- $(document).ready(function(){
1
+ var curfile = null;
2
+ var processing = false;
3
+
4
+ function setup() {
2
5
  $('ul.filetree').treeview({
3
6
  persist: 'location',
4
- animated: 'fast',
5
- unique: true,
6
- collapsed: true
7
+ animated: 'fast',
8
+ unique: true
7
9
  });
8
10
 
9
11
  $("span.file").click(function(){
10
- $('a.selected').removeClass('selected');
11
- $('#file_contents').load('/source', { file: $(this).attr('name') });
12
- $('a',this).eq(0).addClass('selected');
12
+ processing = true;
13
+ file = $('a:eq(0)', this).attr('href').substr(1);
14
+ if (curfile != file) {
15
+ curfile = file;
16
+ $('a.selected').removeClass('selected');
17
+ $('#file_contents').load('/source'+curfile, {}, function(){ processing = false; });
18
+ $('a',this).eq(0).addClass('selected');
19
+ } else {
20
+ processing = false;
21
+ }
22
+
23
+ if (curfile) {
24
+ $('#repourl').empty().append(
25
+ $('<a/>').attr('href', 'http://darcs.ramaze.net/ramaze'+curfile)
26
+ .text('download '+curfile.substr(1))
27
+ );
28
+ urchinTracker(curfile);
29
+ }
13
30
  });
14
31
 
15
32
  $('a.selected').parent('span.file').click();
33
+
34
+ setInterval(function(){
35
+ if (processing) return;
36
+
37
+ curhash = document.location.hash.substr(1);
38
+ if(curfile != curhash) {
39
+ $("a[href='#"+curhash+"']").parents('ul, li').show().end()
40
+ .parent('span.file').click();
41
+ }
42
+ }, 100);
43
+ }
44
+
45
+ $(function(){
46
+ if (document.location.hash != '') {
47
+ curfile = document.location.hash.substr(1);
48
+ $('#file_contents').load('/source'+curfile, {}, setup);
49
+ } else {
50
+ setup();
51
+ }
16
52
  });
@@ -4,26 +4,35 @@ require 'coderay'
4
4
  require 'ramaze'
5
5
 
6
6
  # where is the source
7
- RAMAZE_SRC = File.expand_path(Ramaze::BASEDIR/'..')
7
+ RAMAZE_SRC = File.expand_path(Ramaze::BASEDIR/'..') unless defined? RAMAZE_SRC
8
+
9
+ # delete cached filetree when source changes
10
+ module Ramaze::SourceReloadHooks
11
+ module_function
12
+ def after_safe_load file
13
+ Ramaze::Cache.actions.delete '/filetree' if file =~ /^#{RAMAZE_SRC}/
14
+ end
15
+ end
8
16
 
9
17
  class MainController < Ramaze::Controller
10
18
 
11
19
  include Remarkably::Common
12
- helper :partial, :inform, :cache
13
-
14
- cache :filetree
20
+ helper :partial, :inform, :cache, :aspect
15
21
  engine :None
16
-
17
- def source
18
- return if request['file'].nil? or request['file'] =~ /\.{2}/
19
22
 
20
- file = RAMAZE_SRC + request['file']
21
- if FileTest.file? file
22
- inform :info, "Showing source for #{file}"
23
- CodeRay.scan_file(file).html(:line_numbers => :inline)
24
- end
23
+ def index *args
24
+ redirect "/#/#{args.join('/')}" if args.size > 0
25
25
  end
26
-
26
+
27
+ def source *args
28
+ file = args.join('/')
29
+ return if file.empty? or file =~ /\.{2}/
30
+
31
+ file[0,0] = RAMAZE_SRC + '/'
32
+ CodeRay.scan_file(file).html(:line_numbers => :table) if FileTest.file? file
33
+ end
34
+ before(:source){ %(<link href='/coderay.css' rel='stylesheet' type='text/css' />) unless request.xhr? }
35
+
27
36
  def filetree
28
37
  ul :class => 'filetree treeview' do
29
38
  Dir.chdir(RAMAZE_SRC) do
@@ -33,35 +42,29 @@ class MainController < Ramaze::Controller
33
42
  end
34
43
  end.to_s
35
44
  end
36
-
37
- define_method('coderay.css') do
38
- response['Content-Type'] = 'text/css'
39
- value_cache[:coderay] ||= CodeRay::Encoders[:html]::CSS.new.stylesheet
40
- end
41
-
45
+ cache :filetree
46
+
42
47
  private
43
48
 
44
49
  def dir_listing dir
45
50
  li do
46
51
  span dir, :class => 'folder'
47
52
  Dir.chdir(dir) do
48
- if Dir['*'].any?
49
- ul do
50
- a '', :href => "##{File.expand_path('.').sub(RAMAZE_SRC,'')}"
51
- Dir['*'].each do |d|
52
- if FileTest.directory? d
53
- dir_listing d
54
- else
55
- file = File.expand_path(d).sub(RAMAZE_SRC,'')
56
- li do
57
- span :class => 'file', :name => file do
58
- a d, :href => "##{file}"
59
- end
53
+ ul :style => 'display: none;' do
54
+ a '', :href => "##{File.expand_path('.').sub(RAMAZE_SRC,'')}"
55
+ Dir['*'].sort.each do |d|
56
+ if FileTest.directory? d
57
+ dir_listing d
58
+ else
59
+ file = File.expand_path(d).sub(RAMAZE_SRC,'')
60
+ li do
61
+ span :class => 'file' do
62
+ a d, :href => "##{file}"
60
63
  end
61
64
  end
62
65
  end
63
66
  end
64
- end
67
+ end if Dir['*'].any?
65
68
  end
66
69
  end
67
70
  end
@@ -71,4 +74,4 @@ end
71
74
  Ramaze.start :adapter => :mongrel,
72
75
  :load_engines => :Haml,
73
76
  :boring => /(js|gif|css)$/,
74
- :port => 3000
77
+ :port => 9950
@@ -1,16 +1,22 @@
1
- !!!
2
1
  %html
3
2
  %head
4
3
  %title Ramaze Source Browser
5
-
6
- %link{ :rel => 'stylesheet', :type => 'text/css', :href => '/jquery.treeview.css' }/
4
+
5
+ %script{ :type => 'text/javascript', :src => '/jquery.js' }=''
6
+ %script{ :type => 'text/javascript', :src => '/jquery.treeview.js' }=''
7
+ %script{ :type => 'text/javascript', :src => '/sourceview.js?1.2' }=''
8
+ %script{ :type => 'text/javascript', :src => 'http://www.google-analytics.com/urchin.js' }=''
9
+ %script{ :type => 'text/javascript' }
10
+ _uacct = "UA-1005424-6";
11
+
7
12
  %link{ :rel => 'stylesheet', :type => 'text/css', :href => '/coderay.css' }/
13
+ %link{ :rel => 'stylesheet', :type => 'text/css', :href => '/jquery.treeview.css' }/
8
14
  %style{ :type => 'text/css' }
9
15
  :sass
10
16
  body
11
17
  :font-family sans-serif
12
18
  :margin 1.5em
13
-
19
+
14
20
  a
15
21
  :text-decoration none
16
22
  :color #000
@@ -18,26 +24,36 @@
18
24
  :color #f00
19
25
 
20
26
  #dir_listing
21
- :float left
22
-
27
+ :position absolute
28
+ :top 1.5em
29
+ :width 280px
30
+
23
31
  .filetree
24
32
  span.folder, span.file
25
33
  :padding-left 19px
26
34
  :margin-left 2px
27
-
35
+
28
36
  #file_contents
29
37
  :margin-left 290px
30
- :white-space pre
31
38
  :font-size 11pt
32
-
39
+
40
+ #welcome
41
+ :text-align center
42
+ :background-color #f8f8f8
43
+ :padding 1em
44
+
45
+ #repourl
46
+ :padding-top 4px
47
+ :text-align right
48
+ :font-size 10pt
49
+ a
50
+ :text-decoration underline
51
+
33
52
  %body
34
- #dir_listing
35
- = render_partial('/filetree')
36
- #file_contents.CodeRay
37
- %span{ :style => 'text-align: center' }
53
+ #file_contents
54
+ #welcome
38
55
  %h1 Welcome to the Ramaze source code browser
39
56
  %h3 pick a file on the left to view its contents
40
-
41
- %script{ :type => 'text/javascript', :src => '/jquery.js' }=""
42
- %script{ :type => 'text/javascript', :src => '/jquery.treeview.js' }=""
43
- %script{ :type => 'text/javascript', :src => '/sourceview.js' }=""
57
+ #dir_listing
58
+ = render_partial('/filetree')
59
+ #repourl
@@ -4,6 +4,7 @@ require 'ramaze/spec/helper'
4
4
  # if these libraries are missing there is no sense in running the tests,
5
5
  # cause they won't work at all.
6
6
  testcase_requires 'hpricot'
7
+ testcase_requires 'sequel'
7
8
 
8
9
  $:.unshift __DIR__/'../'
9
10
  require 'start'
@@ -59,7 +59,6 @@ class PageController < Ramaze::Controller
59
59
 
60
60
  def revert(title)
61
61
  page = Page[:title => title]
62
- p page
63
62
  page.revert
64
63
  redirect R(MainController, title)
65
64
  end
@@ -1,24 +1,28 @@
1
1
  require 'sequel'
2
- require 'sequel/sqlite'
3
2
 
4
- case $wikore_db
5
- when :memory
6
- DB = Sequel('sqlite:/')
7
- else
8
- DB = Sequel('sqlite:///wikore.db')
3
+ begin
4
+ case $wikore_db
5
+ when :memory
6
+ DB = Sequel.sqlite
7
+ else
8
+ DB = Sequel.sqlite 'wikore.db'
9
+ end
10
+ rescue NoMethodError
11
+ raise LoadError, 'Install latest Sequel gem'
9
12
  end
10
13
 
11
14
  module Model
12
15
  PAGE_SCHEMA = lambda{
16
+ primary_key :id
17
+ boolean :active, :default => true
18
+ text :text
19
+ integer :version
13
20
  }
14
21
 
15
22
  class Page < Sequel::Model(:page)
16
23
  set_schema do
17
- primary_key :id
18
- text :title, :unique => true, :null => false
19
- boolean :active, :default => true
20
- text :text
21
- integer :version
24
+ instance_eval &PAGE_SCHEMA
25
+ text :title, :unique => true, :null => false
22
26
  end
23
27
 
24
28
  def backup
@@ -37,11 +41,8 @@ module Model
37
41
 
38
42
  class OldPage < Sequel::Model(:old_page)
39
43
  set_schema do
40
- primary_key :id
41
- text :title, :unique => false, :null => false
42
- boolean :active, :default => true
43
- text :text
44
- integer :version
44
+ instance_eval &PAGE_SCHEMA
45
+ text :title, :unique => false, :null => false
45
46
  end
46
47
  end
47
48
 
@@ -8,7 +8,7 @@
8
8
  # map '/otherurl'
9
9
  # this will force the controller to be mounted on: /otherurl
10
10
 
11
- class MainController < Controller
11
+ class MainController < Ramaze::Controller
12
12
 
13
13
  # the index action is called automatically when no other action is specified
14
14
  def index
@@ -1,12 +1,11 @@
1
1
  # Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
2
2
  # All files in this distribution are subject to the terms of the Ruby license.
3
3
 
4
+ require 'rubygems'
4
5
  require 'ramaze'
5
6
 
6
- include Ramaze
7
-
8
7
  require 'src/controller/main'
9
8
  require 'src/element/page'
10
9
  require 'src/model'
11
10
 
12
- Ramaze.start
11
+ Ramaze.start :port => 7000
@@ -34,6 +34,7 @@ require 'ramaze/sourcereload'
34
34
  # Complete
35
35
  require 'ramaze/dispatcher'
36
36
  require 'ramaze/template/ezamar'
37
+ require 'ramaze/contrib'
37
38
 
38
39
  module Ramaze
39
40
 
@@ -59,6 +60,8 @@ module Ramaze
59
60
  trait[:essentials].each do |obj|
60
61
  obj.startup(options)
61
62
  end
63
+ else
64
+ Global.startup(options)
62
65
  end
63
66
  end
64
67