kaui 0.6.5 → 0.6.6

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.
data/Gemfile.lock CHANGED
@@ -1,12 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kaui (0.6.5)
4
+ kaui (0.6.6)
5
5
  cancan (~> 1.6.10)
6
6
  d3_rails (~> 3.2.8)
7
7
  devise (~> 3.0.2)
8
8
  jquery-rails (~> 3.0.4)
9
- killbill-client (~> 0.6.0)
9
+ killbill-client (~> 0.6.1)
10
10
  money-rails (~> 0.8.1)
11
11
  rails (~> 3.2.14)
12
12
  rest-client (~> 1.6.7)
@@ -53,6 +53,7 @@ GEM
53
53
  railties (>= 3.2.6, < 5)
54
54
  warden (~> 1.2.3)
55
55
  erubis (2.7.0)
56
+ fakeweb (1.3.0)
56
57
  hike (1.2.3)
57
58
  i18n (0.6.9)
58
59
  journey (1.0.4)
@@ -60,7 +61,7 @@ GEM
60
61
  railties (>= 3.0, < 5.0)
61
62
  thor (>= 0.14, < 2.0)
62
63
  json (1.8.1)
63
- killbill-client (0.6.0)
64
+ killbill-client (0.6.1)
64
65
  json (~> 1.8.0)
65
66
  mail (2.5.4)
66
67
  mime-types (~> 1.16)
@@ -122,6 +123,7 @@ PLATFORMS
122
123
  ruby
123
124
 
124
125
  DEPENDENCIES
126
+ fakeweb (~> 1.3)
125
127
  kaui!
126
128
  mysql2
127
129
  sqlite3
@@ -55,7 +55,7 @@ class Kaui::AccountsController < Kaui::EngineController
55
55
  @account_emails = Kaui::AccountEmail.where({ :account_id => @account.account_id }, options_for_klient)
56
56
  @overdue_state = Kaui::KillbillHelper::get_overdue_state_for_account(@account.account_id, options_for_klient)
57
57
  @payment_methods = Kaui::KillbillHelper::get_non_external_payment_methods(@account.account_id, options_for_klient)
58
- @bundles = Kaui::KillbillHelper::get_bundles(@account.account_id, options_for_klient)
58
+ @bundles = Kaui::KillbillHelper::get_bundles_for_account(@account.account_id, options_for_klient)
59
59
 
60
60
  @subscriptions_by_bundle_id = {}
61
61
 
@@ -6,6 +6,32 @@ class Kaui::BundlesController < Kaui::EngineController
6
6
  end
7
7
  end
8
8
 
9
+ def pagination
10
+ json = { :sEcho => params[:sEcho], :iTotalRecords => 0, :iTotalDisplayRecords => 0, :aaData => [] }
11
+
12
+ search_key = params[:sSearch]
13
+ if search_key.present?
14
+ bundles = Kaui::KillbillHelper::search_bundles(search_key, params[:iDisplayStart] || 0, params[:iDisplayLength] || 10, options_for_klient)
15
+ else
16
+ bundles = Kaui::KillbillHelper::get_bundles(params[:iDisplayStart] || 0, params[:iDisplayLength] || 10, options_for_klient)
17
+ end
18
+ json[:iTotalDisplayRecords] = bundles.pagination_total_nb_records
19
+ json[:iTotalRecords] = bundles.pagination_max_nb_records
20
+
21
+ bundles.each do |bundle|
22
+ json[:aaData] << [
23
+ view_context.link_to(bundle.bundle_id, view_context.url_for(:action => :show, :id => bundle.bundle_id)),
24
+ view_context.link_to(bundle.account_id, view_context.url_for(:controller => :accounts, :action => :show, :id => bundle.account_id)),
25
+ bundle.external_key,
26
+ bundle.subscriptions.nil? ? '' : (bundle.subscriptions.map { |s| s.product_name }).join(', ')
27
+ ]
28
+ end
29
+
30
+ respond_to do |format|
31
+ format.json { render :json => json }
32
+ end
33
+ end
34
+
9
35
  def show
10
36
  key = params[:id]
11
37
  if key.present?
@@ -54,7 +54,7 @@ class Kaui::ChargebacksController < Kaui::EngineController
54
54
  # Cancel all subscriptions on the account, if required
55
55
  if should_cancel_subs
56
56
  begin
57
- bundles = Kaui::KillbillHelper::get_bundles(params[:account_id], options_for_klient)
57
+ bundles = Kaui::KillbillHelper::get_bundles_for_account(params[:account_id], options_for_klient)
58
58
  bundles.each do |bundle|
59
59
  bundle.subscriptions.each do |subscription|
60
60
  # Already cancelled?
@@ -8,7 +8,12 @@ class Kaui::InvoicesController < Kaui::EngineController
8
8
  def pagination
