class NaturalDateExpressionFactory

Constants

EXPRESSION_SPLITTER_STEP
STEPS

Public Class Methods

new(lang) click to toggle source
# File lib/natural-date/natural_date_expression_factory.rb, line 2
def initialize lang
  @lang = lang
end

Public Instance Methods

create(expression_string, reference_date = Date.today) click to toggle source
# File lib/natural-date/natural_date_expression_factory.rb, line 6
def create expression_string, reference_date = Date.today
  NaturalDateExpression.new(create_data_expression(expression_string, reference_date), reference_date, expression_string)
end

Private Instance Methods

create_data_expression(expression_string, reference_date) click to toggle source
# File lib/natural-date/natural_date_expression_factory.rb, line 15
def create_data_expression expression_string, reference_date
  expression_splitter.map(expression_string.to_s).map do |expression|
    steps.reduce(expression) do |tokens, step|
      step.map(tokens, reference_date)
    end
  end
end
expression_splitter() click to toggle source
# File lib/natural-date/natural_date_expression_factory.rb, line 23
def expression_splitter
  EXPRESSION_SPLITTER_STEP[@lang] ||= begin
                                        Translator::ExpressionSplitter.new.tap do |step|
                                          step.language_bundle = Translator::LanguageBundle.fetch(@lang)
                                        end
                                      end
end
step_classes() click to toggle source
# File lib/natural-date/natural_date_expression_factory.rb, line 39
def step_classes
  [ Translator::Cleaner,
    Translator::SplitterLiteralDate,
    Translator::Mounter,
    Translator::Normalizer,
    Translator::Expander,
    Translator::ModApplier,
    Translator::Minifier,
    Translator::YearFinder,
    Translator::UnknownCleaner ].freeze
end
steps() click to toggle source
# File lib/natural-date/natural_date_expression_factory.rb, line 31
def steps
  STEPS[@lang] ||= step_classes.map do |step_class|
    step_class.new.tap do |step|
      step.language_bundle = Translator::LanguageBundle.fetch(@lang)
    end
  end
end