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
+ module RubyApp
2
+ VERSION = "0.0.6"
3
+ ROOT = File.expand_path(File.dirname(__FILE__))
4
+ end
@@ -0,0 +1,62 @@
1
+ require 'rubygems'
2
+ require "bundler/gem_tasks"
3
+ require 'bundler/setup'
4
+
5
+ require 'rake'
6
+
7
+ namespace :ruby_app do
8
+
9
+ desc 'Monitor RubyApp'
10
+ task :monitor do |task|
11
+ system("cd ./lib/ruby_app; > ./log/application.log; clear; tail -f ./log/application.log")
12
+ end
13
+
14
+ desc 'Create RubyApp console'
15
+ task :console do |task|
16
+ system("cd ./lib/ruby_app; clear; bundle exec ../../bin/ruby_app console")
17
+ end
18
+
19
+ desc 'Run RubyApp'
20
+ task :run do |task|
21
+ system("cd ./lib/ruby_app; clear; bundle exec ../../bin/ruby_app run")
22
+ end
23
+
24
+ namespace :clear do
25
+
26
+ desc 'Clear OpenID files'
27
+ task :open_id do |task|
28
+ system("rm -rf ./lib/ruby_app/elements/pages/authentication/open_id/associations")
29
+ system("rm -rf ./lib/ruby_app/elements/pages/authentication/open_id/nonces")
30
+ system("rm -rf ./lib/ruby_app/elements/pages/authentication/open_id/temp")
31
+ end
32
+
33
+ end
34
+
35
+ namespace :test do
36
+
37
+ desc 'Run feature tests for the given feature file or all features files if no argument is provided'
38
+ task :features, :file do |task, arguments|
39
+ system("bundle exec cucumber --format pretty --tags ~@broken #{arguments.file}")
40
+ end
41
+
42
+ desc 'Run RSpec tests'
43
+ task :specs, :file, :line do |task, arguments|
44
+ if arguments.file
45
+ if arguments.line
46
+ system("bundle exec rspec #{arguments.file} --line_number=#{arguments.line} --format=documentation --colour")
47
+ else
48
+ system("bundle exec rspec #{arguments.file} --format=documentation --colour")
49
+ end
50
+ else
51
+ system("bundle exec rspec spec/ --format=documentation --colour")
52
+ end
53
+ end
54
+
55
+ desc 'Run all tests'
56
+ task :all => ['ruby_app:test:specs',
57
+ 'ruby_app:test:features']
58
+
59
+ end
60
+
61
+ end
62
+
@@ -0,0 +1,40 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ruby_app/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "RubyApp"
7
+ s.version = RubyApp::VERSION
8
+ s.authors = ["Frank G. Ficnar"]
9
+ s.email = ["frank.ficnar@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{A web application framework in Ruby}
12
+ s.description = %q{A web application framework in Ruby}
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+
19
+ s.add_dependency 'BlueCloth', '1.0.1'
20
+ s.add_dependency 'chronic_duration', '0.9.6'
21
+ s.add_dependency 'facets', '2.9.2'
22
+ s.add_dependency 'fileutils', '0.7'
23
+ s.add_dependency 'haml', '3.1.2'
24
+ s.add_dependency 'json', '1.6.1'
25
+ s.add_dependency 'mime-types', '1.16'
26
+ s.add_dependency 'r18n-core', '0.4.9'
27
+ s.add_dependency 'rack', '1.2.2'
28
+ s.add_dependency 'ruby-event', '1.0.0'
29
+ s.add_dependency 'ruby-openid', '2.1.8'
30
+ s.add_dependency 'sass', '3.1.7'
31
+ s.add_dependency 'term-ansicolor', '1.0.6'
32
+ s.add_dependency 'yajl-ruby', '0.8.2'
33
+
34
+ s.add_development_dependency 'capybara', '1.0.0'
35
+ s.add_development_dependency 'cucumber', '1.0.0'
36
+ s.add_development_dependency 'launchy', '0.3.7'
37
+ s.add_development_dependency 'rspec', '2.6.0'
38
+ s.add_development_dependency 'rspec-mocks', '2.6.0'
39
+ s.add_development_dependency 'ya2yaml', '0.30'
40
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ require 'ruby_app/application'
4
+ require 'ruby_app/element'
5
+
6
+ describe RubyApp::Element do
7
+ include_context 'RubyApp::Elements'
8
+
9
+ let(:element) { RubyApp::Element.new }
10
+
11
+ describe 'positive' do
12
+
13
+ describe 'get element by element_id' do
14
+ specify { RubyApp::Application.execute(environment) { RubyApp::Element.get_element(element.element_id).should == element } }
15
+ end
16
+
17
+ end
18
+
19
+ describe 'negative' do
20
+ end
21
+
22
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ require 'ruby_app/application'
4
+ require 'ruby_app/element'
5
+ require 'ruby_app/elements/navigation/breadcrumbs'
6
+ require 'ruby_app/elements/pages/default_page'
7
+ require 'ruby_app/elements/pages/test_pages/default_test_page'
8
+ require 'ruby_app/session'
9
+
10
+ describe RubyApp::Elements::Navigation::Breadcrumbs do
11
+ include_context 'RubyApp::Elements'
12
+
13
+ describe 'positive' do
14
+
15
+ describe 'render class' do
16
+
17
+ describe 'render :css' do
18
+ specify { RubyApp::Application.execute(environment) { RubyApp::Elements::Navigation::Breadcrumbs.render(:css).should be_nil } }
19
+ end
20
+
21
+ describe 'render :js' do
22
+ specify { RubyApp::Application.execute(environment) { RubyApp::Elements::Navigation::Breadcrumbs.render(:js).should_not be_nil } }
23
+ end
24
+
25
+ end
26
+
27
+ describe 'render instance' do
28
+
29
+ let(:breadcrumbs) { RubyApp::Elements::Navigation::Breadcrumbs.new }
30
+
31
+ describe 'render :html' do
32
+ specify { RubyApp::Application.execute(environment) { breadcrumbs.render(:html).should_not be_nil } }
33
+ end
34
+
35
+ end
36
+
37
+ describe 'breadcrumb pages' do
38
+
39
+ before(:all) do
40
+ RubyApp::Application.execute(environment) { RubyApp::Session.pages.push(RubyApp::Elements::Pages::TestPages::DefaultTestPage.new) }
41
+ end
42
+
43
+ let(:breadcrumbs) { RubyApp::Elements::Navigation::Breadcrumbs.new }
44
+ let(:first_page) { RubyApp::Session.pages.first }
45
+ let(:second_page) { RubyApp::Session.pages.last }
46
+
47
+ specify { RubyApp::Application.execute(environment) { breadcrumbs.render(:html).should include(first_page.translate.title) } }
48
+ specify { RubyApp::Application.execute(environment) { breadcrumbs.render(:html).should include(second_page.translate.title) } }
49
+
50
+ describe 'send navigated event' do
51
+
52
+ before(:all) do
53
+ RubyApp::Application.execute(environment) do
54
+ RubyApp::Session.process(RubyApp::Element::Event.from_hash({ '_class' => 'RubyApp::Elements::Navigation::Base::BaseBreadcrumbs::NavigatedEvent',
55
+ 'source_id' => breadcrumbs.element_id,
56
+ 'page_id' => first_page.element_id }))
57
+ end
58
+ end
59
+
60
+ specify { RubyApp::Application.execute(environment) { RubyApp::Session.pages.length.should == 1 } }
61
+ specify { RubyApp::Application.execute(environment) { RubyApp::Session.pages.last.should == first_page } }
62
+
63
+ end
64
+
65
+ end
66
+
67
+ end
68
+
69
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ require 'ruby_app/application'
4
+ require 'ruby_app/elements/page'
5
+
6
+ describe RubyApp::Elements::Page do
7
+ include_context 'RubyApp::Elements'
8
+
9
+ describe 'positive' do
10
+
11
+ describe 'render instance' do
12
+
13
+ let(:page) { RubyApp::Elements::Page.new }
14
+
15
+ describe 'render :css' do
16
+ specify { RubyApp::Application.execute(environment) { page.render(:css).should_not be_nil } }
17
+ end
18
+
19
+ describe 'render :js' do
20
+ specify { RubyApp::Application.execute(environment) { page.render(:js).should_not be_nil } }
21
+ end
22
+
23
+ describe 'render :html' do
24
+ specify { RubyApp::Application.execute(environment) { page.render(:html).should_not be_nil } }
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,182 @@
1
+ require 'ruby_app/mixins/render'
2
+ require 'ruby_app/mixins/template'
3
+
4
+ describe RubyApp::Mixins::Render do
5
+
6
+ before(:all) do
7
+
8
+ class TestA
9
+ extend RubyApp::Mixins::Template
10
+ extend RubyApp::Mixins::Render
11
+ include RubyApp::Mixins::Render
12
+ template_path(:all, File.dirname(__FILE__))
13
+ end
14
+
15
+ class TestB < TestA
16
+ template_path(:all, File.dirname(__FILE__))
17
+ end
18
+
19
+ class TestC < TestA
20
+ template_path(:all, File.dirname(__FILE__))
21
+ exclude_parent_template(:html)
22
+ end
23
+
24
+ class TestD < TestC
25
+ template_path(:all, File.dirname(__FILE__))
26
+ end
27
+
28
+ class TestE
29
+ extend RubyApp::Mixins::Template
30
+ extend RubyApp::Mixins::Render
31
+ include RubyApp::Mixins::Render
32
+ template_path(:all, File.dirname(__FILE__))
33
+ end
34
+
35
+ class TestF < TestE
36
+ template_path(:all, File.dirname(__FILE__))
37
+ end
38
+
39
+ class TestG < TestB
40
+ template_path(:all, File.dirname(__FILE__))
41
+ end
42
+
43
+ end
44
+
45
+ describe 'positive' do
46
+
47
+ describe 'render a class' do
48
+
49
+ specify { TestA.render(:html).should include('<!-- TestA -->') }
50
+ specify { TestA.render(:html).scan(/TestA/).length.should == 1 }
51
+ specify { TestA.render(:css).should include('/* TestA */') }
52
+ specify { TestA.render(:css).scan(/TestA/).length.should == 1 }
53
+ specify { TestA.render(:js).should include('// TestA') }
54
+ specify { TestA.render(:js).scan(/TestA/).length.should == 1 }
55
+
56
+ describe 'render an including all derived class' do
57
+
58
+ specify { TestB.render(:html).should include('<!-- TestA -->') }
59
+ specify { TestB.render(:html).should include('<!-- TestB -->') }
60
+ specify { TestB.render(:css).should include('/* TestA */') }
61
+ specify { TestB.render(:css).should include('/* TestB */') }
62
+ specify { TestB.render(:js).should include('// TestA') }
63
+ specify { TestB.render(:js).should include('// TestB') }
64
+
65
+ specify { TestF.render(:html).scan(/TestF/).length.should == 1 }
66
+ specify { TestF.render(:html).scan(/TestF/).length.should == 1 }
67
+ specify { TestF.render(:html).scan(/TestF/).length.should == 1 }
68
+
69
+ end
70
+
71
+ describe 'render an including some derived class' do
72
+
73
+ specify { TestC.render(:html).should include('<!-- TestC -->') }
74
+ specify { TestC.render(:css).should include('/* TestA */') }
75
+ specify { TestC.render(:css).should include('/* TestC */') }
76
+ specify { TestC.render(:js).should include('// TestA') }
77
+ specify { TestC.render(:js).should include('// TestC') }
78
+
79
+ end
80
+
81
+ describe 'render a derived class with no templates' do
82
+
83
+ specify { TestD.render(:html).should include('<!-- TestC -->') }
84
+ specify { TestD.render(:css).should include('/* TestA */') }
85
+ specify { TestD.render(:css).should include('/* TestC */') }
86
+ specify { TestD.render(:js).should include('// TestA') }
87
+ specify { TestD.render(:js).should include('// TestC') }
88
+
89
+ end
90
+
91
+ describe 'render a derived class in multiple threads' do
92
+
93
+ specify { TestG.render(:css).should include('/* TestA */') }
94
+ specify { TestG.render(:css).should include('/* TestB */') }
95
+ specify { TestG.render(:css).should include('/* TestG */') }
96
+
97
+ end
98
+
99
+ end
100
+
101
+ describe 'render an instance' do
102
+
103
+ let(:instance_a) { TestA.new }
104
+ let(:instance_b) { TestB.new }
105
+ let(:instance_c) { TestC.new }
106
+ let(:instance_d) { TestD.new }
107
+ let(:instance_e) { TestE.new }
108
+ let(:instance_f) { TestF.new }
109
+
110
+ specify { instance_a.render(:html).should include('<!-- TestA -->') }
111
+ specify { instance_a.render(:html).scan(/TestA/).length.should == 1 }
112
+ specify { instance_a.render(:css).should include('/* TestA */') }
113
+ specify { instance_a.render(:css).scan(/TestA/).length.should == 1 }
114
+ specify { instance_a.render(:js).should include('// TestA') }
115
+ specify { instance_a.render(:js).scan(/TestA/).length.should == 1 }
116
+
117
+ describe 'render an include all derived instance' do
118
+
119
+ specify { instance_b.render(:html).should include('<!-- TestA -->') }
120
+ specify { instance_b.render(:html).should include('<!-- TestB -->') }
121
+ specify { instance_b.render(:css).should include('/* TestA */') }
122
+ specify { instance_b.render(:css).should include('/* TestB */') }
123
+ specify { instance_b.render(:js).should include('// TestA') }
124
+ specify { instance_b.render(:js).should include('// TestB') }
125
+
126
+ specify { instance_f.render(:html).scan(/TestF/).length.should == 1 }
127
+ specify { instance_f.render(:html).scan(/TestF/).length.should == 1 }
128
+ specify { instance_f.render(:html).scan(/TestF/).length.should == 1 }
129
+
130
+ end
131
+
132
+ describe 'render an include some derived instance' do
133
+
134
+ specify { instance_c.render(:html).should include('<!-- TestC -->') }
135
+ specify { instance_c.render(:css).should include('/* TestA */') }
136
+ specify { instance_c.render(:css).should include('/* TestC */') }
137
+ specify { instance_c.render(:js).should include('// TestA') }
138
+ specify { instance_c.render(:js).should include('// TestC') }
139
+
140
+ end
141
+
142
+ describe 'render a derived instance with no templates' do
143
+
144
+ specify { instance_d.render(:html).should include('<!-- TestC -->') }
145
+ specify { instance_d.render(:css).should include('/* TestA */') }
146
+ specify { instance_d.render(:css).should include('/* TestC */') }
147
+ specify { instance_d.render(:js).should include('// TestA') }
148
+ specify { instance_d.render(:js).should include('// TestC') }
149
+
150
+ end
151
+
152
+ end
153
+
154
+ end
155
+
156
+ describe 'negative' do
157
+
158
+ describe 'should not render a class' do
159
+
160
+ describe 'should not render an include some derived class' do
161
+
162
+ specify { TestC.render(:html).should_not include('<!-- TestA -->') }
163
+
164
+ end
165
+
166
+ end
167
+
168
+ describe 'should not render an instance' do
169
+
170
+ let(:instance_c) { TestC.new }
171
+
172
+ describe 'should not render an include some derived instance' do
173
+
174
+ specify { instance_c.render(:html).should_not include('<!-- TestA -->') }
175
+
176
+ end
177
+
178
+ end
179
+
180
+ end
181
+
182
+ end
@@ -0,0 +1,60 @@
1
+ require 'ruby_app/mixins/route'
2
+
3
+ describe RubyApp::Mixins::Route do
4
+
5
+ before(:all) do
6
+ Object.extend RubyApp::Mixins::Route
7
+ end
8
+
9
+ before(:each) do
10
+ @value = false
11
+ @parameters = nil
12
+ Object.clear_routes
13
+ end
14
+
15
+ describe 'positive' do
16
+
17
+ it "should match a blank pattern on GET" do
18
+ Object.route(RubyApp::Mixins::Route::GET, /^$/) { @value = true }
19
+ @value.should be_false
20
+ Object.do_route(RubyApp::Mixins::Route::GET, '')
21
+ @value.should be_true
22
+ end
23
+
24
+ it "should match a pattern on GET" do
25
+ Object.route(RubyApp::Mixins::Route::GET, /^pattern$/) { @value = true }
26
+ @value.should be_false
27
+ Object.do_route(RubyApp::Mixins::Route::GET, 'pattern')
28
+ @value.should be_true
29
+ end
30
+
31
+ it "should match a pattern on POST" do
32
+ Object.route(RubyApp::Mixins::Route::POST, /^pattern$/) { @value = true }
33
+ @value.should be_false
34
+ Object.do_route(RubyApp::Mixins::Route::POST, 'pattern')
35
+ @value.should be_true
36
+ end
37
+
38
+ it "should match a pattern on GET with a parameter" do
39
+ Object.route(RubyApp::Mixins::Route::GET, /^pattern (.*)$/) { |method, path, parameter| @value, @parameters = true, parameter }
40
+ @value.should be_false
41
+ @parameter.should be_nil
42
+ Object.do_route(RubyApp::Mixins::Route::GET, 'pattern parameter')
43
+ @value.should be_true
44
+ @parameters.should == 'parameter'
45
+ end
46
+
47
+ end
48
+
49
+ describe 'negative' do
50
+
51
+ it "should not match a not matching pattern on GET" do
52
+ Object.route(RubyApp::Mixins::Route::GET, /^pattern$/) { @value = true }
53
+ @value.should be_false
54
+ Object.do_route(RubyApp::Mixins::Route::GET, 'not matching pattern')
55
+ @value.should be_false
56
+ end
57
+
58
+ end
59
+
60
+ end