9
9
  json = { :sEcho => params[:sEcho], :iTotalRecords => 0, :iTotalDisplayRecords => 0, :aaData => [] }
10
10
 
11
- invoices = Kaui::KillbillHelper::get_invoices(params[:iDisplayStart] || 0, params[:iDisplayLength] || 10, options_for_klient)
11
+ search_key = params[:sSearch]
12
+ if search_key.present?
13
+ invoices = Kaui::KillbillHelper::search_invoices(search_key, params[:iDisplayStart] || 0, params[:iDisplayLength] || 10, options_for_klient)
14
+ else
15
+ invoices = Kaui::KillbillHelper::get_invoices(params[:iDisplayStart] || 0, params[:iDisplayLength] || 10, options_for_klient)
16
+ end
12
17
  json[:iTotalDisplayRecords] = invoices.pagination_total_nb_records
13
18
  json[:iTotalRecords] = invoices.pagination_max_nb_records
14
19
 
@@ -147,11 +147,47 @@ module Kaui
147
147
  else
148
148
  raise ArgumentError.new("account id not specified") if account_id.blank?
149
149
  bundles = KillBillClient::Model::Bundle.find_all_by_account_id_and_external_key account_id, key, options
150
- bundles.empty? ? nil : bundles[-1]
150
+ get_active_bundle_or_latest_created(bundles)
151
151
  end
152
152
  end
153
153
 
154
- def self.get_bundles(account_id, options = {})
154
+ def self.get_active_bundle_or_latest_created(bundles)
155
+
156
+ if bundles.empty?
157
+ return nil
158
+ end
159
+
160
+ latest_start_date = nil
161
+ latest_bundle = nil
162
+
163
+ bundles.each do |b|
164
+ b.subscriptions.each do |s|
165
+ if s.product_category != 'ADD_ON'
166
+ if latest_start_date.nil? || latest_start_date < s.start_date
167
+ latest_start_date = s.start_date
168
+ latest_bundle = b
169
+ end
170
+
171
+ if s.cancelled_date.nil? || s.cancelled_date > Time.now
172
+ return b
173
+ end
174
+ end
175
+ end
176
+ end
177
+
178
+ latest_bundle
179
+ end
180
+
181
+
182
+ def self.get_bundles(offset, limit, options = {})
183
+ KillBillClient::Model::Bundle.find_in_batches offset, limit, options
184
+ end
185
+
186
+ def self.search_bundles(search_key, offset, limit, options = {})
187
+ KillBillClient::Model::Bundle.find_in_batches_by_search_key search_key, offset, limit, options
188
+ end
189
+
190
+ def self.get_bundles_for_account(account_id, options = {})
155
191
  account = KillBillClient::Model::Account.find_by_id account_id, false, false, options
156
192
  account.bundles options
157
193
  end
@@ -229,6 +265,10 @@ module Kaui
229
265
  KillBillClient::Model::Invoice.find_in_batches offset, limit, options
230
266
  end
231
267
 
268
+ def self.search_invoices(search_key, offset, limit, options = {})
269
+ KillBillClient::Model::Invoice.find_in_batches_by_search_key search_key, offset, limit, options
270
+ end
271
+
232
272
  def self.get_invoice(id_or_number, with_items = true, audit = "NONE", options = {})
233
273
  KillBillClient::Model::Invoice.find_by_id_or_number id_or_number, with_items, audit, options
234
274
  end
@@ -292,11 +332,6 @@ module Kaui
292
332
 
293
333
  ############## CATALOG ##############
294
334
 
295
- def self.get_full_catalog(options = {})
296
- data = call_killbill :get, "/1.0/kb/catalog/simpleCatalog", options
297
- data[:json]
298
- end
299
-
300
335
  def self.get_available_addons(base_product_name, options = {})
301
336
  data = call_killbill :get, "/1.0/kb/catalog/availableAddons?baseProductName=#{base_product_name}", options
302
337
  if data.has_key?(:json)
@@ -404,7 +439,6 @@ module Kaui
404
439
  end
405
440
 
406
441
  def self.create_refund(payment_id, refund, current_user = nil, reason = nil, comment = nil, options = {})
407
-
408
442
  new_refund = KillBillClient::Model::Refund.new
409
443
  new_refund.payment_id = payment_id
410
444
  new_refund.amount = refund["amount"]
@@ -433,7 +467,6 @@ module Kaui
433
467
  end
434
468
 
435
469
  def self.create_chargeback(chargeback, current_user = nil, reason = nil, comment = nil, options = {})
436
-
437
470
  new_chargeback = KillBillClient::Model::Chargeback.new
438
471
  new_chargeback.payment_id = chargeback.payment_id
439
472
  new_chargeback.amount = chargeback.chargeback_amount
