Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add configuration #6

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
WIP Add configuration.
  • Loading branch information
baxang committed Apr 8, 2016
commit 12820ee7100002d97f7c8671963ee17657ac38c0
2 changes: 2 additions & 0 deletions lib/coupon_code.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@
require 'digest/sha1'
require 'coupon_code/version'
require 'coupon_code/generator'
require 'coupon_code/configuration'
require 'coupon_code/validator'

module CouponCode
SYMBOL = '0123456789ABCDEFGHJKLMNPQRTUVWXY'
PARTS = 3
LENGTH = 4
SEPARATOR = '-'
end
25 changes: 25 additions & 0 deletions lib/coupon_code/configuration.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
module CouponCode
class << self
attr_accessor :configuration
end

def self.configuration
@configuration ||= Configuration.new
end

def self.configure
yield(configuration)
end

def self.reset
@configuration = Configuration.new
end

class Configuration
attr_accessor :separator

def initialize
@separator = '-'
end
end
end
11 changes: 11 additions & 0 deletions test/configuration_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
require 'test_helper'

module CouponCode
describe Configuration do
it 'separator' do
config = Configuration.new
config.separator = '*'
config.separator.must_equal('*')
end
end
end
34 changes: 34 additions & 0 deletions test/generator_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
require 'test_helper'

describe CouponCode do
def generate(*args)
CouponCode.generate(*args)
end

it 'should be loaded.' do
CouponCode.must_respond_to(:generate)
end

it 'should generate a code' do
generate.wont_be_empty
end

it 'should only contain uppercase letters, digits, and dashes.' do
generate.must_match(/^[0-9A-Z-]+$/)
end

it 'should look like XXXX-XXXX-XXXX.' do
generate.must_match(/^\w{4}-\w{4}-\w{4}$/)
end

it 'should generate different codes.' do
code1 = generate
code2 = generate
code1.wont_equal(code2)
end

it 'should generate an arbitrary number of parts.' do
generate(parts: 2).must_match(/^\w{4}-\w{4}$/)
generate(parts: 5).must_match(/^\w{4}-\w{4}-\w{4}-\w{4}-\w{4}$/)
end
end
63 changes: 63 additions & 0 deletions test/validator_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
require 'test_helper'

describe 'Validator' do
it 'should be loaded.' do
CouponCode.must_respond_to(:validate)
end

it 'should fail to validate invalid code.' do
CouponCode.validate('').must_equal(nil)
end

it 'should accept a valid code.' do
CouponCode.validate('1K7Q-CTFM-LMTC').wont_be_nil
end

it 'should reject a short code.' do
CouponCode.validate('1K7Q-CTFM').must_be_nil
end

it 'should accept a short code with correct parts.' do
CouponCode.validate('1K7Q-CTFM', 2).wont_be_nil
end

it 'should reject a short code with wrong parts.' do
CouponCode.validate('CTFM-1K7Q', 2).must_be_nil
end

it 'should fix and validate a lowercase code.' do
code = '1k7q-ctfm-lmtc'
CouponCode.validate(code.downcase).must_equal(code.upcase)
end

it 'should validate alternative separators.' do
code = '1k7q/ctfm/lmtc'
CouponCode.validate(code).must_equal('1K7Q-CTFM-LMTC')

code = '1k7q ctfm lmtc'
CouponCode.validate(code).must_equal('1K7Q-CTFM-LMTC')

code = '1k7qctfmlmtc'
CouponCode.validate(code).must_equal('1K7Q-CTFM-LMTC')
end

it 'should valid code-pretest.' do
CouponCode.validate('1K7Q', 1).wont_be_nil
CouponCode.validate('1K7C', 1).must_be_nil

CouponCode.validate('1K7Q-CTFM', 2).wont_be_nil
CouponCode.validate('1K7Q-CTFW', 2).must_be_nil

CouponCode.validate('1K7Q-CTFM-LMTC', 3).wont_be_nil
CouponCode.validate('1K7Q-CTFM-LMT1', 3).must_be_nil

CouponCode.validate('7YQH-1FU7-E1HX-0BG9', 4).wont_be_nil
CouponCode.validate('7YQH-1FU7-E1HX-0BGP', 4).must_be_nil

CouponCode.validate('YENH-UPJK-PTE0-20U6-QYME', 5).wont_be_nil
CouponCode.validate('YENH-UPJK-PTE0-20U6-QYMT', 5).must_be_nil

CouponCode.validate('YENH-UPJK-PTE0-20U6-QYME-RBK1', 6).wont_be_nil
CouponCode.validate('YENH-UPJK-PTE0-20U6-QYME-RBK2', 6).must_be_nil
end
end