RubyApp 0.0.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.
Files changed (218) hide show
  1. data/.gitignore +13 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +4 -0
  4. data/README.md +0 -0
  5. data/bin/console.rb +8 -0
  6. data/bin/ruby_app +168 -0
  7. data/features/breadcrumbs.feature +11 -0
  8. data/features/content.feature +16 -0
  9. data/features/default.feature +5 -0
  10. data/features/dialog.feature +56 -0
  11. data/features/exception.feature +53 -0
  12. data/features/input.feature +13 -0
  13. data/features/list.feature +12 -0
  14. data/features/month.feature +14 -0
  15. data/features/step_definitions/default_macros.rb +16 -0
  16. data/features/step_definitions/default_steps.rb +36 -0
  17. data/features/support/env.rb +12 -0
  18. data/lib/ruby_app.rb +1 -0
  19. data/lib/ruby_app/application.rb +72 -0
  20. data/lib/ruby_app/config.ru +27 -0
  21. data/lib/ruby_app/config.yml +15 -0
  22. data/lib/ruby_app/configuration.rb +44 -0
  23. data/lib/ruby_app/element.rb +120 -0
  24. data/lib/ruby_app/elements/base/base_dialog.css.haml +9 -0
  25. data/lib/ruby_app/elements/base/base_dialog.html.haml +4 -0
  26. data/lib/ruby_app/elements/base/base_dialog.rb +64 -0
  27. data/lib/ruby_app/elements/base/base_page.css.haml +13 -0
  28. data/lib/ruby_app/elements/base/base_page.html.haml +20 -0
  29. data/lib/ruby_app/elements/base/base_page.js.haml +97 -0
  30. data/lib/ruby_app/elements/base/base_page.rb +80 -0
  31. data/lib/ruby_app/elements/button.html.haml +4 -0
  32. data/lib/ruby_app/elements/button.rb +19 -0
  33. data/lib/ruby_app/elements/calendars/base/base_month.css.haml +10 -0
  34. data/lib/ruby_app/elements/calendars/base/base_month.html.haml +42 -0
  35. data/lib/ruby_app/elements/calendars/base/base_month.js.haml +18 -0
  36. data/lib/ruby_app/elements/calendars/base/base_month.rb +101 -0
  37. data/lib/ruby_app/elements/calendars/month.rb +27 -0
  38. data/lib/ruby_app/elements/click.js.haml +10 -0
  39. data/lib/ruby_app/elements/click.rb +44 -0
  40. data/lib/ruby_app/elements/dialog.rb +23 -0
  41. data/lib/ruby_app/elements/dialogs/base/base_busy_dialog.css.haml +9 -0
  42. data/lib/ruby_app/elements/dialogs/base/base_busy_dialog.html.haml +7 -0
  43. data/lib/ruby_app/elements/dialogs/base/base_busy_dialog.rb +27 -0
  44. data/lib/ruby_app/elements/dialogs/base/base_close_dialog.css.haml +11 -0
  45. data/lib/ruby_app/elements/dialogs/base/base_close_dialog.html.haml +6 -0
  46. data/lib/ruby_app/elements/dialogs/base/base_close_dialog.js.haml +2 -0
  47. data/lib/ruby_app/elements/dialogs/base/base_close_dialog.rb +33 -0
  48. data/lib/ruby_app/elements/dialogs/base/base_yes_no_dialog.css.haml +15 -0
  49. data/lib/ruby_app/elements/dialogs/base/base_yes_no_dialog.html.haml +8 -0
  50. data/lib/ruby_app/elements/dialogs/base/base_yes_no_dialog.js.haml +2 -0
  51. data/lib/ruby_app/elements/dialogs/base/base_yes_no_dialog.rb +40 -0
  52. data/lib/ruby_app/elements/dialogs/blank_dialog.html.haml +9 -0
  53. data/lib/ruby_app/elements/dialogs/blank_dialog.rb +22 -0
  54. data/lib/ruby_app/elements/dialogs/busy_dialog.rb +22 -0
  55. data/lib/ruby_app/elements/dialogs/calendars/month_dialog.css.haml +19 -0
  56. data/lib/ruby_app/elements/dialogs/calendars/month_dialog.html.haml +18 -0
  57. data/lib/ruby_app/elements/dialogs/calendars/month_dialog.js.haml +3 -0
  58. data/lib/ruby_app/elements/dialogs/calendars/month_dialog.rb +52 -0
  59. data/lib/ruby_app/elements/dialogs/close_dialog.rb +22 -0
  60. data/lib/ruby_app/elements/dialogs/confirmation_dialog.html.haml +8 -0
  61. data/lib/ruby_app/elements/dialogs/confirmation_dialog.rb +26 -0
  62. data/lib/ruby_app/elements/dialogs/exception_dialog.html.haml +8 -0
  63. data/lib/ruby_app/elements/dialogs/exception_dialog.rb +23 -0
  64. data/lib/ruby_app/elements/dialogs/message_dialog.html.haml +8 -0
  65. data/lib/ruby_app/elements/dialogs/message_dialog.rb +26 -0
  66. data/lib/ruby_app/elements/dialogs/yes_no_dialog.rb +22 -0
  67. data/lib/ruby_app/elements/exception_element.html.haml +7 -0
  68. data/lib/ruby_app/elements/exception_element.rb +19 -0
  69. data/lib/ruby_app/elements/input.html.haml +3 -0
  70. data/lib/ruby_app/elements/input.js.haml +9 -0
  71. data/lib/ruby_app/elements/input.rb +54 -0
  72. data/lib/ruby_app/elements/inputs/duration_input.rb +46 -0
  73. data/lib/ruby_app/elements/link.html.haml +4 -0
  74. data/lib/ruby_app/elements/link.rb +19 -0
  75. data/lib/ruby_app/elements/list.html.haml +9 -0
  76. data/lib/ruby_app/elements/list.js.haml +10 -0
  77. data/lib/ruby_app/elements/list.rb +55 -0
  78. data/lib/ruby_app/elements/lists/select.html.haml +14 -0
  79. data/lib/ruby_app/elements/lists/select.js.haml +10 -0
  80. data/lib/ruby_app/elements/lists/select.rb +47 -0
  81. data/lib/ruby_app/elements/markdown.html.haml +5 -0
  82. data/lib/ruby_app/elements/markdown.js.haml +10 -0
  83. data/lib/ruby_app/elements/markdown.rb +51 -0
  84. data/lib/ruby_app/elements/navigation/back_button.html.haml +2 -0
  85. data/lib/ruby_app/elements/navigation/back_button.rb +29 -0
  86. data/lib/ruby_app/elements/navigation/base/base_breadcrumbs.html.haml +17 -0
  87. data/lib/ruby_app/elements/navigation/base/base_breadcrumbs.js.haml +10 -0
  88. data/lib/ruby_app/elements/navigation/base/base_breadcrumbs.rb +58 -0
  89. data/lib/ruby_app/elements/navigation/breadcrumbs.rb +22 -0
  90. data/lib/ruby_app/elements/navigation/page_link.html.haml +9 -0
  91. data/lib/ruby_app/elements/navigation/page_link.js.haml +10 -0
  92. data/lib/ruby_app/elements/navigation/page_link.rb +56 -0
  93. data/lib/ruby_app/elements/navigation/page_menu.html.haml +12 -0
  94. data/lib/ruby_app/elements/navigation/page_menu.js.haml +10 -0
  95. data/lib/ruby_app/elements/navigation/page_menu.rb +57 -0
  96. data/lib/ruby_app/elements/page.rb +21 -0
  97. data/lib/ruby_app/elements/pages/authentication/open_id/authentication_page.css.haml +2 -0
  98. data/lib/ruby_app/elements/pages/authentication/open_id/authentication_page.js.haml +2 -0
  99. data/lib/ruby_app/elements/pages/authentication/open_id/authentication_page.rb +77 -0
  100. data/lib/ruby_app/elements/pages/authentication/open_id/ax_authentication_page.rb +52 -0
  101. data/lib/ruby_app/elements/pages/authentication/open_id/google_authentication_page.rb +30 -0
  102. data/lib/ruby_app/elements/pages/authentication/open_id/my_open_id_authentication_page.rb +30 -0
  103. data/lib/ruby_app/elements/pages/authentication/open_id/sreg_authentication_page.rb +52 -0
  104. data/lib/ruby_app/elements/pages/authentication/open_id/yahoo_authentication_page.rb +30 -0
  105. data/lib/ruby_app/elements/pages/base/base_blank_page.css.haml +18 -0
  106. data/lib/ruby_app/elements/pages/base/base_blank_page.html.haml +11 -0
  107. data/lib/ruby_app/elements/pages/base/base_blank_page.js.haml +3 -0
  108. data/lib/ruby_app/elements/pages/base/base_blank_page.rb +36 -0
  109. data/lib/ruby_app/elements/pages/blank_page.rb +22 -0
  110. data/lib/ruby_app/elements/pages/default_page.css.haml +2 -0
  111. data/lib/ruby_app/elements/pages/default_page.html.haml +5 -0
  112. data/lib/ruby_app/elements/pages/default_page.js.haml +2 -0
  113. data/lib/ruby_app/elements/pages/default_page.rb +34 -0
  114. data/lib/ruby_app/elements/pages/exception_page.html.haml +8 -0
  115. data/lib/ruby_app/elements/pages/exception_page.rb +23 -0
  116. data/lib/ruby_app/elements/pages/quit_page.html.haml +5 -0
  117. data/lib/ruby_app/elements/pages/quit_page.rb +24 -0
  118. data/lib/ruby_app/elements/pages/settings_page.css.haml +2 -0
  119. data/lib/ruby_app/elements/pages/settings_page.html.haml +5 -0
  120. data/lib/ruby_app/elements/pages/settings_page.js.haml +2 -0
  121. data/lib/ruby_app/elements/pages/settings_page.rb +37 -0
  122. data/lib/ruby_app/elements/pages/test_pages/default_test_page.css.haml +4 -0
  123. data/lib/ruby_app/elements/pages/test_pages/default_test_page.html.haml +5 -0
  124. data/lib/ruby_app/elements/pages/test_pages/default_test_page.js.haml +4 -0
  125. data/lib/ruby_app/elements/pages/test_pages/default_test_page.rb +55 -0
  126. data/lib/ruby_app/elements/pages/test_pages/dialog_test_page.css.haml +7 -0
  127. data/lib/ruby_app/elements/pages/test_pages/dialog_test_page.html.haml +5 -0
  128. data/lib/ruby_app/elements/pages/test_pages/dialog_test_page.js.haml +7 -0
  129. data/lib/ruby_app/elements/pages/test_pages/dialog_test_page.rb +66 -0
  130. data/lib/ruby_app/elements/pages/test_pages/input_test_page.css.haml +4 -0
  131. data/lib/ruby_app/elements/pages/test_pages/input_test_page.html.haml +9 -0
  132. data/lib/ruby_app/elements/pages/test_pages/input_test_page.js.haml +4 -0
  133. data/lib/ruby_app/elements/pages/test_pages/input_test_page.rb +44 -0
  134. data/lib/ruby_app/elements/pages/test_pages/list_test_page.css.haml +4 -0
  135. data/lib/ruby_app/elements/pages/test_pages/list_test_page.html.haml +6 -0
  136. data/lib/ruby_app/elements/pages/test_pages/list_test_page.js.haml +4 -0
  137. data/lib/ruby_app/elements/pages/test_pages/list_test_page.rb +51 -0
  138. data/lib/ruby_app/language.rb +44 -0
  139. data/lib/ruby_app/log.rb +33 -0
  140. data/lib/ruby_app/mixins/configuration.rb +31 -0
  141. data/lib/ruby_app/mixins/delegate.rb +15 -0
  142. data/lib/ruby_app/mixins/hash.rb +19 -0
  143. data/lib/ruby_app/mixins/render.rb +76 -0
  144. data/lib/ruby_app/mixins/route.rb +39 -0
  145. data/lib/ruby_app/mixins/template.rb +38 -0
  146. data/lib/ruby_app/mixins/translate.rb +35 -0
  147. data/lib/ruby_app/rack/application.rb +24 -0
  148. data/lib/ruby_app/rack/route.rb +128 -0
  149. data/lib/ruby_app/request.rb +54 -0
  150. data/lib/ruby_app/resources/elements/dialogs/base/base_busy_dialog.gif +0 -0
  151. data/lib/ruby_app/resources/favicon.ico +0 -0
  152. data/lib/ruby_app/resources/themes/mobile/base/base_page/icon.png +0 -0
  153. data/lib/ruby_app/resources/themes/mobile/base/base_page/icon.psd +0 -0
  154. data/lib/ruby_app/resources/themes/mobile/base/base_page/manifest +0 -0
  155. data/lib/ruby_app/resources/themes/mobile/base/base_page/start.png +0 -0
  156. data/lib/ruby_app/resources/themes/mobile/base/base_page/start.psd +0 -0
  157. data/lib/ruby_app/resources/themes/mobile/lists/select.png +0 -0
  158. data/lib/ruby_app/resources/themes/mobile/lists/select.psd +0 -0
  159. data/lib/ruby_app/session.rb +101 -0
  160. data/lib/ruby_app/templates/application/Gemfile +3 -0
  161. data/lib/ruby_app/templates/application/config.ru +42 -0
  162. data/lib/ruby_app/templates/application/config.yml +1 -0
  163. data/lib/ruby_app/templates/application/console.rb +16 -0
  164. data/lib/ruby_app/templates/application/lib/_APPLICATION_DOWNCODE_/application.rb +16 -0
  165. data/lib/ruby_app/templates/application/lib/_APPLICATION_DOWNCODE_/elements/pages/default_page.css.haml +9 -0
  166. data/lib/ruby_app/templates/application/lib/_APPLICATION_DOWNCODE_/elements/pages/default_page.html.haml +7 -0
  167. data/lib/ruby_app/templates/application/lib/_APPLICATION_DOWNCODE_/elements/pages/default_page.rb +26 -0
  168. data/lib/ruby_app/templates/application/lib/_APPLICATION_DOWNCODE_/session.rb +17 -0
  169. data/lib/ruby_app/templates/application/lib/_APPLICATION_DOWNCODE_/version.rb +4 -0
  170. data/lib/ruby_app/templates/application/spec/spec_helper.rb +1 -0
  171. data/lib/ruby_app/templates/application/spec/support/shared.rb +18 -0
  172. data/lib/ruby_app/templates/application/translations/en.yml +5 -0
  173. data/lib/ruby_app/templates/page/_PAGE_DOWNCODE_.css.haml +3 -0
  174. data/lib/ruby_app/templates/page/_PAGE_DOWNCODE_.html.haml +4 -0
  175. data/lib/ruby_app/templates/page/_PAGE_DOWNCODE_.js.haml +3 -0
  176. data/lib/ruby_app/templates/page/_PAGE_DOWNCODE_.rb +14 -0
  177. data/lib/ruby_app/themes/mobile.rb +37 -0
  178. data/lib/ruby_app/themes/mobile/base/base_page.html.haml +30 -0
  179. data/lib/ruby_app/themes/mobile/calendars/month.css.haml +21 -0
  180. data/lib/ruby_app/themes/mobile/colors.sass +24 -0
  181. data/lib/ruby_app/themes/mobile/dialog.css.haml +17 -0
  182. data/lib/ruby_app/themes/mobile/dialogs/blank_dialog.css.haml +12 -0
  183. data/lib/ruby_app/themes/mobile/dialogs/busy_dialog.css.haml +9 -0
  184. data/lib/ruby_app/themes/mobile/dialogs/close_dialog.css.haml +12 -0
  185. data/lib/ruby_app/themes/mobile/dialogs/yes_no_dialog.css.haml +14 -0
  186. data/lib/ruby_app/themes/mobile/list.css.haml +25 -0
  187. data/lib/ruby_app/themes/mobile/lists/select.css.haml +27 -0
  188. data/lib/ruby_app/themes/mobile/markdown.css.haml +11 -0
  189. data/lib/ruby_app/themes/mobile/navigation/base/base_breadcrumbs.html.haml +7 -0
  190. data/lib/ruby_app/themes/mobile/page.css.haml +18 -0
  191. data/lib/ruby_app/themes/mobile/pages/base/base_blank_page.css.haml +18 -0
  192. data/lib/ruby_app/themes/mobile/pages/base/base_blank_page.html.haml +13 -0
  193. data/lib/ruby_app/themes/mobile/pages/blank_page.css.haml +19 -0
  194. data/lib/ruby_app/translations/en.yml +125 -0
  195. data/lib/ruby_app/version.rb +4 -0
  196. data/rakefile +62 -0
  197. data/ruby_app.gemspec +40 -0
  198. data/spec/element_spec.rb +22 -0
  199. data/spec/elements/navigation/breadcrumbs_spec.rb +69 -0
  200. data/spec/elements/page_spec.rb +31 -0
  201. data/spec/mixins/render_spec.rb +182 -0
  202. data/spec/mixins/route_spec.rb +60 -0
  203. data/spec/mixins/template_spec.rb +78 -0
  204. data/spec/mixins/test_a.css.haml +3 -0
  205. data/spec/mixins/test_a.html.haml +3 -0
  206. data/spec/mixins/test_a.js.haml +3 -0
  207. data/spec/mixins/test_b.css.haml +4 -0
  208. data/spec/mixins/test_b.html.haml +3 -0
  209. data/spec/mixins/test_b.js.haml +4 -0
  210. data/spec/mixins/test_c.css.haml +4 -0
  211. data/spec/mixins/test_c.html.haml +2 -0
  212. data/spec/mixins/test_c.js.haml +4 -0
  213. data/spec/mixins/test_e.html.haml +2 -0
  214. data/spec/mixins/test_f.html.haml +2 -0
  215. data/spec/mixins/test_g.css.haml +4 -0
  216. data/spec/spec_helper.rb +1 -0
  217. data/spec/support/shared.rb +15 -0
  218. metadata +654 -0