@@ -535,11 +568,6 @@ module Kaui
535
568
  KillBillClient::Model::CustomField.find_in_batches_by_search_key search_key, offset, limit, options
536
569
  end
537
570
 
538
- def self.get_custom_fields_for_account(account_id, options = {})
539
- data = call_killbill :get, "/1.0/kb/accounts/#{account_id}/customFields", options
540
- process_response(data, :multiple) { |json| Kaui::CustomField.new(json) }
541
- end
542
-
543
571
  ############## OVERDUE ##############
544
572
 
545
573
  def self.get_overdue_state_for_account(account_id, options = {})
@@ -26,6 +26,15 @@ module Kaui
26
26
  :api_secret => api_secret
27
27
  end
28
28
 
29
+ # Verify the Kill Bill session hasn't timed-out
30
+ def authenticated_with_killbill?(api_key=KillBillClient.api_key, api_secret=KillBillClient.api_secret)
31
+ KillBillClient.url = Kaui.killbill_finder.call
32
+ subject = KillBillClient::Model::Security.find_subject :session_id => kb_session_id,
33
+ :api_key => api_key,
34
+ :api_secret => api_secret
35
+ subject.is_authenticated
36
+ end
37
+
29
38
  private
30
39
 
31
40
  def self.do_find_permissions(options = {})
@@ -1,14 +1,27 @@
1
- <%= form_tag bundles_path, :class => "form-horizontal", :method => :get do %>
2
- <fieldset>
3
- <legend>Please enter bundle id</legend>
4
- <div class="control-group">
5
- <label class="control-label" for="bundle_id">Bundle</label>
6
- <div class="controls">
7
- <%= text_field_tag 'bundle_id', nil, :class => "input-xlarge", :id => "bundle_id" %>
8
- </div>
9
- </div>
10
- <div class="form-actions">
11
- <%= button_tag "Search", :class =>"btn btn-primary" %>
12
- </div>
13
- </fieldset>
1
+ <table id="bundles-table" class="table table-condensed">
2
+ <thead>
3
+ <tr>
4
+ <th>Bundle ID</th>
5
+ <th>Account ID</th>
6
+ <th>External key</th>
7
+ <th>Subscriptions</th>
8
+ </tr>
9
+ </thead>
10
+ <tbody>
11
+ <tr>
12
+ <td colspan="1" class="dataTables_empty">Loading data from server</td>
13
+ </tr>
14
+ </tbody>
15
+ </table>
16
+
17
+ <%= javascript_tag do %>
18
+ $(document).ready(function() {
19
+ $('#bundles-table').dataTable({
20
+ "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
21
+ "sPaginationType": "bootstrap",
22
+ "bProcessing": true,
23
+ "bServerSide": true,
24
+ "sAjaxSource": "<%= bundles_pagination_path :format => :json %>"
25
+ });
26
+ });
14
27
  <% end %>
@@ -1,18 +1,3 @@
1
- <%= form_tag invoices_path, :class => "form-horizontal", :method => :get do %>
2
- <fieldset>
3
- <legend>Please enter invoice id</legend>
4
- <div class="control-group">
5
- <label class="control-label" for="invoice_id">Invoice</label>
6
- <div class="controls">
7
- <%= text_field_tag 'invoice_id', nil, :class => "input-xlarge", :id => "invoice_id", :placeholder => "InvoiceId, InvoiceNumber" %>
8
- </div>
9
- </div>
10
- <div class="form-actions">
11
- <%= button_tag "Search", :class =>"btn btn-primary" %>
12
- </div>
13
- </fieldset>
14
- <% end %>
15
-
16
1
  <table id="invoices-table" class="table table-condensed">
17
2
  <thead>
18
3
  <tr>
@@ -33,7 +18,7 @@
33
18
  <%= javascript_tag do %>
