apotomo 1.0.5 → 1.1.0.rc1

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 (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