proformaxml 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2230a680b6a36b22867d4c9749199e5ab0e601567998e343e3281a838867f6c7
4
+ data.tar.gz: 9e8486a4ed110915ff0e9ce4b6e4cf87df3ad02c8c0c94c02824ddd8696a56fc
5
+ SHA512:
6
+ metadata.gz: 20e9ee57cc1071bf2b8612f3397aeed1a98648f0fc363ddb8e3b22251c77e265208b6fbce75c9fe19cafd5a454fcf97d5f8dd90312a7758a2f86c673db9596ea
7
+ data.tar.gz: 1c9d253c304209ba0026b766585d851d99e4ea3a626c402d92feb78a245b9ffc7633130ccea1bfe7916315a9118eff54b092b0252c8b88487fccf0547aa70313
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format progress
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,39 @@
1
+ # layout cop settings
2
+
3
+ Layout/ArgumentAlignment:
4
+ EnforcedStyle: with_fixed_indentation
5
+
6
+ Layout/CaseIndentation:
7
+ EnforcedStyle: end
8
+ SupportedStyles:
9
+ - case
10
+ - end
11
+ IndentOneStep: true
12
+
13
+ Layout/FirstArrayElementIndentation:
14
+ EnforcedStyle: consistent
15
+
16
+ Layout/FirstHashElementIndentation:
17
+ EnforcedStyle: consistent
18
+
19
+ #
20
+ # There are good reasons for key as well as table style.
21
+ #
22
+ Layout/HashAlignment:
23
+ Enabled: false
24
+
25
+ Layout/LineLength:
26
+ Exclude:
27
+ - "spec/**/*"
28
+ Max: 140
29
+
30
+ Layout/MultilineMethodCallIndentation:
31
+ EnforcedStyle: indented
32
+
33
+ Layout/SpaceInsideBlockBraces:
34
+ EnforcedStyle: space
35
+ EnforcedStyleForEmptyBraces: no_space
36
+ SpaceBeforeBlockParameters: false
37
+
38
+ Layout/SpaceInsideHashLiteralBraces:
39
+ EnforcedStyle: no_space
data/.rubocop/lint.yml ADDED
@@ -0,0 +1,14 @@
1
+ # lint cop settings
2
+
3
+ #
4
+ # False positives:
5
+ # * expect { something }.to change { something } often triggers this
6
+ #
7
+ Lint/AmbiguousBlockAssociation:
8
+ Exclude:
9
+ - "spec/**/*_spec.rb"
10
+
11
+ Lint/EmptyBlock:
12
+ Exclude:
13
+ - 'spec/**/*'
14
+ - 'lib/proformaxml/services/exporter.rb'
@@ -0,0 +1,31 @@
1
+ # metric cop settings
2
+
3
+ Metrics/BlockLength:
4
+ Exclude:
5
+ # Common files with e.g. block based DSLs
6
+ - "spec/**/*"
7
+ - "**/*.rake"
8
+ - "Rakefile"
9
+ - "Guardfile"
10
+ - "**/*/Rakefile"
11
+ - 'proformaxml.gemspec'
12
+ Max: 50
13
+
14
+ Metrics/ClassLength:
15
+ Max: 150
16
+
17
+ #
18
+ # Often used as a proxy for complexity in a method, but causes many false
19
+ # positives, e.g. when generating large, but simple, hashes.
20
+ # We want to rely on CyclomaticComplexity instead.
21
+ #
22
+ Metrics/MethodLength:
23
+ Enabled: true
24
+ Max: 20
25
+
26
+ #
27
+ # This seems to be the cop that is closest to what we're interested in, which
28
+ # is the kind of complexity that usually surfaces in deep nesting.
29
+ #
30
+ Metrics/CyclomaticComplexity:
31
+ Enabled: true
@@ -0,0 +1,4 @@
1
+ # rails cop settings
2
+
3
+ Rails:
4
+ Enabled: true
@@ -0,0 +1,27 @@
1
+ # rspec cop settings
2
+
3
+ RSpec:
4
+ Include:
5
+ - "spec/**/*_spec.rb"
6
+ - "spec/spec_helper.rb"
7
+ - "spec/proformaxml_spec.rb"
8
+
9
+ #
10
+ # Too stupid. There are also views, templates, request specs etc.
11
+ #
12
+ RSpec/DescribeClass:
13
+ Exclude:
14
+ - "spec/custom_matchers/*"
15
+
16
+ RSpec/MultipleExpectations:
17
+ Exclude:
18
+ - "spec/custom_matchers/equal_task_spec.rb"
19
+
20
+ RSpec/MultipleMemoizedHelpers:
21
+ Enabled: false
22
+
23
+ RSpec/NestedGroups:
24
+ Max: 5
25
+
26
+ RSpec/IndexedLet:
27
+ Max: 2
@@ -0,0 +1,74 @@
1
+ # style cop settings
2
+
3
+ #
4
+ # Nein. Period. Try to keep it English, but there *will* references using
5
+ # unicode characters.
6
+ #
7
+ Style/AsciiComments:
8
+ Enabled: false
9
+
10
+ #
11
+ # Both styles or mixtures are reasonable
12
+ #
13
+ Style/ClassAndModuleChildren:
14
+ EnforcedStyle: compact
15
+ Enabled: false
16
+
17
+ #
18
+ # Maybe a bit uncommon for new devs and often results in heavily indented code
19
+ # blocks.
20
+ #
21
+ Style/ConditionalAssignment:
22
+ Enabled: false
23
+
24
+ #
25
+ # Would be better but unlikely...
26
+ #
27
+ Style/Documentation:
28
+ Enabled: false
29
+
30
+ #
31
+ # Okay for conditions, but false positive in return statements (e.g. APIs)
32
+ #
33
+ Style/DoubleNegation:
34
+ Enabled: false
35
+
36
+ #
37
+ # Our default string token has the '%{value}' format
38
+ #
39
+ Style/FormatStringToken:
40
+ EnforcedStyle: template
41
+
42
+ #
43
+ # Far to often easy to read without.
44
+ #
45
+ Style/GuardClause:
46
+ Enabled: false
47
+
48
+ #
49
+ # IfUnlessModifier has no own line length but we do not want it to force 120
50
+ # chars long modifiers just because we allow a few long lines.
51
+ #
52
+ Style/IfUnlessModifier:
53
+ Enabled: false
54
+
55
+ #
56
+ # Well, we do this. To often to disable them. Studid.
57
+ #
58
+ Style/MultilineBlockChain:
59
+ Enabled: false
60
+
61
+ #Style/NumericPredicate:
62
+ # Enabled: false
63
+
64
+ Style/RaiseArgs:
65
+ EnforcedStyle: compact
66
+
67
+ Style/SignalException:
68
+ EnforcedStyle: only_raise
69
+
70
+ Style/TrailingCommaInArrayLiteral:
71
+ EnforcedStyleForMultiline: comma
72
+
73
+ Style/TrailingCommaInHashLiteral:
74
+ EnforcedStyleForMultiline: comma
data/.rubocop.yml ADDED
@@ -0,0 +1,30 @@
1
+ require:
2
+ - rubocop-factory_bot
3
+ - rubocop-performance
4
+ - rubocop-rails
5
+ - rubocop-rspec
6
+
7
+ inherit_from:
8
+ - .rubocop/layout.yml
9
+ - .rubocop/lint.yml
10
+ - .rubocop/metrics.yml
11
+ - .rubocop/rspec.yml
12
+ - .rubocop/style.yml
13
+
14
+ AllCops:
15
+ TargetRubyVersion: 3.2
16
+ TargetRailsVersion: 7.0 # for ActiveSupport
17
+ UseCache: True
18
+ NewCops: enable
19
+ Exclude:
20
+ - 'bin/*'
21
+ - 'vendor/**/*'
22
+ - 'Guardfile'
23
+ # Ignore local files for faster processing
24
+ - 'tmp/**/*'
25
+ - 'out/**/*'
26
+ - 'coverage/**/*'
27
+
28
+ RSpec/FilePath:
29
+ CustomTransform:
30
+ ProformaXML: proformaxml
@@ -0,0 +1,128 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our
6
+ community a harassment-free experience for everyone, regardless of age, body
7
+ size, visible or invisible disability, ethnicity, sex characteristics, gender
8
+ identity and expression, level of experience, education, socio-economic status,
9
+ nationality, personal appearance, race, religion, or sexual identity
10
+ and orientation.
11
+
12
+ We pledge to act and interact in ways that contribute to an open, welcoming,
13
+ diverse, inclusive, and healthy community.
14
+
15
+ ## Our Standards
16
+
17
+ Examples of behavior that contributes to a positive environment for our
18
+ community include:
19
+
20
+ * Demonstrating empathy and kindness toward other people
21
+ * Being respectful of differing opinions, viewpoints, and experiences
22
+ * Giving and gracefully accepting constructive feedback
23
+ * Accepting responsibility and apologizing to those affected by our mistakes,
24
+ and learning from the experience
25
+ * Focusing on what is best not just for us as individuals, but for the
26
+ overall community
27
+
28
+ Examples of unacceptable behavior include:
29
+
30
+ * The use of sexualized language or imagery, and sexual attention or
31
+ advances of any kind
32
+ * Trolling, insulting or derogatory comments, and personal or political attacks
33
+ * Public or private harassment
34
+ * Publishing others' private information, such as a physical or email
35
+ address, without their explicit permission
36
+ * Other conduct which could reasonably be considered inappropriate in a
37
+ professional setting
38
+
39
+ ## Enforcement Responsibilities
40
+
41
+ Community leaders are responsible for clarifying and enforcing our standards of
42
+ acceptable behavior and will take appropriate and fair corrective action in
43
+ response to any behavior that they deem inappropriate, threatening, offensive,
44
+ or harmful.
45
+
46
+ Community leaders have the right and responsibility to remove, edit, or reject
47
+ comments, commits, code, wiki edits, issues, and other contributions that are
48
+ not aligned to this Code of Conduct, and will communicate reasons for moderation
49
+ decisions when appropriate.
50
+
51
+ ## Scope
52
+
53
+ This Code of Conduct applies within all community spaces, and also applies when
54
+ an individual is officially representing the community in public spaces.
55
+ Examples of representing our community include using an official e-mail address,
56
+ posting via an official social media account, or acting as an appointed
57
+ representative at an online or offline event.
58
+
59
+ ## Enforcement
60
+
61
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
62
+ reported to the community leaders responsible for enforcement at
63
+ sebastian.serth@hpi.de.
64
+ All complaints will be reviewed and investigated promptly and fairly.
65
+
66
+ All community leaders are obligated to respect the privacy and security of the
67
+ reporter of any incident.
68
+
69
+ ## Enforcement Guidelines
70
+
71
+ Community leaders will follow these Community Impact Guidelines in determining
72
+ the consequences for any action they deem in violation of this Code of Conduct:
73
+
74
+ ### 1. Correction
75
+
76
+ **Community Impact**: Use of inappropriate language or other behavior deemed
77
+ unprofessional or unwelcome in the community.
78
+
79
+ **Consequence**: A private, written warning from community leaders, providing
80
+ clarity around the nature of the violation and an explanation of why the
81
+ behavior was inappropriate. A public apology may be requested.
82
+
83
+ ### 2. Warning
84
+
85
+ **Community Impact**: A violation through a single incident or series
86
+ of actions.
87
+
88
+ **Consequence**: A warning with consequences for continued behavior. No
89
+ interaction with the people involved, including unsolicited interaction with
90
+ those enforcing the Code of Conduct, for a specified period of time. This
91
+ includes avoiding interactions in community spaces as well as external channels
92
+ like social media. Violating these terms may lead to a temporary or
93
+ permanent ban.
94
+
95
+ ### 3. Temporary Ban
96
+
97
+ **Community Impact**: A serious violation of community standards, including
98
+ sustained inappropriate behavior.
99
+
100
+ **Consequence**: A temporary ban from any sort of interaction or public
101
+ communication with the community for a specified period of time. No public or
102
+ private interaction with the people involved, including unsolicited interaction
103
+ with those enforcing the Code of Conduct, is allowed during this period.
104
+ Violating these terms may lead to a permanent ban.
105
+
106
+ ### 4. Permanent Ban
107
+
108
+ **Community Impact**: Demonstrating a pattern of violation of community
109
+ standards, including sustained inappropriate behavior, harassment of an
110
+ individual, or aggression toward or disparagement of classes of individuals.
111
+
112
+ **Consequence**: A permanent ban from any sort of public interaction within
113
+ the community.
114
+
115
+ ## Attribution
116
+
117
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118
+ version 2.0, available at
119
+ https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
120
+
121
+ Community Impact Guidelines were inspired by [Mozilla's code of conduct
122
+ enforcement ladder](https://github.com/mozilla/diversity).
123
+
124
+ [homepage]: https://www.contributor-covenant.org
125
+
126
+ For answers to common questions about this code of conduct, see the FAQ at
127
+ https://www.contributor-covenant.org/faq. Translations are available at
128
+ https://www.contributor-covenant.org/translations.
data/Gemfile ADDED
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in proformaxml.gemspec
6
+ gemspec
7
+
8
+ gem 'bundler'
9
+ gem 'factory_bot'
10
+ gem 'guard'
11
+ gem 'guard-rspec'
12
+ gem 'pry'
13
+ gem 'pry-byebug'
14
+ gem 'rake'
15
+ gem 'rspec'
16
+ gem 'rspec-collection_matchers'
17
+ gem 'rspec-github'
18
+ gem 'rubocop'
19
+ gem 'rubocop-factory_bot'
20
+ gem 'rubocop-performance'
21
+ gem 'rubocop-rails'
22
+ gem 'rubocop-rspec'
23
+ gem 'simplecov'
data/Gemfile.lock ADDED
@@ -0,0 +1,168 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ proformaxml (0.10.0)
5
+ activemodel (>= 5.2.3, < 8.0.0)
6
+ activesupport (>= 5.2.3, < 8.0.0)
7
+ dachsfisch (>= 0.1.0, < 1.0.0)
8
+ nokogiri (>= 1.10.2, < 2.0.0)
9
+ rubyzip (>= 1.2.2, < 3.0.0)
10
+
11
+ GEM
12
+ remote: https://rubygems.org/
13
+ specs:
14
+ activemodel (7.0.7.2)
15
+ activesupport (= 7.0.7.2)
16
+ activesupport (7.0.7.2)
17
+ concurrent-ruby (~> 1.0, >= 1.0.2)
18
+ i18n (>= 1.6, < 2)
19
+ minitest (>= 5.1)
20
+ tzinfo (~> 2.0)
21
+ ast (2.4.2)
22
+ base64 (0.1.1)
23
+ byebug (11.1.3)
24
+ coderay (1.1.3)
25
+ concurrent-ruby (1.2.2)
26
+ dachsfisch (0.1.0)
27
+ nokogiri (>= 1.14.1, < 2.0.0)
28
+ diff-lcs (1.5.0)
29
+ docile (1.4.0)
30
+ factory_bot (6.2.1)
31
+ activesupport (>= 5.0.0)
32
+ ffi (1.15.5)
33
+ formatador (1.1.0)
34
+ guard (2.18.0)
35
+ formatador (>= 0.2.4)
36
+ listen (>= 2.7, < 4.0)
37
+ lumberjack (>= 1.0.12, < 2.0)
38
+ nenv (~> 0.1)
39
+ notiffany (~> 0.0)
40
+ pry (>= 0.13.0)
41
+ shellany (~> 0.0)
42
+ thor (>= 0.18.1)
43
+ guard-compat (1.2.1)
44
+ guard-rspec (4.7.3)
45
+ guard (~> 2.1)
46
+ guard-compat (~> 1.1)
47
+ rspec (>= 2.99.0, < 4.0)
48
+ i18n (1.14.1)
49
+ concurrent-ruby (~> 1.0)
50
+ json (2.6.3)
51
+ language_server-protocol (3.17.0.3)
52
+ listen (3.8.0)
53
+ rb-fsevent (~> 0.10, >= 0.10.3)
54
+ rb-inotify (~> 0.9, >= 0.9.10)
55
+ lumberjack (1.2.9)
56
+ method_source (1.0.0)
57
+ mini_portile2 (2.8.4)
58
+ minitest (5.19.0)
59
+ nenv (0.3.0)
60
+ nokogiri (1.15.4)
61
+ mini_portile2 (~> 2.8.2)
62
+ racc (~> 1.4)
63
+ notiffany (0.1.3)
64
+ nenv (~> 0.1)
65
+ shellany (~> 0.0)
66
+ parallel (1.23.0)
67
+ parser (3.2.2.3)
68
+ ast (~> 2.4.1)
69
+ racc
70
+ pry (0.14.2)
71
+ coderay (~> 1.1)
72
+ method_source (~> 1.0)
73
+ pry-byebug (3.10.1)
74
+ byebug (~> 11.0)
75
+ pry (>= 0.13, < 0.15)
76
+ racc (1.7.1)
77
+ rack (3.0.8)
78
+ rainbow (3.1.1)
79
+ rake (13.0.6)
80
+ rb-fsevent (0.11.2)
81
+ rb-inotify (0.10.1)
82
+ ffi (~> 1.0)
83
+ regexp_parser (2.8.1)
84
+ rexml (3.2.6)
85
+ rspec (3.12.0)
86
+ rspec-core (~> 3.12.0)
87
+ rspec-expectations (~> 3.12.0)
88
+ rspec-mocks (~> 3.12.0)
89
+ rspec-collection_matchers (1.2.0)
90
+ rspec-expectations (>= 2.99.0.beta1)
91
+ rspec-core (3.12.2)
92
+ rspec-support (~> 3.12.0)
93
+ rspec-expectations (3.12.3)
94
+ diff-lcs (>= 1.2.0, < 2.0)
95
+ rspec-support (~> 3.12.0)
96
+ rspec-github (2.4.0)
97
+ rspec-core (~> 3.0)
98
+ rspec-mocks (3.12.6)
99
+ diff-lcs (>= 1.2.0, < 2.0)
100
+ rspec-support (~> 3.12.0)
101
+ rspec-support (3.12.1)
102
+ rubocop (1.56.1)
103
+ base64 (~> 0.1.1)
104
+ json (~> 2.3)
105
+ language_server-protocol (>= 3.17.0)
106
+ parallel (~> 1.10)
107
+ parser (>= 3.2.2.3)
108
+ rainbow (>= 2.2.2, < 4.0)
109
+ regexp_parser (>= 1.8, < 3.0)
110
+ rexml (>= 3.2.5, < 4.0)
111
+ rubocop-ast (>= 1.28.1, < 2.0)
112
+ ruby-progressbar (~> 1.7)
113
+ unicode-display_width (>= 2.4.0, < 3.0)
114
+ rubocop-ast (1.29.0)
115
+ parser (>= 3.2.1.0)
116
+ rubocop-capybara (2.18.0)
117
+ rubocop (~> 1.41)
118
+ rubocop-factory_bot (2.23.1)
119
+ rubocop (~> 1.33)
120
+ rubocop-performance (1.19.0)
121
+ rubocop (>= 1.7.0, < 2.0)
122
+ rubocop-ast (>= 0.4.0)
123
+ rubocop-rails (2.20.2)
124
+ activesupport (>= 4.2.0)
125
+ rack (>= 1.1)
126
+ rubocop (>= 1.33.0, < 2.0)
127
+ rubocop-rspec (2.23.2)
128
+ rubocop (~> 1.33)
129
+ rubocop-capybara (~> 2.17)
130
+ rubocop-factory_bot (~> 2.22)
131
+ ruby-progressbar (1.13.0)
132
+ rubyzip (2.3.2)
133
+ shellany (0.0.1)
134
+ simplecov (0.22.0)
135
+ docile (~> 1.1)
136
+ simplecov-html (~> 0.11)
137
+ simplecov_json_formatter (~> 0.1)
138
+ simplecov-html (0.12.3)
139
+ simplecov_json_formatter (0.1.4)
140
+ thor (1.2.2)
141
+ tzinfo (2.0.6)
142
+ concurrent-ruby (~> 1.0)
143
+ unicode-display_width (2.4.2)
144
+
145
+ PLATFORMS
146
+ ruby
147
+
148
+ DEPENDENCIES
149
+ bundler
150
+ factory_bot
151
+ guard
152
+ guard-rspec
153
+ proformaxml!
154
+ pry
155
+ pry-byebug
156
+ rake
157
+ rspec
158
+ rspec-collection_matchers
159
+ rspec-github
160
+ rubocop
161
+ rubocop-factory_bot
162
+ rubocop-performance
163
+ rubocop-rails
164
+ rubocop-rspec
165
+ simplecov
166
+
167
+ BUNDLED WITH
168
+ 2.4.18
data/Guardfile ADDED
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A sample Guardfile
4
+ # More info at https://github.com/guard/guard#readme
5
+
6
+ ## Uncomment and set this to only include directories you want to watch
7
+ # directories %w(app lib config test spec features) \
8
+ # .select{|d| Dir.exist?(d) ? d : UI.warning("Directory #{d} does not exist")}
9
+
10
+ ## Note: if you are using the `directories` clause above and you are not
11
+ ## watching the project directory ('.'), then you will want to move
12
+ ## the Guardfile to a watched dir and symlink it back, e.g.
13
+ #
14
+ # $ mkdir config
15
+ # $ mv Guardfile config/
16
+ # $ ln -s config/Guardfile .
17
+ #
18
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
19
+
20
+ # Note: The cmd option is now required due to the increasing number of ways
21
+ # rspec may be run, below are examples of the most common uses.
22
+ # * bundler: 'bundle exec rspec'
23
+ # * bundler binstubs: 'bin/rspec'
24
+ # * spring: 'bin/rspec' (This will use spring if running and you have
25
+ # installed the spring binstubs per the docs)
26
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
27
+ # * 'just' rspec: 'rspec'
28
+
29
+ guard :rspec, cmd: 'bundle exec rspec' do
30
+ require 'guard/rspec/dsl'
31
+ dsl = Guard::RSpec::Dsl.new(self)
32
+
33
+ # Feel free to open issues for suggestions and improvements
34
+
35
+ # RSpec files
36
+ rspec = dsl.rspec
37
+ watch(rspec.spec_helper) { rspec.spec_dir }
38
+ watch(rspec.spec_support) { rspec.spec_dir }
39
+ watch(rspec.spec_files)
40
+
41
+ # Ruby files
42
+ ruby = dsl.ruby
43
+ dsl.watch_spec_files_for(ruby.lib_files)
44
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2019 Karol
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.