34
19
  $(document).ready(function() {
35
20
  $('#invoices-table').dataTable({
36
- "sDom": "<'row-fluid'<'span6'l><'span6'>r>t<'row-fluid'<'span6'i><'span6'p>>",
21
+ "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
37
22
  "sPaginationType": "bootstrap",
38
23
  "bProcessing": true,
39
24
  "bServerSide": true,
@@ -6,6 +6,8 @@
6
6
  <% end %>
7
7
  <br/>
8
8
  <% end %>
9
- <%= link_to 'Add/Remove', tags_url_or_path, :class => 'btn btn-mini' %>
9
+ <% if can? :add, Kaui::Tag or can? :remove, Kaui::Tag %>
10
+ <%= link_to 'Add/Remove', tags_url_or_path, :class => 'btn btn-mini' %>
11
+ <% end %>
10
12
  <%= link_to 'Tags Audit', tags_show_path, :class => 'btn btn-mini' %>
11
13
  </dd>
@@ -31,6 +31,14 @@ end
31
31
 
32
32
  Warden::Strategies.add(:killbill_authenticatable, Devise::Strategies::KillbillAuthenticatable)
33
33
 
34
+ Warden::Manager.after_set_user do |user, auth, opts|
35
+ unless user.authenticated_with_killbill?
36
+ scope = opts[:scope]
37
+ auth.logout(scope)
38
+ throw(:warden, :scope => scope, :reason => "Kill Bill session expired")
39
+ end
40
+ end
41
+
34
42
  Devise.add_module(:killbill_authenticatable,
35
43
  :strategy => true,
36
44
  :route => :session,
data/config/routes.rb CHANGED
@@ -69,6 +69,9 @@ Kaui::Engine.routes.draw do
69
69
 
70
70
  resources :invoice_items, :only => [ :index, :show, :edit, :update, :destroy ]
71
71
 
72
+ scope "/bundles" do
73
+ match "/pagination" => "bundles#pagination", :via => :get, :as => "bundles_pagination"
74
+ end
72
75
  resources :bundles, :only => [ :index, :show ] do
73
76
  member do
74
77
  put :do_transfer
data/kaui.gemspec CHANGED
@@ -27,10 +27,12 @@ Gem::Specification.new do |s|
27
27
  s.add_dependency 'rest-client', '~> 1.6.7'
28
28
  s.add_dependency 'money-rails', '~> 0.8.1'
29
29
  s.add_dependency 'd3_rails', '~> 3.2.8'
30
- s.add_dependency 'killbill-client', '~> 0.6.0'
30
+ s.add_dependency 'killbill-client', '~> 0.6.1'
31
31
  s.add_dependency 'devise', '~> 3.0.2'
32
32
  s.add_dependency 'cancan', '~> 1.6.10'
33
33
 
34
+ s.add_development_dependency "fakeweb", '~> 1.3'
35
+
34
36
  if defined?(JRUBY_VERSION)
35
37
  s.add_development_dependency 'activerecord-jdbc-adapter', '~> 1.2.2'
36
38
  s.add_development_dependency 'activerecord-jdbcmysql-adapter', '~> 1.2.2'
data/lib/kaui/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kaui
2
- VERSION = "0.6.5"
2
+ VERSION = "0.6.6"
3
3
  end
data/test/test_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'fakeweb'
2
+
1
3
  # Configure Rails Environment
2
4
  ENV["RAILS_ENV"] = "test"
3
5
 
@@ -13,6 +15,11 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
13
15
  # Load helpers
14
16
  Dir["#{File.dirname(__FILE__)}/unit/helpers/kaui/*.rb"].each { |f| require f }
15
17
 
18
+ # Setup Kill Bill stubs
19
+ FakeWeb.allow_net_connect = false
20
+ FakeWeb.register_uri(:get, "http://127.0.0.1:8080/1.0/kb/security/subject", body: "{\"is_authenticated\":true}", :content_type => "application/json")
21
+ FakeWeb.register_uri(:any, %r|http://127.0.0.1:8080|, body: "{}", :content_type => "application/json")
22
+
16
23
  # Include Devise helpers
17
24
  class ActionController::TestCase
18
25
  include Devise::TestHelpers
@@ -86,7 +93,7 @@ module Kaui::KillbillHelper
86
93
  []
87
94
  end
88
95
 
89
- def self.get_bundles(account_id, options = {})
96
+ def self.get_bundles_for_account(account_id, options = {})
90
97
  []
91
98
  end
92
99
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 0.6.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-30 00:00:00.000000000 Z
12
+ date: 2014-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -98,7 +98,7 @@ dependencies:
98
98
  requirements:
99
99
  - - ~>
100
100
  - !ruby/object:Gem::Version
101
- version: 0.6.0
101
+ version: 0.6.1
102
102
  type: :runtime
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
@@ -106,7 +106,7 @@ dependencies:
106
106
  requirements:
107
107
  - - ~>
108
108
  - !ruby/object:Gem::Version
109
- version: 0.6.0
109
+ version: 0.6.1
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: devise
112
112
  requirement: !ruby/object:Gem::Requirement
@@ -139,6 +139,22 @@ dependencies:
139
139
  - - ~>
140
140
  - !ruby/object:Gem::Version
141
141
  version: 1.6.10
142
+ - !ruby/object:Gem::Dependency
143
+ name: fakeweb
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ~>
148
+ - !ruby/object:Gem::Version
149
+ version: '1.3'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: '1.3'
142
158
  - !ruby/object:Gem::Dependency
143
159
  name: sqlite3
144
160
  requirement: !ruby/object:Gem::Requirement
@@ -441,7 +457,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
441
457
  version: '0'
442
458
  segments:
443
459
  - 0
444
- hash: -3758218617985278409
460
+ hash: -1686099938526165848
445
461
  requirements: []
446
462
  rubyforge_project:
447
463
  rubygems_version: 1.8.25