glimmer 0.10.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4fbfd6caf79d10dbaeb2d737d68a8f028819d6172f45a8b494d1a88c34e3e04b
4
- data.tar.gz: 9fcbc6d1948ced1b67192aeb22a25420b9a165930bc084e30534141c2f65a1fb
3
+ metadata.gz: 7b0649c15df47ea25dfacee159d334e1ba296468477d9e46229fbb99d73725e4
4
+ data.tar.gz: 52b2d756a2d8c24cc2fa1f6072a4084d87d8c08198183159ef31ddb5b105634d
5
5
  SHA512:
6
- metadata.gz: b5809d0f9a9ae9536dfaf0ff74612c44a74df732d3ea7db7a8102aec6e434373104f9fba13a1aa3c1109faad754cfa390c3ac57bbd5de379f31441d9d61357d0
7
- data.tar.gz: 4d5d53bd6881b462b2aa2ca36ddcd2e41ab61862f5162e0a888288596609271fb5e8e3130a9c99647d7226ed1373ee1b2a6477d8e5660ec13bbb615f5a853b72
6
+ metadata.gz: 697d512b1ed187adf8a385fbaf6b7b5f21ae9a96a2896f08e3a718839adc0af0c6fac93aa2fb2ecc5f6c84e898b6e3ce1caf264e2b095d6de71a1a3ed96699c3
7
+ data.tar.gz: b9a8fb00ada502c70b4b9d6401596807ad2a881b6926b9150c6f29ca7f687e1eee824f88ee1fb99dae845e338d2a92fdde0c388ec8366a83e724efe6a4d20b45
@@ -0,0 +1,361 @@
1
+ # Change Log
2
+
3
+ Related Change Logs:
4
+ - [glimmer-dsl-swt/CHANGELOG.md](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/CHANGELOG.md)
5
+
6
+ ## 1.0.0
7
+
8
+ - Code/Documentation preparation for version 1.0.0
9
+
10
+ ## 0.10.4
11
+
12
+ - Support Glimmer::Config.log_excluded_keywords option for whether or not to log keywords that are excluded by Glimmer::Config.excluded_keyword_checkers
13
+
14
+ ## 0.10.3
15
+
16
+ - Made Glimmer::Config module more resilient to invalid logger level values set via GLIMMER_LOGGER_LEVEL env var
17
+
18
+ ## 0.10.2
19
+
20
+ - Added observer notification support for all Array mutation methods in ObservableArray (e.g. `delete_if`, `select!`, `uniq!`, `collect!`, etc...)
21
+
22
+ ## 0.10.1
23
+
24
+ - excluded_keyword_checkers option for filtering certain keywords from Glimmer DSL processing
25
+ - Updates to logging levels to be more appropriate
26
+ - Fixed an issue to avoid crashing when calling observer.unregister/unobserve on a non-observable
27
+
28
+ ## 0.10.0
29
+
30
+ - Remove Glimmer::Config.enable_logging method
31
+ - Refactor Glimmer config logger and reset level to error
32
+ - Update all logger calls to lazy blocks
33
+
34
+ ## 0.9.5
35
+
36
+ - Removed resetting of DSL Engine upon encountering an exception as it is not needed and sometimes causes the wrong behavior
37
+
38
+ ## 0.9.4
39
+
40
+ - Fix issue with observing attributes on classes directly instead of their objects
41
+
42
+ ## 0.9.3
43
+
44
+ - Add infinite loop detection support to avoid infinite loops (breaks after 100 repetitions)
45
+ - Add Glimmer::Config option to specify loop max limit or disable completely
46
+ - ExcludedKeywordError with no logging for excluded keywords such as `to_a` and `to_h`
47
+
48
+ ## 0.9.2
49
+
50
+ - Extracted common model data-binding classes from glimmer-dsl-swt
51
+
52
+ ## 0.9.1
53
+
54
+ - Display error message if Glimmer DSL was invoked without any configured DSLs
55
+
56
+ ## 0.9.0
57
+
58
+ - Extracted Glimmer DSL for SWT into glimmer-dsl-swt gem
59
+ - Extracted Glimmer DSL for XML into glimmer-dsl-xml gem
60
+ - Extracted Glimmer DSL for CSS into glimmer-dsl-css gem
61
+ - Introduced Glimmer DSL for Opal in glimmer-dsl-swt gem
62
+
63
+ ## 0.8.2
64
+
65
+ - `message_box` DSL keyword
66
+ - Table single/multi selection databinding
67
+ - Table cell editing databinding
68
+ - Enhance table listener events with table_item and column_index methods
69
+ - Fix `Glimmer::SWT::ShellProxy#pack_same_size` for Linux
70
+
71
+ ## 0.8.1
72
+
73
+ - Fix Glimmer::SWT::ShellProxy#pack_same_size for Windows
74
+
75
+ ## 0.8.0
76
+
77
+ - Delegate listeners for menu items (:cascade) encapsulated by menus (dropdown menus)
78
+ - Make custom widget option method receive "default: hash key" instead of 2nd argument (adjusting scaffolding accordingly)
79
+ - Move about/preferences menu listeners from ShellProxy to DisplayProxy where they truly belong (adjusting scaffolding accordingly)
80
+
81
+ ## 0.7.8
82
+
83
+ - Fix verbiage for summary/description in scaffolding custom shell gems (change custom widget reference to custom shell)
84
+ - Scaffolding builds a proper binary for custom shell gems and includes it in executables in Rakefile
85
+ - Scaffolding adds about/preferences menu actions to apps/custom-shell-gems
86
+ - Make custom widget/shell options writable
87
+ - Support "dialog" Glimmer DSL keyword
88
+
89
+ ## 0.7.7
90
+
91
+ - Fix issue with scaffolding apps with dash in their name
92
+ - Make scaffolded custom shells launchable as standalone apps (native executables) too
93
+
94
+ ## 0.7.6
95
+
96
+ - Support text widget selection data-binding explicitly
97
+ - Make specs pass on Linux
98
+ - Maintain tree item expansion on data-binding related changes
99
+ - Make scaffolded apps launch from bin file not app file
100
+
101
+ ## 0.7.5
102
+
103
+ - Make :virtual a default tree SWT style
104
+ - Support Tree selection databinding (just like List)
105
+ - Support built-in Tree editing (i.e. editing tree item text)
106
+ - Support unregistering widget listeners
107
+ - Added tab item proxy dispose method that automatically unsets/disposes tab item inner control before disposing tab item itself
108
+
109
+ ## 0.7.4
110
+
111
+ - Have tree data-binding auto-embed models as tree item data
112
+ - TreeProxy#depth_first_search implementation
113
+ - Support read-only data-binding
114
+
115
+ ## 0.7.3
116
+
117
+ - Fix issue with rake tasks getting included twice
118
+ - Fix pack_same_size for shell_proxy
119
+ - Add pack_same_size to widget_proxy similar to that of shell_proxy
120
+
121
+ ## 0.7.2
122
+
123
+ - Fix issue with data binding a nested value with an on_read converter block not getting triggered if model value was nil
124
+ - Fix issue with glimmer command triggered rake tasks not honoring glimmer application local Rakefile settings
125
+
126
+ ## 0.7.1
127
+
128
+ - Fix crash issue with data-binding widget properties that are not supported in both directions
129
+ - Fix issue with scaffolding gems not having the right name
130
+ - Fix display of rdoc gem message on every glimmer app run
131
+ - Fix issues in closing a shell in girb
132
+ - Fix issue with Glimmer not clearing DSL Engine parent stacks when DSL interpretation raises exception
133
+ - Fix freezing issue upon logging observables and raising observable errors by overriding inspect on Observable to avoid printing nested tree of observers
134
+ - Added validation for shell widget parentage (accepting a shell or nil) in shell expression
135
+ - Support bidirectional data-binding of menu item selection (e.g. radio menu item)
136
+ - Make shell auto-activate on show with 0.25 delay
137
+
138
+ ## 0.7.0
139
+
140
+ - Expose `rake glimmer:package` rake task via `glimmer package` command
141
+ - Scaffold a Glimmer app: provide a standard structure for building a Glimmer app (models, views, and assets [images, videos, sounds])
142
+ - Scaffold a Glimmer custom shell
143
+ - Scaffold a Glimmer custom widget
144
+ - Scaffold a Glimmer custom widget gem
145
+ - Scaffold a Glimmer custom shell gem
146
+ - Extract Video widget into its own custom widget glimmer-video gem
147
+ - Extract Gladiator into its own custom shell glimmer-gladiator gem
148
+ - Support disable_dsl/enable_dsl/enabled_dsls=
149
+ - Minify CSS produced by CSS DSL
150
+ - Avoid using p in CSS DSL as it clashes with HTML p. Use pv instead (property value).
151
+ - Configure scaffold rspec_helper with glimmer-appropriate after block
152
+ - Move logger/import_swt_packages methods on Glimmer to Glimmer::Config
153
+ - Reorganize samples as hello and elaborate inside samples directory
154
+
155
+ ## 0.6.0
156
+
157
+ - Added multi-DSL support back to Glimmer
158
+ - Glimmer XML (HTML) DSL
159
+ - Glimmer CSS DSL
160
+ - Support mixing DSLs (e.g. SWT browser widget that has an XML text)
161
+ - Fixed Gladiator issue with not saving on quit
162
+ - Made color, rgb, and rgba SWT DSL static expressions instead of dynamic
163
+
164
+ ## 0.5.11
165
+
166
+ - Added file and url attribute writers to `video` widget
167
+ - Fix Gladiator issue with empty replace text field
168
+ - Fix Gladiator issue with opening empty file
169
+ - Support picking up VERSION and LICENSE.txt files in glimmer:package rake task
170
+ - Update packaging to build app DMG file with humanized name (having spaces for multiple words) and to autoset a default mac bundle ID
171
+
172
+ ## 0.5.10
173
+
174
+ - Fix video widget scrolling bar appearing issue
175
+ - Ensure on_about/on_preferences menu items are ignored on Windows
176
+ - Support SWT negative symbols postfixed by exclamation mark (e.g. :max! for no :max)
177
+ - Fix a bug in girb that made it not start anymore
178
+ - Fix a bug in Gladiator when jumping to line before a caret has been set
179
+
180
+ ## 0.5.9
181
+
182
+ - Allow discovery of custom widgets without namespace if there are no existing classes with same name
183
+ - Add filters (global listeners) to SWT Display
184
+ - ShellProxy #pack and #pack_same_size methods
185
+ - Added Gladiator (Glimmer Editor) sample and command
186
+
187
+ ## 0.5.8
188
+
189
+ - Support hooking into About and Preferences application menu items
190
+ - Support passing multiple SWT styles to a shell
191
+
192
+ ## 0.5.7
193
+
194
+ - Make mixing Glimmer into a class enable Glimmer DSL in both class instance scope and singleton class scope
195
+ - Remove app_name and app_version since they show up from plist file upon Mac packaging
196
+ - Change default packaged app name (shows up in top menu bar on Mac) to humanized form (e.g. MathBowling becomes Math Bowling)
197
+ - Provide README instructions and easy packaging options for signing apps (Glimmer::Package.javapackager_extra_args)
198
+
199
+ ## 0.5.6
200
+
201
+ - Add `rake glimmer:package:config` command to generate JAR config file
202
+ - Enabling passing extra args to javapackager via `JAVAPACKAGER_EXTRA_ARGS="..." rake glimmer:package`
203
+
204
+ ## 0.5.5
205
+
206
+ - shell widget args for SWT Display app name and app version
207
+ - Glimmer DSL colors lazy initialize and don't have an SWT Display object dependency anymore
208
+ - Glimmer DSL Menu/MenuItem support
209
+
210
+ ## 0.5.4
211
+
212
+ - Support custom data-binding property converters for nested/index data-binding
213
+ - Add glimmer command --log-level option
214
+ - Add glimmer command env var support
215
+ - Improvements to video widget (new methods and events to listen to)
216
+
217
+ ## 0.5.3
218
+
219
+ - Upgraded rake dependency to 10.1.0 to avoid conflicting dependencies
220
+ - Stopped disposing display upon closing a shell to allow reuse
221
+ - Support custom data-binding property converters
222
+ - Automatic re-packing of shell when layout or layout data is updated with data-binding
223
+
224
+ ## 0.5.2
225
+
226
+ - Support publishing a Glimmer app for the Mac (package as dmg file)
227
+ - Fix background_image widget property support to accept files in a JAR file
228
+ - Fix video widget support to accept files in a JAR file
229
+
230
+ ## 0.5.0
231
+
232
+ - Upgraded SWT to version 4.15
233
+ - Upgraded to JRuby 9.2.11.1
234
+ - Refurbished/refactored Glimmer code design and APIs getting a performance boost
235
+ - Scraped XML and multi-DSL support
236
+ - Renamed `#add_contents` to `#content`
237
+ - made it configurable to include SWT Packages or not
238
+ - Supported color keyword for standard colors
239
+ - Supported swt keyword for style
240
+ - Supported async_exec/sync_exec keywords in Glimmer DSL directly
241
+ - Changed "def body" to body { } in custom widget/shell
242
+ - Renamed commands to keywords in Glimmer
243
+ - Made Glimmer::Launcher automatically figure out dev mode when run as bin/glimmer locally
244
+ - Added LOAD_PATH explicitly
245
+
246
+ ## 0.4.9
247
+ - Added `org.eclipse.swt.custom` to default list of Glimmer SWT packages
248
+ - Added Custom Shell
249
+ - Made shell `#open` method remember if it was already opened before yet hidden, and just show the shell
250
+ - Implement shell `#hide` method
251
+ - Alias shell `#open` as `#show`
252
+ - Support CustomWidget/CustomShell Custom Property Observers
253
+ - Support on_*** observers on WidgetProxy's directly
254
+ - Support on_event_*** observers for SWT.constant event listeners (like show and hide)
255
+ - Added widget focus listener and data-binding support
256
+ - Support Glimmer DSL observe keyword and make it return observer registration object to unregister later on (unobserve)
257
+ - Support CustomWidget before_body and after_body hooks
258
+ - Make Glimmer DSL block provide parent Glimmer object (not SWT widget) as block argument
259
+ - Give widgets/custom-widgets ability to add content (properties/nested widgets) after construction via `#content` method
260
+ - Update setBackgroundImage to take an image path string for convenience (instead of an SWT image)
261
+
262
+ ## 0.4.8
263
+ - Video widget
264
+ - Girb fix to auto-include Glimmer
265
+
266
+ ## 0.4.7
267
+ - Fixed issues with custom widget support working for custom table, custom combo, custom list, parent of layout/layout-data, and on_*** observers
268
+ - Support for custom attributes/observers on a custom widget
269
+ - Display error message when using tab item widget NOT under a tab folder
270
+
271
+ ## 0.4.6
272
+ - Added SWT 4.14 library jars directly in project
273
+
274
+ ## 0.4.5
275
+ - SWT Browser widget support
276
+
277
+ ## 0.4.4
278
+ - Glimmer Custom Widget support
279
+ - Support --debug flag
280
+
281
+ ## 0.4.3
282
+ - Provide an easy way to make windows non-resizable
283
+ - Shorten needed :color_xyz symbols for known widget color properties like background and foreground to :xyz
284
+ - Friendly error message for passing a bad widget property font style (not normal, bold, italic)
285
+ - Friendly error message for passing a bad SWT style in general
286
+ - Support a single computed data binding as a string (not array)
287
+
288
+ ## 0.4.2
289
+ - Center window upon opening
290
+ - Set window minimum width (130) upon opening
291
+ - Accept SWT Shell constructor arguments
292
+
293
+ ## 0.4.1
294
+ - SWT Layout DSL support
295
+ - SWT Layout Data DSL support
296
+
297
+ ## 0.4.0
298
+ - Changed `BlockObserver` into `Observer.proc`
299
+ - Added `Observer#proc` to create simple block-based observers.
300
+ - Updated Observer API renaming `#update` to `#call`
301
+ - Renamed `R` prefixed classes (i.e. Ruby) to `G` prefixed classes (i.e. Glimmer) (e.g. `RWidget` becomes `WidgetProxy`)
302
+ - Namespaced all of Glimmer's classes and modules under `Glimmer`
303
+ - Added `display` Glimmer DSL keyword to instantiate an SWT Display
304
+ - Removed `String` and `Symbol` monkey-patching
305
+ - Accept standard color value passed to widget color properties as `String` or `Symbol`
306
+
307
+ ## 0.3.5
308
+ - Added font support to Glimmer DSL via name/height/style hash
309
+ - Added SWTProxy to easily build SWT constants (e.g. SWTProxy[:border] is SWT::BORDER )
310
+
311
+ ## 0.3.4
312
+ - Fixed color support/property converter support to work both in data-binding and in static property setting
313
+
314
+ ## 0.3.3
315
+ - Added color support to Glimmer DSL (rgb, rgba, and :color_*)
316
+
317
+ ## 0.3.2
318
+ - Automatically import SWT packages when including/extending Glimmer
319
+ - Automatically enhance objects as ObservableArray or ObservableModel when observing them
320
+
321
+ ## 0.3.1
322
+ - Fixed issue related to unnecessary tracking of parents in Observer
323
+
324
+ ## 0.3.0
325
+ - Automatic cleanup of observers upon updating values in data-binding (nested/indexed) or disposing a widget
326
+ - Change of APIs whereby Observer class is responsible for registering observers with observables on properties
327
+
328
+ ## 0.2.5
329
+ - Register a property type converter for `visible` property in widget binding, to ensure converting to boolean before setting in SWT widget.
330
+
331
+ ## 0.2.4
332
+ - Added nested indexed computed property data binding support (e.g. bind(person, 'addresses[0].street_count', computed_by: ['addresses[0].streets']))
333
+
334
+ ## 0.2.3
335
+ - Fixed nested indexed property data binding support for indexed leaf property (e.g. bind(person, 'names[1]'))
336
+
337
+ ## 0.2.2
338
+ - Added nested indexed property data binding support (e.g. bind(person, 'addresses[1].street'))
339
+
340
+ ## 0.2.0
341
+ - Upgraded to JRuby 9.2.10.0
342
+ - Fixed support for Windows & Linux
343
+ - Removed need to download SWT by including directly in gem for all platforms
344
+ - Simplified usage of glimmer command by preloading glimmer and not requiring setup
345
+
346
+ ## 0.1.11.SWT4.14
347
+ - Upgraded SWT to version 4.14
348
+
349
+ ## 0.1.11.470
350
+ - Nested property data binding support
351
+
352
+ ## 0.1.10.470
353
+ - Support Tree data-binding (one-way from model to tree)
354
+
355
+ ## 0.1.8.470
356
+ - girb support
357
+
358
+ ## 0.1.5.470
359
+ - Glimmer now uses a Ruby Logger in debug mode to provide helpful debugging information
360
+ - Glimmer has a smart new Ruby shell script for executing applications
361
+ - Glimmer now downloads swt.jar automatically when missing (e.g. 1st run) on Mac, Windows, and Linux, and for x86 and x86-64 CPU architectures.
@@ -0,0 +1,62 @@
1
+ # Contributing
2
+
3
+ Please follow [glimmer-dsl-swt/CONTRIBUTING.md](https://github.com/AndyObtiva/glimmer-dsl-swt/blob/master/CONTRIBUTING.md) too.
4
+
5
+ ## Pre-requisites
6
+
7
+ - MacOS
8
+ - Other pre-requisites mentioned in [README.md](https://github.com/AndyObtiva/glimmer/tree/master#pre-requisites)
9
+
10
+ ## Machine Setup
11
+
12
+ Follow these steps, running mentioned commands in the terminal:
13
+ - Fork project repo
14
+ - Ensure pre-requisites installed (installing JRuby via RVM on the Mac)
15
+ - cd into project again to activate RVM glimmer gemset
16
+ - gem install bundler
17
+ - bundle
18
+ - rake # runs specs (ensure they finish successfully)
19
+ - Once done, open a pull request with master branch.
20
+
21
+ ### rspec
22
+
23
+ `rake` or `rake spec` runs all specs.
24
+
25
+ To run a specific spec file, run:
26
+ ```
27
+ rake SPEC=spec_file_path
28
+ ```
29
+
30
+ To run a specific spec, run:
31
+ ```
32
+ rake SPEC=spec_file_path:line_number
33
+ ```
34
+
35
+ To display Glimmer debug information, add `GLIMMER_DEBUG=true`:
36
+ ```
37
+ rake SPEC=spec_file_path:line_number GLIMMER_DEBUG=true
38
+ ```
39
+
40
+ Note: make sure not to use the keyboard or mouse while tests are running since they bring up UI elements behind the scenes (invisible). This avoids fudging them and causing false test failures. If you get obscure failures related to focus of widgets, they are most likely false negatives. Just rerun the specs without touching the keyboard or mouse and they would pass if they are not really broken.
41
+
42
+ ### build
43
+
44
+ `rake build` builds the Glimmer gem under the `pkg` directory.
45
+
46
+ ### glimmer command
47
+
48
+ To run a glimmer sample, run local `bin/glimmer` command:
49
+ ```
50
+ bin/glimmer samples/hello_world.rb
51
+ ```
52
+
53
+ It will notify you that you are in development mode.
54
+
55
+ ### girb command
56
+
57
+ To experiment with glimmer syntax using `girb`, run local `bin/girb`:
58
+ ```
59
+ bin/girb
60
+ ```
61
+
62
+ It will notify you that you are in development mode.
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011-2020 Andy Maleh
1
+ Copyright (c) 2007-2020 Andy Maleh
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -0,0 +1,35 @@
1
+ # Glimmer Process (Beyond Agile)
2
+
3
+ **Glimmer Process** is the lightweight software development process used for building [Glimmer](https://github.com/AndyObtiva/glimmer) libraries and [Glimmer](https://github.com/AndyObtiva/glimmer) apps, which goes beyond Agile, rendering all Agile processes obsolete. **Glimmer Process** is simply made up of 7 guidelines to pick and choose as necessary until software development needs are satisfied. Not all guidelines need to be incorporated into every project, but it is still important to think through every one of them before ruling any out. Guidelines can be followed in any order.
4
+
5
+ ## GPG (Glimmer Process Guidelines):
6
+ - **Requirements Gathering**: Spend no more than a few hours writing the initial requirements you know from the business owner, gathering missing requirements, and planning to elicit more requirements from users, customers, and stakeholders. Requirements are not set in stone, but serve as a good starting point in understanding what a project is about. After initial release, only document small tasks going forward.
7
+ - **Software Architecture and Design Diagrams**: Perform software architecture and design activities as necessary by analyzing requirements and creating diagrams.
8
+ - **Initial Release Plan**: This guideline's motto is "Plans are Nothing. Planning is Everything" (said by Dwight D. Eisenhower) because the initial release plan is not set in stone and might change completely, but is still invaluable in launching a new project forward. Consider including alpha releases (for internal testing) and beta releases (for customer testing).
9
+ - **Small Releases**: Develop and release in small increments. Do not release more than 3-weeks worth of work, preferring releases that are shorter than a week worth of work whenever possible. Break releases down. If you need to support multiple platforms, release for a platform at a time. If a feature includes a number of other features, then release them one by one instead of all at once. If a feature involves multiple options, release the default version first, and then release extra options later.
10
+ - **Usability Testing**: Make sure to observe a user using your software the first few releases or when releasing critical brand new unproven features. Ask them to complete a list of goals using the software, but do not help them to complete them unless they get very stuck. Write down notes silently while observing them use your software. Once done with usability testing, you may then ask further questions about any of the notes you wrote down, and afterwards add the notes as feature enhancements and bug fixes. Implement them and then do another usability test with the improvements in place. Repeat as necessary only.
11
+ - **Automated Tests**: Cover sensitive parts of the code with automated tests at the appropriate level of testing needed. Run tests in a continuous integration server.
12
+ - **Refactoring**: Simplify code, eliminate code duplication, improve code organization, extract reusable components, and extract reusable libraries at every opportunity possible.
13
+
14
+ --
15
+
16
+ Copyright (c) 2020 Andy Maleh
17
+
18
+ Permission is hereby granted, free of charge, to any person obtaining
19
+ a copy of this software and associated documentation files (the
20
+ "Software"), to deal in the Software without restriction, including
21
+ without limitation the rights to use, copy, modify, merge, publish,
22
+ distribute, sublicense, and/or sell copies of the Software, and to
23
+ permit persons to whom the Software is furnished to do so, subject to
24
+ the following conditions:
25
+
26
+ The above copyright notice and this permission notice shall be
27
+ included in all copies or substantial portions of the Software.
28
+
29
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
30
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
31
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
32
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
33
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
34
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
35
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.