_rubyapp 0.0.3

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 (197) hide show
  1. data/.gitignore +6 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +4 -0
  4. data/README.md +0 -0
  5. data/Rakefile +65 -0
  6. data/bin/rubyapp +78 -0
  7. data/features/breadcrumbs.feature +10 -0
  8. data/features/content.feature +15 -0
  9. data/features/default.feature +9 -0
  10. data/features/exception.feature +50 -0
  11. data/features/input.feature +12 -0
  12. data/features/list.feature +12 -0
  13. data/features/step_definitions/default_macros.rb +15 -0
  14. data/features/step_definitions/default_steps.rb +36 -0
  15. data/features/support/env.rb +8 -0
  16. data/lib/rubyapp.rb +1 -0
  17. data/lib/rubyapp/config.ru +22 -0
  18. data/lib/rubyapp/element.css.haml +3 -0
  19. data/lib/rubyapp/element.html.haml +2 -0
  20. data/lib/rubyapp/element.js.haml +3 -0
  21. data/lib/rubyapp/element.rb +100 -0
  22. data/lib/rubyapp/elements/button.css.haml +5 -0
  23. data/lib/rubyapp/elements/button.html.haml +3 -0
  24. data/lib/rubyapp/elements/button.rb +19 -0
  25. data/lib/rubyapp/elements/click.js.haml +9 -0
  26. data/lib/rubyapp/elements/click.rb +44 -0
  27. data/lib/rubyapp/elements/content.css.haml +12 -0
  28. data/lib/rubyapp/elements/content.html.haml +3 -0
  29. data/lib/rubyapp/elements/content.js.haml +9 -0
  30. data/lib/rubyapp/elements/content.rb +51 -0
  31. data/lib/rubyapp/elements/dialog.css.haml +30 -0
  32. data/lib/rubyapp/elements/dialog.html.haml +8 -0
  33. data/lib/rubyapp/elements/dialog.rb +58 -0
  34. data/lib/rubyapp/elements/dialogs/exception_dialog.css.haml +4 -0
  35. data/lib/rubyapp/elements/dialogs/exception_dialog.html.haml +8 -0
  36. data/lib/rubyapp/elements/dialogs/exception_dialog.rb +32 -0
  37. data/lib/rubyapp/elements/dialogs/message_dialog.html.haml +8 -0
  38. data/lib/rubyapp/elements/dialogs/message_dialog.rb +33 -0
  39. data/lib/rubyapp/elements/exception_element.css.haml +12 -0
  40. data/lib/rubyapp/elements/exception_element.html.haml +6 -0
  41. data/lib/rubyapp/elements/exception_element.rb +19 -0
  42. data/lib/rubyapp/elements/input.css.haml +5 -0
  43. data/lib/rubyapp/elements/input.html.haml +2 -0
  44. data/lib/rubyapp/elements/input.js.haml +8 -0
  45. data/lib/rubyapp/elements/input.rb +55 -0
  46. data/lib/rubyapp/elements/link.css.haml +5 -0
  47. data/lib/rubyapp/elements/link.html.haml +3 -0
  48. data/lib/rubyapp/elements/link.rb +19 -0
  49. data/lib/rubyapp/elements/list.css.haml +33 -0
  50. data/lib/rubyapp/elements/list.html.haml +11 -0
  51. data/lib/rubyapp/elements/list.js.haml +9 -0
  52. data/lib/rubyapp/elements/list.rb +60 -0
  53. data/lib/rubyapp/elements/mobile/ios/page.html.haml +36 -0
  54. data/lib/rubyapp/elements/mobile/ios/page.rb +29 -0
  55. data/lib/rubyapp/elements/navigation/breadcrumbs.css.haml +24 -0
  56. data/lib/rubyapp/elements/navigation/breadcrumbs.html.haml +16 -0
  57. data/lib/rubyapp/elements/navigation/breadcrumbs.js.haml +9 -0
  58. data/lib/rubyapp/elements/navigation/breadcrumbs.rb +49 -0
  59. data/lib/rubyapp/elements/navigation/page_link.css.haml +12 -0
  60. data/lib/rubyapp/elements/navigation/page_link.html.haml +8 -0
  61. data/lib/rubyapp/elements/navigation/page_link.js.haml +9 -0
  62. data/lib/rubyapp/elements/navigation/page_link.rb +56 -0
  63. data/lib/rubyapp/elements/navigation/page_menu.css.haml +36 -0
  64. data/lib/rubyapp/elements/navigation/page_menu.html.haml +11 -0
  65. data/lib/rubyapp/elements/navigation/page_menu.js.haml +9 -0
  66. data/lib/rubyapp/elements/navigation/page_menu.rb +57 -0
  67. data/lib/rubyapp/elements/page.css.haml +50 -0
  68. data/lib/rubyapp/elements/page.html.haml +30 -0
  69. data/lib/rubyapp/elements/page.js.haml +52 -0
  70. data/lib/rubyapp/elements/page.rb +60 -0
  71. data/lib/rubyapp/elements/pages/default_page.css.haml +4 -0
  72. data/lib/rubyapp/elements/pages/default_page.html.haml +5 -0
  73. data/lib/rubyapp/elements/pages/default_page.js.haml +4 -0
  74. data/lib/rubyapp/elements/pages/default_page.rb +33 -0
  75. data/lib/rubyapp/elements/pages/exception_page.css.haml +4 -0
  76. data/lib/rubyapp/elements/pages/exception_page.html.haml +3 -0
  77. data/lib/rubyapp/elements/pages/exception_page.rb +27 -0
  78. data/lib/rubyapp/elements/pages/test_pages/alphabet_list.html.haml +3 -0
  79. data/lib/rubyapp/elements/pages/test_pages/base_test_page.css.haml +17 -0
  80. data/lib/rubyapp/elements/pages/test_pages/base_test_page.html.haml +6 -0
  81. data/lib/rubyapp/elements/pages/test_pages/base_test_page.js.haml +4 -0
  82. data/lib/rubyapp/elements/pages/test_pages/base_test_page.rb +41 -0
  83. data/lib/rubyapp/elements/pages/test_pages/breadcrumbs_test_page.html.haml +4 -0
  84. data/lib/rubyapp/elements/pages/test_pages/breadcrumbs_test_page.rb +36 -0
  85. data/lib/rubyapp/elements/pages/test_pages/content_test_page.css.haml +5 -0
  86. data/lib/rubyapp/elements/pages/test_pages/content_test_page.html.haml +6 -0
  87. data/lib/rubyapp/elements/pages/test_pages/content_test_page.js.haml +4 -0
  88. data/lib/rubyapp/elements/pages/test_pages/content_test_page.rb +40 -0
  89. data/lib/rubyapp/elements/pages/test_pages/default_test_page.html.haml +3 -0
  90. data/lib/rubyapp/elements/pages/test_pages/default_test_page.rb +26 -0
  91. data/lib/rubyapp/elements/pages/test_pages/exception_content.html.haml +8 -0
  92. data/lib/rubyapp/elements/pages/test_pages/exception_test_page.css.haml +9 -0
  93. data/lib/rubyapp/elements/pages/test_pages/exception_test_page.html.haml +21 -0
  94. data/lib/rubyapp/elements/pages/test_pages/exception_test_page.rb +65 -0
  95. data/lib/rubyapp/elements/pages/test_pages/input_test_page.css.haml +5 -0
  96. data/lib/rubyapp/elements/pages/test_pages/input_test_page.html.haml +7 -0
  97. data/lib/rubyapp/elements/pages/test_pages/input_test_page.js.haml +4 -0
  98. data/lib/rubyapp/elements/pages/test_pages/input_test_page.rb +40 -0
  99. data/lib/rubyapp/elements/pages/test_pages/list_test_page.css.haml +5 -0
  100. data/lib/rubyapp/elements/pages/test_pages/list_test_page.html.haml +7 -0
  101. data/lib/rubyapp/elements/pages/test_pages/list_test_page.js.haml +4 -0
  102. data/lib/rubyapp/elements/pages/test_pages/list_test_page.rb +56 -0
  103. data/lib/rubyapp/mixins/duration.rb +18 -0
  104. data/lib/rubyapp/mixins/render.rb +69 -0
  105. data/lib/rubyapp/mixins/route.rb +40 -0
  106. data/lib/rubyapp/mixins/template.rb +38 -0
  107. data/lib/rubyapp/mixins/translate.rb +47 -0
  108. data/lib/rubyapp/rack/duration.rb +32 -0
  109. data/lib/rubyapp/rack/locale.rb +32 -0
  110. data/lib/rubyapp/rack/logger.rb +30 -0
  111. data/lib/rubyapp/rack/route.rb +97 -0
  112. data/lib/rubyapp/rack/session.rb +32 -0
  113. data/lib/rubyapp/resources/application.manifest +0 -0
  114. data/lib/rubyapp/resources/favicon.ico +0 -0
  115. data/lib/rubyapp/resources/mobile/ios/icon.png +0 -0
  116. data/lib/rubyapp/resources/mobile/ios/icon.psd +0 -0
  117. data/lib/rubyapp/resources/mobile/ios/start.png +0 -0
  118. data/lib/rubyapp/resources/mobile/ios/start.psd +0 -0
  119. data/lib/rubyapp/session.rb +44 -0
  120. data/lib/rubyapp/template/Gemfile +3 -0
  121. data/lib/rubyapp/template/Rakefile +25 -0
  122. data/lib/rubyapp/template/config.ru +22 -0
  123. data/lib/rubyapp/template/elements/pages/default_page.css.haml +13 -0
  124. data/lib/rubyapp/template/elements/pages/default_page.html.haml +6 -0
  125. data/lib/rubyapp/template/elements/pages/default_page.rb +22 -0
  126. data/lib/rubyapp/template/resources/application.manifest +0 -0
  127. data/lib/rubyapp/template/resources/favicon.ico +0 -0
  128. data/lib/rubyapp/template/resources/mobile/ios/icon.png +0 -0
  129. data/lib/rubyapp/template/resources/mobile/ios/start.png +0 -0
  130. data/lib/rubyapp/template/session.rb +17 -0
  131. data/lib/rubyapp/template/translations/en.yml +5 -0
  132. data/lib/rubyapp/translations/ar.yml +46 -0
  133. data/lib/rubyapp/translations/bg.yml +46 -0
  134. data/lib/rubyapp/translations/ca.yml +46 -0
  135. data/lib/rubyapp/translations/cs.yml +46 -0
  136. data/lib/rubyapp/translations/da.yml +46 -0
  137. data/lib/rubyapp/translations/de.yml +46 -0
  138. data/lib/rubyapp/translations/el.yml +46 -0
  139. data/lib/rubyapp/translations/en.bak +44 -0
  140. data/lib/rubyapp/translations/en.yml +48 -0
  141. data/lib/rubyapp/translations/es.yml +46 -0
  142. data/lib/rubyapp/translations/et.yml +46 -0
  143. data/lib/rubyapp/translations/fa.yml +46 -0
  144. data/lib/rubyapp/translations/fi.yml +46 -0
  145. data/lib/rubyapp/translations/fr.yml +46 -0
  146. data/lib/rubyapp/translations/gl.yml +46 -0
  147. data/lib/rubyapp/translations/hi.yml +46 -0
  148. data/lib/rubyapp/translations/hr.yml +46 -0
  149. data/lib/rubyapp/translations/ht.yml +46 -0
  150. data/lib/rubyapp/translations/hu.yml +46 -0
  151. data/lib/rubyapp/translations/id.yml +46 -0
  152. data/lib/rubyapp/translations/it.yml +46 -0
  153. data/lib/rubyapp/translations/iw.yml +46 -0
  154. data/lib/rubyapp/translations/ja.yml +46 -0
  155. data/lib/rubyapp/translations/ko.yml +46 -0
  156. data/lib/rubyapp/translations/lt.yml +46 -0
  157. data/lib/rubyapp/translations/lv.yml +46 -0
  158. data/lib/rubyapp/translations/mt.yml +46 -0
  159. data/lib/rubyapp/translations/nl.yml +46 -0
  160. data/lib/rubyapp/translations/no.yml +47 -0
  161. data/lib/rubyapp/translations/pl.yml +46 -0
  162. data/lib/rubyapp/translations/pt-PT.yml +46 -0
  163. data/lib/rubyapp/translations/ro.yml +46 -0
  164. data/lib/rubyapp/translations/ru.yml +46 -0
  165. data/lib/rubyapp/translations/sk.yml +46 -0
  166. data/lib/rubyapp/translations/sl.yml +46 -0
  167. data/lib/rubyapp/translations/sq.yml +46 -0
  168. data/lib/rubyapp/translations/sr.yml +46 -0
  169. data/lib/rubyapp/translations/sv.yml +46 -0
  170. data/lib/rubyapp/translations/th.yml +46 -0
  171. data/lib/rubyapp/translations/tl.yml +46 -0
  172. data/lib/rubyapp/translations/tr.yml +46 -0
  173. data/lib/rubyapp/translations/uk.yml +46 -0
  174. data/lib/rubyapp/translations/vi.yml +46 -0
  175. data/lib/rubyapp/translations/zh-CN.yml +46 -0
  176. data/lib/rubyapp/translations/zh-TW.yml +46 -0
  177. data/lib/rubyapp/translations/zh.yml +46 -0
  178. data/lib/rubyapp/version.rb +3 -0
  179. data/rubyapp.gemspec +36 -0
  180. data/spec/element_spec.rb +20 -0
  181. data/spec/mixins/duration_spec.rb +17 -0
  182. data/spec/mixins/render_spec.rb +190 -0
  183. data/spec/mixins/route_spec.rb +60 -0
  184. data/spec/mixins/template_spec.rb +78 -0
  185. data/spec/mixins/test_a.css.haml +3 -0
  186. data/spec/mixins/test_a.html.haml +3 -0
  187. data/spec/mixins/test_a.js.haml +3 -0
  188. data/spec/mixins/test_b.css.haml +4 -0
  189. data/spec/mixins/test_b.html.haml +3 -0
  190. data/spec/mixins/test_b.js.haml +4 -0
  191. data/spec/mixins/test_c.css.haml +4 -0
  192. data/spec/mixins/test_c.html.haml +2 -0
  193. data/spec/mixins/test_c.js.haml +4 -0
  194. data/spec/mixins/test_e.html.haml +2 -0
  195. data/spec/mixins/test_f.html.haml +2 -0
  196. data/spec/mixins/test_g.css.haml +4 -0
  197. metadata +540 -0
