awesome_explain 0.3.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/mongodb.yml +53 -0
  3. data/.github/workflows/postgres.yml +56 -0
  4. data/.gitignore +11 -0
  5. data/Appraisals +11 -0
  6. data/Gemfile.lock +209 -49
  7. data/LICENSE.txt +4 -20
  8. data/README.md +155 -7
  9. data/Rakefile +35 -1
  10. data/app/models/awesome_explain/application_record.rb +5 -0
  11. data/app/models/awesome_explain/controller.rb +20 -0
  12. data/app/models/awesome_explain/delayed_job.rb +7 -0
  13. data/app/models/awesome_explain/explain.rb +23 -0
  14. data/app/models/awesome_explain/log.rb +7 -0
  15. data/app/models/awesome_explain/pg_dml_stat.rb +4 -0
  16. data/app/models/awesome_explain/pg_seq_scan.rb +4 -0
  17. data/app/models/awesome_explain/plan_node.rb +52 -0
  18. data/app/models/awesome_explain/plan_tree.rb +66 -0
  19. data/app/models/awesome_explain/sidekiq_worker.rb +7 -0
  20. data/app/models/awesome_explain/sql_explain.rb +14 -0
  21. data/app/models/awesome_explain/sql_plan_node.rb +73 -0
  22. data/app/models/awesome_explain/sql_plan_stats.rb +34 -0
  23. data/app/models/awesome_explain/sql_plan_tree.rb +133 -0
  24. data/app/models/awesome_explain/sql_query.rb +7 -0
  25. data/app/models/awesome_explain/stacktrace.rb +11 -0
  26. data/awesome_explain.gemspec +16 -5
  27. data/bin/rails +14 -0
  28. data/data/mongodb/customers.bson +0 -0
  29. data/data/mongodb/customers.metadata.json +1 -0
  30. data/data/mongodb/line_items.bson +0 -0
  31. data/data/mongodb/line_items.metadata.json +1 -0
  32. data/data/mongodb/orders.bson +0 -0
  33. data/data/mongodb/orders.metadata.json +1 -0
  34. data/data/mongodb/products.bson +0 -0
  35. data/data/mongodb/products.metadata.json +1 -0
  36. data/data/postgresql/dvdrental.tar +0 -0
  37. data/db/migrate/20200507214801_stacktraces.rb +12 -0
  38. data/db/migrate/20200507214949_controllers.rb +16 -0
  39. data/db/migrate/20200507215205_logs.rb +22 -0
  40. data/db/migrate/20200507215243_explains.rb +27 -0
  41. data/gemfiles/rails_4.gemfile +7 -0
  42. data/gemfiles/rails_4.gemfile.lock +208 -0
  43. data/gemfiles/rails_5.gemfile +7 -0
  44. data/gemfiles/rails_5.gemfile.lock +209 -0
  45. data/gemfiles/rails_6.gemfile +7 -0
  46. data/gemfiles/rails_6.gemfile.lock +233 -0
  47. data/images/universe.png +0 -0
  48. data/lib/awesome_explain.rb +79 -2
  49. data/lib/awesome_explain/config.rb +196 -0
  50. data/lib/awesome_explain/engine.rb +5 -0
  51. data/lib/awesome_explain/insights/active_record_insights.rb +137 -0
  52. data/lib/awesome_explain/insights/base.rb +18 -0
  53. data/lib/awesome_explain/insights/mongoid_insights.rb +44 -0
  54. data/lib/awesome_explain/insights/sql_plans_insights.rb +64 -0
  55. data/lib/awesome_explain/kernel.rb +17 -0
  56. data/lib/awesome_explain/mongodb/base.rb +4 -0
  57. data/lib/awesome_explain/mongodb/command_start.rb +84 -0
  58. data/lib/awesome_explain/mongodb/command_success.rb +58 -0
  59. data/lib/awesome_explain/mongodb/formatter.rb +62 -0
  60. data/lib/awesome_explain/mongodb/helpers.rb +71 -0
  61. data/lib/awesome_explain/queue/command.rb +17 -0
  62. data/lib/awesome_explain/queue/simple_queue.rb +88 -0
  63. data/lib/awesome_explain/renderers/active_record.rb +114 -0
  64. data/lib/awesome_explain/renderers/base.rb +2 -0
  65. data/lib/awesome_explain/renderers/mongoid.rb +20 -33
  66. data/lib/awesome_explain/sidekiq_middleware.rb +17 -0
  67. data/lib/awesome_explain/stats/postgresql.rb +54 -0
  68. data/lib/awesome_explain/subscribers/active_record_passive_subscriber.rb +82 -0
  69. data/lib/awesome_explain/subscribers/active_record_subscriber.rb +187 -0
  70. data/lib/awesome_explain/subscribers/base.rb +3 -0
  71. data/lib/awesome_explain/subscribers/command_subscriber.rb +53 -0
  72. data/lib/awesome_explain/tasks/db.rb +325 -0
  73. data/lib/awesome_explain/utils/color.rb +16 -0
  74. data/lib/awesome_explain/version.rb +1 -1
  75. data/lib/tasks/ae.rake +28 -0
  76. data/lib/tasks/awesome_explain_tasks.rake +4 -0
  77. metadata +242 -25
  78. data/.travis.yml +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d14b9a43988b0efc8466fe97d9965a54a7282212
