backlog 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. data/History.txt +10 -0
  2. data/Rakefile +2 -1
  3. data/app/controllers/application.rb +55 -8
  4. data/app/controllers/groups_controller.rb +62 -0
  5. data/app/controllers/periods_controller.rb +13 -55
  6. data/app/controllers/tasks_controller.rb +9 -5
  7. data/app/controllers/works_controller.rb +43 -6
  8. data/app/helpers/application_helper.rb +20 -2
  9. data/app/helpers/groups_helper.rb +2 -0
  10. data/app/models/backlog.rb +19 -10
  11. data/app/models/estimate.rb +2 -1
  12. data/app/models/group.rb +11 -0
  13. data/app/models/party.rb +3 -0
  14. data/app/models/period.rb +43 -6
  15. data/app/models/task.rb +27 -14
  16. data/app/models/user.rb +37 -8
  17. data/app/models/work.rb +4 -6
  18. data/app/views/backlogs/_name_list.rhtml +5 -0
  19. data/app/views/backlogs/show.rhtml +4 -4
  20. data/app/views/groups/_form.rhtml +7 -0
  21. data/app/views/groups/edit.rhtml +31 -0
  22. data/app/views/groups/list.rhtml +27 -0
  23. data/app/views/groups/new.rhtml +8 -0
  24. data/app/views/layouts/wide.rhtml +2 -2
  25. data/app/views/periods/_burn_down_chart.rhtml +1 -1
  26. data/app/views/periods/_form.rhtml +13 -9
  27. data/app/views/periods/_show_active.rhtml +6 -12
  28. data/app/views/periods/_title.rhtml +4 -5
  29. data/app/views/periods/edit.rhtml +1 -1
  30. data/app/views/periods/new.rhtml +1 -1
  31. data/app/views/periods/show.rhtml +10 -6
  32. data/app/views/tasks/_backlog_header.rhtml +22 -0
  33. data/app/views/tasks/_description_list.rhtml +5 -0
  34. data/app/views/tasks/_form.rhtml +26 -7
  35. data/app/views/tasks/_task.rhtml +4 -4
  36. data/app/views/tasks/edit.rhtml +2 -3
  37. data/app/views/tasks/list_started.rhtml +1 -0
  38. data/app/views/tasks/new.rhtml +2 -2
  39. data/app/views/works/_buttons.rhtml +3 -0
  40. data/app/views/works/_form.rhtml +15 -10
  41. data/app/views/works/daily_work_sheet.rhtml +30 -18
  42. data/app/views/works/edit.rhtml +4 -4
  43. data/app/views/works/list.rhtml +2 -2
  44. data/app/views/works/new.rhtml +3 -2
  45. data/app/views/works/weekly_work_sheet.rhtml +2 -2
  46. data/bin/backlog +2 -0
  47. data/bin/backlog_init.d_kubosch_production +27 -0
  48. data/bin/copy_production2development.rb +33 -0
  49. data/config/database.yml +13 -7
  50. data/config/deploy_kubosch.rb +1 -0
  51. data/config/environment.rb +2 -0
  52. data/config/environments/development_mysql.rb +27 -0
  53. data/config/environments/kubosch_production_mysql.rb +21 -0
  54. data/config/routes.rb +1 -1
  55. data/db/migrate/{001_tasks.rb → 001_create_tasks.rb} +1 -1
  56. data/db/migrate/{002_backlogs.rb → 002_create_backlogs.rb} +2 -2
  57. data/db/migrate/003_add_estimation_points.rb +1 -1
  58. data/db/migrate/004_add_period.rb +2 -2
  59. data/db/migrate/013_create_estimates.rb +1 -1
  60. data/db/migrate/015_add_user_option.rb +9 -5
  61. data/db/migrate/017_insert_datek_projects.rb +13 -10
  62. data/db/migrate/018_create_groups.rb +115 -0
  63. data/db/schema.rb +72 -12
  64. data/lang/en.yaml +7 -0
  65. data/lang/no.yaml +7 -0
  66. data/lib/big_decimal_yaml_fix.rb +27 -0
  67. data/lib/class_table_inheritance.rb +163 -0
  68. data/lib/tasks/backup.rake +92 -0
  69. data/public/images/person.org.png +0 -0
  70. data/public/images/person.png +0 -0
  71. data/public/stylesheets/backlog.css +3 -1
  72. data/public/stylesheets/mwrt002.css +1 -1
  73. data/test/fixtures/groups.yml +6 -0
  74. data/test/fixtures/parties.yml +31 -0
  75. data/test/fixtures/periods.yml +2 -2
  76. data/test/fixtures/tasks.yml +2 -0
  77. data/test/fixtures/users.yml +6 -6
  78. data/test/functional/backlogs_controller_test.rb +1 -1
  79. data/test/functional/groups_controller_test.rb +120 -0
  80. data/test/functional/periods_controller_test.rb +1 -1
  81. data/test/functional/tasks_controller_test.rb +16 -1
  82. data/test/functional/user_controller_test.rb +8 -2
  83. data/test/test_helper.rb +5 -0
  84. data/test/unit/big_decimal_yaml_fix_test.rb +14 -0
  85. data/test/unit/estimate_test.rb +1 -1
  86. data/test/unit/group_test.rb +10 -0
  87. data/test/unit/user_test.rb +56 -44
  88. data/tmp/sessions/ruby_sess.22dec3e9df47fb4e +0 -0
  89. data/tmp/sessions/ruby_sess.8037e0ab58cbcf1a +0 -0
  90. data/vendor/plugins/activerecord_foreign_key_extensions/lib/active_record_extensions.rb +35 -0
  91. data/vendor/rails/actionmailer/test/fixtures/test_mailer/implicitly_multipart_example.rhtml.bak +1 -0
  92. data/vendor/rails/{actionwebservice/lib/action_web_service/templates/scaffolds/layout.rhtml → railties/configs/empty.log} +0 -0
  93. metadata +36 -105
  94. data/backlog.gemspec +0 -21
  95. data/vendor/rails/actionwebservice/CHANGELOG +0 -265
  96. data/vendor/rails/actionwebservice/MIT-LICENSE +0 -21
  97. data/vendor/rails/actionwebservice/README +0 -364
  98. data/vendor/rails/actionwebservice/Rakefile +0 -171
  99. data/vendor/rails/actionwebservice/TODO +0 -32
  100. data/vendor/rails/actionwebservice/examples/googlesearch/README +0 -143
  101. data/vendor/rails/actionwebservice/examples/googlesearch/autoloading/google_search_api.rb +0 -50
  102. data/vendor/rails/actionwebservice/examples/googlesearch/autoloading/google_search_controller.rb +0 -57
  103. data/vendor/rails/actionwebservice/examples/googlesearch/delegated/google_search_service.rb +0 -108
  104. data/vendor/rails/actionwebservice/examples/googlesearch/delegated/search_controller.rb +0 -7
  105. data/vendor/rails/actionwebservice/examples/googlesearch/direct/google_search_api.rb +0 -50
  106. data/vendor/rails/actionwebservice/examples/googlesearch/direct/search_controller.rb +0 -58
  107. data/vendor/rails/actionwebservice/examples/metaWeblog/README +0 -17
  108. data/vendor/rails/actionwebservice/examples/metaWeblog/apis/blogger_api.rb +0 -60
  109. data/vendor/rails/actionwebservice/examples/metaWeblog/apis/blogger_service.rb +0 -34
  110. data/vendor/rails/actionwebservice/examples/metaWeblog/apis/meta_weblog_api.rb +0 -67
  111. data/vendor/rails/actionwebservice/examples/metaWeblog/apis/meta_weblog_service.rb +0 -48
  112. data/vendor/rails/actionwebservice/examples/metaWeblog/controllers/xmlrpc_controller.rb +0 -16
  113. data/vendor/rails/actionwebservice/install.rb +0 -30
  114. data/vendor/rails/actionwebservice/lib/action_web_service.rb +0 -66
  115. data/vendor/rails/actionwebservice/lib/action_web_service/api.rb +0 -301
  116. data/vendor/rails/actionwebservice/lib/action_web_service/base.rb +0 -42
  117. data/vendor/rails/actionwebservice/lib/action_web_service/casting.rb +0 -138
  118. data/vendor/rails/actionwebservice/lib/action_web_service/client.rb +0 -3
  119. data/vendor/rails/actionwebservice/lib/action_web_service/client/base.rb +0 -28
  120. data/vendor/rails/actionwebservice/lib/action_web_service/client/soap_client.rb +0 -113
  121. data/vendor/rails/actionwebservice/lib/action_web_service/client/xmlrpc_client.rb +0 -58
  122. data/vendor/rails/actionwebservice/lib/action_web_service/container.rb +0 -3
  123. data/vendor/rails/actionwebservice/lib/action_web_service/container/action_controller_container.rb +0 -93
  124. data/vendor/rails/actionwebservice/lib/action_web_service/container/delegated_container.rb +0 -86
  125. data/vendor/rails/actionwebservice/lib/action_web_service/container/direct_container.rb +0 -69
  126. data/vendor/rails/actionwebservice/lib/action_web_service/dispatcher.rb +0 -2
  127. data/vendor/rails/actionwebservice/lib/action_web_service/dispatcher/abstract.rb +0 -207
  128. data/vendor/rails/actionwebservice/lib/action_web_service/dispatcher/action_controller_dispatcher.rb +0 -379
  129. data/vendor/rails/actionwebservice/lib/action_web_service/invocation.rb +0 -202
  130. data/vendor/rails/actionwebservice/lib/action_web_service/protocol.rb +0 -4
  131. data/vendor/rails/actionwebservice/lib/action_web_service/protocol/abstract.rb +0 -112
  132. data/vendor/rails/actionwebservice/lib/action_web_service/protocol/discovery.rb +0 -37
  133. data/vendor/rails/actionwebservice/lib/action_web_service/protocol/soap_protocol.rb +0 -176
  134. data/vendor/rails/actionwebservice/lib/action_web_service/protocol/soap_protocol/marshaler.rb +0 -235
  135. data/vendor/rails/actionwebservice/lib/action_web_service/protocol/xmlrpc_protocol.rb +0 -122
  136. data/vendor/rails/actionwebservice/lib/action_web_service/scaffolding.rb +0 -283
  137. data/vendor/rails/actionwebservice/lib/action_web_service/struct.rb +0 -68
  138. data/vendor/rails/actionwebservice/lib/action_web_service/support/class_inheritable_options.rb +0 -26
  139. data/vendor/rails/actionwebservice/lib/action_web_service/support/signature_types.rb +0 -226
  140. data/vendor/rails/actionwebservice/lib/action_web_service/templates/scaffolds/layout.erb +0 -65
  141. data/vendor/rails/actionwebservice/lib/action_web_service/templates/scaffolds/methods.erb +0 -6
  142. data/vendor/rails/actionwebservice/lib/action_web_service/templates/scaffolds/methods.rhtml +0 -0
  143. data/vendor/rails/actionwebservice/lib/action_web_service/templates/scaffolds/parameters.erb +0 -29
  144. data/vendor/rails/actionwebservice/lib/action_web_service/templates/scaffolds/parameters.rhtml +0 -0
  145. data/vendor/rails/actionwebservice/lib/action_web_service/templates/scaffolds/result.erb +0 -30
  146. data/vendor/rails/actionwebservice/lib/action_web_service/templates/scaffolds/result.rhtml +0 -0
  147. data/vendor/rails/actionwebservice/lib/action_web_service/test_invoke.rb +0 -110
  148. data/vendor/rails/actionwebservice/lib/action_web_service/version.rb +0 -9
  149. data/vendor/rails/actionwebservice/setup.rb +0 -1379
  150. data/vendor/rails/actionwebservice/test/abstract_client.rb +0 -183
  151. data/vendor/rails/actionwebservice/test/abstract_dispatcher.rb +0 -551
  152. data/vendor/rails/actionwebservice/test/abstract_unit.rb +0 -45
  153. data/vendor/rails/actionwebservice/test/api_test.rb +0 -102
  154. data/vendor/rails/actionwebservice/test/apis/auto_load_api.rb +0 -3
  155. data/vendor/rails/actionwebservice/test/apis/broken_auto_load_api.rb +0 -2
  156. data/vendor/rails/actionwebservice/test/base_test.rb +0 -42
  157. data/vendor/rails/actionwebservice/test/casting_test.rb +0 -86
  158. data/vendor/rails/actionwebservice/test/client_soap_test.rb +0 -153
  159. data/vendor/rails/actionwebservice/test/client_xmlrpc_test.rb +0 -152
  160. data/vendor/rails/actionwebservice/test/container_test.rb +0 -73
  161. data/vendor/rails/actionwebservice/test/dispatcher_action_controller_soap_test.rb +0 -137
  162. data/vendor/rails/actionwebservice/test/dispatcher_action_controller_xmlrpc_test.rb +0 -59
  163. data/vendor/rails/actionwebservice/test/fixtures/db_definitions/mysql.sql +0 -8
  164. data/vendor/rails/actionwebservice/test/fixtures/users.yml +0 -12
  165. data/vendor/rails/actionwebservice/test/gencov +0 -3
  166. data/vendor/rails/actionwebservice/test/invocation_test.rb +0 -185
  167. data/vendor/rails/actionwebservice/test/run +0 -6
  168. data/vendor/rails/actionwebservice/test/scaffolded_controller_test.rb +0 -146
  169. data/vendor/rails/actionwebservice/test/struct_test.rb +0 -52
  170. data/vendor/rails/actionwebservice/test/test_invoke_test.rb +0 -112
