cells 3.4.2 → 3.4.3

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 (64) hide show
  1. data/CHANGES.textile +7 -0
  2. data/README.rdoc +17 -1
  3. data/Rakefile +2 -1
  4. data/lib/cell.rb +3 -1
  5. data/lib/cells.rb +3 -7
  6. data/lib/{tasks.rake → cells/cells.rake} +3 -1
  7. data/lib/cells/rails.rb +19 -29
  8. data/lib/cells/version.rb +1 -1
  9. data/test/app/cells/bad_guitarist/_dii.html.erb +1 -0
  10. data/test/app/cells/bassist/_dii.html.erb +1 -0
  11. data/test/app/cells/bassist/ahem.html.erb +1 -0
  12. data/test/app/cells/bassist/compose.html.erb +1 -0
  13. data/test/app/cells/bassist/contact_form.html.erb +1 -0
  14. data/test/app/cells/bassist/jam.html.erb +3 -0
  15. data/test/app/cells/bassist/play.html.erb +1 -0
  16. data/test/app/cells/bassist/play.js.erb +0 -0
  17. data/test/app/cells/bassist/pose.html.erb +1 -0
  18. data/test/app/cells/bassist/promote.html.erb +1 -0
  19. data/test/app/cells/bassist/provoke.html.erb +1 -0
  20. data/test/app/cells/bassist/sing.html.haml +1 -0
  21. data/test/app/cells/bassist/slap.html.erb +1 -0
  22. data/test/app/cells/bassist/yell.en.html.erb +1 -0
  23. data/test/app/cells/layouts/b.erb +1 -0
  24. data/test/app/cells/layouts/metal.html.erb +1 -0
  25. data/test/app/cells/producer/capture.html.erb +1 -0
  26. data/test/app/cells/producer/content_for.html.erb +2 -0
  27. data/test/cell_module_test.rb +17 -2
  28. data/test/dummy/Rakefile +7 -0
  29. data/test/dummy/app/controllers/musician_controller.rb +14 -3
  30. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  31. data/test/dummy/app/views/musician/featured.html.erb +1 -0
  32. data/test/dummy/app/views/musician/featured_with_block.html.erb +4 -0
  33. data/test/dummy/app/views/musician/hamlet.html.haml +1 -0
  34. data/test/dummy/config.ru +4 -0
  35. data/test/dummy/config/database.yml +22 -0
  36. data/test/dummy/config/locales/en.yml +5 -0
  37. data/test/dummy/db/test.sqlite3 +0 -0
  38. data/test/dummy/public/404.html +26 -0
  39. data/test/dummy/public/422.html +26 -0
  40. data/test/dummy/public/500.html +26 -0
  41. data/test/dummy/public/favicon.ico +0 -0
  42. data/test/dummy/public/javascripts/application.js +2 -0
  43. data/test/dummy/public/javascripts/controls.js +965 -0
  44. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  45. data/test/dummy/public/javascripts/effects.js +1123 -0
  46. data/test/dummy/public/javascripts/prototype.js +4874 -0
  47. data/test/dummy/public/javascripts/rails.js +118 -0
  48. data/test/dummy/script/rails +6 -0
  49. data/test/rails/integration_test.rb +11 -0
  50. data/test/rails/render_test.rb +0 -1
  51. metadata +81 -27
  52. data/CHANGES +0 -30
  53. data/Gemfile.lock +0 -77
  54. data/MIT-LICENSE +0 -22
  55. data/test/app/cells/test_cell.rb +0 -30
  56. data/test/app/helpers/application_helper.rb +0 -7
  57. data/test/app/helpers/helper_using_cell_helper.rb +0 -7
  58. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  59. data/test/dummy/config/initializers/inflections.rb +0 -10
  60. data/test/dummy/config/initializers/mime_types.rb +0 -5
  61. data/test/dummy/config/initializers/secret_token.rb +0 -7
  62. data/test/dummy/config/initializers/session_store.rb +0 -8
  63. data/test/dummy/tmp/app/cells/blog_cell.rb +0 -11
  64. data/test/dummy/tmp/test/cells/blog_cell_test.rb +0 -15