4
- data.tar.gz: 9a7238a42460d51e72cf15fffdec97439de8adcd
2
+ SHA256:
3
+ metadata.gz: eba66f0deee790b7cc9b1b0ec35e4f4ca9bbb821943f5ae01a170343ed3889c3
4
+ data.tar.gz: 369c6b793ebc194e9b1ea8e81443b84f71780389529703d2a8e54d546a6aa37d
5
5
  SHA512:
6
- metadata.gz: 8a2204580bbf2207f3cec4b922b8cd91f066d847a64f018a83df469ac599dd7a3121048e2629a75f3fb9e6025b59742371d254d0a01154dc14a41bfa8ad944cc
7
- data.tar.gz: c3650a11afcb33eb926e77ccbf6e4be5e9776719235f3352e08ac2f9eb56da428043e7c9be875a8aeaf3db37d6d940b15bc05338d6077ecfd29c80a32ca9db14
6
+ metadata.gz: c5c7a9d53d6a2df1c848a2cbfe16f478814b624f54a5df9d07dd28a9aa061c6e25530cf8bc4b320d16fae28c4443db15f1f00c81bbfaf308907927265407da4d
7
+ data.tar.gz: cd0b86ad05fc9f787b63f398a7a499fc217a81ad029cee56177ae1f0a635356ebdf4f73491f8030ab9354d69e004c92667096ca181f083550490f78f16f3b310
@@ -0,0 +1,53 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: AwesomeExplain - MongoDB
9
+
10
+ on:
11
+ push:
12
+ branches: [main]
13
+ pull_request:
14
+ branches: "*"
15
+
16
+ jobs:
17
+ test-mongodb:
18
+ runs-on: ubuntu-latest
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ ruby-version: ['2.5']
23
+ mongodb-version: ['3.4', '3.6', '4.0', '4.2', '4.4']
24
+ steps:
25
+ - name: Git checkout
26
+ uses: actions/checkout@v2
27
+
28
+ - name: Install dependent libraries
29
+ run: sudo apt-get install libpq-dev
30
+
31
+ - name: Start MongoDB v${{ matrix.mongodb-version }}
32
+ uses: supercharge/mongodb-github-action@1.3.0
33
+ with:
34
+ mongodb-version: ${{ matrix.mongodb-version }}
35
+
36
+ - name: Set up Ruby
37
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
38
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
39
+ # uses: ruby/setup-ruby@v1
40
+ uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
41
+ with:
42
+ ruby-version: ${{ matrix.ruby-version }}
43
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
44
+
45
+ - name: Restore MongoDB Data
46
+ run: |
47
+ mongorestore -d awesome_explain_test ./data/mongodb/customers.bson
48
+ mongorestore -d awesome_explain_test ./data/mongodb/line_items.bson
49
+ mongorestore -d awesome_explain_test ./data/mongodb/orders.bson
50
+ mongorestore -d awesome_explain_test ./data/mongodb/products.bson
51
+
52
+ - name: Run tests
53
+ run: bundle exec rspec spec/mongodb
@@ -0,0 +1,56 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: AwesomeExplain - PostgreSQL
9
+
10
+ on:
11
+ push:
12
+ branches: [master]
13
+ pull_request:
14
+ branches: "*"
15
+
16
+ jobs:
17
+ test-postgres:
18
+ runs-on: ubuntu-latest
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ ruby-version: ['2.5']
23
+ postgres-version: ['10', '11', '12', '13']
24
+ steps:
25
+ - name: Git checkout
26
+ uses: actions/checkout@v2
27
+
28
+ - name: Install dependent libraries
29
+ run: sudo apt-get install libpq-dev
30
+
31
+ - name: Start PostgreSQL v${{ matrix.postgres-version }}
32
+ uses: harmon758/postgresql-action@v1
33
+ with:
34
+ postgresql version: ${{ matrix.postgres-version }} # See https://hub.docker.com/_/postgres for available versions
35
+ postgresql db: dvdrental
36
+ postgresql user: postgres
37
+ postgresql password: postgres
38
+
39
+ - name: Set up Ruby
40
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
41
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
42
+ # uses: ruby/setup-ruby@v1
43
+ uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
44
+ with:
45
+ ruby-version: ${{ matrix.ruby-version }}
46
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
47
+
48
+ - name: Restore PostgrsSQL Data
49
+ run: |
50
+ touch ~/.pgpass
51
+ echo localhost:5432:dvdrental:postgres:postgres > ~/.pgpass
52
+ chmod 600 ~/.pgpass
53
+ pg_restore -U postgres -w -h localhost -p 5432 -d dvdrental data/postgresql/dvdrental.tar
54
+
55
+ - name: Run tests
56
+ run: bundle exec rspec spec/sql
data/.gitignore CHANGED
@@ -6,6 +6,8 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ /log/
10
+ *.gem
9
11
 
