epaybg 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 45239c656f82ff2132ca9fe16e741f8e32dc2e64
4
+ data.tar.gz: 2b0e1aff8b514c1d5c36a0b0a39634b08c8c0295
5
+ SHA512:
6
+ metadata.gz: 3e000ddb03b5b5c862afe7ce69560a5ee816f8b35db4dab0896514943ded9d63d656ed520f72a336368f749e4026193cbc9ed4908386186a164586e726238d1e
7
+ data.tar.gz: 89595e590c3f5bc75cce1a803d705325e07ef798404bf54d4cfe51a5076bfc1028cea91702168f4761e20d11850c1846d68f4568eaf18d829c97c1f2fdba4d36
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ log
data/README.md CHANGED
@@ -2,6 +2,9 @@
2
2
  [![Code Climate](https://codeclimate.com/github/gmitrev/epaybg.png)](https://codeclimate.com/github/gmitrev/epaybg)
3
3
  [![Build Status](https://travis-ci.org/gmitrev/epaybg.png?branch=master)](https://travis-ci.org/gmitrev/epaybg)
4
4
 
5
+ Rails-specific library for working with the Epay.bg API. More information at
6
+ https://demo.epay.bg/?page=login
7
+
5
8
  ## Installation
6
9
 
7
10
  Add this line to your application's Gemfile:
@@ -16,9 +19,53 @@ Or install it yourself as:
16
19
 
17
20
  $ gem install epaybg
18
21
 
22
+ ## Configuration
23
+
24
+ Create the config file config/epaybg.yml with the following contents:
25
+
26
+ ```yml
27
+ production:
28
+ secret: YOUR-SECRET-KEY
29
+ min: YOUR-MIN
30
+ url: "https://epay.bg"
31
+ url_idn: "https://epay.bg/ezp/reg_bill.cgi"
32
+
33
+ test:
34
+ secret: YOUR-SECRET-KEY
35
+ min: YOUR-MIN
36
+ url: "https://demo.epay.bg"
37
+ url_idn: "https://demo.epay.bg/ezp/reg_bill.cgi"
38
+ ```
39
+
40
+ Set the mode to production in your config/environments/production.rb file:
41
+
42
+ ```ruby
43
+ # Add to bottom of the file
44
+ Epaybg.mode = :production
45
+ ```
46
+
19
47
  ## Usage
48
+ Handle a response callback from epay:
49
+
50
+ ```ruby
51
+ response = Epaybg::Response.new(params[:encoded], params[:checksum])
52
+ response.valid?
53
+ # => true
54
+
55
+ response.status
56
+ # => "PAID"
57
+ ```
58
+
59
+ Respond to their callback:
60
+ ```ruby
61
+ response = Epaybg::Response.new(params[:encoded], params[:checksum])
62
+
63
+ response.invoice
64
+ => "f5b1eaf"
20
65
 
21
- TODO: Write usage instructions here
66
+ response.response_for(:ok)
67
+ => "INVOICE=f5b1eaf:STATUS=PAID"
68
+ ```
22
69
 
23
70
  ## Contributing
24
71
 
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new
5
5
 
6
- task :default => :spec
7
- task :test => :spec
6
+ task default: :spec
7
+ task test: :spec
@@ -4,22 +4,19 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'epaybg/version'
5
5
 
6
6
  Gem::Specification.new do |gem|
7
- gem.name = "epaybg"
7
+ gem.name = 'epaybg'
8
8
  gem.version = Epaybg::VERSION
9
- gem.authors = ["gmitrev"]
10
- gem.email = ["gvmitrev@gmail.com"]
11
- gem.description = %q{Framework for dealing with epay.bg payments.}
12
- gem.summary = %q{Epaybg provides integration with the epay.bg payment services. It supports payments through epay.bg, credit cards and in EasyPay offices. }
13
- gem.homepage = "http://github.com/gmitrev/epaybg"
9
+ gem.authors = ['gmitrev']
10
+ gem.email = ['gvmitrev@gmail.com']
11
+ gem.description = 'Gem for dealing with epay.bg payments.'
12
+ gem.summary = 'Epaybg provides integration with the epay.bg payment services. It supports payments through epay.bg, credit cards and in EasyPay offices. '
13
+ gem.homepage = 'http://github.com/gmitrev/epaybg'
14
14
 
15
- gem.files = `git ls-files`.split($/)
16
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
15
+ gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
- gem.require_paths = ["lib"]
18
+ gem.require_paths = ['lib']
19
19
 
20
20
  gem.add_development_dependency 'rake'
21
21
  gem.add_development_dependency 'rspec'
22
- gem.add_development_dependency 'rspec-rails'
23
- gem.add_development_dependency 'rails'
24
- gem.add_development_dependency 'coveralls'
25
22
  end
@@ -1,14 +1,12 @@
1
1
  require 'epaybg/railtie'
2
2
  require 'epaybg/transaction'
3
3
  require 'epaybg/response'
4
- require "epaybg/version"
4
+ require 'epaybg/version'
5
5
 
6
6
  module Epaybg
7
-
8
7
  class << self
9
-
10
8
  def hmac(data)
11
- OpenSSL::HMAC.hexdigest('sha1', config["secret"], data)
9
+ OpenSSL::HMAC.hexdigest('sha1', config['secret'], data)
12
10
  end
13
11
 
14
12
  # Configuration is loaded based on this property.
@@ -20,21 +18,20 @@ module Epaybg
20
18
  def mode=(mode)
21
19
  valid = [:test, :production]
22
20
  raise ArgumentError, "#{mode} is not a valid mode for Epaybg.
23
- Valid modes are #{valid.to_s}." unless valid.include?(mode)
21
+ Valid modes are #{valid}." unless valid.include?(mode)
24
22
  @@mode = mode
25
23
  end
26
24
 
27
- @@mode = :production
25
+ @@mode = :test
28
26
 
29
27
  # A hash containing the configuration options found in the
30
28
  # config/epaybg.yml file.
31
29
  def config
32
- @@config[self.mode.to_s]
30
+ @@config[mode.to_s]
33
31
  end
34
32
 
35
33
  def config=(config)
36
34
  @@config = config
37
35
  end
38
-
39
36
  end
40
37
  end
@@ -2,12 +2,12 @@ require 'epaybg/view_helpers'
2
2
 
3
3
  module Epaybg
4
4
  class Railtie < Rails::Railtie
5
- initializer "epaybg.view_helpers" do
5
+ initializer 'epaybg.view_helpers' do
6
6
  ActionView::Base.send :include, Epaybg::ViewHelpers
7
7
  end
8
8
 
9
- initializer "epaybg.configure" do |app|
10
- Epaybg.config = YAML.load_file(app.root.join("config", "epaybg.yml"))
9
+ initializer 'epaybg.configure' do |app|
10
+ Epaybg.config = YAML.load_file(app.root.join('config', 'epaybg.yml'))
11
11
  end
12
12
  end
13
13
  end
@@ -1,5 +1,4 @@
1
1
  module Epaybg
2
-
3
2
  class Response
4
3
  attr_accessor :encoded, :checksum
5
4
 
@@ -13,24 +12,32 @@ module Epaybg
13
12
  end
14
13
 
15
14
  def to_hash
16
- i = decoded.strip.split(":").flat_map{ |c| c.split("=")}
15
+ i = decoded.strip.split(':').flat_map { |c| c.split('=') }
17
16
  Hash[*i]
18
17
  end
19
18
 
20
19
  def valid?
21
- Epaybg::hmac(@encoded) == @checksum
20
+ Epaybg.hmac(@encoded) == @checksum
22
21
  end
23
22
 
24
23
  def status
25
- to_hash["STATUS"]
24
+ to_hash['STATUS']
26
25
  end
27
26
 
28
27
  def invoice
29
- to_hash["INVOICE"]
28
+ to_hash['INVOICE']
29
+ end
30
+
31
+ def stan
32
+ to_hash['STAN'] if status == 'PAID'
33
+ end
34
+
35
+ def bcode
36
+ to_hash['BCODE'] if status == 'PAID'
30
37
  end
31
38
 
32
39
  def paid_on
33
- DateTime.parse(to_hash["PAY_TIME"]) if status == "PAID"
40
+ DateTime.parse(to_hash['PAY_TIME']) if status == 'PAID'
34
41
  end
35
42
 
36
43
  def [](key)
@@ -40,8 +47,7 @@ module Epaybg
40
47
  def response_for(status)
41
48
  response_statuses = [:ok, :err]
42
49
  raise "Status must be one of #{response_statuses}" unless response_statuses.include? status
43
- "INVOICE=#{self.to_hash["INVOICE"]}:STATUS=#{status.to_s.upcase}"
50
+ "INVOICE=#{to_hash['INVOICE']}:STATUS=#{status.to_s.upcase}"
44
51
  end
45
-
46
52
  end
47
53
  end
@@ -1,15 +1,13 @@
1
1
  require 'net/http'
2
2
 
3
3
  module Epaybg
4
-
5
4
  class Transaction
6
-
7
5
  attr_accessor :url, :url_idn, :invoice, :amount, :expires_on,
8
- :description, :encoding, :url_ok, :url_cancel
6
+ :description, :encoding, :url_ok, :url_cancel
9
7
 
10
8
  def initialize(args = {})
11
9
  set_defaults!
12
- args.each do |k,v|
10
+ args.each do |k, v|
13
11
  instance_variable_set("@#{k}", v) unless v.nil?
14
12
  end
15
13
  yield self if block_given?
@@ -17,25 +15,25 @@ module Epaybg
17
15
  end
18
16
 
19
17
  def encoded
20
- exp_time = self.expires_on.strftime("%d.%m.%Y")
18
+ exp_time = expires_on.strftime('%d.%m.%Y')
21
19
 
22
20
  data = <<-DATA
23
- MIN=#{Epaybg.config["min"]}
24
- LANG=bg
25
- INVOICE=#{self.invoice}
26
- AMOUNT=#{self.amount}
27
- EXP_TIME=#{exp_time}
21
+ MIN=#{Epaybg.config['min']}
22
+ LANG=bg
23
+ INVOICE=#{invoice}
24
+ AMOUNT=#{amount}
25
+ EXP_TIME=#{exp_time}
28
26
  DATA
29
27
 
30
28
  Base64.strict_encode64(data)
31
29
  end
32
30
 
33
31
  def checksum
34
- Epaybg::hmac(encoded)
32
+ Epaybg.hmac(encoded)
35
33
  end
36
34
 
37
35
  def register_payment
38
- uri = URI("#{self.url_idn}/?ENCODED=#{self.encoded}&CHECKSUM=#{self.checksum}")
36
+ uri = URI("#{url_idn}/?ENCODED=#{encoded}&CHECKSUM=#{checksum}")
39
37
 
40
38
  http = Net::HTTP.new(uri.host, uri.port)
41
39
  http.use_ssl = true
@@ -45,31 +43,29 @@ module Epaybg
45
43
  end
46
44
 
47
45
  def epay_link
48
- base_link "paylogin"
46
+ base_link 'paylogin'
49
47
  end
50
48
 
51
49
  def credit_card_link
52
- base_link "credit_paydirect"
50
+ base_link 'credit_paydirect'
53
51
  end
54
52
 
55
53
  private
56
54
 
57
55
  def base_link(action)
58
- "#{self.url}/?PAGE=#{action}&ENCODED=#{self.encoded}&CHECKSUM=#{self.checksum}&URL_OK=#{self.url_ok}&URL_CANCEL=#{self.url_cancel}"
56
+ "#{url}/?PAGE=#{action}&ENCODED=#{encoded}&CHECKSUM=#{checksum}&URL_OK=#{url_ok}&URL_CANCEL=#{url_cancel}"
59
57
  end
60
58
 
61
59
  def validate!
62
60
  [:invoice, :amount, :expires_on].each do |a|
63
- raise ArgumentError, "Missing requried attribute: #{a}" if self.send(a).blank?
61
+ raise ArgumentError, "Missing requried attribute: #{a}" if send(a).blank?
64
62
  end
65
63
  end
66
64
 
67
65
  def set_defaults!
68
- @url ||= Epaybg.config["url"]
69
- @url_idn ||= Epaybg.config["url_idn"]
66
+ @url ||= Epaybg.config['url']
67
+ @url_idn ||= Epaybg.config['url_idn']
70
68
  @encoding ||= 'utf-8'
71
69
  end
72
-
73
70
  end
74
-
75
71
  end
@@ -1,3 +1,3 @@
1
1
  module Epaybg
2
- VERSION = "0.1.2"
2
+ VERSION = '0.2.0'
3
3
  end
@@ -1,17 +1,15 @@
1
1
  module Epaybg
2
2
  module ViewHelpers
3
-
4
- def link_base(p, action, image="")
5
- link_to image_tag(image), "#{p.url}/?PAGE=#{action}&ENCODED=#{p.encoded}&CHECKSUM=#{p.checksum}&URL_OK=#{p.url_ok}&URL_CANCEL=#{p.url_cancel}"
3
+ def link_base(p, action, image = '')
4
+ link_to image_tag(image), "#{p.url}/?PAGE=#{action}&ENCODED=#{p.encoded}&CHECKSUM=#{p.checksum}&URL_OK=#{p.url_ok}&URL_CANCEL=#{p.url_cancel}"
6
5
  end
7
6
 
8
7
  def epay_link(p)
9
- link_base p, "paylogin", "pay_with_epay.png"
8
+ link_base p, 'paylogin', 'pay_with_epay.png'
10
9
  end
11
10
 
12
11
  def credit_card_link(p)
13
- link_base p, "credit_paydirect", 'pay_with_credit_card.jpg'
12
+ link_base p, 'credit_paydirect', 'pay_with_credit_card.jpg'
14
13
  end
15
-
16
14
  end
17
15
  end
metadata CHANGED
@@ -1,106 +1,53 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: epaybg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - gmitrev
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-03-01 00:00:00.000000000 Z
11
+ date: 2015-08-03 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rake
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: rspec-rails
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: rails
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: coveralls
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
94
- description: Framework for dealing with epay.bg payments.
41
+ description: Gem for dealing with epay.bg payments.
95
42
  email:
96
43
  - gvmitrev@gmail.com
97
44
  executables: []
98
45
  extensions: []
99
46
  extra_rdoc_files: []
100
47
  files:
101
- - .gitignore
102
- - .rspec
103
- - .travis.yml
48
+ - ".gitignore"
49
+ - ".rspec"
50
+ - ".travis.yml"
104
51
  - Gemfile
105
52
  - LICENSE.txt
106
53
  - README.md
@@ -113,34 +60,28 @@ files:
113
60
  - lib/epaybg/version.rb
114
61
  - lib/epaybg/view_helpers.rb
115
62
  - log/test.log
116
- - spec/spec_helper.rb
117
- - spec/unit/transaction_spec.rb
118
63
  homepage: http://github.com/gmitrev/epaybg
119
64
  licenses: []
65
+ metadata: {}
120
66
  post_install_message:
121
67
  rdoc_options: []
122
68
  require_paths:
123
69
  - lib
124
70
  required_ruby_version: !ruby/object:Gem::Requirement
125
- none: false
126
71
  requirements:
127
- - - ! '>='
72
+ - - ">="
128
73
  - !ruby/object:Gem::Version
129
74
  version: '0'
130
75
  required_rubygems_version: !ruby/object:Gem::Requirement
131
- none: false
132
76
  requirements:
133
- - - ! '>='
77
+ - - ">="
134
78
  - !ruby/object:Gem::Version
135
79
  version: '0'
136
80
  requirements: []
137
81
  rubyforge_project:
138
- rubygems_version: 1.8.23
82
+ rubygems_version: 2.4.5
139
83
  signing_key:
140
- specification_version: 3
84
+ specification_version: 4
141
85
  summary: Epaybg provides integration with the epay.bg payment services. It supports
142
86
  payments through epay.bg, credit cards and in EasyPay offices.
143
- test_files:
144
- - spec/spec_helper.rb
145
- - spec/unit/transaction_spec.rb
146
- has_rdoc:
87
+ test_files: []
@@ -1,16 +0,0 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'coveralls'
4
- Coveralls.wear!
5
-
6
- require "action_controller/railtie"
7
- require 'rspec/rails'
8
-
9
- RSpec.configure do |config|
10
- end
11
-
12
- require 'epaybg'
13
- Epaybg.config = {
14
- "test" => {"secret"=>"QESI7RA4BCW95TZPH2OM7583DCP250CEVWZYMM69E8GRS38932W54DWYI9KNCMZ0", "min"=>"D760738416", "url"=>"https://demo.epay.bg", "url_idn"=>"https://demo.epay.bg/ezp/reg_bill.cgi"},
15
- "production" => {"secret"=>"n/a", "min"=>"n/a", "url"=>"https://epay.bg", "url_idn"=>"https://epay.bg/ezp/reg_bill.cgi"}
16
- }
@@ -1,40 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Epaybg::Transaction do
4
- let :attributes do
5
- { invoice: "12345", amount: 69.99, expires_on: Date.tomorrow }
6
- end
7
-
8
- describe "initialization" do
9
- it "accepts a hash with options" do
10
- lambda do
11
- Epaybg::Transaction.new(attributes)
12
- end.should_not raise_error ArgumentError
13
- end
14
-
15
- it "accepts a block with options" do
16
- lambda do
17
- Epaybg::Transaction.new do |t|
18
- t.amount = attributes[:amount]
19
- t.price = attributes[:price]
20
- t.expires_on = attributes[:expires_on]
21
- end
22
- end.should_not raise_error ArgumentError
23
- end
24
-
25
- it "doesn't initialize without no options" do
26
- lambda do
27
- Epaybg::Transaction.new
28
- end.should raise_error ArgumentError
29
-
30
- end
31
-
32
- [:invoice, :amount, :expires_on].each do |attr|
33
- it "fails when no #{attr} is given" do
34
- lambda do
35
- Epaybg::Transaction.new(attributes.except(attr))
36
- end.should raise_error ArgumentError
37
- end
38
- end
39
- end
40
- end