@@ -0,0 +1,118 @@
1
+ document.observe("dom:loaded", function() {
2
+ function handleRemote(element) {
3
+ var method, url, params;
4
+
5
+ if (element.tagName.toLowerCase() === 'form') {
6
+ method = element.readAttribute('method') || 'post';
7
+ url = element.readAttribute('action');
8
+ params = element.serialize(true);
9
+ } else {
10
+ method = element.readAttribute('data-method') || 'get';
11
+ url = element.readAttribute('href');
12
+ params = {};
13
+ }
14
+
15
+ var event = element.fire("ajax:before");
16
+ if (event.stopped) return false;
17
+
18
+ new Ajax.Request(url, {
19
+ method: method,
20
+ parameters: params,
21
+ asynchronous: true,
22
+ evalScripts: true,
23
+
24
+ onLoading: function(request) { element.fire("ajax:loading", {request: request}); },
25
+ onLoaded: function(request) { element.fire("ajax:loaded", {request: request}); },
26
+ onInteractive: function(request) { element.fire("ajax:interactive", {request: request}); },
27
+ onComplete: function(request) { element.fire("ajax:complete", {request: request}); },
28
+ onSuccess: function(request) { element.fire("ajax:success", {request: request}); },
29
+ onFailure: function(request) { element.fire("ajax:failure", {request: request}); }
30
+ });
31
+
32
+ element.fire("ajax:after");
33
+ }
34
+
35
+ function handleMethod(element) {
36
+ var method, url, token_name, token;
37
+
38
+ method = element.readAttribute('data-method');
39
+ url = element.readAttribute('href');
40
+ csrf_param = $$('meta[name=csrf-param]').first();
41
+ csrf_token = $$('meta[name=csrf-token]').first();
42
+
43
+ var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
44
+ element.parentNode.appendChild(form);
45
+
46
+ if (method != 'post') {
47
+ var field = new Element('input', { type: 'hidden', name: '_method', value: method });
48
+ form.appendChild(field);
49
+ }
50
+
51
+ if (csrf_param) {
52
+ var param = csrf_param.readAttribute('content');
53
+ var token = csrf_token.readAttribute('content');
54
+ var field = new Element('input', { type: 'hidden', name: param, value: token });
55
+ form.appendChild(field);
56
+ }
57
+
58
+ form.submit();
59
+ }
60
+
61
+ $(document.body).observe("click", function(event) {
62
+ var message = event.findElement().readAttribute('data-confirm');
63
+ if (message && !confirm(message)) {
64
+ event.stop();
65
+ return false;
66
+ }
67
+
68
+ var element = event.findElement("a[data-remote]");
69
+ if (element) {
70
+ handleRemote(element);
71
+ event.stop();
72
+ return true;
73
+ }
74
+
75
+ var element = event.findElement("a[data-method]");
76
+ if (element) {
77
+ handleMethod(element);
78
+ event.stop();
79
+ return true;
80
+ }
81
+ });
82
+
83
+ // TODO: I don't think submit bubbles in IE
84
+ $(document.body).observe("submit", function(event) {
85
+ var element = event.findElement(),
86
+ message = element.readAttribute('data-confirm');
87
+ if (message && !confirm(message)) {
88
+ event.stop();
89
+ return false;
90
+ }
91
+
92
+ var inputs = element.select("input[type=submit][data-disable-with]");
93
+ inputs.each(function(input) {
94
+ input.disabled = true;
95
+ input.writeAttribute('data-original-value', input.value);
96
+ input.value = input.readAttribute('data-disable-with');
97
+ });
98
+
99
+ var element = event.findElement("form[data-remote]");
100
+ if (element) {
101
+ handleRemote(element);
102
+ event.stop();
103
+ }
104
+ });
105
+
106
+ $(document.body).observe("ajax:after", function(event) {
107
+ var element = event.findElement();
108
+
109
+ if (element.tagName.toLowerCase() === 'form') {
110
+ var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
111
+ inputs.each(function(input) {
112
+ input.value = input.readAttribute('data-original-value');
113
+ input.writeAttribute('data-original-value', null);
114
+ input.disabled = false;
115
+ });
116
+ }
117
+ });
118
+ });
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -9,6 +9,12 @@ class RailsIntegrationTest < ActionController::TestCase
9
9
  assert_equal "That's me, naked <img alt=\"Me\" src=\"/images/me.png\" />", @response.body