10
12
  # rspec failure tracking
11
13
  .rspec_status
@@ -201,4 +203,13 @@ $RECYCLE.BIN/
201
203
  *.lnk
202
204
 
203
205
 
206
+ ### VisualStudioCode ###
207
+ .vscode
208
+
209
+ ### VisualStudioCode Patch ###
210
+ # Ignore all local history of files
211
+ .history
212
+
204
213
  # End of https://www.gitignore.io/api/vim,osx,windows,rubymine,sublimetext,visualstudiocode
214
+
215
+ test/dummy/log
data/Appraisals ADDED
@@ -0,0 +1,11 @@
1
+ appraise "rails-4" do
2
+ gem "rails", "4.2"
3
+ end
4
+
5
+ appraise "rails-5" do
6
+ gem "rails", "5.0"
7
+ end
8
+
9
+ appraise "rails-6" do
10
+ gem "rails", "6.0"
11
+ end
data/Gemfile.lock CHANGED
@@ -1,77 +1,237 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- awesome_explain (0.3.0)
4
+ awesome_explain (1.0.0)
5
+ activerecord-import (>= 0.25)
5
6
  awesome_print (~> 1.0)
7
+ kaminari (>= 1.0)
8
+ niceql
9
+ pg
10
+ rails (>= 4.2)
11
+ sqlite3
6
12
  terminal-table (~> 1.0)
7
13
 
8
14
  GEM
9
15
  remote: https://rubygems.org/
10
16
  specs:
