smartkiosk-client 0.0.10 → 0.0.16

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.
Files changed (36) hide show
  1. data/.gitignore +2 -1
  2. data/Gemfile +1 -1
  3. data/app/controllers/payments.rb +28 -10
  4. data/app/controllers/terminal.rb +5 -18
  5. data/app/models/payment.rb +6 -2
  6. data/app/models/terminal.rb +18 -17
  7. data/app/workers/orders/acknowledge_worker.rb +0 -2
  8. data/app/workers/orders/complete_worker.rb +0 -2
  9. data/app/workers/orders/disable_worker.rb +0 -2
  10. data/app/workers/orders/durable_order_execution.rb +47 -0
  11. data/app/workers/orders/enable_worker.rb +0 -2
  12. data/app/workers/orders/reboot_worker.rb +4 -8
  13. data/app/workers/orders/reload_worker.rb +4 -8
  14. data/app/workers/orders/upgrade_worker.rb +4 -5
  15. data/app/workers/payments/check_worker.rb +6 -7
  16. data/app/workers/payments/collect_worker.rb +0 -2
  17. data/app/workers/payments/pay_worker.rb +10 -4
  18. data/app/workers/ping_worker.rb +0 -2
  19. data/app/workers/sync/icons_worker.rb +0 -2
  20. data/app/workers/sync/receipt_templates_worker.rb +0 -2
  21. data/bin/smartkiosk-client +31 -0
  22. data/config/boot.rb +10 -15
  23. data/db/migrate/20130106181548_create_payments.rb +4 -0
  24. data/lib/{smartkiosk → patches}/sidekiq.rb +0 -7
  25. data/lib/smartkiosk/client/logging.rb +4 -0
  26. data/lib/smartkiosk/client/version.rb +2 -2
  27. data/smartkiosk-client.gemspec +7 -5
  28. data/tmp/cache/.gitkeep +0 -0
  29. data/tmp/pids/.gitkeep +0 -0
  30. metadata +274 -109
  31. data/app/assets/flash/amqp.swf +0 -0
  32. data/app/assets/flash/expressInstall.swf +0 -0
  33. data/app/assets/javascripts/amqp.js +0 -18
  34. data/app/workers/startup_worker.rb +0 -11
  35. data/vendor/assets/javascripts/mq.js +0 -393
  36. data/vendor/assets/javascripts/swfobject.js +0 -4
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  pkg/
2
2
  db/*.sqlite3
3
3
  Gemfile.lock
4
- tmp/*
4
+ tmp/pids
5
+ tmp/cache
data/Gemfile CHANGED
@@ -2,4 +2,4 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'pry'
5
+ gem 'pry'
@@ -1,30 +1,48 @@
1
1
  class Application
2
2
  post '/payments' do
3
3
  payment = Payment.create! params[:payment]
4
+
4
5
  json (payment.check ? payment.as_json : false)
5
6
  end
6
7
 
7
- post '/payments/:id/open' do
8
+ post '/payments/:id/open_cash_acceptor' do
8
9
  payment = Payment.find(params[:id])
9
10
  Smartware.cash_acceptor.open(payment.limit.try('[]', :min), payment.limit.try('[]', :max))
10
- json (Smartware.cash_acceptor.error.blank? ? true : false)
11
+
12
+ json Smartware.cash_acceptor.error.blank?
11
13
  end
12
14
 
13
- post '/payments/:id/pay' do
14
- payment = Payment.find(params[:id])
15
+ post '/payments/close_cash_acceptor' do
15
16
  Smartware.cash_acceptor.close
16
- payment.update_attributes :banknotes => Smartware.cash_acceptor.banknotes
17
- payment.receipt.print
18
- payment.pay
19
17
  nil
20
18
  end
21
19
 
22
- get '/payments/cash' do
23
- json Smartware.cash_acceptor.sum.to_json
20
+ post '/payments/open_card_reader' do
21
+ Smartware.card_reader.open
22
+ nil
23
+ end
24
+
25
+ post '/payments/close_card_reader' do
26
+ Smartware.card_reader.close
27
+ nil
24
28
  end
25
29
 
26
- get '/payments/reset' do
30
+ post '/payments/:id/pay' do
31
+ payment = Payment.find(params[:id])
27
32
  Smartware.cash_acceptor.close
33
+
34
+ if payment.payment_type == 0
35
+ payment.update_attributes(:banknotes => Smartware.cash_acceptor.banknotes)
36
+ else
37
+ payment.update_attributes(
38
+ :paid_amount => params['payment']['paid_amount'],
39
+ :card_track1 => params['payment']['card_track1'],
40
+ :card_track2 => params['payment']['card_track2']
41
+ )
42
+ end
43
+
44
+ payment.receipt.print
45
+ payment.pay
28
46
  nil
29
47
  end
30
48
  end
@@ -4,20 +4,7 @@ Application.load 'lib/pinger'
4
4
 
5
5
  class Application
6
6
  get '/terminal' do
7
- Terminal.payment_in_progress = params[:payment_in_progress] == 'true'
8
-
9
- result = {
10
- :enabled => Terminal.enabled?,
11
- :started_at => Terminal.started_at.value
12
- }
13
-
14
- modified_at = Terminal.actual_modified_at.change(:usec => 0)
15
-
16
- if params[:modified_at] && (modified_at > DateTime.parse(params[:modified_at]))
17
- result[:terminal] = Terminal.as_json
18
- end
19
-
20
- json result
7
+ json Terminal
21
8
  end
22
9
 
23
10
  get '/terminal/condition' do
@@ -48,22 +35,22 @@ class Application
48
35
 
49
36
  post '/terminal/enable' do
50
37
  Terminal.enable
51
- json(:state => Terminal.actual_state)
38
+ json(:state => Terminal.state)
52
39
  end
53
40
 
54
41
  post '/terminal/disable' do
55
42
  Terminal.disable
56
- json(:state => Terminal.actual_state)
43
+ json(:state => Terminal.state)
57
44
  end
58
45
 
59
46
  post '/terminal/reload' do
60
47
  Terminal.reload
61
- json(:state => Terminal.actual_state)
48
+ json(:state => Terminal.state)
62
49
  end
63
50
 
64
51
  post '/terminal/reboot' do
65
52
  Terminal.reboot
66
- json(:state => Terminal.actual_state)
53
+ json(:state => Terminal.state)
67
54
  end
68
55
 
69
56
  get '/terminal/test_connection' do
@@ -13,10 +13,14 @@ class Payment < ActiveRecord::Base
13
13
  serialize :banknotes
14
14
 
15
15
  validates :provider, :presence => true
16
+ validates :payment_type, :presence => true
16
17
 
17
18
  before_save do
18
19
  if banknotes
19
20
  self.paid_amount = banknotes.inject(0){|sum, (nominal, count)| sum + nominal.to_i*count.to_i }
21
+ end
22
+
23
+ if paid_amount
20
24
  self.commission_amount = commission_for(self.paid_amount)
21
25
  end
22
26
  end
@@ -27,7 +31,7 @@ class Payment < ActiveRecord::Base
27
31
  r.update_attributes :template => self.receipt_template,
28
32
  :keyword => 'payment',
29
33
  :fields => {
30
- :recipient => provider.title,
34
+ :recipient => title,
31
35
  :account => account,
32
36
  :payment_paid_amount => paid_amount || 0,
33
37
  :payment_enrolled_amount => ((paid_amount || 0) - (commission_amount || 0)).round(2),
@@ -50,7 +54,7 @@ class Payment < ActiveRecord::Base
50
54
  end
51
55
 
52
56
  def title
53
- provider.title
57
+ provider.title rescue "-"
54
58
  end
55
59
 
56
60
  def commission_for(amount)
@@ -1,25 +1,22 @@
1
1
  require 'smartware'
2
+ require 'smartguard'
2
3
  require 'socket'
3
4
  require 'redis'
4
5
  require 'redis/objects'
6
+ require 'file-tail'
5
7
 
6
8
  Application.load 'lib/smartkiosk/config/yaml'
7
9
 
8
10
  class Terminal
9
11
  include Redis::Objects
10
12
 
11
- value :state, :global => true
12
- value :started_at, :global => true, :marshal => true
13
+ value :actual_state, :global => true
13
14
  value :modified_at, :global => true, :marshal => true
14
15
  value :payment_in_progress, :global => true
15
16
 
16
17
  value :support_phone, :global => true
17
18
  value :providers_updates, :global => true, :marshal => true
18
19
 
19
- def self.smartguard
20
- DRbObject.new_with_uri(Terminal.config.smartguard_host)
21
- end
22
-
23
20
  #
24
21
  # STATES
25
22
  #
@@ -35,8 +32,12 @@ class Terminal
35
32
  self.payment_in_progress.value == "true"
36
33
  end
37
34
 
38
- def self.actual_state
39
- self.state.value || 'active'
35
+ def self.state
36
+ self.actual_state.value || 'active'
37
+ end
38
+
39
+ def self.state=(value)
40
+ self.actual_state = value
40
41
  end
41
42
 
42
43
  def self.actual_modified_at
@@ -59,14 +60,11 @@ class Terminal
59
60
  end
60
61
 
61
62
  def self.reload
62
- smartguard.restart_async
63
+ Smartguard::Client.restart_async
63
64
  end
64
65
 
65
66
  def self.reboot
66
- self.state = 'rebooting'
67
- StartupWorker.perform_async self.name, :enable
68
-
69
- smartguard.reboot_async
67
+ Smartguard::Client.reboot_async
70
68
  end
71
69
 
72
70
  #
@@ -81,7 +79,7 @@ class Terminal
81
79
  end
82
80
 
83
81
  def self.enabled?
84
- self.actual_state == 'active'
82
+ self.state == 'active'
85
83
  end
86
84
 
87
85
  def self.version
@@ -101,9 +99,8 @@ class Terminal
101
99
  Socket.do_not_reverse_lookup = orig
102
100
  end
103
101
 
104
- def self.as_json
102
+ def self.as_json(*args)
105
103
  {
106
- :started_at => Terminal.started_at.value,
107
104
  :modified_at => Terminal.actual_modified_at,
108
105
  :keyword => Terminal.keyword,
109
106
  :support_phone => Terminal.support_phone.value,
@@ -113,10 +110,14 @@ class Terminal
113
110
  }
114
111
  end
115
112
 
113
+ def self.to_json(*args)
114
+ as_json.to_json
115
+ end
116
+
116
117
  def self.condition
117
118
  {
118
119
  :ip => ip,
119
- :state => Terminal.actual_state,
120
+ :state => Terminal.state,
120
121
  :banknotes => Payment.merge_banknotes(Payment.uncollected),
121
122
  :cash => Payment.merge_cash(Payment.uncollected),
122
123
  :providers => {
@@ -1,7 +1,5 @@
1
1
  require 'rest-client'
2
2
 
3
- Application.load 'lib/smartkiosk/sidekiq'
4
-
5
3
  module Orders
6
4
  class AcknowledgeWorker
7
5
  include Sidekiq::Worker
@@ -1,7 +1,5 @@
1
1
  require 'rest-client'
2
2
 
3
- Application.load 'lib/smartkiosk/sidekiq'
4
-
5
3
  module Orders
6
4
  class CompleteWorker
7
5
  include Sidekiq::Worker
@@ -1,5 +1,3 @@
1
- Application.load 'lib/smartkiosk/sidekiq'
2
-
3
1
  module Orders
4
2
  class DisableWorker
5
3
  include Sidekiq::Worker
@@ -0,0 +1,47 @@
1
+ module Orders
2
+ module DurableOrderExecution
3
+ def safely_execute_order(order_id, &block)
4
+ pid = Process.fork
5
+ return unless pid.nil?
6
+
7
+ Process.setsid
8
+
9
+ begin
10
+ Smartkiosk::Client::Logging.logger.debug "Started execution of order #{order_id}"
11
+ yield
12
+ Smartkiosk::Client::Logging.logger.debug "Completed execution of order #{order_id}"
13
+
14
+ rescue => e
15
+ Smartkiosk::Client::Logging.logger.debug "Execution of order #{order_id} failed: #{e}"
16
+
17
+ begin
18
+ AcknowledgeWorker.perform_async order_id, e.to_s
19
+ rescue => ne
20
+ Smartkiosk::Client::Logging.logger.debug "Unable to schedule AcknowlegeWorker #{ne}"
21
+ sleep 1
22
+ retry
23
+ end
24
+ end
25
+
26
+ begin
27
+ CompleteWorker.perform_async order_id
28
+ rescue => ne
29
+ Smartkiosk::Client::Logging.logger.debug "Unable to schedule CompleteWorker: #{ne}"
30
+ sleep 1
31
+ retry
32
+ end
33
+
34
+ begin
35
+ ActiveRecord::Base.connection.reconnect!
36
+
37
+ Order.find(order_id).update_attribute(:complete, true)
38
+ rescue => ne
39
+ Smartkiosk::Client::Logging.logger.debug "Unable to mark completion: #{ne}"
40
+ sleep 1
41
+ retry
42
+ end
43
+
44
+ Process.exit!
45
+ end
46
+ end
47
+ end
@@ -1,5 +1,3 @@
1
- Application.load 'lib/smartkiosk/sidekiq'
2
-
3
1
  module Orders
4
2
  class EnableWorker
5
3
  include Sidekiq::Worker
@@ -1,18 +1,14 @@
1
- Application.load 'lib/smartkiosk/sidekiq'
2
-
3
1
  module Orders
4
2
  class RebootWorker
5
3
  include Sidekiq::Worker
4
+ include DurableOrderExecution
6
5
 
7
6
  sidekiq_options :queue => :orders
8
7
 
9
8
  def perform(order_id)
10
- StartupWorker.perform_async self.class.name, :finish, [order_id]
11
- Terminal.reboot
12
- end
13
-
14
- def self.finish(order_id)
15
- Order.find(order_id).complete
9
+ safely_execute_order(order_id) do
10
+ Smartguard::Client.reboot
11
+ end
16
12
  end
17
13
  end
18
14
  end
@@ -1,18 +1,14 @@
1
- Application.load 'lib/smartkiosk/sidekiq'
2
-
3
1
  module Orders
4
2
  class ReloadWorker
5
3
  include Sidekiq::Worker
4
+ include DurableOrderExecution
6
5
 
7
6
  sidekiq_options :queue => :orders
8
7
 
9
8
  def perform(order_id)
10
- StartupWorker.perform_async self.class.name, :finish, [order_id]
11
- Terminal.reload
12
- end
13
-
14
- def self.finish(order_id)
15
- Order.find(order_id).complete
9
+ safely_execute_order(order_id) do
10
+ Smartguard::Client.restart
11
+ end
16
12
  end
17
13
  end
18
14
  end
@@ -2,11 +2,10 @@ require 'pathname'
2
2
  require 'rubygems'
3
3
  require 'fileutils'
4
4
 
5
- Application.load 'lib/smartkiosk/sidekiq'
6
-
7
5
  module Orders
8
6
  class UpgradeWorker
9
7
  include Sidekiq::Worker
8
+ include DurableOrderExecution
10
9
 
11
10
  sidekiq_options :queue => :orders
12
11
 
@@ -19,12 +18,12 @@ module Orders
19
18
  @base_url = URI.parse(order.args[3]).scheme.nil? ? "#{Terminal.config.host}#{order.args[3]}"
20
19
  : order.args[3]
21
20
 
22
- @releases_pathname = Terminal.smartguard.releases_path
21
+ @releases_pathname = Smartguard::Client.releases_path
23
22
  @build_pathname = @releases_pathname.join @build_version.to_s
24
23
 
25
24
  self.sync!
26
- Terminal.smartguard.switch_release @build_version.to_s.to_sym do
27
- order.complete
25
+ safely_execute_order(order_id) do
26
+ Smartguard::Client.switch_release @build_version.to_s.to_sym
28
27
  end
29
28
  end
30
29
 
@@ -1,7 +1,5 @@
1
1
  require 'rest-client'
2
2
 
3
- Application.load 'lib/smartkiosk/sidekiq'
4
-
5
3
  module Payments
6
4
  class CheckWorker
7
5
  include Sidekiq::Worker
@@ -13,8 +11,9 @@ module Payments
13
11
  response = RestClient.post "#{Terminal.config.host}/payments",
14
12
  :provider => payment.provider.keyword,
15
13
  :terminal => Terminal.config.keyword,
16
- :payment => {
14
+ :payment => {
17
15
  :account => payment.account,
16
+ :payment_type => payment.payment_type,
18
17
  :fields => payment.fields,
19
18
  :session_id => payment.id
20
19
  }
@@ -22,11 +21,11 @@ module Payments
22
21
  answer = JSON.parse(response.to_s, :symbolize_names => true)
23
22
 
24
23
  unless answer[:id].nil?
25
- payment.update_attributes :foreign_id => answer[:id],
26
- :limit => answer[:limits].sort_by(&:weight).last,
27
- :commissions => (answer[:commissions].empty? ? nil : answer[:commissions]),
24
+ payment.update_attributes :foreign_id => answer[:id],
25
+ :limit => answer[:limits].sort_by(&:weight).last,
26
+ :commissions => (answer[:commissions].empty? ? nil : answer[:commissions]),
28
27
  :receipt_template => answer[:receipt_template],
29
- :checked => true
28
+ :checked => true
30
29
  end
31
30
  rescue => e
32
31
  Payment.find(payment_id).update_attributes :error => true
@@ -1,5 +1,3 @@
1
- Application.load 'lib/smartkiosk/sidekiq'
2
-
3
1
  module Payments
4
2
  class CollectWorker
5
3
  include Sidekiq::Worker
@@ -1,7 +1,5 @@
1
1
  require 'rest-client'
2
2
 
3
- Application.load 'lib/smartkiosk/sidekiq'
4
-
5
3
  module Payments
6
4
  class PayWorker
7
5
  include Sidekiq::Worker
@@ -13,9 +11,17 @@ module Payments
13
11
  response = RestClient.post "#{Terminal.config.host}/payments/#{payment.foreign_id}/pay",
14
12
  :provider => payment.provider.keyword,
15
13
  :terminal => Terminal.config.keyword,
16
- :payment => { :paid_amount => payment.paid_amount }
14
+ :payment => {
15
+ :paid_amount => payment.paid_amount,
16
+ :card_track1 => payment.card_track1,
17
+ :card_track2 => payment.card_track2
18
+ }
17
19
  Sidekiq::Logging.logger.debug "Pay response: #{response.to_s}"
18
- payment.update_attributes(:processed => true) if response
20
+ payment.update_attributes(
21
+ :processed => true,
22
+ :card_track1 => nil,
23
+ :card_track2 => nil
24
+ ) if response
19
25
  end
20
26
  end
21
27
  end
@@ -1,7 +1,5 @@
1
1
  require 'rest-client'
2
2
 
3
- Application.load 'lib/smartkiosk/sidekiq'
4
-
5
3
  class PingWorker
6
4
  include Sidekiq::Worker
7
5
 
@@ -1,7 +1,5 @@
1
1
  require 'rest-client'
2
2
 
3
- Application.load 'lib/smartkiosk/sidekiq'
4
-
5
3
  module Sync
6
4
  class IconsWorker
7
5
  include Sidekiq::Worker
@@ -1,7 +1,5 @@
1
1
  require 'rest-client'
2
2
 
3
- Application.load 'lib/smartkiosk/sidekiq'
4
-
5
3
  module Sync
6
4
  class ReceiptTemplatesWorker
7
5
  include Sidekiq::Worker
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'bundler/setup'
4
4
  require 'eventmachine'
5
+ require 'em-websocket'
5
6
  require 'thin'
6
7
  require 'trollop'
7
8
 
@@ -17,6 +18,9 @@ Smartkiosk::Client::Logging.destination = opts[:log] if opts[:log]
17
18
  Smartkiosk::Client::Logging.init
18
19
 
19
20
  EventMachine.run do
21
+ #
22
+ # Serving front
23
+ #
20
24
  Thin::Server.start '0.0.0.0', 3001 do
21
25
  map '/assets' do
22
26
  run Application.sprockets
@@ -24,4 +28,31 @@ EventMachine.run do
24
28
  use Smartkiosk::Client::Logging::Middleware
25
29
  run Application
26
30
  end
31
+
32
+ #
33
+ # Serving WebSockets
34
+ #
35
+ @front_orders = EM::Channel.new
36
+
37
+ EventMachine.add_periodic_timer 1 do
38
+ @front_orders.push ['state', Terminal.state].to_json
39
+ end
40
+
41
+ EventMachine.add_periodic_timer 5 do
42
+ @front_orders.push ['modified_at', Terminal.modified_at].to_json
43
+ end
44
+
45
+ Smartware.subscribe do |key, *value|
46
+ @front_orders.push ["smartware.#{key}", value].to_json
47
+ end
48
+
49
+ EventMachine::WebSocket.run(:host => '0.0.0.0', :port => 3002) do |ws|
50
+ ws.onopen {
51
+ sid = @front_orders.subscribe { |msg| ws.send msg }
52
+
53
+ ws.onclose {
54
+ @front_orders.unsubscribe(sid)
55
+ }
56
+ }
57
+ end
27
58
  end
data/config/boot.rb CHANGED
@@ -9,7 +9,6 @@ require 'sprockets/helpers'
9
9
  require 'sinatra/base'
10
10
  require 'sinatra/activerecord'
11
11
  require 'sinatra/reloader'
12
- require 'sinatra/json'
13
12
 
14
13
  module Smartkiosk
15
14
  class Client < Sinatra::Base
@@ -25,6 +24,7 @@ module Smartkiosk
25
24
  set :sprockets, Sprockets::Environment.new(root)
26
25
  set :database_file, root.join('config/services/database.yml')
27
26
  set :views, [File.expand_path('../../app/views', __FILE__)]
27
+ set :logging, nil
28
28
 
29
29
  assets_types.map do |x|
30
30
  sprockets.append_path root.join("app/assets/#{x}")
@@ -61,32 +61,28 @@ module Smartkiosk
61
61
  data.to_json
62
62
  end
63
63
 
64
- get "/assets/*" do
65
- env["PATH_INFO"].sub!(%r{^/assets}, "")
66
- settings.sprockets.call(env)
67
- end
68
-
69
64
  def self.load(path)
70
65
  require File.expand_path File.join('../..', path), __FILE__
71
66
  end
72
67
 
73
- def self.run!(*args)
74
- load 'lib/smartkiosk/sidekiq'
75
- Sidekiq.startup!
76
- super
77
- end
78
-
79
68
  def self.load_tasks!
80
69
  require "sinatra/activerecord/rake"
81
70
  Dir[File.expand_path "../../lib/tasks/*.rb", __FILE__].each {|file| require file}
82
71
  end
83
72
 
84
73
  def self.load_app!
74
+ load 'lib/smartkiosk/client/logging'
75
+ load 'lib/patches/sidekiq'
76
+
77
+ require_relative "../app/workers/orders/durable_order_execution"
78
+
85
79
  %w(uploaders models workers controllers).each do |dir|
86
80
  Dir[File.expand_path "../../app/#{dir}/**/*.rb", __FILE__].each {|file| require file }
