merb 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. data/README +64 -80
  2. data/Rakefile +25 -12
  3. data/bin/merb +2 -223
  4. data/examples/README_EXAMPLES +10 -0
  5. data/examples/skeleton.tar +0 -0
  6. data/lib/merb.rb +48 -21
  7. data/lib/merb/core_ext.rb +12 -2
  8. data/lib/merb/core_ext/merb_class.rb +21 -21
  9. data/lib/merb/core_ext/merb_kernel.rb +60 -0
  10. data/lib/merb/core_ext/merb_object.rb +14 -0
  11. data/lib/merb/core_ext/merb_string.rb +3 -13
  12. data/lib/merb/generators/merb_app/merb_app.rb +33 -0
  13. data/lib/merb/merb_constants.rb +7 -0
  14. data/lib/merb/merb_controller.rb +31 -23
  15. data/lib/merb/merb_drb_server.rb +6 -60
  16. data/lib/merb/merb_exceptions.rb +162 -2
  17. data/lib/merb/merb_handler.rb +8 -19
  18. data/lib/merb/merb_mailer.rb +60 -0
  19. data/lib/merb/merb_router.rb +1 -1
  20. data/lib/merb/merb_server.rb +240 -0
  21. data/lib/merb/merb_upload_handler.rb +1 -1
  22. data/lib/merb/merb_view_context.rb +11 -6
  23. data/lib/merb/mixins/basic_authentication_mixin.rb +11 -13
  24. data/lib/merb/mixins/controller_mixin.rb +12 -6
  25. data/lib/merb/mixins/form_control_mixin.rb +94 -0
  26. data/lib/merb/mixins/render_mixin.rb +50 -24
  27. data/lib/merb/mixins/view_context_mixin.rb +122 -0
  28. data/lib/merb/session/merb_ar_session.rb +13 -14
  29. data/lib/merb/session/merb_memory_session.rb +105 -0
  30. metadata +13 -132
  31. data/examples/app_skeleton/Rakefile +0 -82
  32. data/examples/app_skeleton/dist/app/helpers/global_helper.rb +0 -6
  33. data/examples/app_skeleton/dist/conf/merb.yml +0 -11
  34. data/examples/app_skeleton/dist/conf/merb_init.rb +0 -16
  35. data/examples/app_skeleton/dist/conf/mup.conf +0 -5
  36. data/examples/app_skeleton/dist/conf/router.rb +0 -19
  37. data/examples/app_skeleton/scripts/merb_stop +0 -13
  38. data/examples/app_skeleton/scripts/new_migration +0 -21
  39. data/examples/app_skeleton/test/test_helper.rb +0 -1
  40. data/examples/sample_app/Rakefile +0 -82
  41. data/examples/sample_app/dist/app/controllers/files.rb +0 -31
  42. data/examples/sample_app/dist/app/controllers/posts.rb +0 -71
  43. data/examples/sample_app/dist/app/controllers/test.rb +0 -40
  44. data/examples/sample_app/dist/app/helpers/global_helper.rb +0 -7
  45. data/examples/sample_app/dist/app/helpers/posts_helper.rb +0 -4
  46. data/examples/sample_app/dist/app/models/comment.rb +0 -3
  47. data/examples/sample_app/dist/app/models/post.rb +0 -4
  48. data/examples/sample_app/dist/app/views/files/progress.jerb +0 -3
  49. data/examples/sample_app/dist/app/views/files/start.herb +0 -62
  50. data/examples/sample_app/dist/app/views/files/upload.herb +0 -6
  51. data/examples/sample_app/dist/app/views/layout/application.herb +0 -61
  52. data/examples/sample_app/dist/app/views/layout/foo.herb +0 -6
  53. data/examples/sample_app/dist/app/views/posts/_comments.herb +0 -11
  54. data/examples/sample_app/dist/app/views/posts/comment.jerb +0 -1
  55. data/examples/sample_app/dist/app/views/posts/list.herb +0 -5
  56. data/examples/sample_app/dist/app/views/posts/new.herb +0 -37
  57. data/examples/sample_app/dist/app/views/posts/show.herb +0 -37
  58. data/examples/sample_app/dist/app/views/posts/xml_test.xerb +0 -3
  59. data/examples/sample_app/dist/app/views/shared/_test.herb +0 -1
  60. data/examples/sample_app/dist/app/views/test/foo.herb +0 -2
  61. data/examples/sample_app/dist/app/views/test/hello.herb +0 -5
  62. data/examples/sample_app/dist/app/views/test/json.jerb +0 -1
  63. data/examples/sample_app/dist/conf/merb.yml +0 -11
  64. data/examples/sample_app/dist/conf/merb_init.rb +0 -24
  65. data/examples/sample_app/dist/conf/mup.conf +0 -5
  66. data/examples/sample_app/dist/conf/router.rb +0 -19
  67. data/examples/sample_app/dist/public/images/bg.jpg +0 -0
  68. data/examples/sample_app/dist/public/images/book.gif +0 -0
  69. data/examples/sample_app/dist/public/images/booksmall.gif +0 -0
  70. data/examples/sample_app/dist/public/images/greenright.jpg +0 -0
  71. data/examples/sample_app/dist/public/images/louiecon.gif +0 -0
  72. data/examples/sample_app/dist/public/images/menu.gif +0 -0
  73. data/examples/sample_app/dist/public/images/menuleft.gif +0 -0
  74. data/examples/sample_app/dist/public/images/menuright.gif +0 -0
  75. data/examples/sample_app/dist/public/images/mountain.jpg +0 -0
  76. data/examples/sample_app/dist/public/images/n3.jpg +0 -0
  77. data/examples/sample_app/dist/public/images/nautica.jpg +0 -0
  78. data/examples/sample_app/dist/public/javascripts/application.js +0 -0
  79. data/examples/sample_app/dist/public/javascripts/effects.js +0 -975
  80. data/examples/sample_app/dist/public/javascripts/mup.js +0 -113
  81. data/examples/sample_app/dist/public/javascripts/prototype.js +0 -2264
  82. data/examples/sample_app/dist/public/stylesheets/merb.css +0 -277
  83. data/examples/sample_app/dist/public/test.html +0 -5
  84. data/examples/sample_app/dist/schema/migrations/001_add_comments_to_posts.rb +0 -22
  85. data/examples/sample_app/dist/schema/migrations/002_add_sessions_table.rb +0 -14
  86. data/examples/sample_app/dist/schema/schema.rb +0 -28
  87. data/examples/sample_app/foo.txt +0 -0
  88. data/examples/sample_app/log/merb.4000.pid +0 -1
  89. data/examples/sample_app/script/merb_stop +0 -13
  90. data/examples/sample_app/script/new_migration +0 -21
  91. data/examples/sample_app/test/test_helper.rb +0 -1
  92. data/lib/merb/mixins/javascript_mixin.rb +0 -147
  93. data/lib/merb/session/merb_drb_session.rb +0 -65
  94. data/test/test_helper.rb +0 -1
  95. data/test/unit/route_matcher_test.rb +0 -46