10
10
  end
11
11
 
12
+ should "be able to pass a block to #render_cell" do
13
+ get 'promotion_with_block'
14
+ assert_equal "Doo", @response.body
15
+ assert_equal BassistCell, @controller.flag
16
+ end
17
+
12
18
  should "respond to render_cell in the view without escaping twice" do
13
19
  BassistCell.class_eval do
14
20
  def provoke; render; end
@@ -17,6 +23,11 @@ class RailsIntegrationTest < ActionController::TestCase
17
23
  assert_equal "That's me, naked <img alt=\"Me\" src=\"/images/me.png\" />", @response.body
18
24
  end
19
25
 
26
+ should "respond to render_cell with a block in the view" do
27
+ get 'featured_with_block'
28
+ assert_equal "Doo from BassistCell\n", @response.body
29
+ end
30
+
20
31
  should "respond to render_cell in a haml view" do
21
32
  BassistCell.class_eval do
22
33
  def provoke; render; end
@@ -1,5 +1,4 @@
1
1
  require 'test_helper'
2
- require 'builder'
3
2
 
4
3
  class RailsRenderTest < ActiveSupport::TestCase
5
4
  include Cell::TestCase::TestMethods
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 3
7
7
  - 4
8
- - 2
9
- version: 3.4.2
8
+ - 3
9
+ version: 3.4.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Nick Sutterer
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-11 00:00:00 +02:00
17
+ date: 2010-12-13 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -27,10 +27,8 @@ extensions: []
27
27
  extra_rdoc_files:
28
28
  - README.rdoc
29
29
  files:
30
- - CHANGES
30
+ - CHANGES.textile
31
31
  - Gemfile
32
- - Gemfile.lock
33
- - MIT-LICENSE
34
32
  - README.rdoc
35
33
  - Rakefile
36
34
  - lib/cell.rb
@@ -39,6 +37,7 @@ files:
39
37
  - lib/cell/rails.rb
40
38
  - lib/cell/test_case.rb
41
39
  - lib/cells.rb
40
+ - lib/cells/cells.rake
42
41
  - lib/cells/helpers.rb
43
42
  - lib/cells/helpers/capture_helper.rb
44
43
  - lib/cells/rails.rb
@@ -49,7 +48,6 @@ files:
49
48
  - lib/generators/cells/templates/cell_test.rb
50
49
  - lib/generators/cells/templates/view.erb
51
50
  - lib/generators/cells/templates/view.haml
52
- - lib/tasks.rake
53
51
  - test/active_helper_test.rb
54
52
  - test/rails/router_test.rb
55
53
  - test/rails/view_test.rb
@@ -61,30 +59,58 @@ files:
61
59
  - test/cell_generator_test.rb
62
60
  - test/test_helper.rb
63
61
  - test/dummy/config/application.rb
64
- - test/dummy/config/initializers/session_store.rb
65
- - test/dummy/config/initializers/mime_types.rb
66
- - test/dummy/config/initializers/secret_token.rb
67
- - test/dummy/config/initializers/inflections.rb
68
- - test/dummy/config/initializers/backtrace_silencers.rb
62
+ - test/dummy/config/locales/en.yml
69
63
  - test/dummy/config/routes.rb
70
64
  - test/dummy/config/boot.rb
71
65
  - test/dummy/config/environment.rb
