baxang/coupon-code

View on GitHub
README-ko.md

Summary

Maintainability
Test Coverage
# CouponCode

[CouponCode 루비 젬][rubygems](Ruby Gem)은 전자상거래 서비스 등에서 사용하기 적합한 쿠폰 코드를 만들고 검증하는 기능을 제공합니다.

이 젬(Gem)은 [Grant][grant]가 펄(Perl) 언어로 작성한 [Algorithm::CouponCode][couponcode]를 루비(Ruby) 언어로 옮겨 구현한 것입니다.

젬의 기본 설정으로 생성되는 코드는 XXXX-XXXX-XXXX 형식이며 각 3부분은 4자의 숫자와 알파벳으로 구성됩니다. 원저자가 밝힌 쿠폰코드의 특징은 다음과 같습니다.

 - 만들어진 코드는 대/소문자를 구분하지 않습니다.
 - 숫자와 알파벳 중 헷갈릴 수 있는 글자를 사용하지 않기 때문에 사용자가 알파벳 O를 입력하면 이것을 숫자 0으로 자동 교정할 수 있습니다. (비슷하게 I는 1, S는 5, Z는 2)
 - 각 부분의 4번째 글자는 검증코드(check-digit)이기 때문에 사용자가 실수로 코드를 잘못 입력했는지 여부를 클라이언트단에서 미리 검증할 수 있습니다.
 - 검증코드 알고리즘은 각 부분의 순서와 연관됩니다. 따라서 '1K7Q'라는 코드는 코드의 첫 번째 부분으로는 유효하지만 코드의 두 번째에 위치하면 유효하지 않게 됩니다.
 - 코트 생성 알고리즘은 원치않는 코드를 제외시킬 수 있습니다. For example any code in which transposed characters happen to result in a valid checkdigit will be skipped. 생성된 부분이 적절하지 않은 4글자 단어(예를 들어 'P00P')에 해당하면 역시 최종 코드에서 제외됩니다.

하지만 현 시점에는 펄 버전이 가진 세심하고 다양한 기능이 모두 구현되어 있지 않다는 점을 기억해 주십시오.
평문을 입력해 코드를 생성하는 기능이나 자동교정, 금칙어 설정, 그리고 클라이언트 상에서의 코드 검증을 위한 jQuery 플러그인은 포함되어있지 않습니다.

이 루비 젬은 [https://stripes.co.kr](https://stripes.co.kr)를 위해 개발됐습니다.

## 설치

애플리케이션의 Gemfile에 아래의 코드 한 줄을 추가하십시오:

    gem 'coupon_code'

그리고 다음 명령을 실행하십시오:

    $ bundle

또는 아래와 같이 직접 설치해 사용하십시오:

    $ gem install coupon_code

## 사용방법

    >> require 'coupon_code'
    >> code = CouponCode.generate
    => "1K7Q-CTFM-LMTC"
    >> CouponCode.validate(code)
    => "1K7Q-CTFM-LMTC"
    >> CouponCode.validate('1K7Q-CTFM-LMTO') # Invalid code
    => nil

## 옵션

쿠폰 코드를 만들 때 아래와 같이 옵션값을 넣어, 기본 설정인 3부분이 아닌 쿠폰 코드를 얻을 수 있습니다. 

    >> CouponCode.generate(parts: 4)
    => "1K7Q-CTFM-LMTC-DLGP"
    >> CouponCode.validate("1K7Q-CTFM-LMTC-DLGP", 4)
    => "1K7Q-CTFM-LMTC-DLGP"

## 테스팅

```ruby
$ bundle exec rake spec
```
## Thanks to

 - 펄로 작성된 [Grant McLean][grant]의 [Algorithm::CouponCode][couponcode]
 - 자바스크립트로 작성된 [Andrew Chilton][chilts]의 [NodeJS implementation][node-couponcode]

## 라이센스

MIT. 자세한 내용은 [LICENSE][license]를 읽어주십시오.

## 기여하기

1. 이 저장소를 포크합니다.
2. 새 기능을 위한 브랜치를 만듭니다. (`git checkout -b my-new-feature`)
3. 작업한 변경 내역을 커밋합니다. (`git commit -am 'Add some feature'`)
4. 깃헙 저장소의 브랜치에 푸시합니다. (`git push origin my-new-feature`)
5. 풀 리퀘스트(Pull Request)를 해주십시오.

[grant]: https://github.com/grantm/
[couponcode]: https://github.com/grantm/Algorithm-CouponCode
[chilts]: https://github.com/chilts
[node-couponcode]: https://github.com/chilts/node-coupon-code
[license]: https://github.com/baxang/coupon-code/blob/master/LICENSE.txt
[rubygems]: https://rubygems.org/gems/coupon_code