apotomo 1.0.5 → 1.1.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. data/.gitignore +5 -0
  2. data/CHANGES.textile +35 -7
  3. data/Gemfile +0 -2
  4. data/README.rdoc +9 -9
  5. data/apotomo.gemspec +3 -3
  6. data/lib/apotomo.rb +4 -47
  7. data/lib/apotomo/event.rb +2 -0
  8. data/lib/apotomo/event_handler.rb +0 -3
  9. data/lib/apotomo/event_methods.rb +6 -2
  10. data/lib/apotomo/invoke_event_handler.rb +5 -3
  11. data/lib/apotomo/javascript_generator.rb +19 -16
  12. data/lib/apotomo/rails/controller_methods.rb +84 -131
  13. data/lib/apotomo/rails/view_helper.rb +15 -31
  14. data/lib/apotomo/railtie.rb +24 -0
  15. data/lib/apotomo/request_processor.rb +17 -48
  16. data/lib/apotomo/test_case.rb +5 -5
  17. data/lib/apotomo/tree_node.rb +52 -61
  18. data/lib/apotomo/version.rb +1 -1
  19. data/lib/apotomo/widget.rb +70 -146
  20. data/lib/apotomo/widget/javascript_methods.rb +39 -0
  21. data/lib/apotomo/widget_shortcuts.rb +14 -40
  22. data/lib/generators/apotomo/widget_generator.rb +8 -9
  23. data/lib/generators/erb/widget_generator.rb +17 -0
  24. data/lib/generators/haml/widget_generator.rb +20 -0
  25. data/lib/generators/{apotomo/templates → templates}/view.erb +1 -1
  26. data/lib/generators/templates/view.haml +4 -0
  27. data/lib/generators/{apotomo/templates → templates}/widget.rb +1 -1
  28. data/lib/generators/{apotomo/templates → templates}/widget_test.rb +1 -1
  29. data/lib/generators/test_unit/widget_generator.rb +14 -0
  30. data/test/rails/caching_test.rb +10 -17
  31. data/test/rails/controller_methods_test.rb +9 -81
  32. data/test/rails/rails_integration_test.rb +76 -60
  33. data/test/rails/view_helper_test.rb +17 -28
  34. data/test/rails/widget_generator_test.rb +19 -31
  35. data/test/support/test_case_methods.rb +6 -20
  36. data/test/test_helper.rb +15 -25
  37. data/test/unit/event_handler_test.rb +1 -0
  38. data/test/unit/event_methods_test.rb +20 -8
  39. data/test/unit/event_test.rb +5 -0
  40. data/test/unit/javascript_generator_test.rb +19 -19
  41. data/test/unit/render_test.rb +17 -112
  42. data/test/unit/request_processor_test.rb +73 -111
  43. data/test/unit/test_case_test.rb +13 -7
  44. data/test/unit/widget_shortcuts_test.rb +24 -53
  45. data/test/unit/widget_test.rb +76 -36
  46. data/test/widgets/mouse/eat.erb +1 -0
  47. data/test/{fixtures → widgets}/mouse/eating.html.erb +0 -0
  48. data/test/{fixtures → widgets}/mouse/educate.html.erb +0 -0
  49. data/test/{fixtures → widgets}/mouse/feed.html.erb +0 -0
  50. data/test/{fixtures → widgets}/mouse/make_me_squeak.html.erb +0 -0
  51. data/test/{fixtures → widgets}/mouse/posing.html.erb +0 -0
  52. data/test/widgets/mouse/snuggle.html.erb +1 -0
  53. metadata +32 -50
  54. data/lib/apotomo/container_widget.rb +0 -10
  55. data/lib/apotomo/persistence.rb +0 -112
  56. data/lib/apotomo/rails/view_methods.rb +0 -7
  57. data/lib/apotomo/stateful_widget.rb +0 -29
  58. data/lib/apotomo/transition.rb +0 -46
  59. data/lib/generators/apotomo/templates/view.haml +0 -4
  60. data/test/dummy/log/production.log +0 -0
  61. data/test/dummy/log/server.log +0 -0
  62. data/test/dummy/public/javascripts/application.js +0 -2
  63. data/test/dummy/public/javascripts/controls.js +0 -965
  64. data/test/dummy/public/javascripts/dragdrop.js +0 -974
  65. data/test/dummy/public/javascripts/effects.js +0 -1123
  66. data/test/dummy/public/javascripts/prototype.js +0 -6001
  67. data/test/dummy/public/javascripts/rails.js +0 -175
  68. data/test/dummy/script/rails +0 -6
  69. data/test/dummy/tmp/app/cells/mouse_widget.rb +0 -11
  70. data/test/dummy/tmp/app/cells/mouse_widget/snuggle.html.erb +0 -7
  71. data/test/dummy/tmp/app/cells/mouse_widget/squeak.html.erb +0 -7
  72. data/test/dummy/tmp/test/widgets/mouse_widget_test.rb +0 -12
  73. data/test/fixtures/application_widget_tree.rb +0 -2
  74. data/test/fixtures/mouse/snuggle.html.erb +0 -1
  75. data/test/rails/view_methods_test.rb +0 -38
  76. data/test/unit/container_test.rb +0 -21
  77. data/test/unit/invoke_test.rb +0 -126
  78. data/test/unit/persistence_test.rb +0 -201
  79. data/test/unit/stateful_widget_test.rb +0 -58
  80. data/test/unit/test_addressing.rb +0 -110
  81. data/test/unit/test_jump_to_state.rb +0 -89
  82. data/test/unit/test_tab_panel.rb +0 -71
  83. data/test/unit/transition_test.rb +0 -34