@@ -1,73 +0,0 @@
1
- require File.dirname(__FILE__) + '/abstract_unit'
2
-
3
- module ContainerTest
4
- $immediate_service = Object.new
5
- $deferred_service = Object.new
6
-
7
- class DelegateContainer < ActionController::Base
8
- web_service_dispatching_mode :delegated
9
-
10
- attr :flag
11
- attr :previous_flag
12
-
13
- def initialize
14
- @previous_flag = nil
15
- @flag = true
16
- end
17
-
18
- web_service :immediate_service, $immediate_service
19
- web_service(:deferred_service) { @previous_flag = @flag; @flag = false; $deferred_service }
20
- end
21
-
22
- class DirectContainer < ActionController::Base
23
- web_service_dispatching_mode :direct
24
- end
25
-
26
- class InvalidContainer
27
- include ActionWebService::Container::Direct
28
- end
29
- end
30
-
31
- class TC_Container < Test::Unit::TestCase
32
- include ContainerTest
33
-
34
- def setup
35
- @delegate_container = DelegateContainer.new
36
- @direct_container = DirectContainer.new
37
- end
38
-
39
- def test_registration
40
- assert(DelegateContainer.has_web_service?(:immediate_service))
41
- assert(DelegateContainer.has_web_service?(:deferred_service))
42
- assert(!DelegateContainer.has_web_service?(:fake_service))
43
- assert_raises(ActionWebService::Container::Delegated::ContainerError) do
44
- DelegateContainer.web_service('invalid')
45
- end
46
- end
47
-
48
- def test_service_object
49
- assert_raises(ActionWebService::Container::Delegated::ContainerError) do
50
- @delegate_container.web_service_object(:nonexistent)
51
- end
52
- assert(@delegate_container.flag == true)
53
- assert(@delegate_container.web_service_object(:immediate_service) == $immediate_service)
54
- assert(@delegate_container.previous_flag.nil?)
55
- assert(@delegate_container.flag == true)
56
- assert(@delegate_container.web_service_object(:deferred_service) == $deferred_service)
57
- assert(@delegate_container.previous_flag == true)
58
- assert(@delegate_container.flag == false)
59
- end
60
-
61
- def test_direct_container
62
- assert(DirectContainer.web_service_dispatching_mode == :direct)
63
- end
64
-
65
- def test_validity
66
- assert_raises(ActionWebService::Container::Direct::ContainerError) do
67
- InvalidContainer.web_service_api :test
68
- end
69
- assert_raises(ActionWebService::Container::Direct::ContainerError) do
70
- InvalidContainer.web_service_api 50.0
71
- end
72
- end
73
- end
@@ -1,137 +0,0 @@
1
- $:.unshift(File.dirname(__FILE__) + '/apis')
2
- require File.dirname(__FILE__) + '/abstract_dispatcher'
3
- require 'wsdl/parser'
4
-
5
- class ActionController::Base
6
- class << self
7
- alias :inherited_without_name_error :inherited
8
- def inherited(child)
9
- begin
10
- inherited_without_name_error(child)
11
- rescue NameError => e
12
- end
13
- end
14
- end
15
- end
16
-
17
- class AutoLoadController < ActionController::Base; end
18
- class FailingAutoLoadController < ActionController::Base; end
19
- class BrokenAutoLoadController < ActionController::Base; end
20
-
21
- class TC_DispatcherActionControllerSoap < Test::Unit::TestCase
22
- include DispatcherTest
23
- include DispatcherCommonTests
24
-
25
- def setup
26
- @direct_controller = DirectController.new
27
- @delegated_controller = DelegatedController.new
28
- @virtual_controller = VirtualController.new
29
- @layered_controller = LayeredController.new
30
- @protocol = ActionWebService::Protocol::Soap::SoapProtocol.create(@direct_controller)
31
- end
32
-
33
- def test_wsdl_generation
34
- ensure_valid_wsdl_generation DelegatedController.new, DispatcherTest::WsdlNamespace
35
- ensure_valid_wsdl_generation DirectController.new, DispatcherTest::WsdlNamespace
36
- end
37
-
38
- def test_wsdl_action
39
- delegated_types = ensure_valid_wsdl_action DelegatedController.new
40
- delegated_names = delegated_types.map{|x| x.name.name}
41
- assert(delegated_names.include?('DispatcherTest..NodeArray'))
42
- assert(delegated_names.include?('DispatcherTest..Node'))
43
- direct_types = ensure_valid_wsdl_action DirectController.new
44
- direct_names = direct_types.map{|x| x.name.name}
45
- assert(direct_names.include?('DispatcherTest..NodeArray'))
46
- assert(direct_names.include?('DispatcherTest..Node'))
47
- assert(direct_names.include?('IntegerArray'))
48
- end
49
-
50
- def test_autoloading
51
- assert(!AutoLoadController.web_service_api.nil?)
52
- assert(AutoLoadController.web_service_api.has_public_api_method?('Void'))
53
- assert(FailingAutoLoadController.web_service_api.nil?)
54
- assert_raises(MissingSourceFile) do
55
- FailingAutoLoadController.require_web_service_api :blah
56
- end
57
- assert_raises(ArgumentError) do
58
- FailingAutoLoadController.require_web_service_api 50.0
59
- end
60
- assert(BrokenAutoLoadController.web_service_api.nil?)
61
- end
62
-
63
- def test_layered_dispatching
64
- mt_cats = do_method_call(@layered_controller, 'mt.getCategories')
65
- assert_equal(["mtCat1", "mtCat2"], mt_cats)
66
- blogger_cats = do_method_call(@layered_controller, 'blogger.getCategories')
67
- assert_equal(["bloggerCat1", "bloggerCat2"], blogger_cats)
68
- end
69
-
70
- def test_utf8
71
- @direct_controller.web_service_exception_reporting = true
72
- $KCODE = 'u'
73
- assert_equal(Utf8String, do_method_call(@direct_controller, 'TestUtf8'))
74
- retval = SOAP::Processor.unmarshal(@response_body).body.response
75
- assert retval.is_a?(SOAP::SOAPString)
76
-
77
- # If $KCODE is not set to UTF-8, any strings with non-ASCII UTF-8 data
78
- # will be sent back as base64 by SOAP4R. By the time we get it here though,
79
- # it will be decoded back into a string. So lets read the base64 value
80
- # from the message body directly.
81
- $KCODE = 'NONE'
82
- do_method_call(@direct_controller, 'TestUtf8')
83
- retval = SOAP::Processor.unmarshal(@response_body).body.response
84
- assert retval.is_a?(SOAP::SOAPBase64)
85
- assert_equal "T25lIFdvcmxkIENhZsOp", retval.data.to_s
86
- end
87
-
88
- protected
89
- def exception_message(soap_fault_exception)
90
- soap_fault_exception.detail.cause.message
91
- end
92
-
93
- def is_exception?(obj)
94
- obj.respond_to?(:detail) && obj.detail.respond_to?(:cause) && \
95
- obj.detail.cause.is_a?(Exception)
96
- end
97
-
98
- def service_name(container)
99
- container.is_a?(DelegatedController) ? 'test_service' : 'api'
100
- end
101
-
102
- def ensure_valid_wsdl_generation(controller, expected_namespace)
103
- wsdl = controller.generate_wsdl
104
- ensure_valid_wsdl(controller, wsdl, expected_namespace)
105
- end
106
-
107
- def ensure_valid_wsdl(controller, wsdl, expected_namespace)
108
- definitions = WSDL::Parser.new.parse(wsdl)
109
- assert(definitions.is_a?(WSDL::Definitions))
110
- definitions.bindings.each do |binding|
111
- assert(binding.name.name.index(':').nil?)
112
- end
113
- definitions.services.each do |service|
114
- service.ports.each do |port|
115
- assert(port.name.name.index(':').nil?)
116
- end
117
- end
118
- types = definitions.collect_complextypes.map{|x| x.name}
119
- types.each do |type|
120
- assert(type.namespace == expected_namespace)
121
- end
122
- location = definitions.services[0].ports[0].soap_address.location
123
- if controller.is_a?(DelegatedController)
124
- assert_match %r{http://test.host/dispatcher_test/delegated/test_service$}, location
125
- elsif controller.is_a?(DirectController)
126
- assert_match %r{http://test.host/dispatcher_test/direct/api$}, location
127
- end
128
- definitions.collect_complextypes
129
- end
130
-
131
- def ensure_valid_wsdl_action(controller)
132
- test_request = ActionController::TestRequest.new({ 'action' => 'wsdl' })
133
- test_response = ActionController::TestResponse.new
134
- wsdl = controller.process(test_request, test_response).body
135
- ensure_valid_wsdl(controller, wsdl, DispatcherTest::WsdlNamespace)
136
- end
137
- end
@@ -1,59 +0,0 @@
1
- require File.dirname(__FILE__) + '/abstract_dispatcher'
2
-
3
- class TC_DispatcherActionControllerXmlRpc < Test::Unit::TestCase
4
- include DispatcherTest
5
- include DispatcherCommonTests
6
-
7
- def setup
8
- @direct_controller = DirectController.new
9
- @delegated_controller = DelegatedController.new
10
- @layered_controller = LayeredController.new
11
- @virtual_controller = VirtualController.new
12
- @protocol = ActionWebService::Protocol::XmlRpc::XmlRpcProtocol.create(@direct_controller)
13
- end
14
-
15
- def test_layered_dispatching
16
- mt_cats = do_method_call(@layered_controller, 'mt.getCategories')
17
- assert_equal(["mtCat1", "mtCat2"], mt_cats)
18
- blogger_cats = do_method_call(@layered_controller, 'blogger.getCategories')
19
- assert_equal(["bloggerCat1", "bloggerCat2"], blogger_cats)
20
- end
21
-
22
- def test_multicall
23
- response = do_method_call(@layered_controller, 'system.multicall', [
24
- {'methodName' => 'mt.getCategories'},
25
- {'methodName' => 'blogger.getCategories'},
26
- {'methodName' => 'mt.bool'},
27
- {'methodName' => 'blogger.str', 'params' => ['2000']},
28
- {'methodName' => 'mt.alwaysFail'},
29
- {'methodName' => 'blogger.alwaysFail'},
30
- {'methodName' => 'mt.blah'},
31
- {'methodName' => 'blah.blah'},
32
- {'methodName' => 'mt.person'}
33
- ])
34
- assert_equal [
35
- [["mtCat1", "mtCat2"]],
36
- [["bloggerCat1", "bloggerCat2"]],
37
- [true],
38
- ["2500"],
39
- {"faultCode" => 3, "faultString" => "MT AlwaysFail"},
40
- {"faultCode" => 3, "faultString" => "Blogger AlwaysFail"},
41
- {"faultCode" => 4, "faultMessage" => "no such method 'blah' on API DispatcherTest::MTAPI"},
42
- {"faultCode" => 4, "faultMessage" => "no such web service 'blah'"},
43
- [{"name"=>"person1", "id"=>1}]
44
- ], response
45
- end
46
-
47
- protected
48
- def exception_message(xmlrpc_fault_exception)
49
- xmlrpc_fault_exception.faultString
50
- end
51
-
52
- def is_exception?(obj)
53
- obj.is_a?(XMLRPC::FaultException)
54
- end
55
-
56
- def service_name(container)
57
- container.is_a?(DelegatedController) ? 'test_service' : 'api'
58
- end
59
- end
@@ -1,8 +0,0 @@
1
- CREATE TABLE `users` (
2
- `id` int(11) NOT NULL auto_increment,
3
- `name` varchar(30) default NULL,
4
- `active` tinyint(4) default NULL,
5
- `balance` decimal(5, 2) default NULL,
6
- `created_on` date default NULL,
7
- PRIMARY KEY (`id`)
8
- ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
@@ -1,12 +0,0 @@
1
- user1:
2
- id: 1
3
- name: Kent
4
- active: 1
5
- balance: 12.2
6
- created_on: <%= Date.today %>
7
- user2:
8
- id: 2
9
- name: David
10
- active: 1
11
- balance: 16.4
12
- created_on: <%= Date.today %>
@@ -1,3 +0,0 @@
1
- #!/bin/sh
2
-
3
- rcov -x '.*_test\.rb,rubygems,abstract_,/run,/apis' ./run
@@ -1,185 +0,0 @@
1
- require File.dirname(__FILE__) + '/abstract_unit'
2
-
3
- module InvocationTest
4
- class API < ActionWebService::API::Base
5
- api_method :add, :expects => [:int, :int], :returns => [:int]
6
- api_method :transmogrify, :expects_and_returns => [:string]
7
- api_method :fail_with_reason
8
- api_method :fail_generic
9
- api_method :no_before
10
- api_method :no_after
11
- api_method :only_one
12
- api_method :only_two
13
- end
14
-
15
- class Interceptor
16
- attr :args
17
-
18
- def initialize
19
- @args = nil
20
- end
21
-
22
- def intercept(*args)
23
- @args = args
24
- end
25
- end
26
-
27
- InterceptorClass = Interceptor.new
28
-
29
- class Service < ActionController::Base
30
- web_service_api API
31
-
32
- before_invocation :intercept_before, :except => [:no_before]
33
- after_invocation :intercept_after, :except => [:no_after]
34
- prepend_after_invocation :intercept_after_first, :except => [:no_after]
35
- prepend_before_invocation :intercept_only, :only => [:only_one, :only_two]
36
- after_invocation(:only => [:only_one]) do |*args|
37
- args[0].instance_variable_set('@block_invoked', args[1])
38
- end
39
- after_invocation InterceptorClass, :only => [:only_one]
40
-
41
- attr_accessor :before_invoked
42
- attr_accessor :after_invoked
43
- attr_accessor :after_first_invoked
44
- attr_accessor :only_invoked
45
- attr_accessor :block_invoked
46
- attr_accessor :invocation_result
47
-
48
- def initialize
49
- @before_invoked = nil
50
- @after_invoked = nil
51
- @after_first_invoked = nil
52
- @only_invoked = nil
53
- @invocation_result = nil
54
- @block_invoked = nil
55
- end
56
-
57
- def add(a, b)
58
- a + b
59
- end
60
-
61
- def transmogrify(str)
62
- str.upcase
63
- end
64
-
65
- def fail_with_reason
66
- end
67
-
68
- def fail_generic
69
- end
70
-
71
- def no_before
72
- 5
73
- end
74
-
75
- def no_after
76
- end
77
-
78
- def only_one
79
- end
80
-
81
- def only_two
82
- end
83
-
84
- protected
85
- def intercept_before(name, args)
86
- @before_invoked = name
87
- return [false, "permission denied"] if name == :fail_with_reason
88
- return false if name == :fail_generic
89
- end
90
-
91
- def intercept_after(name, args, result)
92
- @after_invoked = name
93
- @invocation_result = result
94
- end
95
-
96
- def intercept_after_first(name, args, result)
97
- @after_first_invoked = name
98
- end
99
-
100
- def intercept_only(name, args)
101
- raise "Interception error" unless name == :only_one || name == :only_two
102
- @only_invoked = name
103
- end
104
- end
105
- end
106
-
107
- class TC_Invocation < Test::Unit::TestCase
108
- include ActionWebService::Invocation
109
-
110
- def setup
111
- @service = InvocationTest::Service.new
112
- end
113
-
114
- def test_invocation
115
- assert(perform_invocation(:add, 5, 10) == 15)
116
- assert(perform_invocation(:transmogrify, "hello") == "HELLO")
117
- assert_raises(NoMethodError) do
118
- perform_invocation(:nonexistent_method_xyzzy)
119
- end
120
- end
121
-
122
- def test_interceptor_registration
123
- assert(InvocationTest::Service.before_invocation_interceptors.length == 2)
124
- assert(InvocationTest::Service.after_invocation_interceptors.length == 4)
125
- assert_equal(:intercept_only, InvocationTest::Service.before_invocation_interceptors[0])
126
- assert_equal(:intercept_after_first, InvocationTest::Service.after_invocation_interceptors[0])
127
- end
128
-
129
- def test_interception
130
- assert(@service.before_invoked.nil?)
131
- assert(@service.after_invoked.nil?)
132
- assert(@service.only_invoked.nil?)
133
- assert(@service.block_invoked.nil?)
134
- assert(@service.invocation_result.nil?)
135
- perform_invocation(:add, 20, 50)
136
- assert(@service.before_invoked == :add)
137
- assert(@service.after_invoked == :add)
138
- assert(@service.invocation_result == 70)
139
- end
140
-
141
- def test_interception_canceling
142
- reason = nil
143
- perform_invocation(:fail_with_reason){|r| reason = r}
144
- assert(@service.before_invoked == :fail_with_reason)
145
- assert(@service.after_invoked.nil?)
146
- assert(@service.invocation_result.nil?)
147
- assert(reason == "permission denied")
148
- reason = true
149
- @service.before_invoked = @service.after_invoked = @service.invocation_result = nil
150
- perform_invocation(:fail_generic){|r| reason = r}
151
- assert(@service.before_invoked == :fail_generic)
152
- assert(@service.after_invoked.nil?)
153
- assert(@service.invocation_result.nil?)
154
- assert(reason == true)
155
- end
156
-
157
- def test_interception_except_conditions
158
- perform_invocation(:no_before)
159
- assert(@service.before_invoked.nil?)
160
- assert(@service.after_first_invoked == :no_before)
161
- assert(@service.after_invoked == :no_before)
162
- assert(@service.invocation_result == 5)
163
- @service.before_invoked = @service.after_invoked = @service.invocation_result = nil
164
- perform_invocation(:no_after)
165
- assert(@service.before_invoked == :no_after)
166
- assert(@service.after_invoked.nil?)
167
- assert(@service.invocation_result.nil?)
168
- end
169
-
170
- def test_interception_only_conditions
171
- assert(@service.only_invoked.nil?)
172
- perform_invocation(:only_one)
173
- assert(@service.only_invoked == :only_one)
174
- assert(@service.block_invoked == :only_one)
175
- assert(InvocationTest::InterceptorClass.args[1] == :only_one)
176
- @service.only_invoked = nil
177
- perform_invocation(:only_two)
178
- assert(@service.only_invoked == :only_two)
179
- end
180
-
181
- private
182
- def perform_invocation(method_name, *args, &block)
183
- @service.perform_invocation(method_name, args, &block)
184
- end
185
- end