72
66
  - test/dummy/config/environments/production.rb
73
67
  - test/dummy/config/environments/test.rb
74
68
  - test/dummy/config/environments/development.rb
75
- - test/dummy/tmp/test/cells/blog_cell_test.rb
76
- - test/dummy/tmp/app/cells/blog_cell.rb
69
+ - test/dummy/config/database.yml
70
+ - test/dummy/script/rails
71
+ - test/dummy/config.ru
72
+ - test/dummy/db/test.sqlite3
73
+ - test/dummy/Rakefile
74
+ - test/dummy/public/422.html
75
+ - test/dummy/public/favicon.ico
76
+ - test/dummy/public/500.html
77
+ - test/dummy/public/404.html
78
+ - test/dummy/public/javascripts/controls.js
79
+ - test/dummy/public/javascripts/application.js
80
+ - test/dummy/public/javascripts/rails.js
81
+ - test/dummy/public/javascripts/dragdrop.js
82
+ - test/dummy/public/javascripts/prototype.js
83
+ - test/dummy/public/javascripts/effects.js
77
84
  - test/dummy/app/controllers/musician_controller.rb
78
85
  - test/dummy/app/controllers/application_controller.rb
86
+ - test/dummy/app/views/layouts/application.html.erb
87
+ - test/dummy/app/views/musician/featured_with_block.html.erb
88
+ - test/dummy/app/views/musician/hamlet.html.haml
89
+ - test/dummy/app/views/musician/featured.html.erb
79
90
  - test/dummy/app/helpers/application_helper.rb
80
91
  - test/test_case_test.rb
81
92
  - test/helper_test.rb
82
93
  - test/cell_module_test.rb
94
+ - test/app/cells/layouts/metal.html.erb
95
+ - test/app/cells/layouts/b.erb
83
96
  - test/app/cells/bassist_cell.rb
84
- - test/app/cells/test_cell.rb
97
+ - test/app/cells/producer/capture.html.erb
98
+ - test/app/cells/producer/content_for.html.erb
99
+ - test/app/cells/bad_guitarist/_dii.html.erb
85
100
  - test/app/cells/bad_guitarist_cell.rb
86
- - test/app/helpers/application_helper.rb
87
- - test/app/helpers/helper_using_cell_helper.rb
101
+ - test/app/cells/bassist/contact_form.html.erb
102
+ - test/app/cells/bassist/slap.html.erb
103
+ - test/app/cells/bassist/play.html.erb
104
+ - test/app/cells/bassist/play.js.erb
105
+ - test/app/cells/bassist/sing.html.haml
106
+ - test/app/cells/bassist/jam.html.erb
107
+ - test/app/cells/bassist/ahem.html.erb
108
+ - test/app/cells/bassist/provoke.html.erb
109
+ - test/app/cells/bassist/pose.html.erb
110
+ - test/app/cells/bassist/promote.html.erb
111
+ - test/app/cells/bassist/compose.html.erb
112
+ - test/app/cells/bassist/_dii.html.erb
113
+ - test/app/cells/bassist/yell.en.html.erb
88
114
  has_rdoc: true
89
115
  homepage: http://cells.rubyforge.org
90
116
  licenses: []
@@ -129,27 +155,55 @@ test_files:
129
155
  - test/cell_generator_test.rb
130
156
  - test/test_helper.rb
131
157
  - test/dummy/config/application.rb
132
- - test/dummy/config/initializers/session_store.rb
133
- - test/dummy/config/initializers/mime_types.rb
134
- - test/dummy/config/initializers/secret_token.rb
135
- - test/dummy/config/initializers/inflections.rb
136
- - test/dummy/config/initializers/backtrace_silencers.rb
158
+ - test/dummy/config/locales/en.yml
137
159
  - test/dummy/config/routes.rb
138
160
  - test/dummy/config/boot.rb
139
161
  - test/dummy/config/environment.rb
140
162
  - test/dummy/config/environments/production.rb
141
163
  - test/dummy/config/environments/test.rb
