class MediaWiktory::Generator::Module

Attributes

api[R]

Public Class Methods

from_html_nodes(title, nodes) click to toggle source
# File lib/mediawiktory/generator/module.rb, line 9
def from_html_nodes(title, nodes)
  type, name, prefix = title.scan(/^([a-z]+)=([^(]+)(?:\s+\((.+)\))?$/).flatten

  new(
    type: type._n.to_sym || :main,
    name: name || '',
    prefix: prefix,
    description: extract_description(nodes),
    flags: extract_flags(nodes),
    params: extract_params(nodes, prefix)
  )
end
new(*) click to toggle source
Calls superclass method
# File lib/mediawiktory/generator/module.rb, line 44
def initialize(*)
  super
  # 'action' should not be rendered as "available default params" for api initializer
  params.reject! { |p| p.name == 'action' } if main?
end

Private Class Methods

extract_description(nodes) click to toggle source
# File lib/mediawiktory/generator/module.rb, line 24
def extract_description(nodes)
  nodes.detect { |n| n.name == 'p' }._n.text.to_s.tr("\n", ' ').strip
end
extract_flags(nodes) click to toggle source
# File lib/mediawiktory/generator/module.rb, line 28
def extract_flags(nodes)
  flags = nodes.detect { |n| n['class']._n.include?('apihelp-flags') } or return []
  flags.search('ul li > span').to_a
       .map { |el| {id: el.attr('class'), text: el.text} }
       .map { |h| h.merge(role: h[:id].sub(/^apihelp-(flag-)?/, '')) }
end
extract_params(nodes, prefix) click to toggle source
# File lib/mediawiktory/generator/module.rb, line 35
def extract_params(nodes, prefix)
  params = nodes.detect { |n| n['class']._n.include?('apihelp-parameters') } or return []
  params.at('dl').each_term.to_a
        .map { |dts, dds| Param.from_html_nodes(dts.first.text, dds, prefix: prefix) }
end

Public Instance Methods

action?() click to toggle source
# File lib/mediawiktory/generator/module.rb, line 59
def action?
  type == :action
end
api=(api) click to toggle source
# File lib/mediawiktory/generator/module.rb, line 73
def api=(api)
  @api = api
  params.each { |p| p.api = api }
end
class_name() click to toggle source
# File lib/mediawiktory/generator/module.rb, line 100
def class_name
  name.split('-').map(&:capitalize).join
end
description() click to toggle source
Calls superclass method
# File lib/mediawiktory/generator/module.rb, line 78
def description
  super.split("\n").join("\n#\n# ")
end
http_method() click to toggle source
# File lib/mediawiktory/generator/module.rb, line 88
def http_method
  post? ? 'Post' : 'Get'
end
inspect() click to toggle source
# File lib/mediawiktory/generator/module.rb, line 55
def inspect
  "#<#{self.class.name} #{name}>"
end
main?() click to toggle source
# File lib/mediawiktory/generator/module.rb, line 63
def main?
  type == :main
end
main_template() click to toggle source
# File lib/mediawiktory/generator/module.rb, line 69
def main_template
  'action_class.rb'
end
method_name() click to toggle source
# File lib/mediawiktory/generator/module.rb, line 96
def method_name
  name.sub(/^g-/, '').split('-').join('_')
end
params() click to toggle source
Calls superclass method
# File lib/mediawiktory/generator/module.rb, line 82
def params
  # TODO: some actions have "rest of parameters, see there".
  # Currently, we ignore it
  (super || []).reject { |p| p.name == '*' || main? && p.name == 'action' }
end
post?() click to toggle source
# File lib/mediawiktory/generator/module.rb, line 92
def post?
  flags.any? { |f| f.id == 'apihelp-flag-mustbeposted' }
end
prefix=(pre) click to toggle source
Calls superclass method
# File lib/mediawiktory/generator/module.rb, line 50
def prefix=(pre)
  super
  params.each { |p| p.prefix = pre }
end