# class RDoc::Generator::POT::MessageExtractor

frozen_string_literal: false

Extracts message from RDoc::Store

### Public Class Methods

new(store) click to toggle source

Creates a message extractor for `store`.

    # File lib/rdoc/generator/pot/message_extractor.rb, line 10
    def initialize store
      @store = store
      @po = RDoc::Generator::POT::PO.new
    end

### Public Instance Methods

extract() click to toggle source

Extracts messages from `store`, stores them into RDoc::Generator::POT::PO and returns it.

    # File lib/rdoc/generator/pot/message_extractor.rb, line 19
    def extract
      @store.all_classes_and_modules.each do |klass|
        extract_from_klass(klass)
      end
      @po
    end

### Private Instance Methods

entry(msgid, options) click to toggle source

    # File lib/rdoc/generator/pot/message_extractor.rb, line 64
    def entry msgid, options
      RDoc::Generator::POT::POEntry.new(msgid, options)
    end

extract_from_klass(klass) click to toggle source

    # File lib/rdoc/generator/pot/message_extractor.rb, line 28
    def extract_from_klass klass
      extract_text(klass.comment_location, klass.full_name)

      klass.each_section do |section, constants, attributes|
        extract_text(section.title ,"#{klass.full_name}: section title")
        section.comments.each do |comment|
          extract_text(comment, "#{klass.full_name}: #{section.title}")
        end
      end

      klass.each_constant do |constant|
        extract_text(constant.comment, constant.full_name)
      end

      klass.each_attribute do |attribute|
        extract_text(attribute.comment, attribute.full_name)
      end

      klass.each_method do |method|
        extract_text(method.comment, method.full_name)
      end
    end

extract_text(text, comment, location = nil) click to toggle source

    # File lib/rdoc/generator/pot/message_extractor.rb, line 51
    def extract_text text, comment, location = nil
      return if text.nil?

      options = {
        :extracted_comment => comment,
        :references => [location].compact,
      }
      i18n_text = RDoc::I18n::Text.new(text)
      i18n_text.extract_messages do |part|
        @po.add(entry(part[:paragraph], options))
      end
    end