142
164
  - test/dummy/config/environments/development.rb
143
- - test/dummy/tmp/test/cells/blog_cell_test.rb
144
- - test/dummy/tmp/app/cells/blog_cell.rb
165
+ - test/dummy/config/database.yml
166
+ - test/dummy/script/rails
167
+ - test/dummy/config.ru
168
+ - test/dummy/db/test.sqlite3
169
+ - test/dummy/Rakefile
170
+ - test/dummy/public/422.html
171
+ - test/dummy/public/favicon.ico
172
+ - test/dummy/public/500.html
173
+ - test/dummy/public/404.html
174
+ - test/dummy/public/javascripts/controls.js
175
+ - test/dummy/public/javascripts/application.js
176
+ - test/dummy/public/javascripts/rails.js
177
+ - test/dummy/public/javascripts/dragdrop.js
178
+ - test/dummy/public/javascripts/prototype.js
179
+ - test/dummy/public/javascripts/effects.js
145
180
  - test/dummy/app/controllers/musician_controller.rb
146
181
  - test/dummy/app/controllers/application_controller.rb
182
+ - test/dummy/app/views/layouts/application.html.erb
183
+ - test/dummy/app/views/musician/featured_with_block.html.erb
184
+ - test/dummy/app/views/musician/hamlet.html.haml
185
+ - test/dummy/app/views/musician/featured.html.erb
147
186
  - test/dummy/app/helpers/application_helper.rb
148
187
  - test/test_case_test.rb
149
188
  - test/helper_test.rb
150
189
  - test/cell_module_test.rb
190
+ - test/app/cells/layouts/metal.html.erb
191
+ - test/app/cells/layouts/b.erb
151
192
  - test/app/cells/bassist_cell.rb
152
- - test/app/cells/test_cell.rb
193
+ - test/app/cells/producer/capture.html.erb
194
+ - test/app/cells/producer/content_for.html.erb
195
+ - test/app/cells/bad_guitarist/_dii.html.erb
153
196
  - test/app/cells/bad_guitarist_cell.rb
