Skip to content

Commit

Permalink
test
Browse files Browse the repository at this point in the history
  • Loading branch information
rob-murray committed Jan 22, 2016
1 parent e7d4a82 commit cf72930
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 8 deletions.
1 change: 1 addition & 0 deletions lib/five-star.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require "five-star/version"
require "five-star/base_rater"
require "five-star/configuration"
require "five-star/rateable"
require "five-star/errors"
require "five-star/rating_calculator"
Expand Down
6 changes: 6 additions & 0 deletions lib/five-star/configuration.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module FiveStar
class Configuration
def min_rating; 0; end
def max_rating; 10; end
end
end
6 changes: 5 additions & 1 deletion lib/five-star/rateable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def rating_klasses
#
# @api public
def rating
rating_calculator.rate(raters)
rating_calculator.rate(config, raters)
end

# Return the rating description for each rater given to the `rateable`
Expand Down Expand Up @@ -117,5 +117,9 @@ def rating_klasses
def rating_calculator
RatingCalculator
end

def config
Configuration.new
end
end
end
19 changes: 14 additions & 5 deletions lib/five-star/rating_calculator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@ module FiveStar
# Each instance must implement `rating` and `weighting`.
# @api private
class RatingCalculator
def self.rate(raters)
new(raters).calculate_rating
def self.rate(configuration, raters)
new(configuration, raters).calculate_rating
end

def initialize(raters)
def initialize(configuration, raters)
@configuration = configuration
@raters = raters
end

Expand All @@ -24,7 +25,7 @@ def calculate_rating

private

attr_reader :raters
attr_reader :raters, :configuration

def sum_total
raters.map { |rater|
Expand All @@ -38,7 +39,7 @@ def weights_total

def validate_rating!(rating, rater)
#rating = rating.to_i
if rating < 0 || rating > 10
if rating < min_rating || rating > max_rating
raise RatingError, "Rating #{rating} is invalid from #{rater.class}"
else
rating
Expand All @@ -52,5 +53,13 @@ def validate_weighting!(weighting, rater)
weighting
end
end

def min_rating
configuration.min_rating
end

def max_rating
configuration.max_rating
end
end
end
3 changes: 2 additions & 1 deletion spec/five-star/rateable_spec.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
require "spec_helper"

RSpec.describe FiveStar::Rateable do
# let(:configuration) { double("Configuration", min_rating: 0, max_rating: 10) }
class Rater
def self.build(_); self; end
def self.description; end
Expand All @@ -25,7 +26,7 @@ def self.description; end
end

it "passes raters to calculation class" do
expect(FiveStar::RatingCalculator).to receive(:rate).with([Rater, Rater, Rater])
expect(FiveStar::RatingCalculator).to receive(:rate).with(anything, [Rater, Rater, Rater])

dummy_class.new.rating
end
Expand Down
3 changes: 2 additions & 1 deletion spec/five-star/rating_calculator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

RSpec.describe FiveStar::RatingCalculator do
let(:list_of_raters) { [first_rater, second_rater, third_rater] }
subject { described_class.new(list_of_raters) }
let(:configuration) { double("Configuration", min_rating: 0, max_rating: 10) }
subject { described_class.new(configuration, list_of_raters) }

describe "#calculate_rating" do
context "with no rating classes provided" do
Expand Down

0 comments on commit cf72930

Please sign in to comment.