Skip to content

Commit

Permalink
promotional rules and basic test setup
Browse files Browse the repository at this point in the history
  • Loading branch information
goodviber committed Jun 8, 2018
0 parents commit 7aac523
Show file tree
Hide file tree
Showing 17 changed files with 236 additions and 0 deletions.
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/.bundle/
/.yardoc
/Gemfile.lock
/_yardoc/
/coverage/
/doc/
/pkg/
/spec/reports/
/tmp/
2 changes: 2 additions & 0 deletions .rspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
--format documentation
--color
4 changes: 4 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
language: ruby
rvm:
- 2.2.1
before_install: gem install bundler -v 1.10.6
4 changes: 4 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
source 'https://rubygems.org'

# Specify your gem's dependencies in vinterior.gemspec
gemspec
36 changes: 36 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Vinterior

Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/vinterior`. To experiment with that code, run `bin/console` for an interactive prompt.

TODO: Delete this and the text above, and describe your gem

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'vinterior'
```

And then execute:

$ bundle

Or install it yourself as:

$ gem install vinterior

## Usage

TODO: Write usage instructions here

## Development

After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/vinterior.

18 changes: 18 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
require "bundler/gem_tasks"
require 'rspec/core'
require "rspec/core/rake_task"

RSpec::Core::RakeTask.new(:spec)

task :default => :spec

describe 'Run Vinterior Test'
task :run do

project_root = File.dirname(File.absolute_path(__FILE__))
Dir.glob(project_root + '/lib/*') { |file| require file }

promo_rules = []
promo_rules << PromoRule.discount_rule( 60, 10 )
promo_rules << PromoRule.multi_discount_rule('001', 2, 8.50)
end
14 changes: 14 additions & 0 deletions bin/console
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env ruby

require "bundler/setup"
require "vinterior"

# You can add fixtures and/or initialization code here to make experimenting
# with your gem easier. You can also use a different console, if you like.

# (If you use this, don't forget to add pry to your Gemfile!)
# require "pry"
# Pry.start

require "irb"
IRB.start
7 changes: 7 additions & 0 deletions bin/setup
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'

bundle install

# Do any other automated setup that you need to do here
33 changes: 33 additions & 0 deletions lib/promo_rule.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
class PromoRule
attr_reader :type, :block

TYPE = { discount: 1, multi_discount: 2 }

def initialize(type, &block)
@type = type
@block = block
end

def apply(*args)
block.call(args)
end

def self.discount_rule(minimum_spend, percentage_discount)
PromoRule.new(PromoRule::TYPE[:discount]) do |discount_total|
if discount_total >= minimum_spend
discount_total - discount_total*percentage_discount/100
else
discount_total
end
end
end

def self.multi_discount_rule(product_code, qualifying_quantity, discount_price)
PromoRule.new(PromoRule::TYPE[:multi_discount]) do |code, quantity|
if code == product_code && quantity >= qualifying_quantity
discounted_price
end
end
end

end
5 changes: 5 additions & 0 deletions lib/vinterior.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
require "vinterior/version"

module Vinterior
# Your code goes here...
end
3 changes: 3 additions & 0 deletions lib/vinterior/version.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module Vinterior
VERSION = "0.1.0"
end
13 changes: 13 additions & 0 deletions spec/promo_rule_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
require 'spec_helper'

describe PromoRule do
subject { PromoRule.new(PromoRule::TYPE[:discount]) {} }

describe '#type' do
it 'should return type as value' do
expect(subject.type).to eq(1)
end
end


end
17 changes: 17 additions & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
#require 'vinterior'

project_root = File.dirname(File.absolute_path(__FILE__))
Dir.glob(project_root + '/../lib/*') { |file| require file }

# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
RSpec.configure do |config|
config.run_all_when_everything_filtered = true
config.filter_run :focus

# Run specs in random order to surface order dependencies. If you find an
# order dependency and want to debug it, you can fix the order by providing
# the seed, which is printed after each run.
# --seed 1234
config.order = 'random'
end
11 changes: 11 additions & 0 deletions spec/vinterior_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
require 'spec_helper'

describe Vinterior do
it 'has a version number' do
expect(Vinterior::VERSION).not_to be nil
end

it 'does something useful' do
expect(false).to eq(false)
end
end
14 changes: 14 additions & 0 deletions update.js.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
$("ul.errors").html("")
<% if @od.errors[:route_id].any? %>
$(".route_id_errors").html('<%= "Route #{@od.errors[:route_id].first}" %>')

//top error box
//<% @product.errors.full_messages.each do |message| %>
//$("ul.errors").append($("<li />").html("<%= message.html_safe %>"))
//<% end %>

<% else %>
$(".od-index").html("<%= escape_javascript(render 'index') %>")
$("#sales_order").val('')
$("#od-modal").modal("hide")
<% end %>
14 changes: 14 additions & 0 deletions update0.js.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
$("ul.errors").html("")
<% if @od.errors[:route_id].any? %>
$(".route_id_errors").html('<%= "Route #{@od.errors[:route_id].first}" %>')

//top error box
//<% @product.errors.full_messages.each do |message| %>
//$("ul.errors").append($("<li />").html("<%= message.html_safe %>"))
//<% end %>

<% else %>
$(".od-index").html("<%= escape_javascript(render 'index') %>")
$("#sales_order").val('')
$("#od-modal").modal("hide")
<% end %>
32 changes: 32 additions & 0 deletions vinterior.gemspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'vinterior/version'

Gem::Specification.new do |spec|
spec.name = "vinterior"
spec.version = Vinterior::VERSION
spec.authors = ["maxmills"]
spec.email = ["[email protected]"]

spec.summary = %q{TODO: Write a short summary, because Rubygems requires one.}
spec.description = %q{TODO: Write a longer description or delete this line.}
spec.homepage = "TODO: Put your gem's website or public repo URL here."

# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
# delete this section to allow pushing this gem to any host.
if spec.respond_to?(:metadata)
spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
else
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
end

spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
spec.bindir = "exe"
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
spec.require_paths = ["lib"]

spec.add_development_dependency "bundler", "~> 1.10"
spec.add_development_dependency "rake", "~> 10.0"
spec.add_development_dependency "rspec"
end

0 comments on commit 7aac523

Please sign in to comment.