154
- - test/app/helpers/application_helper.rb
155
- - test/app/helpers/helper_using_cell_helper.rb
197
+ - test/app/cells/bassist/contact_form.html.erb
198
+ - test/app/cells/bassist/slap.html.erb
199
+ - test/app/cells/bassist/play.html.erb
200
+ - test/app/cells/bassist/play.js.erb
201
+ - test/app/cells/bassist/sing.html.haml
202
+ - test/app/cells/bassist/jam.html.erb
203
+ - test/app/cells/bassist/ahem.html.erb
204
+ - test/app/cells/bassist/provoke.html.erb
205
+ - test/app/cells/bassist/pose.html.erb
206
+ - test/app/cells/bassist/promote.html.erb
207
+ - test/app/cells/bassist/compose.html.erb
208
+ - test/app/cells/bassist/_dii.html.erb
209
+ - test/app/cells/bassist/yell.en.html.erb
data/CHANGES DELETED
@@ -1,30 +0,0 @@
1
- - 2.3
2
- * ::Cell::Base#new(controller, opts={})
3
- We got rid of the second argument cell_name, since it was completely useless.
4
- * when a state view couldn't be found there's no longer a warning message, but an exception.
5
- * moved ::Cell::Base to lib/cell/base.rb
6
- * moved Rails extension code to lib/rails_extensions.rb
7
- * removed all the boot code since we don't need it anymore
8
-
9
-
10
- - trunk
11
- * Remove dependency on Engines
12
- * Improved support for helpers
13
-
14
- - cells-1.0
15
- * view rendering rewritten, we now use a separate ActionView::Base instance
16
- that fixes bug #1
17
- * introduced view inheritance, so derived cells inherit view files from their
18
- superclass
19
- * introduced automatic view file finding, ::Cell::Base#path is no longer needed
20
- * added support for helpers in cell views
21
- * removed Cell::Registry in favor or a new cells autoloading mechanism
22
-
23
- - zells-0.1
24
- * partly fixed bug #1 where cell instance variables could not be accessed
25
- when calling #render_cell under special circumstances
26
- * added lots of tests
27
- * tests use #assert_select now
28
-
29
- - zells-0.1-rc1
30
- * first release into an unsuspecting world
@@ -1,77 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- abstract (1.0.0)
5
- actionmailer (3.0.0)
6
- actionpack (= 3.0.0)
7
- mail (~> 2.2.5)
8
- actionpack (3.0.0)
9
- activemodel (= 3.0.0)
10
- activesupport (= 3.0.0)
11
- builder (~> 2.1.2)
12
- erubis (~> 2.6.6)
13
- i18n (~> 0.4.1)
14
- rack (~> 1.2.1)
15
- rack-mount (~> 0.6.12)
16
- rack-test (~> 0.5.4)
17
- tzinfo (~> 0.3.23)
18
- activemodel (3.0.0)
19
- activesupport (= 3.0.0)
20
- builder (~> 2.1.2)
21
- i18n (~> 0.4.1)
22
- activerecord (3.0.0)
23
- activemodel (= 3.0.0)
24
- activesupport (= 3.0.0)
25
- arel (~> 1.0.0)
26
- tzinfo (~> 0.3.23)
27
- activeresource (3.0.0)
28
- activemodel (= 3.0.0)
29
- activesupport (= 3.0.0)
30
- activesupport (3.0.0)
31
- arel (1.0.1)
32
- activesupport (~> 3.0.0)
33
- builder (2.1.2)
34
- erubis (2.6.6)
35
- abstract (>= 1.0.0)
36
- haml (3.0.21)
37
- i18n (0.4.1)
38
- mail (2.2.6.1)
39
- activesupport (>= 2.3.6)
40
- mime-types
41
- treetop (>= 1.4.5)
42
- mime-types (1.16)
43
- polyglot (0.3.1)
44
- rack (1.2.1)
45
- rack-mount (0.6.13)
46
- rack (>= 1.0.0)
47
- rack-test (0.5.6)
48
- rack (>= 1.0)
49
- rails (3.0.0)
50
- actionmailer (= 3.0.0)
51
- actionpack (= 3.0.0)
52
- activerecord (= 3.0.0)
53
- activeresource (= 3.0.0)
54
- activesupport (= 3.0.0)
55
- bundler (~> 1.0.0)
56
- railties (= 3.0.0)
57
- railties (3.0.0)
58
- actionpack (= 3.0.0)
59
- activesupport (= 3.0.0)
60
- rake (>= 0.8.4)
61
- thor (~> 0.14.0)
62
- rake (0.8.7)
63
- shoulda (2.11.3)
64
- sqlite3-ruby (1.2.5)
65
- thor (0.14.3)
66
- treetop (1.4.8)
67
- polyglot (>= 0.3.1)
68
- tzinfo (0.3.23)
69
-
70
- PLATFORMS
71
- ruby
72
-
73
- DEPENDENCIES
74
- haml
75
- rails (= 3.0.0)
76
- shoulda
77
- sqlite3-ruby (= 1.2.5)
@@ -1,22 +0,0 @@
1
- Copyright (c) 2007-2009 Nick Sutterer <apotonick@gmail.com>
2
- Copyright (c) 2007-2008 Solide ICT by Peter Bex <peter.bex@solide-ict.nl>
3
- and Bob Leers <bleers@fastmail.fm>
4
- Some portions and ideas stolen ruthlessly from Ezra Zygmuntowicz <ezmobius@gmail.com>
5
-
6
- Permission is hereby granted, free of charge, to any person obtaining a copy
7
- of this software and associated documentation files (the "Software"), to deal
8
- in the Software without restriction, including without limitation the rights
9
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- copies of the Software, and to permit persons to whom the Software is
11
- furnished to do so, subject to the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be included in
14
- all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- THE SOFTWARE.