Module: ActiveDoc

Defined in:
lib/active_doc.rb,
lib/active_doc/rake/task.rb,
lib/active_doc/rdoc_generator.rb,
lib/active_doc/described_method.rb,
lib/active_doc/descriptions/method_argument_description.rb

Defined Under Namespace

Modules: ClassMethods, Descriptions, Dsl, Rake Classes: DescribedMethod, RdocGenerator

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.before_method(base, method_name) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/active_doc.rb', line 54

def before_method(base, method_name)
  method = base.instance_method(method_name)
  base.class_eval do
    self.send(:define_method, "#{method_name}_with_validation") do |*args|
      yield method, args
      self.send("#{method_name}_without_validation", *args)
    end
    self.send(:alias_method, :"#{method_name}_without_validation", method_name)
    self.send(:alias_method, method_name, :"#{method_name}_with_validation")
  end
end

.describe(base, method_name, origin) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/active_doc.rb', line 34

def describe(base, method_name, origin)
  if current_descriptions = pop_current_descriptions
    @descriptions ||= {}
    @descriptions[[base, method_name]] = ActiveDoc::DescribedMethod.new(base, method_name, current_descriptions, origin)
    before_method(base, method_name) do |method, args|
      args_with_vals = {}
      method.parameters.each_with_index { |(arg, name), i| args_with_vals[name] = {:val => args[i], :required => (arg != :opt), :defined => (i < args.size)}  }
      current_descriptions.each { |description| description.validate(args_with_vals) }
    end
  end
end

.documented_method(base, method_name) ⇒ Object



46
47
48
# File 'lib/active_doc.rb', line 46

def documented_method(base, method_name)
  @descriptions && @descriptions[[base,method_name]]
end

.documented_methodsObject



50
51
52
# File 'lib/active_doc.rb', line 50

def documented_methods
  @descriptions.values
end

.included(base) ⇒ Object



4
5
6
7
8
9
10
11
12
# File 'lib/active_doc.rb', line 4

def self.included(base)
  base.extend(ClassMethods)
  base.extend(Dsl)
  base.class_eval do
    class << self
      extend(Dsl)
    end
  end
end

.nested_descriptionsObject



26
27
28
29
30
31
32
# File 'lib/active_doc.rb', line 26

def nested_descriptions
  before_nesting_descriptions = self.pop_current_descriptions
  yield
  after_nesting_descriptions = self.pop_current_descriptions
  @current_descriptions = before_nesting_descriptions
  return after_nesting_descriptions
end

.pop_current_descriptionsObject



20
21
22
23
24
# File 'lib/active_doc.rb', line 20

def pop_current_descriptions
  current_descriptions = @current_descriptions
  @current_descriptions = nil
  return current_descriptions
end

.register_description(description) ⇒ Object



15
16
17
18
# File 'lib/active_doc.rb', line 15

def register_description(description)
  @current_descriptions ||= []
  @current_descriptions << description
end