@@ -6,16 +6,18 @@ module Merb
6
6
 
7
7
  def setup_session
8
8
  MERB_LOGGER.info("Setting up session")
9
- @session = Merb::Session.persist(cookies)
10
- @fingerprint_before = Marshal.dump(@session).hash
9
+ before = cookies[session_id_key]
10
+ @session, cookies[session_id_key] = Merb::Session.persist(cookies[session_id_key])
11
+ @_fingerprint_before = Marshal.dump(@session).hash
12
+ @_new_cookie = cookies[session_id_key] != before
11
13
  end
12
14
 
13
15
  def finalize_session
14
16
  MERB_LOGGER.info("Finalize session")
15
- unless Marshal.dump(@session).hash == @fingerprint_before
17
+ unless Marshal.dump(@session).hash == @_fingerprint_before
16
18
  @session.save
17
19
  end
18
- @headers['Set-Cookie'] = @cookies.map { |k,v| "#{k}=#{escape(v)}; path=/" if v != @cookies[k] } - [nil]
20
+ set_cookie(session_id_key, cookies[session_id_key], Time.now+Merb::Const::WEEK*2) if @_new_cookie
19
21
  end
20
22
 
21
23
  end
@@ -24,7 +26,6 @@ module Merb
24
26
  # Customizable data column name. Defaults to 'data'.
25
27
  cattr_accessor :data_column_name
26
28
  self.data_column_name = 'data'
27
-
28
29
  before_save :marshal_data!
29
30
  before_save :raise_on_session_data_overflow!
30
31
 
@@ -32,24 +33,22 @@ module Merb
32
33
 
