killbill 7.0.3 → 7.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/NEWS +5 -0
- data/README.md +6 -0
- data/bin/killbill-migration +10 -0
- data/generators/active_merchant/templates/db/ddl.sql.rb +1 -1
- data/generators/active_merchant/templates/db/schema.rb +1 -1
- data/lib/killbill/helpers/active_merchant/payment_plugin.rb +4 -4
- data/lib/killbill/migration.rb +109 -0
- data/lib/killbill/migration_cli.rb +80 -0
- data/lib/killbill/rake_task.rb +31 -0
- data/lib/killbill/version.rb +1 -1
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d15f7f9e9da5390cf9abe1cb4734e51622842b0
|
4
|
+
data.tar.gz: d40ccd578500e93b61b25e3851b3fc46e4872b2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd1d6ad6cf260b363d634bdb440098d73d4d55ec143a0f613dccd85e15d5e8546f985647fb79df2f8786c28a3d20df2cdec64fa6bad3e2dd8425e5fc2bbae1da
|
7
|
+
data.tar.gz: ae70cbd211f1036e53345e4f4fbd7024eef6eed016311caf4561c832d03674d1075b8093bf6d717265f35e6f320a49434a9e02a6fa05c38383cc9e9e3849660f
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
killbill (7.0.
|
4
|
+
killbill (7.0.4)
|
5
5
|
rack (>= 1.5.2)
|
6
6
|
sinatra (~> 1.3.4)
|
7
7
|
typhoeus (~> 0.6.9)
|
@@ -56,7 +56,7 @@ GEM
|
|
56
56
|
diff-lcs (1.1.3)
|
57
57
|
equalizer (0.0.11)
|
58
58
|
erubis (2.7.0)
|
59
|
-
ethon (0.
|
59
|
+
ethon (0.9.0)
|
60
60
|
ffi (>= 1.3.0)
|
61
61
|
ffi (1.9.10-java)
|
62
62
|
i18n (0.7.0)
|
data/NEWS
CHANGED
data/README.md
CHANGED
@@ -138,10 +138,16 @@ Use the plugin generator:
|
|
138
138
|
|
139
139
|
```bash
|
140
140
|
./script/generate active_merchant gateway_name /path/to/dir
|
141
|
+
cd /path/to/dir
|
142
|
+
git init .
|
143
|
+
git add .
|
144
|
+
git commit -m 'Initial'
|
141
145
|
```
|
142
146
|
|
143
147
|
Replace `gateway_name` with the snake case of your ActiveMerchant gateway (e.g. `yandex`, `stripe`, `paypal`, etc.).
|
144
148
|
|
149
|
+
The newly generated plugin is in a git repository due to the way that the gemspec file resolves the files to include in the `killbill:package` rake task. The above will add the generated files to a git repository, the handling of which is left to the reader.
|
150
|
+
|
145
151
|
This will generate a tree of files ready to be plugged into Kill Bill. To package the plugin, run:
|
146
152
|
|
147
153
|
```bash
|
@@ -57,7 +57,7 @@ CREATE TABLE <%= identifier %>_responses (
|
|
57
57
|
kb_payment_transaction_id varchar(255) DEFAULT NULL,
|
58
58
|
transaction_type varchar(255) DEFAULT NULL,
|
59
59
|
payment_processor_account_id varchar(255) DEFAULT NULL,
|
60
|
-
message
|
60
|
+
message text DEFAULT NULL,
|
61
61
|
authorisation varchar(255) DEFAULT NULL,
|
62
62
|
fraud_review boolean DEFAULT NULL,
|
63
63
|
test boolean DEFAULT NULL,
|
@@ -58,7 +58,7 @@ ActiveRecord::Schema.define(:version => 20140410153635) do
|
|
58
58
|
t.string "kb_payment_transaction_id"
|
59
59
|
t.string "transaction_type"
|
60
60
|
t.string "payment_processor_account_id"
|
61
|
-
t.
|
61
|
+
t.text "message"
|
62
62
|
t.string "authorization"
|
63
63
|
t.boolean "fraud_review"
|
64
64
|
t.boolean "test"
|
@@ -361,7 +361,7 @@ module Killbill
|
|
361
361
|
# TODO Split settlements is partially implemented. Left to be done:
|
362
362
|
# * payment_source should probably be retrieved per gateway
|
363
363
|
# * amount per gateway should be retrieved from the options
|
364
|
-
def dispatch_to_gateways(operation, kb_account_id, kb_payment_id, kb_payment_transaction_id, kb_payment_method_id, amount, currency, properties, context, gateway_call_proc, linked_transaction_proc=nil)
|
364
|
+
def dispatch_to_gateways(operation, kb_account_id, kb_payment_id, kb_payment_transaction_id, kb_payment_method_id, amount, currency, properties, context, gateway_call_proc, linked_transaction_proc=nil, extra_params={})
|
365
365
|
kb_transaction = Utils::LazyEvaluator.new { get_kb_transaction(kb_payment_id, kb_payment_transaction_id, context.tenant_id) }
|
366
366
|
amount_in_cents = amount.nil? ? nil : to_cents(amount, currency)
|
367
367
|
|
@@ -412,7 +412,7 @@ module Killbill
|
|
412
412
|
|
413
413
|
# Perform the operation in the gateway
|
414
414
|
gw_response = gateway_call_proc.call(gateway, linked_transaction, payment_source, amount_in_cents, options)
|
415
|
-
response, transaction = save_response_and_transaction(gw_response, operation, kb_account_id, context.tenant_id, payment_processor_account_id, kb_payment_id, kb_payment_transaction_id, operation.upcase, amount_in_cents, currency)
|
415
|
+
response, transaction = save_response_and_transaction(gw_response, operation, kb_account_id, context.tenant_id, payment_processor_account_id, kb_payment_id, kb_payment_transaction_id, operation.upcase, amount_in_cents, currency, extra_params)
|
416
416
|
|
417
417
|
# Filter after each gateway call
|
418
418
|
after_gateway(response, transaction, gw_response, context)
|
@@ -564,10 +564,10 @@ module Killbill
|
|
564
564
|
account.currency
|
565
565
|
end
|
566
566
|
|
567
|
-
def save_response_and_transaction(gw_response, api_call, kb_account_id, kb_tenant_id, payment_processor_account_id, kb_payment_id=nil, kb_payment_transaction_id=nil, transaction_type=nil, amount_in_cents=0, currency=nil)
|
567
|
+
def save_response_and_transaction(gw_response, api_call, kb_account_id, kb_tenant_id, payment_processor_account_id, kb_payment_id=nil, kb_payment_transaction_id=nil, transaction_type=nil, amount_in_cents=0, currency=nil, extra_params={})
|
568
568
|
@logger.warn "Unsuccessful #{api_call}: #{gw_response.message}" unless gw_response.success?
|
569
569
|
|
570
|
-
response, transaction = @response_model.create_response_and_transaction(@identifier, @transaction_model, api_call, kb_account_id, kb_payment_id, kb_payment_transaction_id, transaction_type, payment_processor_account_id, kb_tenant_id, gw_response, amount_in_cents, currency,
|
570
|
+
response, transaction = @response_model.create_response_and_transaction(@identifier, @transaction_model, api_call, kb_account_id, kb_payment_id, kb_payment_transaction_id, transaction_type, payment_processor_account_id, kb_tenant_id, gw_response, amount_in_cents, currency, extra_params, @response_model)
|
571
571
|
|
572
572
|
@logger.debug { "Recorded transaction: #{transaction.inspect}" } unless transaction.nil?
|
573
573
|
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
require 'arjdbc'
|
5
|
+
|
6
|
+
require 'jdbc/mariadb'
|
7
|
+
Jdbc::MariaDB.load_driver
|
8
|
+
|
9
|
+
module Killbill
|
10
|
+
class Migration
|
11
|
+
|
12
|
+
class << self
|
13
|
+
attr_accessor :ar_patched
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(plugin_name, config = nil, logger = Logger.new(STDOUT))
|
17
|
+
configure_logging(logger)
|
18
|
+
configure_migration(plugin_name)
|
19
|
+
configure_connection(config)
|
20
|
+
|
21
|
+
monkey_patch_ar
|
22
|
+
end
|
23
|
+
|
24
|
+
def sql_for_migration(migrations_paths = ActiveRecord::Migrator.migrations_paths)
|
25
|
+
ActiveRecord::Base.connection.readonly = true
|
26
|
+
|
27
|
+
ActiveRecord::Migrator.migrate(migrations_paths)
|
28
|
+
|
29
|
+
ActiveRecord::Base.connection.migration_statements
|
30
|
+
end
|
31
|
+
|
32
|
+
def migrate(migrations_paths = ActiveRecord::Migrator.migrations_paths)
|
33
|
+
ActiveRecord::Base.connection.readonly = false
|
34
|
+
|
35
|
+
ActiveRecord::Migrator.migrate(migrations_paths)
|
36
|
+
end
|
37
|
+
|
38
|
+
def current_version
|
39
|
+
ActiveRecord::Migrator.current_version
|
40
|
+
end
|
41
|
+
|
42
|
+
def sql_dump(stream = StringIO.new)
|
43
|
+
Dir.mktmpdir do |dir|
|
44
|
+
filename = File.join(dir, 'structure.sql')
|
45
|
+
ActiveRecord::Tasks::DatabaseTasks.structure_dump(@config, filename)
|
46
|
+
stream.write(File.read(filename))
|
47
|
+
end
|
48
|
+
stream
|
49
|
+
end
|
50
|
+
|
51
|
+
def ruby_dump(stream = StringIO.new)
|
52
|
+
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def configure_logging(logger)
|
58
|
+
verbose = ENV['VERBOSE'] ? ENV['VERBOSE'] == 'true' : false
|
59
|
+
|
60
|
+
ActiveRecord::Base.logger = logger
|
61
|
+
ActiveRecord::Base.logger.level = verbose ? Logger::DEBUG : Logger::INFO
|
62
|
+
|
63
|
+
ActiveRecord::Migration.verbose = verbose
|
64
|
+
end
|
65
|
+
|
66
|
+
def configure_migration(plugin_name)
|
67
|
+
ActiveRecord::SchemaMigration.table_name_prefix = "#{plugin_name}_"
|
68
|
+
end
|
69
|
+
|
70
|
+
def configure_connection(config)
|
71
|
+
config ||= {}
|
72
|
+
db_config = {
|
73
|
+
:adapter => ENV['ADAPTER'] || :mysql,
|
74
|
+
:driver => ENV['DRIVER'] || 'org.mariadb.jdbc.Driver',
|
75
|
+
:username => ENV['USERNAME'] || 'killbill',
|
76
|
+
:password => ENV['PASSWORD'] || 'killbill',
|
77
|
+
:database => ENV['DB'] || 'killbill',
|
78
|
+
:host => ENV['HOST'] || '127.0.0.1'
|
79
|
+
}
|
80
|
+
config_with_defaults = db_config.merge(config)
|
81
|
+
ActiveRecord::Base.establish_connection(config_with_defaults)
|
82
|
+
|
83
|
+
@config = config_with_defaults.stringify_keys
|
84
|
+
end
|
85
|
+
|
86
|
+
def monkey_patch_ar
|
87
|
+
return if self.class.ar_patched
|
88
|
+
|
89
|
+
ActiveRecord::Base.connection.class.class_eval do
|
90
|
+
attr_accessor :migration_statements
|
91
|
+
attr_accessor :readonly
|
92
|
+
|
93
|
+
[:exec_query, :exec_insert, :exec_delete, :exec_update, :exec_query_raw, :execute].each do |method|
|
94
|
+
send(:alias_method, "old_#{method}".to_sym, method)
|
95
|
+
|
96
|
+
define_method(method) do |sql, *args|
|
97
|
+
migration_sql = /^(create|alter|drop|insert|delete|update)/i.match(sql)
|
98
|
+
|
99
|
+
@migration_statements ||= []
|
100
|
+
@migration_statements << "#{sql};" if migration_sql
|
101
|
+
|
102
|
+
send("old_#{method}", sql, *args) if !migration_sql || (migration_sql && !@readonly)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
self.class.ar_patched = true
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'highline'
|
2
|
+
require 'thor'
|
3
|
+
|
4
|
+
require 'killbill/migration'
|
5
|
+
|
6
|
+
module Killbill
|
7
|
+
class Cli < Thor
|
8
|
+
|
9
|
+
include ::Thor::Actions
|
10
|
+
|
11
|
+
class_option :adapter,
|
12
|
+
:type => :string,
|
13
|
+
:default => 'mysql',
|
14
|
+
:desc => 'Database adapter'
|
15
|
+
|
16
|
+
class_option :driver,
|
17
|
+
:type => :string,
|
18
|
+
:default => 'org.mariadb.jdbc.Driver',
|
19
|
+
:desc => 'Database driver'
|
20
|
+
|
21
|
+
class_option :username,
|
22
|
+
:type => :string,
|
23
|
+
:default => 'killbill',
|
24
|
+
:desc => 'Database username'
|
25
|
+
|
26
|
+
class_option :password,
|
27
|
+
:type => :string,
|
28
|
+
:default => 'killbill',
|
29
|
+
:desc => 'Database password'
|
30
|
+
|
31
|
+
class_option :database,
|
32
|
+
:type => :string,
|
33
|
+
:default => 'killbill',
|
34
|
+
:desc => 'Database name'
|
35
|
+
|
36
|
+
class_option :host,
|
37
|
+
:type => :string,
|
38
|
+
:default => '127.0.0.1',
|
39
|
+
:desc => 'Database hostname'
|
40
|
+
|
41
|
+
desc 'current_version plugin_name', 'Display the current migration version'
|
42
|
+
def current_version(plugin_name)
|
43
|
+
say migration(plugin_name, options).current_version, :green
|
44
|
+
end
|
45
|
+
|
46
|
+
method_option :path,
|
47
|
+
:type => :string,
|
48
|
+
:default => ActiveRecord::Migrator.migrations_paths,
|
49
|
+
:desc => 'Folder where to find migration files.'
|
50
|
+
desc 'sql_for_migration plugin_name', 'Display the migration SQL'
|
51
|
+
def sql_for_migration(plugin_name)
|
52
|
+
say migration(plugin_name, options).sql_for_migration(options[:path]).join("\n"), :green
|
53
|
+
end
|
54
|
+
|
55
|
+
method_option :path,
|
56
|
+
:type => :string,
|
57
|
+
:default => ActiveRecord::Migrator.migrations_paths,
|
58
|
+
:desc => 'Folder where to find migration files.'
|
59
|
+
desc 'migrate plugin_name', 'Run all migrations'
|
60
|
+
def migrate(plugin_name)
|
61
|
+
migration(plugin_name, options).migrate(options[:path])
|
62
|
+
end
|
63
|
+
|
64
|
+
desc 'ruby_dump plugin_name', 'Dump the current schema structure (Ruby)'
|
65
|
+
def ruby_dump(plugin_name)
|
66
|
+
say migration(plugin_name, options).ruby_dump.string, :green
|
67
|
+
end
|
68
|
+
|
69
|
+
desc 'sql_dump plugin_name', 'Dump the current schema structure (SQL)'
|
70
|
+
def sql_dump(plugin_name)
|
71
|
+
say migration(plugin_name, options).sql_dump.string, :green
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def migration(plugin_name, options)
|
77
|
+
Killbill::Migration.new(plugin_name, options)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
data/lib/killbill/rake_task.rb
CHANGED
@@ -5,6 +5,8 @@ require 'tmpdir'
|
|
5
5
|
require 'rake'
|
6
6
|
require 'rubygems/installer'
|
7
7
|
|
8
|
+
require 'killbill/migration'
|
9
|
+
|
8
10
|
module Killbill
|
9
11
|
class PluginHelper
|
10
12
|
include Rake::DSL
|
@@ -64,6 +66,8 @@ module Killbill
|
|
64
66
|
# Staging area to install gem dependencies
|
65
67
|
# Note the Killbill friendly structure (which we will keep in the tarball)
|
66
68
|
@plugin_gem_target_dir = @plugin_target_dir.join(@gems_dir_path)
|
69
|
+
|
70
|
+
@migration = Killbill::Migration.new(plugin_name || ENV['PLUGIN_NAME'])
|
67
71
|
end
|
68
72
|
|
69
73
|
attr_reader :base
|
@@ -246,6 +250,33 @@ module Killbill
|
|
246
250
|
task :clean => :clobber do
|
247
251
|
rm_r @package_dir if File.exist?(@package_dir)
|
248
252
|
end
|
253
|
+
|
254
|
+
namespace :db do
|
255
|
+
desc 'Display the current migration version'
|
256
|
+
task :current_version do
|
257
|
+
puts @migration.current_version
|
258
|
+
end
|
259
|
+
|
260
|
+
desc 'Display the migration SQL'
|
261
|
+
task :sql_for_migration do
|
262
|
+
puts @migration.sql_for_migration.join("\n")
|
263
|
+
end
|
264
|
+
|
265
|
+
desc 'Run all migrations'
|
266
|
+
task :migrate do
|
267
|
+
@migration.migrate
|
268
|
+
end
|
269
|
+
|
270
|
+
desc 'Dump the current schema structure (Ruby)'
|
271
|
+
task :ruby_dump do
|
272
|
+
puts @migration.ruby_dump.string
|
273
|
+
end
|
274
|
+
|
275
|
+
desc 'Dump the current schema structure (SQL)'
|
276
|
+
task :sql_dump do
|
277
|
+
puts @migration.sql_dump.string
|
278
|
+
end
|
279
|
+
end
|
249
280
|
end
|
250
281
|
end
|
251
282
|
|
data/lib/killbill/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: killbill
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.
|
4
|
+
version: 7.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kill Bill core team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -298,7 +298,8 @@ dependencies:
|
|
298
298
|
type: :development
|
299
299
|
description: Base classes to write plugins.
|
300
300
|
email: killbilling-users@googlegroups.com
|
301
|
-
executables:
|
301
|
+
executables:
|
302
|
+
- killbill-migration
|
302
303
|
extensions: []
|
303
304
|
extra_rdoc_files: []
|
304
305
|
files:
|
@@ -312,6 +313,7 @@ files:
|
|
312
313
|
- NEWS
|
313
314
|
- README.md
|
314
315
|
- Rakefile
|
316
|
+
- bin/killbill-migration
|
315
317
|
- gen_config/api.conf
|
316
318
|
- gen_config/plugin_api.conf
|
317
319
|
- generators/active_merchant/active_merchant_generator.rb
|
@@ -538,6 +540,8 @@ files:
|
|
538
540
|
- lib/killbill/jplugin.rb
|
539
541
|
- lib/killbill/killbill_api.rb
|
540
542
|
- lib/killbill/killbill_logger.rb
|
543
|
+
- lib/killbill/migration.rb
|
544
|
+
- lib/killbill/migration_cli.rb
|
541
545
|
- lib/killbill/notification.rb
|
542
546
|
- lib/killbill/payment.rb
|
543
547
|
- lib/killbill/payment_control.rb
|
@@ -599,7 +603,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
599
603
|
version: '0'
|
600
604
|
requirements: []
|
601
605
|
rubyforge_project:
|
602
|
-
rubygems_version: 2.
|
606
|
+
rubygems_version: 2.4.6
|
603
607
|
signing_key:
|
604
608
|
specification_version: 4
|
605
609
|
summary: Framework to write Kill Bill plugins in Ruby.
|