cells 3.4.2 → 3.4.3

Sign up to get free protection for your applications and to get access to all the features.
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.