@@ -1,58 +0,0 @@
1
- require 'test_helper'
2
-
3
- class StatefulWidgetTest < Test::Unit::TestCase
4
- include Apotomo::TestCaseMethods::TestController
5
-
6
- context "The StatefulWidget" do
7
- setup do
8
- @mum = Apotomo::StatefulWidget.new(parent_controller, 'mum', :squeak)
9
- end
10
-
11
- should "accept an id as first option" do
12
- assert_equal 'mum', @mum.name
13
- end
14
-
15
- should "accept a start state as second option" do
16
- assert_equal :squeak, @mum.instance_variable_get('@start_state')
17
- end
18
-
19
- should "respond to #version" do
20
- assert_equal 0, mouse_mock.version
21
- end
22
-
23
- should "have a version setter" do
24
- @mum = mouse_mock
25
- @mum.version = 1
26
- assert_equal 1, @mum.version
27
- end
28
- end
29
-
30
- context "mum having a family" do
31
- setup do
32
- mum_and_kid!
33
- @mum << @berry = mouse_mock('berry')
34
- @berry << @pet = mouse_mock('pet')
35
- end
36
-
37
- context "responding to #render_children" do
38
- should "return an OrderedHash for the rendered kids" do
39
- kids = @mum.render_children
40
- assert_kind_of ::ActiveSupport::OrderedHash, kids
41
- assert_equal 2, kids.size
42
- end
43
-
44
- should "return an OrderedHash even if there are no kids" do
45
- kids = @kid.render_children
46
- assert_kind_of ::ActiveSupport::OrderedHash, kids
47
- assert_equal 0, kids.size
48
- end
49
-
50
- should "return an empty OrderedHash when all kids are invisible" do
51
- @pet.visible = false
52
- kids = @berry.render_children
53
- assert_kind_of ::ActiveSupport::OrderedHash, kids
54
- assert_equal 0, kids.size
55
- end
56
- end
57
- end
58
- end
@@ -1,110 +0,0 @@
1
- require 'test_helper'
2
-
3
- class AddressingTest < Test::Unit::TestCase
4
- include Apotomo::UnitTestCase
5
-
6
- def test_url_fragment
7
- frag = Apotomo::DeepLinkMethods::UrlFragment.new("tabs=first/mouse=eating")
8
-
9
- assert_equal "tabs=first/mouse=eating", frag.to_s
10
- assert_equal "first", frag[:tabs]
11
- assert_equal "first", frag['tabs']
12
- assert_equal "eating", frag[:mouse]
13
- assert_equal "eating", frag['mouse']
14
- assert_equal nil, frag[:non_existent]
15
-
16
- frag = Apotomo::DeepLinkMethods::UrlFragment.new(nil)
17
- assert_equal nil, frag[:non_existent]
18
- end
19
-
20
- def test_url_fragment_accessor
21
- assert_kind_of Apotomo::DeepLinkMethods::UrlFragment, mouse_mock.url_fragment
22
- end
23
-
24
- def test_url_fragment_blank?
25
- assert Apotomo::DeepLinkMethods::UrlFragment.new("").blank?
26
- end
27
-
28
-
29
- def test_responds_to_url_change?
30
- m = mouse_mock
31
- assert ! m.responds_to_url_change?
32
-
33
- m.respond_to_event :urlChange, :with => :eating
34
- assert m.responds_to_url_change?, "should be true as an :urlChanged listener is attached."
35
-
36
- # test with explicit source:
37
- m = mouse_mock
38
- m.respond_to_event :urlChange, :with => :eating, :from => 'mouse'
39
- assert m.responds_to_url_change?, "should be true as an :urlChanged listener is attached."
40
- end
41
-
42
- def test_deep_link_addressing
43
- t = mouse_mock('top', :upside) do
44
- def local_fragment; "top=upside"; end
45
- end
46
- b = mouse_mock('bottom', :downside) do
47
- def local_fragment; "bottom=downside"; end
48
- end
49
-
50
- t.respond_to_event :urlChange, :with => :eating
51
- b.respond_to_event :urlChange, :with => :eating
52
-
53
- t << b
54
- b << j = cell(:mouse, :eating, 'jerry')
55
-
56
-
57
- assert_equal "top=upside", t.local_fragment
58
- assert_equal "v", t.url_fragment_for("v")
59
-
60
- assert_equal "bottom=downside", b.local_fragment
61
- assert_equal "top=upside/bottom=downside", b.url_fragment_for
62
- assert_equal "top=upside/v", b.url_fragment_for('v')
63
-
64
- assert_equal nil, j.local_fragment
65
- assert_equal "top=upside/bottom=downside", j.url_fragment_for
66
- assert_equal "top=upside/bottom=downside/jerry", j.url_fragment_for('jerry')
67
- end
68
-
69
-
70
- def test_default_local_fragment
71
- assert_equal nil, mouse_mock.local_fragment
72
- end
73
-
74
-
75
- def test_responds_to_url_change_for
76
- m = mouse_mock do
77
- def eating; render :nothing => :true; end
78
- end
79
-
80
- assert ! m.responds_to_url_change_for?(""), "should return false by default"
81
- end
82
-
83
-
84
- def test_path
85
- w= cell(:my_test, :some, 'root')
86
- assert_equal w.path, 'root'
87
-
88
- w << a= cell(:my_test, :some, 'a')
89
-
90
- assert_equal a.path, 'root/a'
91
- end
92
-
93
-
94
- def test_find
95
- root = widget("apotomo/stateful_widget", :widget_content, 'root')
96
- root << a = widget("apotomo/stateful_widget", :widget_content, 'a')
97
- a << aa = widget("apotomo/stateful_widget", :widget_content, 'a')
98
-
99
- assert_equal a, root.find_by_id("a")
100
- assert_equal a, root.find_by_path("a")
101
- assert_equal a, root.find_by_path(:a)
102
- assert_equal aa, root.find_by_path("a a")
103
- end
104
-
105
- end
106
-
107
- class MyTestCell < Apotomo::StatefulWidget
108
-
109
-
110
- end
@@ -1,89 +0,0 @@
1
- require 'test_helper'
2
-
3
- ### DISCUSS: move some tests from PersistenceTest to this test file.
4
-
5
-
6
- class InterStateTest < ActionController::TestCase
7
- include Apotomo::UnitTestCase
8
-
9
- # do we really jump to the correct state?
10
- # and: are all state ivars remembered while jumping?
11
- def test_three_state_jumps
12
- w = StateJumpCell.new('x', :one)
13
- w.controller = @controller
14
-
15
- c = w.invoke # :one -> :two -> :three
16
-
17
- assert_state w, :three
18
- puts "brain dump:"
19
- puts w.brain.inspect
20
-
21
- assert w.brain.include?("@var")
22
- assert w.brain.include?("@one");
23
- assert_equal "three,one", c
24
- end
25
-
26
-
27
- def test_brain_reset_when_invoking_a_start_state
28
- w = StateJumpCell.new('x', :counter)
29
- w.controller = @controller
30
-
31
- assert_equal "1", w.invoke
32
- # another #invoke will flush brain:
33
- assert_equal "1", w.invoke
34
- end
35
-
36
- def test_brain_reset_when_jumping_to_a_start_state
37
- w = StateJumpCell.new('x', :counter)
38
- w.controller = @controller
39
- w.instance_eval do
40
- def back_to_start
41
- jump_to_state :counter # :counter is a start state.
42
- end
43
- end
44
-
45
- assert_equal "1", w.invoke
46
- # if using #jump_to_state there should be NO brain flush:
47
- assert_equal "2", w.invoke_state(:back_to_start)
48
- end
49
-
50
-
51
- def test_last_state
52
- w = StateJumpCell.new('x', :four)
53
- w.controller = @controller
54
- c = w.invoke
55
- assert_equal w.last_state, :four
56
- end
57
-
58
- end
59
-
60
-
61
- class StateJumpCell < Apotomo::StatefulWidget
62
- attr_reader :brain
63
- def one
64
- @var = "one"
65
- @one = "one"
66
- jump_to_state :two
67
- end
68
-
69
- def two
70
- @var = "two"
71
- jump_to_state :three
72
- end
73
-
74
- def three
75
- @var = "three"
76
- render :text => "#{@var},#{@one}"
77
- end
78
-
79
- def four
80
- render :text => ""
81
- end
82
-
83
- def counter
84
- @counter ||= 0
85
- @counter += 1
86
- render :text => @counter.to_s
87
- end
88
-
89
- end
@@ -1,71 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TabPanelTest < Test::Unit::TestCase
4
- include Apotomo::UnitTestCase
5
-
6
- def test_responds_to_url_change_for?
7
- fragment = Apotomo::DeepLinkMethods::UrlFragment
8
-
9
- w = tab_panel('mice', :is_url_listener => true)
10
- w.current_child_id = 'jerry'
11
-
12
- assert ! w.responds_to_url_change_for?(fragment.new ""), "shouldn't respond to emtpy url"
13
- assert ! w.responds_to_url_change_for?(fragment.new "cats=tom"), "shouldn't respond to foreign url"
14
- assert ! w.responds_to_url_change_for?(fragment.new "mice=jerry")
15
- assert ! w.responds_to_url_change_for?(fragment.new "mice="), "shouldn't respond to invalid url"
16
- assert w.responds_to_url_change_for?(fragment.new "mice=berry")
17
- end
18
-
19
- def test_local_fragment
20
- w = tab_panel('mice')
21
- w.current_child_id = 'jerry'
22
-
23
- assert_equal "mice=jerry", w.local_fragment
24
- end
25
-
26
- def test_find_current_child_from_query
27
- w = tab_panel('mice')
28
- w << tab('jerry')
29
- w << tab('berry')
30
- w << tab('micky')
31
-
32
- w.controller = controller
33
-
34
-
35
- # default child:
36
- assert_equal 'jerry', w.find_current_child.name
37
- ### FIXME: i hate the usage of global parameters:
38
- controller.params = {'mice' => 'micky', :deep_link => 'mice=berry'}
39
-
40
- assert_equal 'micky', w.find_current_child.name, "didn't process the query string ?mice=micky"
41
- end
42
-
43
- def test_find_current_child_from_fragment
44
- w = tab_panel('mice', :is_url_listener => true)
45
- w << tab('jerry')
46
- w << tab('berry')
47
- w << tab('micky')
48
-
49
- w.controller = controller
50
-
51
- ### FIXME: i hate the usage of global parameters:
52
- controller.params = {'mice' => 'micky', :deep_link => 'mice=berry'}
53
-
54
- assert_equal 'berry', w.find_current_child.name, "didn't process the url fragment 'mice=berry'"
55
- end
56
-
57
- def test_url_fragment_for_tab
58
- w = tab_panel('mice', :is_url_listener => true)
59
- w << j= tab('jerry')
60
- j << c= tab_panel('jerrys_kids', :is_url_listener => true)
61
- c << r= tab('jerry_jr')
62
- w << b= tab('berry')
63
-
64
- w.current_child_id = 'jerry'
65
-
66
- assert_equal "mice=berry", w.url_fragment_for_tab(b)
67
- assert_equal "mice=jerry", w.url_fragment_for_tab(j)
68
-
69
- assert_equal "mice=jerry/jerrys_kids=jerry_jr", c.url_fragment_for_tab(r)
70
- end
71
- end
@@ -1,34 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TransitionTest < Test::Unit::TestCase
4
- context "Calling #next_state_for" do
5
- setup do
6
- @mum = Object.new
7
- @mum.class.instance_eval do
8
- include Apotomo::Transition
9
- end
10
- end
11
-
12
- should "return nil when no transition is defined" do
13
- assert_not @mum.send(:next_state_for, :snuggle)
14
- end
15
-
16
- should "return the defined next state" do
17
- @mum.class.instance_eval do
18
- transition :from => :snuggle, :to => :sleep
19
- end
20
-
21
- assert_equal :sleep, @mum.send(:next_state_for, :snuggle)
22
- assert_equal :sleep, @mum.send(:next_state_for, "snuggle")
23
- end
24
-
25
- should "return the state that was defined last" do
26
- @mum.class.instance_eval do
27
- transition :from => :snuggle, :to => :sleep
28
- transition :from => :snuggle, :to => :snore
29
- end
30
-
31
- assert_equal :snore, @mum.send(:next_state_for, :snuggle)
32
- end
33
- end
34
- end