33
34
  class << self
34
35
  # Generates a new session ID and creates a row for the new session in the database.
35
- def generate(cookies)
36
+ def generate
36
37
  rand_max = RAND_CHARS.size
37
38
  sid = (0...32).inject("") { |ret,_| ret << RAND_CHARS[rand(rand_max)] }
38
- sess = create(:session_id => sid, :data => {})
39
- cookies[:session_id] = sess.session_id
40
- sess
39
+ create(:session_id => sid, :data => {})
41
40
  end
42
41
 
43
42
  # Gets the existing session based on the <tt>session_id</tt> available in cookies.
44
43
  # If none is found, generates a new session.
45
- def persist(cookies)
46
- if cookies[:session_id]
47
- session = find_by_session_id(cookies[:session_id])
44
+ def persist(session_id)
45
+ if session_id
46
+ session = find_by_session_id(session_id)
48
47
  end
49
48
  unless session
50
- session = generate(cookies)
49
+ session = generate
51
50
  end
52
- session
51
+ [session, session.session_id]
53
52
  end
54
53
 
55
54
  # Don't try to reload ARStore::Session in dev mode.
@@ -0,0 +1,105 @@
1
+ module Merb
2
+
3
+ module SessionMixin
4
+
5
+ def setup_session
6
+ MERB_LOGGER.info("Setting up session")
7
+ before = cookies[session_id_key]
8
+ @session , cookies[session_id_key] = Merb::MemorySession.persist(cookies[session_id_key])
9
+ @_new_cookie = cookies[session_id_key] != before
10
+ end
11
+
12
+ def finalize_session
13
+ MERB_LOGGER.info("Finalize session")
14
+ set_cookie(session_id_key, cookies[session_id_key], Time.now+Merb::Const::WEEK*2) if @_new_cookie
15
+ end
16
+
17
+ end
18
+
19
+ class MemorySession
20
+
21
+ class << self
22
+
23
+ RAND_CHARS = [*'A'..'Z'] + [*'0'..'9'] + [*'a'..'z']
24
+
25
+ # Generates a new session ID and creates a row for the new session in the database.
26
+ def generate
27
+ rand_max = RAND_CHARS.size
28
+ sid = (0...32).inject("") { |ret,_| ret << RAND_CHARS[rand(rand_max)] }
29
+ [create(:session_id => sid, :data => {}), sid]
30
+ end
31
+
32
+ # Gets the existing session based on the <tt>session_id</tt> available in cookies.
33
+ # If none is found, generates a new session.
34
+ def persist(session_id)
35
+ if session_id
36
+ session = self[session_id]
37
+ sid = session_id
38
+ end
39
+ unless session
40
+ session, sid = generate
41
+ end
42
+ [session, sid]
43
+ end
44
+
45
+ def setup(opts={})
46
+ @opts = opts
47
+ @sessions = Hash.new
48
+ @timestamps = Hash.new
49
+ @mutex = Mutex.new
50
+ @session_ttl = opts.fetch(:session_ttl, 60*60) # default 1 hour
51
+ start_timer
52
+ self
53
+ end
54
+
55
+ def create(opts={})
56
+ self[opts[:session_id]] = opts[:data]
57
+ end
58
+
59
+ def [](key)
60
+ @mutex.synchronize {
61
+ @timestamps[key] = Time.now
62
+ @sessions[key]
63
+ }
64
+ end
65
+
66
+ def []=(key, val)
67
+ @mutex.synchronize {
68
+ @timestamps[key] = Time.now
69
+ @sessions[key] = val
70
+ }
71
+ end
72
+
73
+ def delete(key)
74
+ @mutex.synchronize {
75
+ @sessions.delete(key)
76
+ }
77
+ end
78
+
79
+ def reap_old_sessions
80
+ @timestamps.each do |key,stamp|
81
+ if stamp + @session_ttl < Time.now
82
+ delete(key)
83
+ end
84
+ end
85
+ GC.start
86
+ end
87
+
88
+ def start_timer
89
+ Thread.new do
90
+ loop {
91
+ sleep @session_ttl
92
+ reap_old_sessions
93
+ }
94
+ end
95
+ end
96
+
97
+ def sessions
98
+ @sessions
99
+ end
100
+
101
+ end # end singleton class
102
+
103
+ end # end DRbSession
104
+
105
+ end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
2
+ rubygems_version: 0.9.0.9
3
3
  specification_version: 1
