rails 2.3.18 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rails might be problematic. Click here for more details.

Files changed (215) hide show
  1. data/bin/rails +8 -20
  2. metadata +74 -251
  3. data/CHANGELOG +0 -2193
  4. data/MIT-LICENSE +0 -20
  5. data/README +0 -243
  6. data/Rakefile +0 -365
  7. data/bin/about +0 -4
  8. data/bin/console +0 -3
  9. data/bin/dbconsole +0 -3
  10. data/bin/destroy +0 -3
  11. data/bin/generate +0 -3
  12. data/bin/performance/benchmarker +0 -3
  13. data/bin/performance/profiler +0 -3
  14. data/bin/plugin +0 -3
  15. data/bin/runner +0 -3
  16. data/bin/server +0 -3
  17. data/builtin/rails_info/rails/info.rb +0 -131
  18. data/builtin/rails_info/rails/info_controller.rb +0 -9
  19. data/builtin/rails_info/rails/info_helper.rb +0 -2
  20. data/builtin/rails_info/rails_info_controller.rb +0 -2
  21. data/configs/databases/frontbase.yml +0 -28
  22. data/configs/databases/ibm_db.yml +0 -62
  23. data/configs/databases/mysql.yml +0 -60
  24. data/configs/databases/oracle.yml +0 -39
  25. data/configs/databases/postgresql.yml +0 -51
  26. data/configs/databases/sqlite2.yml +0 -19
  27. data/configs/databases/sqlite3.yml +0 -22
  28. data/configs/empty.log +0 -0
  29. data/configs/initializers/backtrace_silencers.rb +0 -7
  30. data/configs/initializers/cookie_verification_secret.rb +0 -7
  31. data/configs/initializers/inflections.rb +0 -10
  32. data/configs/initializers/mime_types.rb +0 -5
  33. data/configs/initializers/new_rails_defaults.rb +0 -21
  34. data/configs/initializers/session_store.rb +0 -15
  35. data/configs/locales/en.yml +0 -5
  36. data/configs/routes.rb +0 -43
  37. data/configs/seeds.rb +0 -7
  38. data/dispatches/config.ru +0 -7
  39. data/dispatches/dispatch.fcgi +0 -24
  40. data/dispatches/dispatch.rb +0 -10
  41. data/dispatches/gateway.cgi +0 -97
  42. data/doc/README_FOR_APP +0 -2
  43. data/environments/boot.rb +0 -114
  44. data/environments/development.rb +0 -17
  45. data/environments/environment.rb +0 -41
  46. data/environments/production.rb +0 -28
  47. data/environments/test.rb +0 -28
  48. data/fresh_rakefile +0 -10
  49. data/helpers/application_controller.rb +0 -10
  50. data/helpers/application_helper.rb +0 -3
  51. data/helpers/performance_test.rb +0 -9
  52. data/helpers/test_helper.rb +0 -38
  53. data/html/404.html +0 -30
  54. data/html/422.html +0 -30
  55. data/html/500.html +0 -30
  56. data/html/favicon.ico +0 -0
  57. data/html/images/rails.png +0 -0
  58. data/html/index.html +0 -275
  59. data/html/javascripts/application.js +0 -2
  60. data/html/javascripts/controls.js +0 -963
  61. data/html/javascripts/dragdrop.js +0 -973
  62. data/html/javascripts/effects.js +0 -1128
  63. data/html/javascripts/prototype.js +0 -4320
  64. data/html/robots.txt +0 -5
  65. data/lib/code_statistics.rb +0 -107
  66. data/lib/commands.rb +0 -17
  67. data/lib/commands/about.rb +0 -3
  68. data/lib/commands/console.rb +0 -45
  69. data/lib/commands/dbconsole.rb +0 -87
  70. data/lib/commands/destroy.rb +0 -6
  71. data/lib/commands/generate.rb +0 -6
  72. data/lib/commands/ncgi/listener +0 -86
  73. data/lib/commands/ncgi/tracker +0 -69
  74. data/lib/commands/performance/benchmarker.rb +0 -24
  75. data/lib/commands/performance/profiler.rb +0 -50
  76. data/lib/commands/plugin.rb +0 -968
  77. data/lib/commands/runner.rb +0 -54
  78. data/lib/commands/server.rb +0 -114
  79. data/lib/commands/update.rb +0 -4
  80. data/lib/console_app.rb +0 -30
  81. data/lib/console_sandbox.rb +0 -6
  82. data/lib/console_with_helpers.rb +0 -5
  83. data/lib/dispatcher.rb +0 -24
  84. data/lib/fcgi_handler.rb +0 -239
  85. data/lib/initializer.rb +0 -1152
  86. data/lib/performance_test_help.rb +0 -5
  87. data/lib/rails/backtrace_cleaner.rb +0 -54
  88. data/lib/rails/gem_builder.rb +0 -21
  89. data/lib/rails/gem_dependency.rb +0 -317
  90. data/lib/rails/plugin.rb +0 -179
  91. data/lib/rails/plugin/loader.rb +0 -198
  92. data/lib/rails/plugin/locator.rb +0 -100
  93. data/lib/rails/rack.rb +0 -8
  94. data/lib/rails/rack/debugger.rb +0 -23
  95. data/lib/rails/rack/log_tailer.rb +0 -35
  96. data/lib/rails/rack/metal.rb +0 -51
  97. data/lib/rails/rack/static.rb +0 -46
  98. data/lib/rails/vendor_gem_source_index.rb +0 -140
  99. data/lib/rails/version.rb +0 -9
  100. data/lib/rails_generator.rb +0 -46
  101. data/lib/rails_generator/base.rb +0 -266
  102. data/lib/rails_generator/commands.rb +0 -621
  103. data/lib/rails_generator/generated_attribute.rb +0 -47
  104. data/lib/rails_generator/generators/applications/app/USAGE +0 -9
  105. data/lib/rails_generator/generators/applications/app/app_generator.rb +0 -266
  106. data/lib/rails_generator/generators/applications/app/scm/git.rb +0 -18
  107. data/lib/rails_generator/generators/applications/app/scm/scm.rb +0 -8
  108. data/lib/rails_generator/generators/applications/app/scm/svn.rb +0 -7
  109. data/lib/rails_generator/generators/applications/app/template_runner.rb +0 -401
  110. data/lib/rails_generator/generators/components/controller/USAGE +0 -30
  111. data/lib/rails_generator/generators/components/controller/controller_generator.rb +0 -43
  112. data/lib/rails_generator/generators/components/controller/templates/controller.rb +0 -7
  113. data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +0 -8
  114. data/lib/rails_generator/generators/components/controller/templates/helper.rb +0 -2
  115. data/lib/rails_generator/generators/components/controller/templates/helper_test.rb +0 -4
  116. data/lib/rails_generator/generators/components/controller/templates/view.html.erb +0 -2
  117. data/lib/rails_generator/generators/components/helper/USAGE +0 -24
  118. data/lib/rails_generator/generators/components/helper/helper_generator.rb +0 -25
  119. data/lib/rails_generator/generators/components/helper/templates/helper.rb +0 -2
  120. data/lib/rails_generator/generators/components/helper/templates/helper_test.rb +0 -4
  121. data/lib/rails_generator/generators/components/integration_test/USAGE +0 -8
  122. data/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +0 -16
  123. data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +0 -10
  124. data/lib/rails_generator/generators/components/mailer/USAGE +0 -16
  125. data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +0 -30
  126. data/lib/rails_generator/generators/components/mailer/templates/fixture.erb +0 -3
  127. data/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +0 -0
  128. data/lib/rails_generator/generators/components/mailer/templates/mailer.rb +0 -15
  129. data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +0 -20
  130. data/lib/rails_generator/generators/components/mailer/templates/view.erb +0 -3
  131. data/lib/rails_generator/generators/components/mailer/templates/view.rhtml +0 -0
  132. data/lib/rails_generator/generators/components/metal/USAGE +0 -8
  133. data/lib/rails_generator/generators/components/metal/metal_generator.rb +0 -8
  134. data/lib/rails_generator/generators/components/metal/templates/metal.rb +0 -12
  135. data/lib/rails_generator/generators/components/migration/USAGE +0 -29
  136. data/lib/rails_generator/generators/components/migration/migration_generator.rb +0 -20
  137. data/lib/rails_generator/generators/components/migration/templates/migration.rb +0 -11
  138. data/lib/rails_generator/generators/components/model/USAGE +0 -27
  139. data/lib/rails_generator/generators/components/model/model_generator.rb +0 -52
  140. data/lib/rails_generator/generators/components/model/templates/fixtures.yml +0 -23
  141. data/lib/rails_generator/generators/components/model/templates/migration.rb +0 -16
  142. data/lib/rails_generator/generators/components/model/templates/model.rb +0 -5
  143. data/lib/rails_generator/generators/components/model/templates/unit_test.rb +0 -8
  144. data/lib/rails_generator/generators/components/observer/USAGE +0 -13
  145. data/lib/rails_generator/generators/components/observer/observer_generator.rb +0 -16
  146. data/lib/rails_generator/generators/components/observer/templates/observer.rb +0 -2
  147. data/lib/rails_generator/generators/components/observer/templates/unit_test.rb +0 -8
  148. data/lib/rails_generator/generators/components/performance_test/USAGE +0 -8
  149. data/lib/rails_generator/generators/components/performance_test/performance_test_generator.rb +0 -16
  150. data/lib/rails_generator/generators/components/performance_test/templates/performance_test.rb +0 -9
  151. data/lib/rails_generator/generators/components/plugin/USAGE +0 -25
  152. data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +0 -39
  153. data/lib/rails_generator/generators/components/plugin/templates/MIT-LICENSE +0 -20
  154. data/lib/rails_generator/generators/components/plugin/templates/README +0 -13
  155. data/lib/rails_generator/generators/components/plugin/templates/Rakefile +0 -23
  156. data/lib/rails_generator/generators/components/plugin/templates/USAGE +0 -8
  157. data/lib/rails_generator/generators/components/plugin/templates/generator.rb +0 -8
  158. data/lib/rails_generator/generators/components/plugin/templates/init.rb +0 -1
  159. data/lib/rails_generator/generators/components/plugin/templates/install.rb +0 -1
  160. data/lib/rails_generator/generators/components/plugin/templates/plugin.rb +0 -1
  161. data/lib/rails_generator/generators/components/plugin/templates/tasks.rake +0 -4
  162. data/lib/rails_generator/generators/components/plugin/templates/test_helper.rb +0 -4
  163. data/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +0 -1
  164. data/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +0 -8
  165. data/lib/rails_generator/generators/components/resource/USAGE +0 -23
  166. data/lib/rails_generator/generators/components/resource/resource_generator.rb +0 -76
  167. data/lib/rails_generator/generators/components/resource/templates/controller.rb +0 -2
  168. data/lib/rails_generator/generators/components/resource/templates/functional_test.rb +0 -8
  169. data/lib/rails_generator/generators/components/resource/templates/helper.rb +0 -2
  170. data/lib/rails_generator/generators/components/resource/templates/helper_test.rb +0 -4
  171. data/lib/rails_generator/generators/components/scaffold/USAGE +0 -29
  172. data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +0 -103
  173. data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +0 -83
  174. data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +0 -45
  175. data/lib/rails_generator/generators/components/scaffold/templates/helper.rb +0 -2
  176. data/lib/rails_generator/generators/components/scaffold/templates/helper_test.rb +0 -4
  177. data/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb +0 -17
  178. data/lib/rails_generator/generators/components/scaffold/templates/style.css +0 -54
  179. data/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb +0 -18
  180. data/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb +0 -24
  181. data/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb +0 -17
  182. data/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb +0 -10
  183. data/lib/rails_generator/generators/components/session_migration/USAGE +0 -10
  184. data/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +0 -18
  185. data/lib/rails_generator/generators/components/session_migration/templates/migration.rb +0 -16
  186. data/lib/rails_generator/lookup.rb +0 -249
  187. data/lib/rails_generator/manifest.rb +0 -53
  188. data/lib/rails_generator/options.rb +0 -150
  189. data/lib/rails_generator/scripts.rb +0 -89
  190. data/lib/rails_generator/scripts/destroy.rb +0 -29
  191. data/lib/rails_generator/scripts/generate.rb +0 -7
  192. data/lib/rails_generator/scripts/update.rb +0 -12
  193. data/lib/rails_generator/secret_key_generator.rb +0 -24
  194. data/lib/rails_generator/simple_logger.rb +0 -46
  195. data/lib/rails_generator/spec.rb +0 -44
  196. data/lib/railties_path.rb +0 -1
  197. data/lib/ruby_version_check.rb +0 -17
  198. data/lib/rubyprof_ext.rb +0 -35
  199. data/lib/source_annotation_extractor.rb +0 -102
  200. data/lib/tasks/annotations.rake +0 -20
  201. data/lib/tasks/databases.rake +0 -436
  202. data/lib/tasks/documentation.rake +0 -93
  203. data/lib/tasks/framework.rake +0 -146
  204. data/lib/tasks/gems.rake +0 -78
  205. data/lib/tasks/log.rake +0 -9
  206. data/lib/tasks/middleware.rake +0 -7
  207. data/lib/tasks/misc.rake +0 -63
  208. data/lib/tasks/rails.rb +0 -14
  209. data/lib/tasks/routes.rake +0 -18
  210. data/lib/tasks/statistics.rake +0 -17
  211. data/lib/tasks/testing.rake +0 -139
  212. data/lib/tasks/tmp.rake +0 -37
  213. data/lib/test_help.rb +0 -38
  214. data/lib/webrick_server.rb +0 -156
  215. data/railties.gemspec +0 -22