@@ -0,0 +1,4 @@
1
+ = RubyApp::Elements::Dialogs::MessageDialog.render(:css)
2
+ = RubyApp::Elements::Input.render(:css)
3
+ = RubyApp::Elements::Inputs::DurationInput.render(:css)
4
+ = yield
@@ -0,0 +1,9 @@
1
+ - self.content_for(:content) do
2
+ /
3
+ #{__FILE__}
4
+ %label{:for => @input.element_id}
5
+ = self.translate.label.input
6
+ = @input.render(:html)
7
+ %label{:for => @duration_input.element_id}
8
+ = self.translate.label.duration_input
9
+ = @duration_input.render(:html)
@@ -0,0 +1,4 @@
1
+ = RubyApp::Elements::Dialogs::MessageDialog.render(:js)
2
+ = RubyApp::Elements::Input.render(:js)
3
+ = RubyApp::Elements::Inputs::DurationInput.render(:js)
4
+ = yield
@@ -0,0 +1,44 @@
1
+ module RubyApp
2
+
3
+ module Elements
4
+
5
+ module Pages
6
+
7
+ module TestPages
8
+ require 'ruby_app/elements/dialogs/message_dialog'
9
+ require 'ruby_app/elements/markdown'
10
+ require 'ruby_app/elements/input'
11
+ require 'ruby_app/elements/inputs/duration_input'
12
+ require 'ruby_app/elements/pages/blank_page'
13
+ require 'ruby_app/session'
14
+
15
+ class InputTestPage < RubyApp::Elements::Pages::BlankPage
16
+
17
+ template_path(:all, File.dirname(__FILE__))
18
+
19
+ def initialize
20
+ super
21
+
22
+ @input = RubyApp::Elements::Input.new
23
+ @input.changed do |element, event|
24
+ RubyApp::Session.show(event, RubyApp::Elements::Dialogs::MessageDialog.new(self.translate.message_dialog.message.title,
25
+ self.translate.message_dialog.message.message(@input.value)))
26
+ end
27
+
28
+ @duration_input = RubyApp::Elements::Inputs::DurationInput.new
29
+ @duration_input.changed do |element, event|
30
+ RubyApp::Session.show(event, RubyApp::Elements::Dialogs::MessageDialog.new(self.translate.message_dialog.message.title,
31
+ self.translate.message_dialog.message.message(@duration_input.duration)))
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -0,0 +1,4 @@
1
+ = RubyApp::Elements::Dialogs::MessageDialog.render(:css)
2
+ = RubyApp::Elements::List.render(:css)
3
+ = RubyApp::Elements::Lists::Select.render(:css)
4
+ = yield
@@ -0,0 +1,6 @@
1
+ - self.content_for(:content) do
2
+ /
3
+ #{__FILE__}
4
+ = @list.render(:html)
5
+ %br
6
+ = @select.render(:html)
@@ -0,0 +1,4 @@
1
+ = RubyApp::Elements::Dialogs::MessageDialog.render(:js)
2
+ = RubyApp::Elements::List.render(:js)
3
+ = RubyApp::Elements::Lists::Select.render(:js)
4
+ = yield
@@ -0,0 +1,51 @@
1
+ module RubyApp
2
+
3
+ module Elements
4
+
5
+ module Pages
6
+
7
+ module TestPages
8
+ require 'ruby_app/elements/dialogs/message_dialog'
9
+ require 'ruby_app/elements/pages/blank_page'
10
+ require 'ruby_app/elements/list'
11
+ require 'ruby_app/elements/lists/select'
12
+ require 'ruby_app/session'
13
+
14
+ class ListTestPage < RubyApp::Elements::Pages::BlankPage
15
+
16
+ template_path(:all, File.dirname(__FILE__))
17
+
18
+ def initialize
19
+ super
20
+
21
+ @list = RubyApp::Elements::List.new
22
+ @list.selected do |element, event|
23
+ RubyApp::Session.show(event, RubyApp::Elements::Dialogs::MessageDialog.new(self.translate.message_dialog.message.title,
24
+ self.translate.message_dialog.message.message(event.item)))
25
+ end
26
+
27
+ @list.items += [ 'Item 01',
28
+ 'Item 02',
29
+ 'Item 03' ]
30
+
31
+ @select = RubyApp::Elements::Lists::Select.new
32
+ @select.selected do |element, event|
33
+ RubyApp::Session.show(event, RubyApp::Elements::Dialogs::MessageDialog.new(self.translate.message_dialog.message.title,
34
+ self.translate.message_dialog.message.message(event.item)))
35
+ end
36
+
37
+ @select.items += [ 'Item 04',
38
+ 'Item 05',
39
+ 'Item 06' ]
40
+
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
@@ -0,0 +1,44 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'r18n-core'
5
+
6
+ module RubyApp
7
+ require 'ruby_app/mixins/delegate'
8
+
9
+ class Language < R18n::I18n
10
+ extend RubyApp::Mixins::Delegate
11
+
12
+ def reload
13
+ R18n.get.reload!
14
+ end
15
+
16
+ def self.get
17
+ R18n.get
18
+ end
19
+
20
+ def self.load(language, translations_paths)
21
+ language = RubyApp::Language.new(language, translations_paths)
22
+ R18n.thread_set(language)
23
+ if block_given?
24
+ begin
25
+ yield language
26
+ ensure
27
+ R18n.thread_set(nil)
28
+ end
29
+ end
30
+ end
31
+
32
+ def self.unload
33
+ R18n.thread_set(nil)
34
+ end
35
+
36
+ private
37
+
38
+ def initialize(language, translations_paths)
39
+ super(language, translations_paths)
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -0,0 +1,33 @@
1
+ require 'logger'
2
+
3
+ module RubyApp
4
+ require 'ruby_app/mixins/delegate'
5
+
6
+ class Log < ::Logger
7
+ extend RubyApp::Mixins::Delegate
8
+
9
+ def self.get
10
+ @@_logger
11
+ end
12
+
13
+ def self.open(path)
14
+ directory = File.dirname(path)
15
+ Dir.mkdir(directory) unless File.exists?(directory)
16
+ @@_logger = RubyApp::Log.new(path)
17
+ @@_logger.debug("#{self}##{__method__} path=#{path.inspect}")
18
+ end
19
+
20
+ def self.close
21
+ @@_logger.close
22
+ @@_logger = nil
23
+ end
24
+
25
+ private
26
+
27
+ def initialize(path)
28
+ super(path)
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,31 @@
1
+ module RubyApp
2
+
3
+ module Mixins
4
+
5
+ module Configuration
6
+ require 'ruby_app/configuration'
7
+
8
+ def configuration
9
+
10
+ name = self.is_a?(Class) ? self.to_s : self.class.to_s
11
+ name.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
12
+ name.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
13
+ name.tr!("-", "_")
14
+ name.downcase!
15
+
16
+ names = name.split('::')
17
+
18
+ value = RubyApp::Configuration.document
19
+ names.each do |name|
20
+ value = value[name]
21
+ end
22
+
23
+ return value
24
+
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,15 @@
1
+ module RubyApp
2
+
3
+ module Mixins
4
+
5
+ module Delegate
6
+
7
+ def method_missing(name, *arguments, &block)
8
+ self.get.send(name, *arguments, &block)
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,19 @@
1
+ module RubyApp
2
+
3
+ module Mixins
4
+
5
+ module Hash
6
+
7
+ def method_missing(name, *arguments)
8
+ if name.to_s.match(/(.*)=/)
9
+ self[$~.captures[0].to_s] = arguments[0]
10
+ else
11
+ self[name.to_s] || self[name.to_sym]
12
+ end
13
+ end
14
+
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -0,0 +1,76 @@
1
+
2
+ require 'rubygems'
3
+ require 'bundler/setup'
4
+
5
+ require 'facets/string/interpolate'
6
+ require 'haml'
7
+
8
+ module RubyApp
9
+
10
+ module Mixins
11
+
12
+ module Render
13
+ require 'ruby_app/log'
14
+
15
+ def rendered?(template)
16
+ unless Thread.current[:_rendered].key?(template)
17
+ yield
18
+ Thread.current[:_rendered][template] = ( Thread.current[:_rendered][template] || 0 ) + 1
19
+ end
20
+ end
21
+
22
+ def content_for(name, value = nil, &block)
23
+ ( @_content ||= {} )[Thread.current] ||= {}
24
+ if block_given?
25
+ @_content[Thread.current][name] = block
26
+ elsif value
27
+ @_content[Thread.current][name] = String.interpolate { value }
28
+ else
29
+ @_content[Thread.current][name]
30
+ end
31
+ end
32
+
33
+ def clear_content_for
34
+ ( @_content ||= {} )[Thread.current] ||= {}
35
+ @_content.delete(Thread.current)
36
+ end
37
+
38
+ def render(format)
39
+
40
+ self.init_haml_helpers
41
+
42
+ begin
43
+
44
+ yield(self) if block_given?
45
+
46
+ templates = self.is_a?(Class) ? self.get_templates(format) : self.class.get_templates(format)
47
+ templates.each_with_index do |template, index|
48
+ #RubyApp::Log.debug("#{self.is_a?(Class) ? self : self.class}##{__method__} template=#{File.expand_path(template)}")
49
+ content = Haml::Engine.new(File.read(template), :filename => template).render(self) do |*arguments|
50
+ if arguments.empty?
51
+ index == 0 ? nil : self.content_for(templates[index - 1])
52
+ else
53
+ _content = self.content_for(arguments[0])
54
+ if self.block_is_haml?(_content)
55
+ self.capture_haml(arguments, &_content)
56
+ else
57
+ _content
58
+ end
59
+ end
60
+ end
61
+ self.content_for(template, content)
62
+ end
63
+
64
+ self.content_for(templates.last)
65
+
66
+ ensure
67
+ self.clear_content_for
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+
74
+ end
75
+
76
+ end
@@ -0,0 +1,39 @@
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] and path =~ route[:pattern]
22
+ return route[:block].call([method].concat($~.to_a))
23
+ end
24
+ end
25
+ end
26
+
27
+ def routes
28
+ @_routes ||= []
29
+ end
30
+
31
+ def clear_routes
32
+ self.routes.clear
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
39
+ 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(format, path)
18
+ (@_template_path ||= {})[format] = File.directory?(path) ? "#{File.join(path, self.template_name)}.*.haml" : 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((@_template_path[format] || @_template_path[:all] || "#{File.join(File.dirname(__FILE__), self.template_name)}.*.haml").gsub(/\*/,format.to_s))
31
+ ( templates.length > 0 ? [templates.first] : [] ).concat( ( !self.exclude_parent_template?(format) and 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,35 @@
1
+ module RubyApp
2
+
3
+ module Mixins
4
+
5
+ module Translate
6
+ require 'ruby_app/language'
7
+
8
+ def translate
9
+
10
+ name = self.is_a?(Class) ? self.to_s : self.class.to_s
11
+ name.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
12
+ name.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
13
+ name.tr!("-", "_")
14
+ name.downcase!
15
+
16
+ names = name.split('::')
17
+
18
+ value = RubyApp::Language.t
19
+ names.each do |name|
20
+ value = value[name]
21
+ end
22
+
23
+ return value
24
+
25
+ end
26
+
27
+ def localize(*parameters)
28
+ RubyApp::Language.l(*parameters)
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+
35
+ end