ramaze 0.2.0 → 0.2.1

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 (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