require 'wukong'
require 'wukong/boot'
require_relative('spec_helpers/processor_helpers')
require_relative('spec_helpers/processor_methods')
require_relative('spec_helpers/spec_driver_matchers')
require_relative('spec_helpers/integration_driver')
require_relative('spec_helpers/integration_driver_matchers')
require_relative('spec_helpers/shared_examples')
module Wukong
# This module lets you use write processor specs at a high level.
# Require it in your spec_helper.rb file:
#
# # in your spec/spec_helper.rb
# require 'wukong/spec_helpers'
# RSpec.configure do |config|
# include Wukong::SpecHelpers
# end
#
# Processors in a Wukong spec will have a collection of
# given_* methods you can use to (lazily) feed them records
# without having to have to build your own driver to run the
# processors.
#
# To each given_* method corresponds an emit_*
# matcher which will actually run the processor on the given
# inputs and compare against expected results. Here's an example,
# using a simple `tokenizer` processor.
#
# subject { processor(:tokenizer) }
#
# it "emits each word in a given string" do
# given("It was the best of times, it was the worst of times.").should emit(12).records
# end
#
# # Give similar input and check against explicit expected
# # output.
# it "should ignore punctuation and capitalization" do
# processor.given("You're crazy!").should emit("youre", "crazy")
# end
#
# # Pass the input but transform to JSON first (delimited and
# # as_tsv also work).
# it "should tokenize the 'text' attribute of a record if given JSON" do
# processor.given("text" => "Will be cast to JSON").as_json.should emit("will", "be", "cast", "to", "json")
# end
#
# # Initialize the :tokenizer processor with arguments to test
# # behavior under different conditions.
# it "should output a single record when asked for JSON output" do
# processor(:json => true).given("It was the best of times, it was the worst of times.").should emit(1).records
# end
#
# # Initialize processor with arguments and express that the
# # expected output will be in JSON though given as an object.
# it "should output all the tokens for its input record with its JSON output" do
# processor(:json => true).given("You're crazy!").should emit("tokens" => ["youre", "crazy"]).as_json
# end
#
# # Initialize processor with arguments, and both input and
# # output will be serialized/deserialized to/from JSON
# # automatically.
# it "can read and write pure JSON" do
# processor(:json => true).given("text" => "You're crazy!").as_json.should emit("tokens" => ["youre", "crazy"]).as_json
# end
#
# # Use a processor outside the scope of the top-level :describe
# # block.
# it "has a friend which does the same thing" do
# processor(:similar_tokenizer, :json => true).given("hi there").should emit(2).records
# end
module SpecHelpers
include ProcessorHelpers
include SpecMatchers
include IntegrationRunner
include IntegrationMatchers
end
Processor.class_eval { include SpecHelpers::ProcessorSpecMethods }
end