docster 0.0.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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in docster.gemspec
4
+ gemspec
data/README ADDED
File without changes
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require 'docster/cli'
3
+ Docster::CLI.start
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "docster/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "docster"
7
+ s.version = Docster::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Jim Ryan", "Chris Gunther"]
10
+ s.email = ["info@room118solutions.com"]
11
+ s.homepage = "http://github.com/room118solutions/docster"
12
+ s.summary = %q{Generates searchable documentation for your ruby project}
13
+ s.description = s.summary
14
+
15
+ s.rubyforge_project = "docster"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency "sdoc"
23
+ s.add_dependency "thor"
24
+ s.add_development_dependency "rake"
25
+ end
@@ -0,0 +1 @@
1
+ module Docster; end
@@ -0,0 +1,18 @@
1
+ require 'thor'
2
+ require 'bundler'
3
+ require 'docster/doc_generator'
4
+
5
+ module Docster
6
+ class CLI < Thor
7
+
8
+ desc 'generate', "Generate merged sdoc documentation for all :default and :development gems in this project"
9
+ method_option :groups, :default => ['default', 'development'], :type => :array, :aliases => '-g'
10
+ method_option :name, :default => Bundler.default_gemfile.dirname.split.last.to_s, :type => :string, :aliases => '-n'
11
+ method_option :ruby_version, :default => "#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}", :type => :string, :aliases => '-r', :desc => 'Ruby version to include (defaults to this Ruby)', :banner => '(VERSION)-p(PATCHLEVEL)'
12
+ method_option :without_ruby, :default => false, :type => :boolean, :desc => 'Generate documentation without Ruby docs'
13
+ def generate
14
+ DocGenerator.generate! options.name, options.groups, (options.without_ruby ? nil : options.ruby_version)
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,116 @@
1
+ require 'bundler'
2
+
3
+ module Docster
4
+ class RubyNotFound < StandardError; end
5
+
6
+ class DocGenerator
7
+ def self.generate!(project_name, groups, ruby_version)
8
+ begin
9
+ @@groups = groups
10
+
11
+ create_docs_directory! unless Dir.exists?(docs_dir)
12
+ create_projects_directory! unless Dir.exists?(projects_path)
13
+
14
+ changes = false
15
+ gems.each do |name, info|
16
+ unless Dir.exists?(doc_path_for name, info[:version])
17
+ generate_sdoc_for :type => :gem, :name => name, :version => info[:version], :path => info[:path]
18
+ changes = true
19
+ end
20
+ end
21
+
22
+ unless ruby_version.nil? || Dir.exists?(doc_path_for 'ruby', ruby_version)
23
+ generate_sdoc_for :name => 'ruby', :version => ruby_version, :path => download_ruby(ruby_version)
24
+ changes = true
25
+ end
26
+
27
+ if changes || !File.exists?(File.join(project_path_for(project_name), 'index.html'))
28
+ FileUtils.rm_rf project_path_for project_name
29
+ sdoc_merge project_name, ruby_version
30
+ end
31
+
32
+ `open #{File.join project_path_for(project_name), 'index.html'}`
33
+ ensure
34
+ cleanup!
35
+ end
36
+ end
37
+
38
+ private
39
+ def self.sdoc_merge(project_name, ruby_version)
40
+ names = ruby_version ? [gem_names, 'ruby'].join(',') : gem_names
41
+ paths = ruby_version ? doc_paths << %Q( "#{doc_path_for 'ruby', ruby_version}") : doc_paths
42
+ `sdoc-merge --title "#{project_name}" --op "#{project_path_for project_name}" --names "#{names}" #{paths}`
43
+ end
44
+
45
+ def self.generate_sdoc_for(options = {})
46
+ `sdoc -o "#{doc_path_for options[:name], options[:version]}" "#{options[:path]}"`
47
+ end
48
+
49
+ def self.gems
50
+ return @@gems if defined?(@@gems)
51
+
52
+ gem_paths = {}
53
+ Bundler.definition.specs_for(@@groups.map(&:to_sym)).each do |gem|
54
+ gem_paths[gem.name] = { :path => gem.full_gem_path, :version => gem.version.to_s }
55
+ end
56
+ @@gems = gem_paths
57
+ end
58
+
59
+ def self.gem_names
60
+ gems.keys.join(',')
61
+ end
62
+
63
+ def self.doc_paths
64
+ '"' << gems.map{ |name, info| "#{doc_path_for name, info[:version]}" }.join('" "') << '"'
65
+ end
66
+
67
+ def self.user_docster_path
68
+ return @@user_docster_path if defined?(@@user_docster_path)
69
+
70
+ @@user_docster_path = File.join(Etc.getpwuid.dir, '.docster')
71
+ end
72
+
73
+ def self.doc_path_for(name, version)
74
+ File.join user_docster_path, 'docs', name, version
75
+ end
76
+
77
+ def self.create_docs_directory!
78
+ FileUtils.mkdir_p docs_dir
79
+ end
80
+
81
+ def self.create_projects_directory!
82
+ FileUtils.mkdir_p projects_path
83
+ end
84
+
85
+ def self.docs_dir
86
+ File.join(user_docster_path, 'docs')
87
+ end
88
+
89
+ def self.tmp_path
90
+ path = File.join(user_docster_path, 'tmp')
91
+ FileUtils.mkdir_p path
92
+ path
93
+ end
94
+
95
+ def self.cleanup!
96
+ FileUtils.rm_rf tmp_path
97
+ end
98
+
99
+ def self.projects_path
100
+ File.join user_docster_path, 'projects'
101
+ end
102
+
103
+ def self.project_path_for(project_name)
104
+ File.join projects_path, project_name
105
+ end
106
+
107
+ def self.download_ruby(version)
108
+ ruby_archive = "ruby-#{version}.tar.bz2"
109
+ archive_path = File.join tmp_path, ruby_archive
110
+ `wget http://ftp.ruby-lang.org/pub/ruby/#{version.split('.')[0..1].join('.')}/#{ruby_archive} -O "#{archive_path}"`
111
+ raise RubyNotFound unless File.size?(archive_path)
112
+ `tar -xf "#{archive_path}" -C "#{tmp_path}"`
113
+ File.join tmp_path, "ruby-#{version}"
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,3 @@
1
+ module Docster
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: docster
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jim Ryan
9
+ - Chris Gunther
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2011-12-28 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: sdoc
17
+ requirement: &2164266320 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *2164266320
26
+ - !ruby/object:Gem::Dependency
27
+ name: thor
28
+ requirement: &2164265900 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *2164265900
37
+ - !ruby/object:Gem::Dependency
38
+ name: rake
39
+ requirement: &2164265400 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *2164265400
48
+ description: Generates searchable documentation for your ruby project
49
+ email:
50
+ - info@room118solutions.com
51
+ executables:
52
+ - docster
53
+ extensions: []
54
+ extra_rdoc_files: []
55
+ files:
56
+ - .gitignore
57
+ - Gemfile
58
+ - README
59
+ - Rakefile
60
+ - bin/docster
61
+ - docster.gemspec
62
+ - lib/docster.rb
63
+ - lib/docster/cli.rb
64
+ - lib/docster/doc_generator.rb
65
+ - lib/docster/version.rb
66
+ homepage: http://github.com/room118solutions/docster
67
+ licenses: []
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ segments:
79
+ - 0
80
+ hash: 3265255303828275375
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ segments:
88
+ - 0
89
+ hash: 3265255303828275375
90
+ requirements: []
91
+ rubyforge_project: docster
92
+ rubygems_version: 1.8.6
93
+ signing_key:
94
+ specification_version: 3
95
+ summary: Generates searchable documentation for your ruby project
96
+ test_files: []