4
4
  name: merb
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.8
7
- date: 2006-12-17 00:00:00 -08:00
6
+ version: 0.0.9
7
+ date: 2007-01-14 00:00:00 -08:00
8
8
  summary: Merb == Mongrel + Erb. Pocket rocket web framework.
9
9
  require_paths:
10
10
  - lib
@@ -34,22 +34,22 @@ files:
34
34
  - Rakefile
35
35
  - TODO
36
36
  - bin/merb
37
- - test/test_helper.rb
38
- - test/unit
39
- - test/unit/route_matcher_test.rb
40
37
  - lib/merb
41
38
  - lib/merb.rb
42
39
  - lib/merb_tasks.rb
43
40
  - lib/tasks
44
41
  - lib/merb/core_ext
45
42
  - lib/merb/core_ext.rb
43
+ - lib/merb/generators
46
44
  - lib/merb/merb_constants.rb
47
45
  - lib/merb/merb_controller.rb
48
46
  - lib/merb/merb_drb_server.rb
49
47
  - lib/merb/merb_exceptions.rb
50
48
  - lib/merb/merb_handler.rb
49
+ - lib/merb/merb_mailer.rb
51
50
  - lib/merb/merb_request.rb
52
51
  - lib/merb/merb_router.rb
52
+ - lib/merb/merb_server.rb
53
53
  - lib/merb/merb_upload_handler.rb
54
54
  - lib/merb/merb_upload_progress.rb
55
55
  - lib/merb/merb_view_context.rb
@@ -66,134 +66,24 @@ files:
66
66
  - lib/merb/core_ext/merb_object.rb
67
67
  - lib/merb/core_ext/merb_string.rb
68
68
  - lib/merb/core_ext/merb_symbol.rb
69
+ - lib/merb/generators/merb_app
70
+ - lib/merb/generators/merb_app/merb_app.rb
69
71
  - lib/merb/mixins/basic_authentication_mixin.rb
70
72
  - lib/merb/mixins/controller_mixin.rb
71
73
  - lib/merb/mixins/erubis_capture_mixin.rb
72
- - lib/merb/mixins/javascript_mixin.rb
74
+ - lib/merb/mixins/form_control_mixin.rb
73
75
  - lib/merb/mixins/merb_status_codes.rb
74
76
  - lib/merb/mixins/render_mixin.rb
75
77
  - lib/merb/mixins/responder_mixin.rb
78
+ - lib/merb/mixins/view_context_mixin.rb
76
79
  - lib/merb/session/merb_ar_session.rb
77
- - lib/merb/session/merb_drb_session.rb
80
+ - lib/merb/session/merb_memory_session.rb
78
81
  - lib/merb/vendor/paginator
79
82
  - lib/merb/vendor/paginator/paginator.rb
80
83
  - lib/merb/vendor/paginator/README.txt
81
84
  - lib/tasks/db.rake