11
- activemodel (5.2.1)
12
- activesupport (= 5.2.1)
13
- activesupport (5.2.1)
17
+ actioncable (6.1.0)
18
+ actionpack (= 6.1.0)
19
+ activesupport (= 6.1.0)
20
+ nio4r (~> 2.0)
21
+ websocket-driver (>= 0.6.1)
22
+ actionmailbox (6.1.0)
23
+ actionpack (= 6.1.0)
24
+ activejob (= 6.1.0)
25
+ activerecord (= 6.1.0)
26
+ activestorage (= 6.1.0)
27
+ activesupport (= 6.1.0)
28
+ mail (>= 2.7.1)
29
+ actionmailer (6.1.0)
30
+ actionpack (= 6.1.0)
31
+ actionview (= 6.1.0)
32
+ activejob (= 6.1.0)
33
+ activesupport (= 6.1.0)
34
+ mail (~> 2.5, >= 2.5.4)
35
+ rails-dom-testing (~> 2.0)
36
+ actionpack (6.1.0)
37
+ actionview (= 6.1.0)
38
+ activesupport (= 6.1.0)
39
+ rack (~> 2.0, >= 2.0.9)
40
+ rack-test (>= 0.6.3)
41
+ rails-dom-testing (~> 2.0)
42
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
43
+ actiontext (6.1.0)
44
+ actionpack (= 6.1.0)
45
+ activerecord (= 6.1.0)
46
+ activestorage (= 6.1.0)
47
+ activesupport (= 6.1.0)
48
+ nokogiri (>= 1.8.5)
49
+ actionview (6.1.0)
50
+ activesupport (= 6.1.0)
51
+ builder (~> 3.1)
52
+ erubi (~> 1.4)
53
+ rails-dom-testing (~> 2.0)
54
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
55
+ activejob (6.1.0)
56
+ activesupport (= 6.1.0)
57
+ globalid (>= 0.3.6)
58
+ activemodel (6.1.0)
59
+ activesupport (= 6.1.0)
60
+ activerecord (6.1.0)
61
+ activemodel (= 6.1.0)
62
+ activesupport (= 6.1.0)
63
+ activerecord-import (1.1.0)
64
+ activerecord (>= 3.2)
65
+ activestorage (6.1.0)
66
+ actionpack (= 6.1.0)
67
+ activejob (= 6.1.0)
68
+ activerecord (= 6.1.0)
69
+ activesupport (= 6.1.0)
70
+ marcel (~> 0.3.1)
71
+ mimemagic (~> 0.3.2)
72
+ activesupport (6.1.0)
14
73
  concurrent-ruby (~> 1.0, >= 1.0.2)
15
- i18n (>= 0.7, < 2)
16
- minitest (~> 5.1)
17
- tzinfo (~> 1.1)
74
+ i18n (>= 1.6, < 2)
75
+ minitest (>= 5.1)
76
+ tzinfo (~> 2.0)
77
+ zeitwerk (~> 2.3)
18
78
  ansi (1.5.0)
19
- awesome_print (1.8.0)
20
- bson (4.3.0)
21
- concurrent-ruby (1.0.5)
22
- diff-lcs (1.3)
23
- docile (1.3.1)
24
- hirb (0.7.3)
25
- i18n (1.1.0)
79
+ appraisal (2.4.0)
80
+ bundler
81
+ rake
82
+ thor (>= 0.14.0)
83
+ awesome_print (1.9.2)
84
+ binding_of_caller (1.0.0)
85
+ debug_inspector (>= 0.0.1)
86
+ bson (4.12.0)
87
+ builder (3.2.4)
88
+ byebug (11.1.3)
89
+ coderay (1.1.3)
90
+ concurrent-ruby (1.1.8)
91
+ crass (1.0.6)
92
+ debug_inspector (1.1.0)
93
+ diff-lcs (1.4.4)
94
+ docile (1.3.5)
95
+ erubi (1.10.0)
96
+ globalid (0.4.2)
97
+ activesupport (>= 4.2.0)
98
+ i18n (1.8.10)
26
99
  concurrent-ruby (~> 1.0)