@@ -1,89 +0,0 @@
1
- require File.dirname(__FILE__) + '/options'
2
-
3
- module Rails
4
- module Generator
5
- module Scripts
6
-
7
- # Generator scripts handle command-line invocation. Each script
8
- # responds to an invoke! class method which handles option parsing
9
- # and generator invocation.
10
- class Base
11
- include Options
12
- default_options :collision => :ask, :quiet => false
13
-
14
- # Run the generator script. Takes an array of unparsed arguments
15
- # and a hash of parsed arguments, takes the generator as an option
16
- # or first remaining argument, and invokes the requested command.
17
- def run(args = [], runtime_options = {})
18
- begin
19
- parse!(args.dup, runtime_options)
20
- rescue OptionParser::InvalidOption => e
21
- # Don't cry, script. Generators want what you think is invalid.
22
- end
23
-
24
- # Generator name is the only required option.
25
- unless options[:generator]
26
- usage if args.empty?
27
- options[:generator] ||= args.shift
28
- end
29
-
30
- # Look up generator instance and invoke command on it.
31
- Rails::Generator::Base.instance(options[:generator], args, options).command(options[:command]).invoke!
32
- rescue => e
33
- puts e
34
- puts " #{e.backtrace.join("\n ")}\n" if options[:backtrace]
35
- raise SystemExit
36
- end
37
-
38
- protected
39
- # Override with your own script usage banner.
40
- def banner
41
- "Usage: #{$0} generator [options] [args]"
42
- end
43
-
44
- def usage_message
45
- usage = "\nInstalled Generators\n"
46
- Rails::Generator::Base.sources.inject([]) do |mem, source|
47
- # Using an association list instead of a hash to preserve order,
48
- # for aesthetic reasons more than anything else.
49
- label = source.label.to_s.capitalize
50
- pair = mem.assoc(label)
51
- mem << (pair = [label, []]) if pair.nil?
52
- pair[1] |= source.names
53
- mem
54
- end.each do |label, names|
55
- usage << " #{label}: #{names.join(', ')}\n" unless names.empty?
56
- end
57
-
58
- usage << <<end_blurb
59
-
60
- More are available at http://wiki.rubyonrails.org/rails/pages/AvailableGenerators
61
- 1. Download, for example, login_generator.zip
62
- 2. Unzip to directory #{Dir.user_home}/.rails/generators/login
63
- to use the generator with all your Rails apps
64
- end_blurb
65
-
66
- if Object.const_defined?(:RAILS_ROOT)
67
- usage << <<end_blurb
68
- or to #{File.expand_path(RAILS_ROOT)}/lib/generators/login
69
- to use with this app only.
70
- end_blurb
71
- end
72
-
73
- usage << <<end_blurb
74
- 3. Run generate with no arguments for usage information
75
- #{$0} login
76
-
77
- Generator gems are also available:
78
- 1. gem search -r generator
79
- 2. gem install login_generator
80
- 3. #{$0} login
81
-
82
- end_blurb
83
- return usage
84
- end
85
- end # Base
86
-
87
- end
88
- end
89
- end
@@ -1,29 +0,0 @@
1
- require File.dirname(__FILE__) + '/../scripts'
2
-
3
- module Rails::Generator::Scripts
4
- class Destroy < Base
5
- mandatory_options :command => :destroy
6
-
7
- protected
8
- def usage_message
9
- usage = "\nInstalled Generators\n"
10
- Rails::Generator::Base.sources.each do |source|
11
- label = source.label.to_s.capitalize
12
- names = source.names
13
- usage << " #{label}: #{names.join(', ')}\n" unless names.empty?
14
- end
15
-
16
- usage << <<end_blurb
17
-
18
- script/generate command. For instance, 'script/destroy migration CreatePost'
19
- will delete the appropriate XXX_create_post.rb migration file in db/migrate,
20
- while 'script/destroy scaffold Post' will delete the posts controller and
21
- views, post model and migration, all associated tests, and the map.resources
22
- :posts line in config/routes.rb.
23
-
24
- For instructions on finding new generators, run script/generate.
25
- end_blurb
26
- return usage
27
- end
28
- end
29
- end
@@ -1,7 +0,0 @@
1
- require File.dirname(__FILE__) + '/../scripts'
2
-
3
- module Rails::Generator::Scripts
4
- class Generate < Base
5
- mandatory_options :command => :create
6
- end
7
- end
@@ -1,12 +0,0 @@
1
- require File.dirname(__FILE__) + '/../scripts'
2
-
3
- module Rails::Generator::Scripts
4
- class Update < Base
5
- mandatory_options :command => :update
6
-
7
- protected
8
- def banner
9
- "Usage: #{$0} [options] scaffold"
10
- end
11
- end
12
- end
@@ -1,24 +0,0 @@
1
- require 'active_support/deprecation'
2
-
3
- module Rails
4
- # A class for creating random secret keys. This class will do its best to create a
5
- # random secret key that's as secure as possible, using whatever methods are
6
- # available on the current platform. For example:
7
- #
8
- # generator = Rails::SecretKeyGenerator("some unique identifier, such as the application name")
9
- # generator.generate_secret # => "f3f1be90053fa851... (some long string)"
10
- #
11
- # This class is *deprecated* in Rails 2.2 in favor of ActiveSupport::SecureRandom.
12
- # It is currently a wrapper around ActiveSupport::SecureRandom.
13
- class SecretKeyGenerator
14
- def initialize(identifier)
15
- end
16
-
17
- # Generate a random secret key with the best possible method available on
18
- # the current platform.
19
- def generate_secret
20
- ActiveSupport::SecureRandom.hex(64)
21
- end
22
- deprecate :generate_secret=>"You should use ActiveSupport::SecureRandom.hex(64)"
23
- end
24
- end
@@ -1,46 +0,0 @@
1
- module Rails
2
- module Generator
3
- class SimpleLogger # :nodoc:
4
- attr_reader :out
5
- attr_accessor :quiet
6
-
7
- def initialize(out = $stdout)
8
- @out = out
9
- @quiet = false
10
- @level = 0
11
- end
12
-
13
- def log(status, message, &block)
14
- @out.print("%12s %s%s\n" % [status, ' ' * @level, message]) unless quiet
15
- indent(&block) if block_given?
16
- end
17
-
18
- def indent(&block)
19
- @level += 1
20
- if block_given?
21
- begin
22
- block.call
23
- ensure
24
- outdent
25
- end
26
- end
27
- end
28
-
29
- def outdent
30
- @level -= 1
31
- if block_given?
32
- begin
33
- block.call
34
- ensure
35
- indent
36
- end
37
- end
38
- end
39
-
40
- private
41
- def method_missing(method, *args, &block)
42
- log(method.to_s, args.first, &block)
43
- end
44
- end
45
- end
46
- end
@@ -1,44 +0,0 @@
1
- module Rails
2
- module Generator
3
- # A spec knows where a generator was found and how to instantiate it.
4
- # Metadata include the generator's name, its base path, and the source
5
- # which yielded it (PathSource, GemPathSource, etc.)
6
- class Spec
7
- attr_reader :name, :path, :source
8
-
9
- def initialize(name, path, source)
10
- @name, @path, @source = name, path, source
11
- end
12
-
13
- # Look up the generator class. Require its class file, find the class
14
- # in ObjectSpace, tag it with this spec, and return.
15
- def klass
16
- unless @klass
17
- require class_file
18
- @klass = lookup_class
19
- @klass.spec = self
20
- end
21
- @klass
22
- end
23
-
24
- def class_file
25
- "#{path}/#{name}_generator.rb"
26
- end
27
-
28
- def class_name
29
- "#{name.camelize}Generator"
30
- end
31
-
32
- private
33
- # Search for the first Class descending from Rails::Generator::Base
34
- # whose name matches the requested class name.
35
- def lookup_class
36
- ObjectSpace.each_object(Class) do |obj|
37
- return obj if obj.ancestors.include?(Rails::Generator::Base) and
38
- obj.name.split('::').last == class_name
39
- end
40
- raise NameError, "Missing #{class_name} class in #{class_file}"
41
- end
42
- end
43
- end
44
- end
data/lib/railties_path.rb DELETED
@@ -1 +0,0 @@
1
- RAILTIES_PATH = File.join(File.dirname(__FILE__), '..')
@@ -1,17 +0,0 @@
1
- min_release = "1.8.2 (2004-12-25)"
2
- ruby_release = "#{RUBY_VERSION} (#{RUBY_RELEASE_DATE})"
3
- if ruby_release =~ /1\.8\.3/
4
- abort <<-end_message
5
-
6
- Rails does not work with Ruby version 1.8.3.
7
- Please upgrade to version 1.8.4 or downgrade to 1.8.2.
8
-
9
- end_message
10
- elsif ruby_release < min_release
11
- abort <<-end_message
12
-
13
- Rails requires Ruby version #{min_release} or later.
14
- You're running #{ruby_release}; please upgrade to continue.
15
-
16
- end_message
17
- end
data/lib/rubyprof_ext.rb DELETED
@@ -1,35 +0,0 @@
1
- require 'prof'
2
-
3
- module Prof #:nodoc:
4
- # Adapted from Shugo Maeda's unprof.rb
5
- def self.print_profile(results, io = $stderr)
6
- total = results.detect { |i|
7
- i.method_class.nil? && i.method_id == :"#toplevel"
8
- }.total_time
9
- total = 0.001 if total < 0.001
10
-
11
- io.puts " %% cumulative self self total"
12
- io.puts " time seconds seconds calls ms/call ms/call name"
13
-
14
- sum = 0.0
15
- for r in results
16
- sum += r.self_time
17
-
18
- name = if r.method_class.nil?
19
- r.method_id.to_s
20
- elsif r.method_class.is_a?(Class)
21
- "#{r.method_class}##{r.method_id}"
22
- else
23
- "#{r.method_class}.#{r.method_id}"
24
- end
25
- io.printf "%6.2f %8.3f %8.3f %8d %8.2f %8.2f %s\n",
26
- r.self_time / total * 100,
27
- sum,
28
- r.self_time,
29
- r.count,
30
- r.self_time * 1000 / r.count,
31
- r.total_time * 1000 / r.count,
32
- name
33
- end
34
- end
35
- end
@@ -1,102 +0,0 @@
1
- # Implements the logic behind the rake tasks for annotations like
2
- #
3
- # rake notes
4
- # rake notes:optimize
5
- #
6
- # and friends. See <tt>rake -T notes</tt> and <tt>railties/lib/tasks/annotations.rake</tt>.
7
- #
8
- # Annotation objects are triplets <tt>:line</tt>, <tt>:tag</tt>, <tt>:text</tt> that
9
- # represent the line where the annotation lives, its tag, and its text. Note
10
- # the filename is not stored.
11
- #
12
- # Annotations are looked for in comments and modulus whitespace they have to
13
- # start with the tag optionally followed by a colon. Everything up to the end
14
- # of the line (or closing ERb comment tag) is considered to be their text.
15
- class SourceAnnotationExtractor
16
- class Annotation < Struct.new(:line, :tag, :text)
17
-
18
- # Returns a representation of the annotation that looks like this:
19
- #
20
- # [126] [TODO] This algorithm is simple and clearly correct, make it faster.
21
- #
22
- # If +options+ has a flag <tt>:tag</tt> the tag is shown as in the example above.
23
- # Otherwise the string contains just line and text.
24
- def to_s(options={})
25
- s = "[%3d] " % line
26
- s << "[#{tag}] " if options[:tag]
27
- s << text
28
- end
29
- end
30
-
31
- # Prints all annotations with tag +tag+ under the root directories +app+, +lib+,
32
- # and +test+ (recursively). Only filenames with extension +.builder+, +.rb+,
33
- # +.rxml+, +.rjs+, +.rhtml+, or +.erb+ are taken into account. The +options+
34
- # hash is passed to each annotation's +to_s+.
35
- #
36
- # This class method is the single entry point for the rake tasks.
37
- def self.enumerate(tag, options={})
38
- extractor = new(tag)
39
- extractor.display(extractor.find, options)
40
- end
41
-
42
- attr_reader :tag
43
-
44
- def initialize(tag)
45
- @tag = tag
46
- end
47
-
48
- # Returns a hash that maps filenames under +dirs+ (recursively) to arrays
49
- # with their annotations. Only files with annotations are included, and only
50
- # those with extension +.builder+, +.rb+, +.rxml+, +.rjs+, +.rhtml+, and +.erb+
51
- # are taken into account.
52
- def find(dirs=%w(app lib test))
53
- dirs.inject({}) { |h, dir| h.update(find_in(dir)) }
54
- end
55
-
56
- # Returns a hash that maps filenames under +dir+ (recursively) to arrays
57
- # with their annotations. Only files with annotations are included, and only
58
- # those with extension +.builder+, +.rb+, +.rxml+, +.rjs+, +.rhtml+, and +.erb+
59
- # are taken into account.
60
- def find_in(dir)
61
- results = {}
62
-
63
- Dir.glob("#{dir}/*") do |item|
64
- next if File.basename(item)[0] == ?.
65
-
66
- if File.directory?(item)
67
- results.update(find_in(item))
68
- elsif item =~ /\.(builder|(r(?:b|xml|js)))$/
69
- results.update(extract_annotations_from(item, /#\s*(#{tag}):?\s*(.*)$/))
70
- elsif item =~ /\.(rhtml|erb)$/
71
- results.update(extract_annotations_from(item, /<%\s*#\s*(#{tag}):?\s*(.*?)\s*%>/))
72
- end
73
- end
74
-
75
- results
76
- end
77
-
78
- # If +file+ is the filename of a file that contains annotations this method returns
79
- # a hash with a single entry that maps +file+ to an array of its annotations.
80
- # Otherwise it returns an empty hash.
81
- def extract_annotations_from(file, pattern)
82
- lineno = 0
83
- result = File.readlines(file).inject([]) do |list, line|
84
- lineno += 1
85
- next list unless line =~ pattern
86
- list << Annotation.new(lineno, $1, $2)
87
- end
88
- result.empty? ? {} : { file => result }
89
- end
90
-
91
- # Prints the mapping from filenames to annotations in +results+ ordered by filename.
92
- # The +options+ hash is passed to each annotation's +to_s+.
93
- def display(results, options={})
94
- results.keys.sort.each do |file|
95
- puts "#{file}:"
96
- results[file].each do |note|
97
- puts " * #{note.to_s(options)}"
98
- end
99
- puts
100
- end
101
- end
102
- end
@@ -1,20 +0,0 @@
1
- require 'source_annotation_extractor'
2
-
3
- desc "Enumerate all annotations"
4
- task :notes do
5
- SourceAnnotationExtractor.enumerate "OPTIMIZE|FIXME|TODO", :tag => true
6
- end
7
-
8
- namespace :notes do
9
- ["OPTIMIZE", "FIXME", "TODO"].each do |annotation|
10
- desc "Enumerate all #{annotation} annotations"
11
- task annotation.downcase.intern do
12
- SourceAnnotationExtractor.enumerate annotation
13
- end
14
- end
15
-
16
- desc "Enumerate a custom annotation, specify with ANNOTATION=WTFHAX"
17
- task :custom do
18
- SourceAnnotationExtractor.enumerate ENV['ANNOTATION']
19
- end
20
- end