spree_paytm 1.0.3 → 1.0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ccdad1b2faa8861c5222590131efa7507ef98867
4
- data.tar.gz: e79c2c411fc1e50047cb4b38c25110e5949fe028
3
+ metadata.gz: 38167e662039d87cffc9a6655a3ef94692e5fa8e
4
+ data.tar.gz: f8a13c5a1830f110978499c256ac8a7d2b3f6e10
5
5
  SHA512:
6
- metadata.gz: 0501b35880fd9569268b4f0ce13de0bea964da046f792d3fad42f132767065856bb692dcd4b4fb268a890e2a7eeb7b4498bf5a4f5a4f24387635e42a7c149171
7
- data.tar.gz: e5347a074109af5b95f84fbad0e7bee24560d44f3cb2e294b12aecc77c2bd1070f62fc0cd219e8e8d4aab97e20e9f9a4b76c7e35a76e5792b1ba0d777d3c676d
6
+ metadata.gz: fc3c8af7963373d1e57ea4c73392485ed0a355e3a76a93f3f62eddd4565bb0979291871207ccce99b6a787b15c0c66b7b07ed7f28e8892fbcbb756195a37936e
7
+ data.tar.gz: d7670c97fd210aaed15e0e6aa34a39733fef055192c681a1efdc3117d14c64a4194a8ab127e39fcdb0ac26277afd5e9b54b58845e232b41b58c149dd39ad36e5
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ \#*
2
+ *~
3
+ .#*
4
+ .DS_Store
5
+ coverage
6
+ results.xml
7
+ Gemfile.lock
8
+ tmp
9
+ pkg
10
+ spec/dummy
11
+ rspec.failures
12
+ .rvmrc
13
+ .idea
14
+ .ruby-version
15
+ .ruby-gemset
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # spree_paytm
2
+ Paytm payment gateway integration for spree
3
+
4
+ For live demo please [click here](http://spree-paytm-demo.herokuapp.com/)
5
+
6
+ You can also look at demo source code at [https://github.com/monika-khatri/spree-paytm-demo](https://github.com/monika-khatri/spree-paytm-demo)
7
+
8
+
9
+ ## Installation
10
+
11
+ 1. Add this extension to your Gemfile with this line:
12
+
13
+ gem 'spree_paytm', :github => 'monika-khatri/spree_paytm'
14
+
15
+ 2. Install the gem using Bundler:
16
+
17
+ bundle install
18
+
19
+ 3. Restart your server
20
+
21
+ 4. Add new payment method with provider
22
+
23
+ Spree::Gateway::Paytm
24
+
25
+ 5. Set all credentials from your paytm sandbox account. If you don't have it you can use from [Paytm Discussion Forum](http://paywithpaytm.com/developer/discussion/topic/sandbox-test-credentials-for-testing-paytm-solutions/)
26
+
27
+ 6. Set CALLBACK_URL to http://HOSTNAME/paytm/confirm in you sandbox web application. In case you are using test credentials from above link you can set CALLBACK_URL by overriding index method of app/controller/spree/paytm_controller.rb
28
+
29
+ @param_list['CALLBACK_URL'] = 'http://HOSTNAME/paytm/confirm'
data/Rakefile ADDED
@@ -0,0 +1,30 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+ require 'rake/packagetask'
5
+ require 'rubygems/package_task'
6
+
7
+ desc 'Generates a dummy app for testing'
8
+ task :test_app do
9
+ ENV['LIB_NAME'] = 'spree_paytm'
10
+ Rake::Task['extension:test_app'].invoke
11
+ end
12
+
13
+ require 'rspec/core'
14
+ require 'rspec/core/rake_task'
15
+ require 'rspec-rerun/tasks'
16
+ require 'spree/testing_support/extension_rake'
17
+
18
+ RSpec::Core::RakeTask.new(:spec) do |t|
19
+ t.fail_on_error = false
20
+ end
21
+
22
+ desc "Run RSpec with code coverage"
23
+ task :coverage do
24
+ ENV['COVERAGE'] = 'true'
25
+ Rake::Task["spec"].execute
26
+ end
27
+ task :default => 'rspec-rerun:spec'
28
+
29
+
30
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,70 @@
1
+ module Spree
2
+ class PaytmController < StoreController
3
+ protect_from_forgery only: :index
4
+
5
+ def index
6
+ payment_method = Spree::PaymentMethod.find(params[:payment_method_id])
7
+ order = current_order
8
+ @param_list = Hash.new
9
+ @param_list['MID'] = payment_method.preferred_merchant_id
10
+ @param_list['INDUSTRY_TYPE_ID'] = payment_method.preferred_industry_type_id
11
+ @param_list['CHANNEL_ID'] = payment_method.preferred_channel_id
12
+ @param_list['WEBSITE'] = payment_method.preferred_website
13
+ if @param_list.values.select{ |value| value unless value.present? }.present?
14
+ flash.error = Spree.t('paytm.paytm_payment_failed')
15
+ redirect_to checkout_state_path(order.state) and return
16
+ else
17
+ @param_list['REQUEST_TYPE'] = payment_method.request_type
18
+ @param_list['ORDER_ID'] = payment_method.txnid(order)
19
+ @param_list['TXN_AMOUNT'] = order.total.to_s
20
+ if(address = current_order.bill_address || current_order.ship_address)
21
+ phone = address.phone
22
+ end
23
+ #if user is not loggedin, Passing phone as customer id
24
+ cust_id = spree_current_user.nil? ? phone : spree_current_user.id
25
+ @param_list['CUST_ID'] = "CUST-#{cust_id}-ORDER-#{payment_method.txnid(order)}"
26
+ @param_list['MOBILE_NO'] = phone
27
+ @param_list['EMAIL'] = order.email
28
+
29
+ checksum = payment_method.new_pg_checksum(@param_list)
30
+ @param_list['CHECKSUMHASH'] = checksum
31
+ @paytm_txn_url = payment_method.txn_url
32
+ end
33
+ end
34
+
35
+ def confirm
36
+ payment_method = Spree::PaymentMethod.find_by(type: Spree::Gateway::Paytm)
37
+ checksum_hash = params["CHECKSUMHASH"]
38
+ params.delete("CHECKSUMHASH")
39
+ @status = params["STATUS"]
40
+ @orderid = params["ORDERID"]
41
+ @order = current_order || Spree::Order.find_by(number: @orderid.split("-").last)
42
+ @payment = @order.payments.create!(
43
+ source: Spree::PaytmCheckout.create(
44
+ checksum: checksum_hash,
45
+ order_id: @orderid,
46
+ txn_id: params['TXNID']
47
+ ),
48
+ payment_method: payment_method,
49
+ amount: @order.total,
50
+ response_code: params['RESPCODE']
51
+ )
52
+ if @status == "TXN_SUCCESS"
53
+ @order.next
54
+ @message = Spree.t(:order_processed_successfully)
55
+ @current_order = nil
56
+ flash.notice = Spree.t(:order_processed_successfully)
57
+ flash['order_completed'] = true
58
+ @error = false
59
+ @redirect_path = order_path(@order)
60
+ else
61
+ @payment.state = "failed"
62
+ @payment.save
63
+ @order.update_attributes(payment_state: "failed")
64
+ @error = true
65
+ @message = "There was an error processing your payment"
66
+ @redirect_path = checkout_state_path(@order.state)
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,248 @@
1
+ module Spree
2
+ class Gateway::Paytm < Gateway
3
+ preference :merchant_id, :string
4
+ preference :merchant_key, :string
5
+ preference :website, :string
6
+ preference :industry_type_id, :string
7
+ preference :channel_id, :string
8
+ preference :site_url, :string
9
+
10
+ def supports?(source)
11
+ true
12
+ end
13
+
14
+ def provider_class
15
+ self
16
+ end
17
+
18
+ def provider
19
+ self
20
+ end
21
+
22
+ def auto_capture?
23
+ true
24
+ end
25
+
26
+ def method_type
27
+ "paytm"
28
+ end
29
+
30
+ def purchase(amount, source, gateway_options={})
31
+ ActiveMerchant::Billing::Response.new(true, "paytm success")
32
+ end
33
+
34
+ def txnid(order)
35
+ "#{order.id.to_s}-#{SecureRandom.random_number(100000)}-#{order.number.to_s}"
36
+ end
37
+
38
+ def refund_url
39
+ 'https://' + domain + '/oltp/HANDLER_INTERNAL/REFUND'
40
+ end
41
+
42
+ def status_query_url
43
+ 'https://' + domain + '/oltp/HANDLER_INTERNAL/TXNSTATUS'
44
+ end
45
+
46
+ def txn_url
47
+ 'https://' + domain + '/oltp-web/processTransaction'
48
+ end
49
+
50
+ def request_type
51
+ 'DEFAULT' #or SUBSCRIBE
52
+ end
53
+ ### function returns dictionary of encrypted data ###
54
+ ### accepts a dictionary with data and key to encrypt with ###
55
+ ### can accept multiple key value pairs in the dictionary ###
56
+ def new_pg_encrypt(params)
57
+ if (params.class != Hash) || (params.keys == [])
58
+ return false
59
+ end
60
+
61
+ encrypted_data = Hash[]
62
+ key = preferred_merchant_key
63
+ keys = params.keys
64
+ aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")
65
+ begin
66
+ keys.each do |k|
67
+ data = params[k]
68
+ aes.encrypt
69
+ aes.key = key
70
+ aes.iv = '@@@@&&&&####$$$$'
71
+ encrypted_k = aes.update(k.to_s) + aes.final
72
+ encrypted_k = Base64.encode64(encrypted_k.to_s)
73
+ aes.encrypt
74
+ aes.key = key
75
+ aes.iv = '@@@@&&&&####$$$$'
76
+ encrypted_data[encrypted_k] = aes.update(data.to_s) + aes.final
77
+ encrypted_data[encrypted_k] = Base64.encode64(encrypted_data[encrypted_k])
78
+ end
79
+ rescue Exception => e
80
+ return false
81
+ end
82
+ return encrypted_data
83
+ end
84
+
85
+ ### function returns a single encrypted value ###
86
+ ### input data -> value to be encrypted ###
87
+ def new_pg_encrypt_variable(data)
88
+ aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")
89
+ aes.encrypt
90
+ aes.key = preferred_merchant_key
91
+ aes.iv = '@@@@&&&&####$$$$'
92
+ encrypted_data = nil
93
+ begin
94
+ encrypted_data = aes.update(data.to_s) + aes.final
95
+ encrypted_data = Base64.encode64(encrypted_data)
96
+ rescue Exception => e
97
+ return false
98
+ end
99
+ return encrypted_data
100
+ end
101
+
102
+
103
+ ### function returns dictionary of decrypted data ###
104
+ ### accepts a dictionary with data and key to decrypt with ###
105
+ ### can accept multiple key value pairs in the dictionary ###
106
+ def new_pg_decrypt(params)
107
+ if (params.class != Hash) || (params.keys == [])
108
+ return false
109
+ end
110
+
111
+ decrypted_data = Hash[]
112
+ key = preferred_merchant_key
113
+ keys = params.keys
114
+ aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")
115
+ begin
116
+ keys.each do |k|
117
+ data = params[k]
118
+ aes.decrypt
119
+ aes.key = key
120
+ aes.iv = '@@@@&&&&####$$$$'
121
+ decrypted_k = Base64.decode64(k.to_s)
122
+ decrypted_k = aes.update(decrypted_k.to_s) + aes.final
123
+ if data.empty?
124
+ decrypted_data[decrypted_k] = ""
125
+ next
126
+ end
127
+ aes.decrypt
128
+ aes.key = key
129
+ aes.iv = '@@@@&&&&####$$$$'
130
+ data = Base64.decode64(data)
131
+ decrypted_data[decrypted_k] = aes.update(data) + aes.final
132
+ end
133
+ rescue Exception => e
134
+ return false
135
+ end
136
+ return decrypted_data
137
+ end
138
+
139
+
140
+ ### function returns a single decrypted value ###
141
+ ### input data -> value to be decrypted ###
142
+ def new_pg_decrypt_variable(data)
143
+ aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")
144
+ aes.decrypt
145
+ aes.key = preferred_merchant_key
146
+ aes.iv = '@@@@&&&&####$$$$'
147
+ decrypted_data = nil
148
+ begin
149
+ decrypted_data = Base64.decode64(data.to_s)
150
+ decrypted_data = aes.update(decrypted_data) + aes.final
151
+ rescue Exception => e
152
+ return false
153
+ end
154
+ return decrypted_data
155
+ end
156
+
157
+
158
+ def new_pg_generate_salt(length)
159
+ salt = SecureRandom.urlsafe_base64(length*(3.0/4.0))
160
+ return salt.to_s
161
+ end
162
+
163
+
164
+ ### function returns checksum of given key value pairs ###
165
+ ### accepts a hash with key value pairs ###
166
+ ### calculates sha256 checksum of given values ###
167
+ def new_pg_checksum(params, salt_length = 4)
168
+ if params.class != Hash
169
+ return false
170
+ end
171
+ key = preferred_merchant_key
172
+ salt = new_pg_generate_salt(salt_length)
173
+ keys = params.keys
174
+ str = nil
175
+ keys = keys.sort
176
+ keys.each do |k|
177
+ if str.nil?
178
+ str = params[k].to_s
179
+ next
180
+ end
181
+ str = str + '|' + params[k].to_s
182
+ end
183
+ str = str + '|' + salt
184
+ check_sum = Digest::SHA256.hexdigest(str)
185
+ check_sum = check_sum + salt
186
+ ### encrypting checksum ###
187
+ check_sum = new_pg_encrypt_variable(check_sum)
188
+ return check_sum
189
+ end
190
+
191
+
192
+ ### function returns checksum of given key value pairs (must contain the :checksum key) ###
193
+ ### accepts a hash with key value pairs ###
194
+ ### calculates sha256 checksum of given values ###
195
+ ### returns true if checksum is consistent ###
196
+ ### returns false in case of inconsistency ###
197
+ def new_pg_verify_checksum(params, check_sum, salt_length = 4)
198
+
199
+ if params.class != Hash
200
+ return false
201
+ end
202
+
203
+ if check_sum.nil? || check_sum.empty?
204
+ return false
205
+ end
206
+ key = preferred_merchant_key
207
+ generated_check_sum = nil
208
+ check_sum = new_pg_decrypt_variable(check_sum)
209
+
210
+ if check_sum == false
211
+ return false
212
+ end
213
+ begin
214
+ salt = check_sum[(check_sum.length-salt_length), (check_sum.length)]
215
+ keys = params.keys
216
+ str = nil
217
+ keys = keys.sort
218
+ keys.each do |k|
219
+ if str.nil?
220
+ str = params[k].to_s
221
+ next
222
+ end
223
+ str = str + '|' + params[k].to_s
224
+ end
225
+ str = str + '|' + salt
226
+ generated_check_sum = Digest::SHA256.hexdigest(str)
227
+ generated_check_sum = generated_check_sum + salt
228
+ rescue Exception => e
229
+ return false
230
+ end
231
+
232
+ if check_sum == generated_check_sum
233
+ return true
234
+ else
235
+ return false
236
+ end
237
+ end
238
+
239
+ private
240
+ def domain
241
+ domain = 'secure.paytm.in'
242
+ if (preferred_test_mode == true)
243
+ domain = 'pguat.paytm.com'
244
+ end
245
+ domain
246
+ end
247
+ end
248
+ end
@@ -0,0 +1,4 @@
1
+ module Spree
2
+ class PaytmCheckout < ActiveRecord::Base
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ <%= link_to("Pay with Paytm", paytm_proceed_url(:payment_method_id => payment_method.id), :method => :post, :id => "paytm_button", class: "btn btn-md btn-primary pull-right") %>
2
+
3
+ <% param_prefix = "payment_source[#{payment_method.id}]" %>
@@ -0,0 +1,18 @@
1
+ <h1>
2
+ <b>HOLDON!</b>
3
+ While we connect you back to merchant's site
4
+ </h1>
5
+ <% if @error.present? %>
6
+ <p class="error">
7
+ <%= @message %>
8
+ </p>
9
+ <% end %>
10
+
11
+ <script>
12
+
13
+ $(document).ready(function(){
14
+ setTimeout(function(){
15
+ window.location.replace("<%= @redirect_path %>");
16
+ }, 5000);
17
+ })
18
+ </script>
@@ -0,0 +1,13 @@
1
+ <h4>Processing ...</h4>
2
+ <form id="checkout_form" name="checkout_form" method="post" action="<%= @paytm_txn_url %>">
3
+ <% @param_list.each do |name, value| %>
4
+ <input type="hidden" name="<%= name %>" value="<%= value %>" >
5
+ <% end %>
6
+ </form>
7
+ <script type="text/javascript">
8
+ // self executing function
9
+ (function () {
10
+ // auto submit form
11
+ document.getElementById("checkout_form").submit();
12
+ })();
13
+ </script>
@@ -0,0 +1,4 @@
1
+ en:
2
+ spree:
3
+ paytm:
4
+ paytm_payment_failed: "Paytm failed. Security header is not valid"
data/config/routes.rb ADDED
@@ -0,0 +1,5 @@
1
+ Spree::Core::Engine.add_routes do
2
+ post '/paytm', :to => "paytm#index", :as => :paytm_proceed
3
+ post '/paytm/confirm', :to => "paytm#confirm", :as => :paytm_confirm
4
+ post '/paytm/cancel', :to => "paytm#cancel", :as => :paytm_cancel
5
+ end
@@ -0,0 +1,9 @@
1
+ class CreateSpreePaytmCheckouts < ActiveRecord::Migration
2
+ def change
3
+ create_table :spree_paytm_checkouts do |t|
4
+ t.string :checksum
5
+ t.string :txn_id
6
+ t.string :order_id
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ module SpreePaytm
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+
5
+ class_option :auto_run_migrations, :type => :boolean, :default => false
6
+
7
+ def add_migrations
8
+ run 'bundle exec rake railties:install:migrations FROM=spree_paytm'
9
+ end
10
+
11
+ def run_migrations
12
+ run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]')
13
+ if run_migrations
14
+ run 'bundle exec rake db:migrate'
15
+ else
16
+ puts 'Skipping rake db:migrate, don\'t forget to run it!'
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,27 @@
1
+ module SpreePaytm
2
+ class Engine < Rails::Engine
3
+ require 'spree/core'
4
+ isolate_namespace Spree
5
+ engine_name 'spree_paytm'
6
+
7
+ config.autoload_paths += %W(#{config.root}/lib)
8
+
9
+ # use rspec for tests
10
+ config.generators do |g|
11
+ g.test_framework :rspec
12
+ end
13
+
14
+ def self.activate
15
+ Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
16
+ Rails.configuration.cache_classes ? require(c) : load(c)
17
+ end
18
+ end
19
+
20
+ config.to_prepare &method(:activate).to_proc
21
+
22
+ initializer "spree.gateway",
23
+ after: "spree.register.payment_methods" do |app|
24
+ app.config.spree.payment_methods << Spree::Gateway::Paytm
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module SpreePaytm
2
+ VERSION = '1.0.3.1'
3
+ end
@@ -0,0 +1,5 @@
1
+ require 'spree_core'
2
+ require 'spree_paytm/engine'
3
+
4
+ module SpreePaytm
5
+ end
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib/', __FILE__)
3
+ $:.unshift lib unless $:.include?(lib)
4
+
5
+ require 'spree_paytm/version'
6
+ Gem::Specification.new do |s|
7
+ s.platform = Gem::Platform::RUBY
8
+ s.name = 'spree_paytm'
9
+ s.version = SpreePaytm::VERSION
10
+ s.summary = 'Paytm integration into spree application.'
11
+ s.description = s.summary
12
+ s.required_ruby_version = '>= 2.1.0'
13
+
14
+ s.author = 'Monika Khatri'
15
+ s.email = 'monika.khatri.d@gmail.com'
16
+ s.homepage = 'https://github.com/monika-khatri/spree-paytm'
17
+
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- spec/*`.split("\n")
20
+ s.require_path = 'lib'
21
+ s.requirements << 'none'
22
+
23
+ s.add_dependency 'spree_core', '~> 3.0'
24
+
25
+ s.add_development_dependency 'capybara'
26
+ s.add_development_dependency 'coffee-rails'
27
+ s.add_development_dependency 'database_cleaner'
28
+ s.add_development_dependency 'factory_girl'
29
+ s.add_development_dependency 'ffaker'
30
+ s.add_development_dependency 'rspec-rails'
31
+ s.add_development_dependency 'rspec-rerun'
32
+ s.add_development_dependency 'sass-rails'
33
+ s.add_development_dependency 'selenium-webdriver'
34
+ s.add_development_dependency 'simplecov'
35
+ s.add_development_dependency 'pry'
36
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_paytm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Monika Khatri
@@ -24,12 +24,184 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: capybara
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: coffee-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: database_cleaner
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: factory_girl
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: ffaker
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-rerun
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: sass-rails
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: selenium-webdriver
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: simplecov
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: pry
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
27
181
  description: Paytm integration into spree application.
28
182
  email: monika.khatri.d@gmail.com
29
183
  executables: []
30
184
  extensions: []
31
185
  extra_rdoc_files: []
32
- files: []
186
+ files:
187
+ - ".gitignore"
188
+ - README.md
189
+ - Rakefile
190
+ - app/controllers/spree/paytm_controller.rb
191
+ - app/models/spree/gateway/paytm.rb
192
+ - app/models/spree/paytm_checkout.rb
193
+ - app/views/spree/admin/payments/source_views/_paytm.html.erb
194
+ - app/views/spree/checkout/payment/_paytm.html.erb
195
+ - app/views/spree/paytm/confirm.html.erb
196
+ - app/views/spree/paytm/index.html.erb
197
+ - config/locales/en.yml
198
+ - config/routes.rb
199
+ - db/migrate/20170113062328_create_spree_paytm_checkouts.rb
200
+ - lib/generators/spree_paytm/install/install_generator.rb
201
+ - lib/spree_paytm.rb
202
+ - lib/spree_paytm/engine.rb
203
+ - lib/spree_paytm/version.rb
204
+ - spree_paytm.gemspec
33
205
  homepage: https://github.com/monika-khatri/spree-paytm
34
206
  licenses: []
35
207
  metadata: {}
@@ -41,7 +213,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
41
213
  requirements:
42
214
  - - ">="
43
215
  - !ruby/object:Gem::Version
44
- version: '0'
216
+ version: 2.1.0
45
217
  required_rubygems_version: !ruby/object:Gem::Requirement
46
218
  requirements:
47
219
  - - ">="