RubyApp 0.0.22 → 0.0.23

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.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- RubyApp (0.0.22)
4
+ RubyApp (0.0.23)
5
5
  BlueCloth
6
6
  chronic
7
7
  chronic_duration
@@ -26,9 +26,14 @@ module RubyApp
26
26
 
27
27
  attr_reader :now, :source
28
28
 
29
- def initialize(data)
30
- @now = Time.parse(data['now'])
31
- @source = RubyApp::Element.get_element(data['source_id'])
29
+ def initialize(data = nil)
30
+ if data
31
+ @now = Time.parse(data['now'])
32
+ @source = RubyApp::Element.get_element(data['source_id'])
33
+ else
34
+ @now = Time.now
35
+ @source = nil
36
+ end
32
37
  @statements = []
33
38
  end
34
39
 
@@ -83,7 +88,8 @@ module RubyApp
83
88
  def to_hash
84
89
  {
85
90
  '_class' => self.class.to_s,
86
- 'source_id' => @source.element_id,
91
+ 'now' => @now,
92
+ 'source_id' => @source ? @source.element_id : nil,
87
93
  'statements' => @statements
88
94
  }
89
95
  end
@@ -96,8 +102,8 @@ module RubyApp
96
102
 
97
103
  class ExceptionEvent < RubyApp::Element::Event
98
104
 
99
- def initialize(data, exception)
100
- super(data)
105
+ def initialize(exception)
106
+ super()
101
107
  self.alert(exception.message)
102
108
  end
103
109
 
@@ -6,12 +6,12 @@
6
6
  this.interval = #{self.interval * 1000};
7
7
  this._interval = 0;
8
8
  this.sendEvent = function(event) {
9
+ event.session_id = '#{RubyApp::Session.session_id}';
9
10
  event.now = new Date().toString();
10
11
  response = $.post(location.href, event);
11
12
  response
12
13
  .success( function(event) {
13
14
  $.each(event.statements, function(index, statement) {
14
- // alert(statement);
15
15
  eval(statement);
16
16
  } );
17
17
  } )
@@ -99,7 +99,7 @@
99
99
  if ( RubyApp.interval > 0 ) {
100
100
  window.clearInterval(RubyApp._interval);
101
101
  }
102
- RubyApp.sendEvent({_class:'RubyApp::Elements::Page::UnloadedEvent', source_id:$('html').attr('id')});
102
+ // RubyApp.sendEvent({_class:'RubyApp::Elements::Page::UnloadedEvent', source_id:$('html').attr('id')});
103
103
  });
104
104
 
105
105
  = yield
@@ -18,7 +18,7 @@ module RubyApp
18
18
  end
19
19
 
20
20
  def render(format)
21
- raise self.translate.exception
21
+ raise self.translate.exception if format == :html
22
22
  super(format)
23
23
  end
24
24
 
@@ -0,0 +1,21 @@
1
+ module RubyApp
2
+
3
+ module Exceptions
4
+
5
+ module Base
6
+ require 'ruby_app/mixins/translate_mixin'
7
+
8
+ class BaseException < Exception
9
+ extend RubyApp::Mixins::TranslateMixin
10
+
11
+ def initialize(message)
12
+ super(message)
13
+ end
14
+
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,19 @@
1
+ module RubyApp
2
+
3
+ module Exceptions
4
+ require 'ruby_app/exceptions/base/base_exception'
5
+
6
+ class SessionInvalidException < RubyApp::Exceptions::Base::BaseException
7
+
8
+ attr_reader :session_id
9
+
10
+ def initialize(session_id)
11
+ super(RubyApp::Exceptions::SessionInvalidException.translate.message)
12
+ @session_id = session_id
13
+ end
14
+
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -11,7 +11,9 @@ module RubyApp
11
11
  self.error('-' * 80)
12
12
  self.error("exception=#{exception.class.inspect} #{exception.message}")
13
13
  self.error('-' * 80)
14
- self.error(exception.backtrace.join("\n"))
14
+ exception.backtrace.each do |line|
15
+ self.error(line)
16
+ end
15
17
  self.error('-' * 80)
16
18
  end
17
19
 
@@ -11,9 +11,11 @@ module RubyApp
11
11
  require 'ruby_app/elements/exception_element'
12
12
  require 'ruby_app/elements/pages/exception_page'
13
13
  require 'ruby_app/elements/pages/quit_page'
14
+ require 'ruby_app/exceptions/session_invalid_exception'
14
15
  require 'ruby_app/log'
15
16
  require 'ruby_app/mixins/route_mixin'
16
17
  require 'ruby_app/request'
18
+ require 'ruby_app/session'
17
19
 
18
20
  class Route
19
21
  extend RubyApp::Mixins::RouteMixin
@@ -83,20 +85,26 @@ module RubyApp
83
85
 
84
86
  route(RubyApp::Mixins::RouteMixin::POST, /.*/) do |method, path|