87
81
  end
88
82
 
89
- load 'lib/smartkiosk/client/logging'
83
+ CarrierWave.root = ->() { Application.public_folder }
84
+
85
+ self
90
86
  end
91
87
 
92
88
  def self.expand!(path)
@@ -102,5 +98,4 @@ module Smartkiosk
102
98
  end
103
99
  end
104
100
 
105
- Application = Smartkiosk::Client
106
- Application.load_app!
101
+ (Application = Smartkiosk::Client).load_app!
@@ -18,6 +18,10 @@ class CreatePayments < ActiveRecord::Migration
18
18
  t.decimal :paid_amount, :precision => 38, :scale => 2
19
19
  t.decimal :commission_amount, :precision => 38, :scale => 2
20
20
 
21
+ t.integer :payment_type
22
+ t.string :card_track1
23
+ t.string :card_track2
24
+
21
25
  t.timestamps
22
26
  end
23
27
 
@@ -10,11 +10,4 @@ module Sidekiq
10
10
  end
11
11
  end
12
12
  end
13
-
14
- def self.startup!
15
- jobs = Sidekiq::Queue.new("startup").map do |job|
16
- job.delete
17
- job.klass.constantize.new.perform(*job.args)
18
- end
19
- end
20
13
  end
@@ -1,3 +1,5 @@
1
+ require 'smartkiosk/common'
2
+
1
3
  module Smartkiosk
2
4
  class Client
3
5
  module Logging extend Smartkiosk::Common::Logging
@@ -10,6 +12,8 @@ module Smartkiosk
10
12
 
11
13
  def call(env)
12
14
  began_at = Time.now
15
+
16
+ env['rack.logger'] = Smartkiosk::Client::Logging.logger
13
17
  status, header, body = @app.call(env)
14
18
  header = Rack::Utils::HeaderHash.new(header)
15
19
  log(env, status, header, began_at)
@@ -2,6 +2,6 @@ require 'sinatra/base'
2
2
 
3
3
  module Smartkiosk
4
4
  class Client < Sinatra::Base
5
- VERSION = '0.0.10'
5
+ VERSION = '0.0.16'
6
6
  end
7
- end
7
+ end