82
- - examples/app_skeleton
83
- - examples/sample_app
84
- - examples/app_skeleton/dist
85
- - examples/app_skeleton/log
86
- - examples/app_skeleton/plugins
87
- - examples/app_skeleton/Rakefile
88
- - examples/app_skeleton/scripts
89
- - examples/app_skeleton/test
90
- - examples/app_skeleton/dist/app
91
- - examples/app_skeleton/dist/conf
92
- - examples/app_skeleton/dist/lib
93
- - examples/app_skeleton/dist/plugins
94
- - examples/app_skeleton/dist/public
95
- - examples/app_skeleton/dist/schema
96
- - examples/app_skeleton/dist/app/controllers
97
- - examples/app_skeleton/dist/app/helpers
98
- - examples/app_skeleton/dist/app/models
99
- - examples/app_skeleton/dist/app/views
100
- - examples/app_skeleton/dist/app/helpers/global_helper.rb
101
- - examples/app_skeleton/dist/app/views/layout
102
- - examples/app_skeleton/dist/conf/merb.yml
103
- - examples/app_skeleton/dist/conf/merb_init.rb
104
- - examples/app_skeleton/dist/conf/mup.conf
105
- - examples/app_skeleton/dist/conf/router.rb
106
- - examples/app_skeleton/dist/public/files
107
- - examples/app_skeleton/dist/public/images
108
- - examples/app_skeleton/dist/public/javascripts
109
- - examples/app_skeleton/dist/public/stylesheets
110
- - examples/app_skeleton/dist/schema/migrations
111
- - examples/app_skeleton/scripts/merb_stop
112
- - examples/app_skeleton/scripts/new_migration
113
- - examples/app_skeleton/test/fixtures
114
- - examples/app_skeleton/test/spec
115
- - examples/app_skeleton/test/test_helper.rb
116
- - examples/app_skeleton/test/unit
117
- - examples/sample_app/dist
118
- - examples/sample_app/foo.txt
119
- - examples/sample_app/log
120
- - examples/sample_app/plugins
121
- - examples/sample_app/Rakefile
122
- - examples/sample_app/script
123
- - examples/sample_app/test
124
- - examples/sample_app/dist/app
125
- - examples/sample_app/dist/conf
126
- - examples/sample_app/dist/lib
127
- - examples/sample_app/dist/plugins
128
- - examples/sample_app/dist/public
129
- - examples/sample_app/dist/schema
130
- - examples/sample_app/dist/app/controllers
131
- - examples/sample_app/dist/app/helpers
132
- - examples/sample_app/dist/app/models
133
- - examples/sample_app/dist/app/views
134
- - examples/sample_app/dist/app/controllers/files.rb
135
- - examples/sample_app/dist/app/controllers/posts.rb
136
- - examples/sample_app/dist/app/controllers/test.rb
137
- - examples/sample_app/dist/app/helpers/global_helper.rb
138
- - examples/sample_app/dist/app/helpers/posts_helper.rb
139
- - examples/sample_app/dist/app/models/comment.rb
140
- - examples/sample_app/dist/app/models/post.rb
141
- - examples/sample_app/dist/app/views/files
142
- - examples/sample_app/dist/app/views/layout
143
- - examples/sample_app/dist/app/views/posts
144
- - examples/sample_app/dist/app/views/shared
145
- - examples/sample_app/dist/app/views/test
146
- - examples/sample_app/dist/app/views/files/progress.jerb
147
- - examples/sample_app/dist/app/views/files/start.herb
148
- - examples/sample_app/dist/app/views/files/upload.herb
149
- - examples/sample_app/dist/app/views/layout/application.herb
150
- - examples/sample_app/dist/app/views/layout/foo.herb
151
- - examples/sample_app/dist/app/views/posts/_comments.herb
152
- - examples/sample_app/dist/app/views/posts/comment.jerb
153
- - examples/sample_app/dist/app/views/posts/list.herb
154
- - examples/sample_app/dist/app/views/posts/new.herb
155
- - examples/sample_app/dist/app/views/posts/show.herb
156
- - examples/sample_app/dist/app/views/posts/xml_test.xerb
157
- - examples/sample_app/dist/app/views/shared/_test.herb
158
- - examples/sample_app/dist/app/views/test/foo.herb
159
- - examples/sample_app/dist/app/views/test/hello.herb
160
- - examples/sample_app/dist/app/views/test/json.jerb
161
- - examples/sample_app/dist/conf/merb.yml
162
- - examples/sample_app/dist/conf/merb_init.rb
163
- - examples/sample_app/dist/conf/mup.conf
164
- - examples/sample_app/dist/conf/router.rb
165
- - examples/sample_app/dist/public/files
166
- - examples/sample_app/dist/public/images
167
- - examples/sample_app/dist/public/javascripts
168
- - examples/sample_app/dist/public/stylesheets
169
- - examples/sample_app/dist/public/test.html
170
- - examples/sample_app/dist/public/images/bg.jpg
171
- - examples/sample_app/dist/public/images/book.gif
172
- - examples/sample_app/dist/public/images/booksmall.gif
173
- - examples/sample_app/dist/public/images/greenright.jpg
174
- - examples/sample_app/dist/public/images/louiecon.gif
175
- - examples/sample_app/dist/public/images/menu.gif
176
- - examples/sample_app/dist/public/images/menuleft.gif
177
- - examples/sample_app/dist/public/images/menuright.gif
178
- - examples/sample_app/dist/public/images/mountain.jpg
179
- - examples/sample_app/dist/public/images/n3.jpg
180
- - examples/sample_app/dist/public/images/nautica.jpg
181
- - examples/sample_app/dist/public/javascripts/application.js
182
- - examples/sample_app/dist/public/javascripts/effects.js
183
- - examples/sample_app/dist/public/javascripts/mup.js
184
- - examples/sample_app/dist/public/javascripts/prototype.js
185
- - examples/sample_app/dist/public/stylesheets/merb.css
186
- - examples/sample_app/dist/schema/migrations
187
- - examples/sample_app/dist/schema/schema.rb
188
- - examples/sample_app/dist/schema/migrations/001_add_comments_to_posts.rb
189
- - examples/sample_app/dist/schema/migrations/002_add_sessions_table.rb
190
- - examples/sample_app/log/merb.4000.pid
191
- - examples/sample_app/script/merb_stop
192
- - examples/sample_app/script/new_migration
193
- - examples/sample_app/test/fixtures
194
- - examples/sample_app/test/spec
195
- - examples/sample_app/test/test_helper.rb
196
- - examples/sample_app/test/unit
85
+ - examples/README_EXAMPLES
86
+ - examples/skeleton.tar
197
87
  test_files: []