@@ -0,0 +1,40 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'mime/types'
5
+
6
+ module RubyApp
7
+
8
+ module Mixins
9
+
10
+ module Route
11
+
12
+ GET = 'GET'
13
+ POST = 'POST'
14
+
15
+ def route(method, pattern, &block)
16
+ self.routes << { :method => method, :pattern => pattern, :block => block }
17
+ end
18
+
19
+ def do_route(method, path)
20
+ self.routes.each do |route|
21
+ if method == route[:method] &&
22
+ path =~ route[:pattern]
23
+ return route[:block].call([method].concat($~.to_a))
24
+ end
25
+ end
26
+ end
27
+
28
+ def routes
29
+ @_routes ||= []
30
+ end
31
+
32
+ def clear_routes
33
+ self.routes.clear
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,38 @@
1
+ module RubyApp
2
+
3
+ module Mixins
4
+
5
+ module Template
6
+
7
+ def template_name
8
+
9
+ name = self.to_s.split('::').last
10
+ name.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
11
+ name.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
12
+ name.tr!("-", "_")
13
+ name.downcase
14
+
15
+ end
16
+
17
+ def template_path(path)
18
+ @_template_path = File.directory?(path) ? path : File.dirname(path)
19
+ end
20
+
21
+ def exclude_parent_template?(format)
22
+ ( @_exclude_parent_template_formats ||= [] ).include?(:all) || @_exclude_parent_template_formats.include?(format)
23
+ end
24
+
25
+ def exclude_parent_template(*formats)
26
+ @_exclude_parent_template_formats = formats
27
+ end
28
+
29
+ def get_templates(format)
30
+ templates = Dir.glob("#{File.join(@_template_path ||= File.dirname(__FILE__), self.template_name)}.#{format}.haml")
31
+ ( templates.length > 0 ? [templates.first] : [] ).concat( ( !self.exclude_parent_template?(format) && self.superclass.respond_to?(:get_templates) ) ? self.superclass.get_templates(format) : [] )
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,47 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'r18n-core'
5
+
6
+ module RubyApp
7
+
8
+ module Mixins
9
+
10
+ module Translate
11
+
12
+ def locale
13
+ R18n.get.locale
14
+ end
15
+
16
+ def reload_locale!
17
+ R18n.get.reload!
18
+ end
19
+
20
+ def translate
21
+
22
+ name = self.to_s
23
+ name.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
24
+ name.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
25
+ name.tr!("-", "_")
26
+ name.downcase!
27
+
28
+ names = name.split('::')
29
+
30
+ value = R18n.get.t
31
+ names.each do |name|
32
+ value = value[name]
33
+ end
34
+
35
+ return value
36
+
37
+ end
38
+
39
+ def localize(*parameters)
40
+ R18n.get.l(*parameters)
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,32 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'rack'
5
+
6
+ module RubyApp
7
+
8
+ module Rack
9
+
10
+ class Duration
11
+ require 'rubyapp/mixins/duration'
12
+
13
+ include RubyApp::Mixins::Duration
14
+
15
+ def initialize(application)
16
+ @application = application
17
+ end
18
+
19
+ def call(environment)
20
+ results = nil
21
+ duration = self.measure_duration do
22
+ results = @application.call(environment)
23
+ end
24
+ results[2].each { |result| result.gsub!(/__DURATION__/, duration.to_s) } if results
25
+ results
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,32 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'r18n-core'
5
+ require 'rack'
6
+
7
+ module RubyApp
8
+
9
+ module Rack
10
+
11
+ class Locale
12
+
13
+ def initialize(application, default = :en, directories = [])
14
+ @application = application
15
+ @default = default
16
+ @directories = [File.join(File.dirname(__FILE__), %w[.. translations])] + (directories.is_a?(Array) ? directories : [directories])
17
+ end
18
+
19
+ def call(environment)
20
+ request = ::Rack::Request.new(environment)
21
+ request.fullpath =~ /^\/([^\/]+)/
22
+ locale = $1 || @default
23
+ RubyApp::Session.request.logger.debug("RubyApp::Rack::Locale#call(...) locale=#{locale.inspect}")
24
+ R18n.thread_set(R18n::I18n.new(locale, @directories))
25
+ @application.call(environment)
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,30 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'fileutils'
5
+ require 'logger'
6
+
7
+ module RubyApp
8
+
9
+ module Rack
10
+
11
+ class Logger
12
+
13
+ def initialize(application)
14
+ @application = application
15
+ log_directory = File.join(FileUtils.pwd, %w[log])
16
+ Dir.mkdir(log_directory) unless File.exists?(log_directory)
17
+ @logger = ::Logger.new(File.join(log_directory, %w[application.log]))
18
+ at_exit { @logger.close }
19
+ end
20
+
21
+ def call(environment)
22
+ environment['rack.logger'] = @logger
23
+ @application.call(environment)
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,97 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'mime/types'
5
+ require 'yajl'
6
+
7
+ require 'rubyapp/element'
8
+ require 'rubyapp/elements/exception_element'
9
+ require 'rubyapp/elements/pages/exception_page'
10
+ require 'rubyapp/mixins/route'
11
+ require 'rubyapp/session'
12
+
13
+ module RubyApp
14
+
15
+ module Rack
16
+
17
+ class Route
18
+ extend RubyApp::Mixins::Route
19
+
20
+ def call(environment)
21
+ RubyApp::Session.request.logger.debug("RubyApp::Rack::Route#call(...) matching #{RubyApp::Session.request.path}")
22
+ self.class.do_route(RubyApp::Session.request.request_method, RubyApp::Session.request.path)
23
+ end
24
+
25
+ route(RubyApp::Mixins::Route::GET, /\/elements\/([^\.]+)\.([^\.]+)/) do |method, path, element_id, format|
26
+ RubyApp::Session.request.logger.debug("RubyApp::Rack::Route.get(...) method=#{method.inspect} path=#{path.inspect} element_id=#{element_id.inspect} format=#{format.to_sym.inspect}")
27
+ begin
28
+ [
29
+ 200,
30
+ { 'content-type' => RubyApp::Rack::Route.get_content_type(format) },
31
+ [ RubyApp::Element.get_element(element_id).render(format.to_sym) ]
32
+ ]
33
+ rescue Exception => exception
34
+ RubyApp::Session.request.logger.error("RubyApp::Rack::Route.get(...) method=#{method.inspect} path=#{path.inspect} element_id=#{element_id.inspect} format=#{format.to_sym.inspect} exception=#{exception.class.inspect} #{exception.message}")
35
+ RubyApp::Session.request.logger.error("RubyApp::Rack::Route.get(...) \n#{exception.backtrace.join("\n")}")
36
+ [
37
+ 200,
38
+ { 'content-type' => RubyApp::Rack::Route.get_content_type(format) },
39
+ [ RubyApp::Elements::ExceptionElement.new(exception).render(format.to_sym) ]
40
+ ]
41
+ end
42
+ end
43
+
44
+ route(RubyApp::Mixins::Route::GET, /\.([^\.]+)/) do |method, path, format|
45
+ RubyApp::Session.request.logger.debug("RubyApp::Rack::Route.get(...) method=#{method.inspect} path=#{path.inspect} format=#{format.to_sym.inspect}")
46
+ begin
47
+ [
48
+ 200,
49
+ { 'content-type' => RubyApp::Rack::Route.get_content_type(format) },
50
+ [ RubyApp::Session.current.pages.last.render(format.to_sym) ]
51
+ ]
52
+ rescue Exception => exception
53
+ RubyApp::Session.request.logger.error("RubyApp::Rack::Route.get(...) method=#{method.inspect} path=#{path.inspect} format=#{format.to_sym.inspect} exception=#{exception.class.inspect} #{exception.message}")
54
+ RubyApp::Session.request.logger.error("RubyApp::Rack::Route.get(...) \n#{exception.backtrace.join("\n")}")
55
+ [
56
+ 200,
57
+ { 'content-type' => RubyApp::Rack::Route.get_content_type(format) },
58
+ [ RubyApp::Elements::Pages::ExceptionPage.new(exception).render(format.to_sym) ]
59
+ ]
60
+ end
61
+ end
62
+
63
+ route(RubyApp::Mixins::Route::GET, /.*/) do |method, path|
64
+ RubyApp::Session.request.logger.debug("RubyApp::Rack::Route.get(...) method=#{method.inspect} path=#{path.inspect}")
65
+ do_route(RubyApp::Mixins::Route::GET, '/.html')
66
+ end
67
+
68
+ route(RubyApp::Mixins::Route::POST, /.*/) do |method, path|
69
+ RubyApp::Session.request.logger.debug("RubyApp::Rack::Route.post(...) method=#{method.inspect} path=#{path.inspect} POST=#{RubyApp::Session.request.POST.inspect}")
70
+ begin
71
+ event = RubyApp::Element::Event.from_hash(RubyApp::Session.request.POST)
72
+ RubyApp::Session.current.process(event)
73
+ [
74
+ 200,
75
+ { 'content-type' => 'application/json' },
76
+ [ Yajl::Encoder.new.encode(event.to_hash) ]
77
+ ]
78
+ rescue Exception => exception
79
+ RubyApp::Session.request.logger.error("RubyApp::Rack::Route.post(...) method=#{method.inspect} path=#{path.inspect} POST=#{RubyApp::Session.request.POST.inspect} exception=#{exception.class.inspect} #{exception.message}")
80
+ RubyApp::Session.request.logger.error("RubyApp::Rack::Route.post(...) \n#{exception.backtrace.join("\n")}")
81
+ [
82
+ 200,
83
+ { 'content-type' => 'application/json' },
84
+ [ Yajl::Encoder.new.encode(RubyApp::Element::ExceptionEvent.new(exception).to_hash) ]
85
+ ]
86
+ end
87
+ end
88
+
89
+ def self.get_content_type(format)
90
+ ( mime_type = MIME::Types.type_for(format)[0] ) ? mime_type.content_type : 'text/plain'
91
+ end
92
+
93
+ end
94
+
95
+ end
96
+
97
+ end
@@ -0,0 +1,32 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'rack'
5
+
6
+ module RubyApp
7
+
8
+ module Rack
9
+
10
+ class Session
11
+
12
+ def initialize(application, _class)
13
+ @application = application
14
+ @_class = _class
15
+ end
16
+
17
+ def call(environment)
18
+ request = ::Rack::Request.new(environment)
19
+ session = ( request.session[:session] ||= @_class.new(request) )
20
+ session.begin_request(request)
21
+ begin
22
+ @application.call(environment)
23
+ ensure
24
+ session.end_request
25
+ end
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
File without changes
Binary file
@@ -0,0 +1,44 @@
1
+ module RubyApp
2
+
3
+ class Session
4
+
5
+ attr_reader :arguments, :pages
6
+
7
+ def initialize(request)
8
+ Thread.current[:session] = self
9
+ Thread.current[:request] = request
10
+ @arguments = request.params
11
+ require 'rubyapp/elements/pages/default_page'
12
+ @pages = [RubyApp::Elements::Pages::DefaultPage.new]
13
+ end
14
+
15
+ def self.current
16
+ Thread.current[:session]
17
+ end
18
+
19
+ def self.request
20
+ Thread.current[:request]
21
+ end
22
+
23
+ def begin_request(request)
24
+ Thread.current[:session] = self
25
+ Thread.current[:request] = request
26
+ end
27
+
28
+ def end_request
29
+ Thread.current[:request] = nil
30
+ Thread.current[:session] = nil
31
+ end
32
+
33
+ def process(event)
34
+ event.source.send(:on_event, event)
35
+ end
36
+
37
+ def quit
38
+ RubyApp::Session.request.logger.debug("RubyApp::Session#quit")
39
+ RubyApp::Session.request.env['rack.session.options'][:drop] = true
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gem 'rubyapp', :path => "~/Dropbox/Projects/gems/rubyapp"
@@ -0,0 +1,25 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
4
+ require 'rake'
5
+
6
+ namespace :$APPLICATION_DOWNCODE do
7
+
8
+ desc 'Translate the application'
9
+ task :translate do |task|\
10
+ require 'fileutils'
11
+ FileUtils.cp('./translations/en.yml', './translations/en.bak')
12
+ system 'bundle exec babelphish -y ./translations/en.yml -o'
13
+ end
14
+
15
+ desc 'Run the application'
16
+ task :run do |task|
17
+ system 'clear; bundle exec rackup config.ru'
18
+ end
19
+
20
+ desc 'Monitor the log'
21
+ task :monitor do |task|
22
+ system 'rm log/*; touch log/application.log; clear; tail -f log/application.log'
23
+ end
24
+
25
+ end