lib/sdoc_all/rails.rb in sdoc_all-0.1.0 vs lib/sdoc_all/rails.rb in sdoc_all-0.2.0.1
- old
+ new
@@ -1,51 +1,69 @@
class SdocAll
class Rails < Base
- def self.each
- Gem.source_index.search(Gem::Dependency.new('rails', :all)).each do |spec|
- yield spec.full_name, spec.version.to_s
+ def initialize(config)
+ config ||= {}
+ config = {:version => config} unless config.is_a?(Hash)
+
+ if config[:version]
+ unless self.class.versions.include?(config[:version])
+ raise ConfigError.new("you don't have rails #{config[:version]} installed")
+ end
+ else
+ if self.class.versions.empty?
+ raise ConfigError.new("you don't have any rails versions installed")
+ end
end
+
+ @config = {
+ :version => config.delete(:version) || self.class.versions.last,
+ }
+
+ raise_unknown_options_if_not_blank!(config)
end
- def self.update_sources(options = {})
- to_clear = Dir['rails-*']
- each do |rails, version|
- to_clear.delete(rails)
- remove_if_present(rails) if options[:force]
- unless File.directory?(rails)
- with_env 'VERSION', version do
- system('rails', rails, '--freeze')
- end
+ def add_tasks(options = {})
+ version = @config[:version]
+ path = sources_path + version
+
+ unless path.directory?
+ Base.remove_if_present(sources_path)
+ sources_path
+ Base.with_env 'VERSION', version do
+ Base.system('rails', path, '--freeze')
end
end
- to_clear.each do |rails|
- remove_if_present(rails)
- end
- end
- def self.add_rdoc_tasks(options = {})
- each do |rails, version|
- if File.directory?(rails)
- Dir.chdir(rails) do
- pathes = Rake::FileList.new
- File.open('vendor/rails/railties/lib/tasks/documentation.rake') do |f|
- true until f.readline['Rake::RDocTask.new("rails")']
- until (line = f.readline.strip) == '}'
- if line['rdoc.rdoc_files.include']
- pathes.include(line[/'(.*)'/, 1])
- elsif line['rdoc.rdoc_files.exclude']
- pathes.exclude(line[/'(.*)'/, 1])
- end
- end
+ paths = Rake::FileList.new
+ Dir.chdir(path) do
+ File.open('vendor/rails/railties/lib/tasks/documentation.rake') do |f|
+ true until f.readline['Rake::RDocTask.new("rails")']
+ until (line = f.readline.strip) == '}'
+ if line['rdoc.rdoc_files.include']
+ paths.include(line[/'(.*)'/, 1])
+ elsif line['rdoc.rdoc_files.exclude']
+ paths.exclude(line[/'(.*)'/, 1])
end
- add_rdoc_task(
- :name_parts => [version],
- :src_path => rails,
- :doc_path => rails,
- :pathes => pathes.resolve
- )
end
end
+ paths.resolve
end
+ Base.add_task(
+ :src_path => path,
+ :doc_path => "rails-#{version}",
+ :paths => paths.to_a,
+ :title => "rails-#{version}"
+ )
end
+
+ module ClassMethods
+ def versions
+ [].tap do |versions|
+ Gem.source_index.search(Gem::Dependency.new('rails', :all)).each do |spec|
+ versions << spec.version
+ end
+ end.sort.map(&:to_s)
+ end
+ end
+ extend ClassMethods
end
end