198
88
 
199
89
  rdoc_options:
@@ -247,12 +137,3 @@ dependencies:
247
137
  - !ruby/object:Gem::Version
248
138
  version: 0.0.0
249
139
  version:
250
- - !ruby/object:Gem::Dependency
251
- name: mime-types
252
- version_requirement:
253
- version_requirements: !ruby/object:Gem::Version::Requirement
254
- requirements:
255
- - - ">"
256
- - !ruby/object:Gem::Version
257
- version: 0.0.0
258
- version:
@@ -1,82 +0,0 @@
1
- require 'rake'
2
- require 'rake/rdoctask'
3
- require 'rake/testtask'
4
- require 'code_statistics'
5
- require 'fileutils'
6
- require 'rubygems'
7
- require 'merb'
8
- require MERB_FRAMEWORK_ROOT+'/merb_tasks'
9
- MERB_ROOT = File.dirname(__FILE__)
10
- include FileUtils
11
-
12
-
13
- #desc "Packages up Merb."
14
- #task :default => [:package]
15
-
16
- desc "load merb_init.rb"
17
- task :merb_init do
18
- require 'merb'
19
- require File.dirname(__FILE__)+'/dist/conf/merb_init.rb'
20
- end
21
-
22
- desc "Load db schema"
23
- task :load_schema => [:merb_init] do
24
- require File.dirname(__FILE__)+'/dist/schema/schema.rb'
25
- end
26
-
27
- task :uninstall => [:clean] do
28
- sh %{sudo gem uninstall #{NAME}}
29
- end
30
-
31
- desc 'Run unit tests'
32
- Rake::TestTask.new('test_unit') do |t|
33
- t.libs << 'test'
34
- t.pattern = 'test/unit/*_test.rb'
35
- t.verbose = true
36
- end
37
-
38
- desc 'Run functional tests'
39
- Rake::TestTask.new('test_functional') do |t|
40
- t.libs << 'test'
41
- t.pattern = 'test/functional/*_test.rb'
42
- t.verbose = true
43
- end
44
-
45
- desc 'Run all tests'
46
- Rake::TestTask.new('test') do |t|
47
- t.libs << 'test'
48
- t.pattern = 'test/**/*_test.rb'
49
- t.verbose = true
50
- end
51
-
52
- desc 'Run all tests, specs and finish with rcov'
53
- task :aok do
54
- sh %{rake rcov}
55
- sh %{rake spec}
56
- end
57
-
58
- ##############################################################################
59
- # Statistics
60
- ##############################################################################
61
-
62
- STATS_DIRECTORIES = [
63
- %w(Code lib/),
64
- %w(Unit\ tests test/unit),
65
- %w(Functional\ tests test/functional)
66
- ].collect { |name, dir| [ name, "./#{dir}" ] }.select { |name, dir| File.directory?(dir) }
67
-
68
- desc "Report code statistics (KLOCs, etc) from the application"
69
- task :stats do
70
- #require 'extra/stats'
71
- verbose = true
72
- CodeStatistics.new(*STATS_DIRECTORIES).to_s
73
- end
74
-
75
- ##############################################################################
76
- # SVN
77
- ##############################################################################
78
-
79
- desc "Add new files to subversion"
80
- task :svn_add do
81
- system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add"
82
- end
@@ -1,6 +0,0 @@
1
- module Merb
2
- module GlobalHelper
3
- end
4
- end
5
-
6
-