Skip to content

Commit

Permalink
adding activerecord generator
Browse files Browse the repository at this point in the history
  • Loading branch information
tenderlove committed Jul 6, 2009
1 parent ff4f8e3 commit a7f103d
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 7 deletions.
1 change: 1 addition & 0 deletions bin/rdocsql
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#

require "rdoc/generator/sql"
require "rdoc/generator/active_record"

begin
r = RDoc::RDoc.new
Expand Down
109 changes: 109 additions & 0 deletions lib/rdoc/generator/active_record.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
require 'rdoc/generator'
require 'rdoc/rdoc'

class RDoc::Generator::ActiveRecord
RDoc::RDoc.add_generator self

class << self
alias :for :new
end

def bar
end

alias :foo :bar

attr_accessor :class_dir, :file_dir

RAILS_ROOT = ENV['RAILS_ROOT']

def initialize options
@options = options
@class_dir = nil
@file_dir = nil
@odir = Pathname.new(options.op_dir).expand_path(Pathname.pwd)
@fh = nil
require File.join(RAILS_ROOT, 'config', 'environment')
end

##
# Generate some stuff
def generate top_levels
@files = top_levels
@classes = RDoc::TopLevel.all_classes_and_modules
@methods = @classes.map { |x| x.method_list }.flatten

@class_cache = {}

write_files
write_classes
write_methods
end

private
def write_methods
@methods.each do |method|
MethodObject.create!(
:name => method.name,
:visibility => method.visibility.to_s,
:aliases => method.aliases.map { |x| x.name },
:alias_for => (method.is_alias_for.name rescue nil),
:call_seq => method.call_seq,
:params => method.params,
:description => method.description,
:markup_code => method.markup_code,
:parent => @class_cache[method.parent.full_name]
)
end
end

def write_files
@files.each do |file|
SourceFile.create!(
:name => file.absolute_name,
:description => file.description.strip,
:requires => file.requires.map { |x| x.name },
:last_modified => file.file_stat.mtime
)
end
end

def write_classes
@classes.each do |klass|
ar_class = ClassObject.create!(
:name => klass.full_name,
:class_type => klass.type,
:superclass_name => klass.type == 'class' ?
(klass.superclass.full_name rescue klass.superclass) :
nil,
:description => klass.description.strip
)
@class_cache[klass.full_name] = ar_class

klass.each_attribute do |attrib|
AttributeObject.create!(
:name => attrib.name,
:access => attrib.rw,
:description => attrib.description.strip,
:parent => ar_class
)
end

klass.each_constant do |const|
ConstantObject.create!(
:name => const.name,
:parent => ar_class,
:description => const.description.strip
)
end
end

@classes.each do |klass|
(klass.modules + klass.classes).each do |mod|
record = @class_cache[mod.full_name]
record.parent = @class_cache[klass.full_name]
record.save!
end
end
end
end
12 changes: 5 additions & 7 deletions lib/rdoc/generator/sql.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ def bar

attr_accessor :class_dir, :file_dir

MUTEX = Mutex.new

def initialize options
@options = options
@class_dir = nil
Expand Down Expand Up @@ -59,19 +57,19 @@ def create_tables
CREATE TABLE IF NOT EXISTS "code_objects"
( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"parent_id" INTEGER,
"superclass_id" INTEGER,
"type" varchar(255),
"name" varchar(255),
"access" varchar(255),
"aliases" text,
"call_seq" text,
"params" text,
"alias_for" varchar(255),
"class_type" varchar(255),
"visibility" varchar(255),
"superclass_name" varchar(255),
"aliases" text,
"call_seq" text,
"params" text,
"description" text,
"markup_code" text,
"superclass_id" INTEGER,
"superclass_name" varchar(255),
"created_at" datetime,
"updated_at" datetime
);
Expand Down

0 comments on commit a7f103d

Please sign in to comment.