Skip to content

Commit

Permalink
Consolidate duplicated code from Rakefile into a few helper methods.
Browse files Browse the repository at this point in the history
  • Loading branch information
louismullie committed Sep 29, 2012
1 parent 02d03fa commit 7bf00c8
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 77 deletions.
94 changes: 32 additions & 62 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
require 'date'

# All commands are prefixed with "treat:".
namespace :treat do

# Sandboxing a script can be done here.
# Sandbox a script, for development.
# Syntax: rake treat:sandbox
task :sandbox do
require './lib/treat'
require './spec/sandbox'
end

# Returns the current version of Treat.
# Prints the current version of Treat.
# Syntax: rake treat:version
task :version do
# Parse out the version number from file.
Expand All @@ -19,73 +18,44 @@ namespace :treat do
puts contents[/VERSION = "([^"]+)"/, 1]
end

# Install a language pack (default to english).
# Syntax: rake treat:install[language]
# Installs a language pack (default to english).
# A language pack is a set of gems, binaries and
# model files that support the various workers
# that are available for that particular language.
# Syntax: rake treat:install (installs english)
# - OR - rake treast:install[some_language]
task :install, [:language] do |t, args|
require './lib/treat'
Treat.install(args.language || 'english')
end

# Runs the specs for the core library
# and for all languages (default) or
# a specific language (if specified).
# Syntax: rake treat:spec[language]
# Runs 1) the core library specs and 2) the
# worker specs for a) all languages (default)
# or b) a specific language (if specified).
# Also outputs the coverage for the whole
# library to treat/coverage (using SimpleCov).
# N.B. the worker specs are dynamically defined
# following the examples found in spec/workers.
# (see /spec/language/workers for more info)
# Syntax: rake treat:spec (core + all langs)
# - OR - rake treat:spec[some_language]
task :spec, [:language] do |t, args|

# Must be required first.
require 'simplecov'
require './spec/helper'

# Get a list of all folders.
SimpleCov.start do
add_filter '/spec/'
add_filter '/config/'
add_group 'Core', 'treat/core'
add_group 'Entities', 'treat/entities'
add_group 'Helpers', 'treat/helpers'
add_group 'Loaders', 'treat/loaders'
add_group 'Workers', 'treat/workers'
add_group 'Config', 'config.rb'
add_group 'Proxies', 'proxies.rb'
add_group 'Treat', 'treat.rb'
end

# Require all the necessary examples.
Treat::Specs::Helper.
require_languages(args.language, t)

# Run all of the benchmark examples.
Treat::Specs::Workers::Language.
list.each do |lang|
lang.new('spec').run
end

# Require the core and entity specs.
files = Dir.glob('./spec/core/*.rb') +
Dir.glob('./spec/entities/*.rb')

# Run all the spec files.
RSpec::Core::Runner.run(
files, $stderr, $stdout)

require_relative 'spec/helper'
Treat::Specs::Helper.start_coverage
Treat::Specs::Helper.run_core_specs
Treat::Specs::Helper.run_examples_as(
:specs, args.language)
end

# Benchmark all languages (default) or a
# specific language (if argument supplied).
# Syntax: rake treat:benchmark[language]
# Runs worker benchmarks for all languages (by
# default), or for a specific language (if supplied).
# Also outputs an HTML table
# Syntax: rake treat:benchmark (all languages)
# - OR - rake treat:benchmark[language]
task :benchmark, [:language] do |t, args|

require './spec/helper'

# Require the right benchmark files.
Treat::Specs::Helper.
require_languages(args.language, t)

Treat::Specs::Workers::Language.
list.each do |lang|
lang.new('benchmark').run
end

require_relative 'spec/helper'
Treat::Specs::Helper.run_examples_as(
:benchmarks, args.language)
end

end
65 changes: 50 additions & 15 deletions spec/helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,59 @@ module Treat::Specs
# Require Ruby benchmark library.
require 'benchmark'
# Require gem to build ASCII tables.
require 'terminal-table'

# Some configuration options for devel.
#Treat.databases.mongo.db = 'treat_test'
#Treat.libraries.stanford.model_path =
#'/ruby/stanford/stanford-core-nlp-all/'
#Treat.libraries.stanford.jar_path =
#'/ruby/stanford/stanford-core-nlp-all/'
#Treat.libraries.punkt.model_path =
#'/ruby/punkt/'
#Treat.libraries.reuters.model_path =
#'/ruby/reuters/'
Treat.databases.mongo.db = 'treat_test'
Treat.libraries.stanford.model_path =
'/ruby/stanford/stanford-core-nlp-all/'
Treat.libraries.stanford.jar_path =
'/ruby/stanford/stanford-core-nlp-all/'
Treat.libraries.punkt.model_path =
'/ruby/punkt/'
Treat.libraries.reuters.model_path =
'/ruby/reuters/'

# Provide helper functions for running specs.
class Helper

# Run all worker example files as :specs
# or :benchmarks for the given language.
def self.run_examples_as(what, language)
require_languages(args.language, t)
Treat::Specs::Workers::Language.
list.each do |lang|
lang.new(what).run
end
end

# Run specs for the core classes.
def self.run_core_specs
files = Dir.glob('./spec/core/*.rb') +
Dir.glob('./spec/entities/*.rb')
# Run all the spec files.
RSpec::Core::Runner.run(
files, $stderr, $stdout)
end

# Start SimpleCov coverage.
def self.start_coverage
require 'simplecov'
SimpleCov.start do
add_filter '/spec/'
add_filter '/config/'
add_group 'Core', 'treat/core'
add_group 'Entities', 'treat/entities'
add_group 'Helpers', 'treat/helpers'
add_group 'Loaders', 'treat/loaders'
add_group 'Workers', 'treat/workers'
add_group 'Config', 'config.rb'
add_group 'Proxies', 'proxies.rb'
add_group 'Treat', 'treat.rb'
end
end

# Require language files based on the argument.
def self.require_languages(arg, task)
def self.require_languages(arg)
# Require the base language class.
require_relative 'workers/language'
# If no language supplied, get all languages.
Expand All @@ -36,21 +71,21 @@ def self.require_languages(arg, task)
pattern = "./spec/workers/#{arg}.rb"
# Check if a spec file exists.
unless File.readable?(pattern)
task = task.name.split(':').last
raise Treat::Exception,
"No #{task} file exists for language '#{arg}'."
"No example file exists for language '#{arg}'."
end
end
# Require all files matched by the pattern.
Dir.glob(pattern).each { |f| require f }
end

def self.html_table(headings, rows)
def self.text_table(headings, rows)
require 'terminal-table'
puts Terminal::Table.new(
headings: headings, rows: rows)
end

def self.text_table(headings, rows)
def self.html_table(headings, rows)
require 'fileutils'
html = "<table>\n"
html += "<tr>\n"
Expand Down

0 comments on commit 7bf00c8

Please sign in to comment.