27
- json (2.1.0)
28
- minitest (5.11.3)
29
- mongo (2.6.2)
30
- bson (>= 4.3.0, < 5.0.0)
31
- mongoid (7.0.1)
32
- activemodel (>= 5.1, < 6.0.0)
33
- mongo (>= 2.5.1, < 3.0.0)
34
- rake (10.5.0)
35
- rspec (3.7.0)
36
- rspec-core (~> 3.7.0)
37
- rspec-expectations (~> 3.7.0)
38
- rspec-mocks (~> 3.7.0)
39
- rspec-core (3.7.1)
40
- rspec-support (~> 3.7.0)
41
- rspec-expectations (3.7.0)
100
+ kaminari (1.2.1)
101
+ activesupport (>= 4.1.0)
102
+ kaminari-actionview (= 1.2.1)
103
+ kaminari-activerecord (= 1.2.1)
104
+ kaminari-core (= 1.2.1)
105
+ kaminari-actionview (1.2.1)
106
+ actionview
107
+ kaminari-core (= 1.2.1)
108
+ kaminari-activerecord (1.2.1)
109
+ activerecord
110
+ kaminari-core (= 1.2.1)
111
+ kaminari-core (1.2.1)
112
+ loofah (2.10.0)
113
+ crass (~> 1.0.2)
114
+ nokogiri (>= 1.5.9)
115
+ mail (2.7.1)
116
+ mini_mime (>= 0.1.1)
117
+ marcel (0.3.3)
118
+ mimemagic (~> 0.3.2)
119
+ method_source (1.0.0)
120
+ mimemagic (0.3.10)
121
+ nokogiri (~> 1)
122
+ rake
123
+ mini_mime (1.1.0)
124
+ mini_portile2 (2.5.3)
125
+ minitest (5.14.4)
126
+ mongo (2.14.0)
127
+ bson (>= 4.8.2, < 5.0.0)
128
+ mongoid (7.2.2)
129
+ activemodel (>= 5.1, < 6.2)
130
+ mongo (>= 2.10.5, < 3.0.0)
131
+ niceql (0.1.25)
132
+ nio4r (2.5.7)
133
+ nokogiri (1.11.7)
134
+ mini_portile2 (~> 2.5.0)
135
+ racc (~> 1.4)
136
+ pg (1.2.3)
137
+ pry (0.13.1)
138
+ coderay (~> 1.1)
139
+ method_source (~> 1.0)
140
+ pry-byebug (3.9.0)
141
+ byebug (~> 11.0)
142
+ pry (~> 0.13.0)
143
+ pry-rails (0.3.9)
144
+ pry (>= 0.10.4)
145
+ racc (1.5.2)
146
+ rack (2.2.3)
147
+ rack-test (1.1.0)
148
+ rack (>= 1.0, < 3)
149
+ rails (6.1.0)
150
+ actioncable (= 6.1.0)
151
+ actionmailbox (= 6.1.0)
152
+ actionmailer (= 6.1.0)
153
+ actionpack (= 6.1.0)
154
+ actiontext (= 6.1.0)
155
+ actionview (= 6.1.0)
156
+ activejob (= 6.1.0)
157
+ activemodel (= 6.1.0)
158
+ activerecord (= 6.1.0)
159
+ activestorage (= 6.1.0)
160
+ activesupport (= 6.1.0)
161
+ bundler (>= 1.15.0)
162
+ railties (= 6.1.0)
163
+ sprockets-rails (>= 2.0.0)
164
+ rails-dom-testing (2.0.3)
165
+ activesupport (>= 4.2.0)
166
+ nokogiri (>= 1.6)
167
+ rails-html-sanitizer (1.3.0)
168
+ loofah (~> 2.3)
169
+ railties (6.1.0)
170
+ actionpack (= 6.1.0)
171
+ activesupport (= 6.1.0)
172
+ method_source
173
+ rake (>= 0.8.7)
174
+ thor (~> 1.0)
175
+ rake (13.0.3)
176
+ rspec (3.10.0)
177
+ rspec-core (~> 3.10.0)
178
+ rspec-expectations (~> 3.10.0)
179
+ rspec-mocks (~> 3.10.0)
180
+ rspec-core (3.10.1)
181
+ rspec-support (~> 3.10.0)
182
+ rspec-expectations (3.10.1)
42
183
  diff-lcs (>= 1.2.0, < 2.0)