85
87
  RubyApp::Log.debug("#{self}.post(...) method=#{method.inspect} path=#{path.inspect} POST=#{RubyApp::Request.POST.inspect}")
88
+ RubyApp::Log.debug("#{self}.post(...) RubyApp::Session.session_id=#{RubyApp::Session.session_id}")
86
89
  begin
87
- event = RubyApp::Element::Event.from_hash(RubyApp::Request.POST)
88
- event.process!
89
- [
90
- 200,
91
- { 'content-type' => 'application/json' },
92
- [ Yajl::Encoder.new.encode(event.to_hash) ]
93
- ]
90
+ if RubyApp::Session.session_id == RubyApp::Request.POST['session_id']
91
+ event = RubyApp::Element::Event.from_hash(RubyApp::Request.POST)
92
+ event.process!
93
+ [
94
+ 200,
95
+ { 'content-type' => 'application/json' },
96
+ [ Yajl::Encoder.new.encode(event.to_hash) ]
97
+ ]
98
+ else
99
+ raise RubyApp::Exceptions::SessionInvalidException.new(RubyApp::Request.POST['session_id'])
100
+ end
101
+
94
102
  rescue Exception => exception
95
103
  RubyApp::Log.exception(exception)
96
104
  [
97
105
  200,
98
106
  { 'content-type' => 'application/json' },
99
- [ Yajl::Encoder.new.encode(RubyApp::Element::ExceptionEvent.new(RubyApp::Request.POST, exception).to_hash) ]
107
+ [ Yajl::Encoder.new.encode(RubyApp::Element::ExceptionEvent.new(exception).to_hash) ]
100
108
  ]
101
109
  end
102
110
  end
@@ -1,5 +1,6 @@
1
1
  module RubyApp
2
2
  require 'ruby_app/application'
3
+ require 'ruby_app/log'
3
4
  require 'ruby_app/mixins/configure_mixin'
4
5
  require 'ruby_app/mixins/delegate_mixin'
5
6
  require 'ruby_app/mixins/translate_mixin'
@@ -21,15 +22,19 @@ module RubyApp
21
22
 
22
23
  end
23
24
 
24
- attr_reader :pages
25
+ attr_reader :session_id, :pages
25
26
  attr_accessor :identity, :data
26
27
 
27
- def initialize(page = nil)
28
- require 'ruby_app/elements/pages/default_page'
29
- @pages = [ page || RubyApp::Elements::Pages::DefaultPage.new ]
28
+ def initialize(session_id, page = nil)
29
+ @session_id = session_id
30
+ @pages = []
30
31
  @dialogs = []
31
32
  @identity = nil
32
33
  @data = {}
34
+
35
+ require 'ruby_app/elements/pages/default_page'
36
+ @pages.push(page || RubyApp::Elements::Pages::DefaultPage.new)
37
+
33
38
  end
34
39
 
35
40
  def [](key)
@@ -70,7 +75,8 @@ module RubyApp
70
75
  end
71
76
 
72
77
  def self.create!
73
- Thread.current[:_session] = RubyApp::Request.session[:_session] ||= RubyApp::Application.options.session_class.new
78
+ RubyApp::Request.session[:_initialize] = true
79
+ Thread.current[:_session] = RubyApp::Request.session[:_session] ||= RubyApp::Application.options.session_class.new(RubyApp::Request.env['rack.session.options'] ? RubyApp::Request.env['rack.session.options'][:id] : nil)
74
80
  if block_given?
75
81
  begin
76
82
  yield
@@ -194,3 +194,6 @@ ruby_app:
194
194
  [Quit](do_quit) the session.
195
195
  quit_page:
196
196
  title: Quit
197
+ exceptions:
198
+ session_invalid_exception:
199
+ message: The session is invalid or has expired. Refresh the page and try again.
@@ -1,4 +1,4 @@
1
1
  module RubyApp
2
- VERSION = "0.0.22"
2
+ VERSION = "0.0.23"
3
3
  ROOT = File.expand_path(File.dirname(__FILE__))
4
4
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: RubyApp
3
3
  version: !ruby/object:Gem::Version
4
- hash: 51
4
+ hash: 49
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 22
10
- version: 0.0.22
9
+ - 23
10
+ version: 0.0.23
11
11
  platform: ruby
12
12
  authors:
13
13
  - Frank G. Ficnar
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-12-09 00:00:00 Z
18
+ date: 2011-12-11 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -498,6 +498,8 @@ files:
498
498
  - lib/ruby_app/elements/pages/test_pages/test_page.html.haml
499
499
  - lib/ruby_app/elements/pages/test_pages/test_page.js.haml
500
500
  - lib/ruby_app/elements/pages/test_pages/test_page.rb
501
+ - lib/ruby_app/exceptions/base/base_exception.rb
502
+ - lib/ruby_app/exceptions/session_invalid_exception.rb
501
503
  - lib/ruby_app/language.rb
502
504
  - lib/ruby_app/log.rb
503
505
  - lib/ruby_app/mixins/configure_mixin.rb