43
- rspec-support (~> 3.7.0)
44
- rspec-mocks (3.7.0)
184
+ rspec-support (~> 3.10.0)
185
+ rspec-mocks (3.10.2)
45
186
  diff-lcs (>= 1.2.0, < 2.0)
46
- rspec-support (~> 3.7.0)
47
- rspec-support (3.7.1)
48
- simplecov (0.16.1)
187
+ rspec-support (~> 3.10.0)
188
+ rspec-support (3.10.2)
189
+ simplecov (0.21.2)
49
190
  docile (~> 1.1)
50
- json (>= 1.8, < 3)
51
- simplecov-html (~> 0.10.0)
52
- simplecov-console (0.4.2)
191
+ simplecov-html (~> 0.11)
192
+ simplecov_json_formatter (~> 0.1)
193
+ simplecov-console (0.9.1)
53
194
  ansi
54
- hirb
55
195
  simplecov
56
- simplecov-html (0.10.2)
196
+ terminal-table
197
+ simplecov-html (0.12.3)
198
+ simplecov_json_formatter (0.1.2)
199
+ sprockets (4.0.2)
200
+ concurrent-ruby (~> 1.0)
201
+ rack (> 1, < 3)
202
+ sprockets-rails (3.2.2)
203
+ actionpack (>= 4.0)
204
+ activesupport (>= 4.0)
205
+ sprockets (>= 3.0.0)
206
+ sqlite3 (1.4.2)
57
207
  terminal-table (1.8.0)
58
208
  unicode-display_width (~> 1.1, >= 1.1.1)
59
- thread_safe (0.3.6)
60
- tzinfo (1.2.5)
61
- thread_safe (~> 0.1)
62
- unicode-display_width (1.4.0)
209
+ thor (1.1.0)
210
+ tzinfo (2.0.4)
211
+ concurrent-ruby (~> 1.0)
212
+ unicode-display_width (1.7.0)
213
+ websocket-driver (0.7.5)
214
+ websocket-extensions (>= 0.1.0)
215
+ websocket-extensions (0.1.5)
216
+ wwtd (1.4.1)
217
+ zeitwerk (2.4.2)
63
218
 
64
219
  PLATFORMS
65
220
  ruby
66
221
 
67
222
  DEPENDENCIES
223
+ appraisal
68
224
  awesome_explain!
69
- bundler (~> 1.16)
225
+ binding_of_caller
226
+ bundler
70
227
  mongoid (>= 5)
71
- rake (~> 10.0)
72
- rspec (~> 3.0)
73
- simplecov (~> 0.16.1)
74
- simplecov-console (~> 0.4.2)
228
+ pry-byebug
229
+ pry-rails
230
+ rake (>= 10.0)
231
+ rspec (>= 3.10)
232
+ simplecov (>= 0.21.2)
233
+ simplecov-console (>= 0.9.1)
234
+ wwtd
75
235
 
76
236
  BUNDLED WITH
77
- 1.16.3
237
+ 1.17.3
data/LICENSE.txt CHANGED
@@ -1,21 +1,5 @@
1
- The MIT License (MIT)
1
+ Copyright (c) Ahmed Elhossaini
2
2
 
3
- Copyright (c) 2018 Ahmed El.Hussaini
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.
3
+ AwesomeExplain is an Open Source project licensed under the terms of
4
+ the LGPLv3 license. Please see <http://www.gnu.org/licenses/lgpl-3.0.html>
5
+ for license text.