blazer 2.2.5 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of blazer might be problematic. Click here for more details.

Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +113 -29
  5. data/app/assets/javascripts/blazer/Chart.js +13794 -12099
  6. data/app/assets/javascripts/blazer/Sortable.js +3695 -1526
  7. data/app/assets/javascripts/blazer/chartkick.js +296 -46
  8. data/app/assets/javascripts/blazer/daterangepicker.js +194 -269
  9. data/app/assets/javascripts/blazer/jquery.js +1150 -642
  10. data/app/assets/javascripts/blazer/moment-timezone-with-data.js +621 -287
  11. data/app/assets/javascripts/blazer/moment.js +5085 -2460
  12. data/app/assets/stylesheets/blazer/daterangepicker.css +394 -253
  13. data/app/controllers/blazer/base_controller.rb +4 -4
  14. data/app/controllers/blazer/dashboards_controller.rb +5 -2
  15. data/app/controllers/blazer/queries_controller.rb +11 -2
  16. data/app/controllers/blazer/uploads_controller.rb +147 -0
  17. data/app/mailers/blazer/slack_notifier.rb +1 -1
  18. data/app/models/blazer/query.rb +1 -0
  19. data/app/models/blazer/upload.rb +11 -0
  20. data/app/models/blazer/uploads_connection.rb +7 -0
  21. data/app/views/blazer/_nav.html.erb +3 -0
  22. data/app/views/blazer/_variables.html.erb +3 -1
  23. data/app/views/blazer/checks/_form.html.erb +1 -1
  24. data/app/views/blazer/checks/index.html.erb +3 -0
  25. data/app/views/blazer/dashboards/_form.html.erb +1 -1
  26. data/app/views/blazer/dashboards/show.html.erb +1 -1
  27. data/app/views/blazer/queries/home.html.erb +3 -0
  28. data/app/views/blazer/queries/run.html.erb +5 -5
  29. data/app/views/blazer/queries/show.html.erb +3 -1
  30. data/app/views/blazer/uploads/_form.html.erb +27 -0
  31. data/app/views/blazer/uploads/edit.html.erb +3 -0
  32. data/app/views/blazer/uploads/index.html.erb +55 -0
  33. data/app/views/blazer/uploads/new.html.erb +3 -0
  34. data/config/routes.rb +5 -0
  35. data/lib/blazer.rb +20 -0
  36. data/lib/blazer/adapters/influxdb_adapter.rb +45 -0
  37. data/lib/blazer/adapters/sql_adapter.rb +1 -1
  38. data/lib/blazer/result.rb +2 -21
  39. data/lib/blazer/version.rb +1 -1
  40. data/lib/generators/blazer/templates/config.yml.tt +6 -0
  41. data/lib/generators/blazer/templates/install.rb.tt +4 -3
  42. data/lib/generators/blazer/templates/uploads.rb.tt +10 -0
  43. data/lib/generators/blazer/uploads_generator.rb +18 -0
  44. data/lib/tasks/blazer.rake +9 -0
  45. data/licenses/LICENSE-ace.txt +24 -0
  46. data/licenses/LICENSE-bootstrap.txt +21 -0
  47. data/licenses/LICENSE-chart.js.txt +9 -0
  48. data/licenses/LICENSE-chartkick.js.txt +22 -0
  49. data/licenses/LICENSE-daterangepicker.txt +21 -0
  50. data/licenses/LICENSE-fuzzysearch.txt +20 -0
  51. data/licenses/LICENSE-highlight.js.txt +29 -0
  52. data/licenses/LICENSE-jquery-ujs.txt +20 -0
  53. data/licenses/LICENSE-jquery.txt +20 -0
  54. data/licenses/LICENSE-moment-timezone.txt +20 -0
  55. data/licenses/LICENSE-moment.txt +22 -0
  56. data/licenses/LICENSE-selectize.txt +202 -0
  57. data/licenses/LICENSE-sortable.txt +21 -0
  58. data/licenses/LICENSE-stickytableheaders.txt +20 -0
  59. data/licenses/LICENSE-stupidtable.txt +19 -0
  60. data/licenses/LICENSE-vue.txt +21 -0
  61. metadata +33 -7
@@ -0,0 +1,3 @@
1
+ <% blazer_title "New Upload" %>
2
+
3
+ <%= render partial: "form" %>
@@ -16,5 +16,10 @@ Blazer::Engine.routes.draw do
16
16
  post :refresh, on: :member
17
17
  end
18
18
 
19
+ if Blazer.uploads?
20
+ resources :uploads do
21
+ end
22
+ end
23
+
19
24
  root to: "queries#home"
20
25
  end
@@ -18,6 +18,7 @@ require "blazer/adapters/cassandra_adapter"
18
18
  require "blazer/adapters/drill_adapter"
19
19
  require "blazer/adapters/druid_adapter"
20
20
  require "blazer/adapters/elasticsearch_adapter"
21
+ require "blazer/adapters/influxdb_adapter"
21
22
  require "blazer/adapters/mongodb_adapter"
22
23
  require "blazer/adapters/neo4j_adapter"
23
24
  require "blazer/adapters/presto_adapter"
@@ -31,6 +32,7 @@ require "blazer/engine"
31
32
 
32
33
  module Blazer
33
34
  class Error < StandardError; end
35
+ class UploadError < Error; end
34
36
  class TimeoutNotSupported < Error; end
35
37
 
36
38
  class << self
@@ -205,6 +207,23 @@ module Blazer
205
207
  slack_webhook_url.present?
206
208
  end
207
209
 
210
+ def self.uploads?
211
+ settings.key?("uploads")
212
+ end
213
+
214
+ def self.uploads_connection
215
+ raise "Empty url for uploads" unless settings.dig("uploads", "url")
216
+ Blazer::UploadsConnection.connection
217
+ end
218
+
219
+ def self.uploads_schema
220
+ settings.dig("uploads", "schema") || "uploads"
221
+ end
222
+
223
+ def self.uploads_table_name(name)
224
+ uploads_connection.quote_table_name("#{uploads_schema}.#{name}")
225
+ end
226
+
208
227
  def self.adapters
209
228
  @adapters ||= {}
210
229
  end
@@ -220,6 +239,7 @@ Blazer.register_adapter "cassandra", Blazer::Adapters::CassandraAdapter
220
239
  Blazer.register_adapter "drill", Blazer::Adapters::DrillAdapter
221
240
  Blazer.register_adapter "druid", Blazer::Adapters::DruidAdapter
222
241
  Blazer.register_adapter "elasticsearch", Blazer::Adapters::ElasticsearchAdapter
242
+ Blazer.register_adapter "influxdb", Blazer::Adapters::InfluxdbAdapter
223
243
  Blazer.register_adapter "neo4j", Blazer::Adapters::Neo4jAdapter
224
244
  Blazer.register_adapter "presto", Blazer::Adapters::PrestoAdapter
225
245
  Blazer.register_adapter "mongodb", Blazer::Adapters::MongodbAdapter
@@ -0,0 +1,45 @@
1
+ module Blazer
2
+ module Adapters
3
+ class InfluxdbAdapter < BaseAdapter
4
+ def run_statement(statement, comment)
5
+ columns = []
6
+ rows = []
7
+ error = nil
8
+
9
+ begin
10
+ result = client.query(statement, denormalize: false).first
11
+ columns = result["columns"]
12
+ rows = result["values"]
13
+
14
+ # parse time columns
15
+ # current approach isn't ideal, but result doesn't include types
16
+ # another approach would be to check the format
17
+ time_index = columns.index("time")
18
+ if time_index
19
+ rows.each do |row|
20
+ row[time_index] = Time.parse(row[time_index]) if row[time_index]
21
+ end
22
+ end
23
+ rescue => e
24
+ error = e.message
25
+ end
26
+
27
+ [columns, rows, error]
28
+ end
29
+
30
+ def tables
31
+ client.list_series
32
+ end
33
+
34
+ def preview_statement
35
+ "SELECT * FROM {table} LIMIT 10"
36
+ end
37
+
38
+ protected
39
+
40
+ def client
41
+ @client ||= InfluxDB::Client.new(url: settings["url"])
42
+ end
43
+ end
44
+ end
45
+ end
@@ -27,7 +27,7 @@ module Blazer
27
27
  result = select_all("#{statement} /*#{comment}*/")
28
28
  columns = result.columns
29
29
  result.rows.each do |untyped_row|
30
- rows << (result.column_types.empty? ? untyped_row : columns.each_with_index.map { |c, i| untyped_row[i] ? result.column_types[c].send(:cast_value, untyped_row[i]) : untyped_row[i] })
30
+ rows << (result.column_types.empty? ? untyped_row : columns.each_with_index.map { |c, i| untyped_row[i] && result.column_types[c] ? result.column_types[c].send(:cast_value, untyped_row[i]) : untyped_row[i] })
31
31
  end
32
32
  end
33
33
  rescue => e
@@ -94,29 +94,10 @@ module Blazer
94
94
  case Blazer.forecasting
95
95
  when "prophet"
96
96
  require "prophet"
97
-
98
- df =
99
- Daru::DataFrame.new(
100
- "ds" => @rows.map { |r| r[0] },
101
- "y" => @rows.map { |r| r[1] }
102
- )
103
-
104
- # TODO determine frequency
105
- freq = "D"
106
-
107
- m = Prophet.new
108
- m.fit(df)
109
- future = m.make_future_dataframe(periods: count, freq: freq, include_history: false)
110
- fcst = m.predict(future)
111
- ds = fcst["ds"]
112
- if @rows[0][0].is_a?(Date)
113
- ds = ds.map { |v| v.to_date }
114
- end
115
- forecast = ds.zip(fcst["yhat"]).to_h
97
+ forecast = Prophet.forecast(@rows.to_h, count: count)
116
98
  else
117
99
  require "trend"
118
-
119
- forecast = Trend.forecast(Hash[@rows], count: count)
100
+ forecast = Trend.forecast(@rows.to_h, count: count)
120
101
  end
121
102
 
122
103
  # round integers
@@ -1,3 +1,3 @@
1
1
  module Blazer
2
- VERSION = "2.2.5"
2
+ VERSION = "2.3.1"
3
3
  end
@@ -71,3 +71,9 @@ check_schedules:
71
71
 
72
72
  # enable map
73
73
  # mapbox_access_token: <%%= ENV["MAPBOX_ACCESS_TOKEN"] %>
74
+
75
+ # enable uploads
76
+ # uploads:
77
+ # url: <%%= ENV["BLAZER_UPLOADS_URL"] %>
78
+ # schema: uploads
79
+ # data_source: main
@@ -6,6 +6,7 @@ class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version
6
6
  t.text :description
7
7
  t.text :statement
8
8
  t.string :data_source
9
+ t.string :status
9
10
  t.timestamps null: false
10
11
  end
11
12
 
@@ -14,12 +15,12 @@ class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version
14
15
  t.references :query
15
16
  t.text :statement
16
17
  t.string :data_source
17
- t.timestamp :created_at
18
+ t.datetime :created_at
18
19
  end
19
20
 
20
21
  create_table :blazer_dashboards do |t|
21
22
  t.references :creator
22
- t.text :name
23
+ t.string :name
23
24
  t.timestamps null: false
24
25
  end
25
26
 
@@ -39,7 +40,7 @@ class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version
39
40
  t.text :slack_channels
40
41
  t.string :check_type
41
42
  t.text :message
42
- t.timestamp :last_run_at
43
+ t.datetime :last_run_at
43
44
  t.timestamps null: false
44
45
  end
45
46
  end
@@ -0,0 +1,10 @@
1
+ class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ create_table :blazer_uploads do |t|
4
+ t.references :creator
5
+ t.string :table
6
+ t.text :description
7
+ t.timestamps null: false
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,18 @@
1
+ require "rails/generators/active_record"
2
+
3
+ module Blazer
4
+ module Generators
5
+ class UploadsGenerator < Rails::Generators::Base
6
+ include ActiveRecord::Generators::Migration
7
+ source_root File.join(__dir__, "templates")
8
+
9
+ def copy_migration
10
+ migration_template "uploads.rb", "db/migrate/create_blazer_uploads.rb", migration_version: migration_version
11
+ end
12
+
13
+ def migration_version
14
+ "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -8,4 +8,13 @@ namespace :blazer do
8
8
  task send_failing_checks: :environment do
9
9
  Blazer.send_failing_checks
10
10
  end
11
+
12
+ desc "archive queries"
13
+ task archive_queries: :environment do
14
+ abort "Audits must be enabled to archive" unless Blazer.audit
15
+ abort "Missing status column - see https://github.com/ankane/blazer#23" unless Blazer::Query.column_names.include?("status")
16
+
17
+ viewed_query_ids = Blazer::Audit.where("created_at > ?", 90.days.ago).group(:query_id).count.keys.compact
18
+ Blazer::Query.active.where.not(id: viewed_query_ids).update_all(status: "archived")
19
+ end
11
20
  end
@@ -0,0 +1,24 @@
1
+ Copyright (c) 2010, Ajax.org B.V.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+ * Redistributions of source code must retain the above copyright
7
+ notice, this list of conditions and the following disclaimer.
8
+ * Redistributions in binary form must reproduce the above copyright
9
+ notice, this list of conditions and the following disclaimer in the
10
+ documentation and/or other materials provided with the distribution.
11
+ * Neither the name of Ajax.org B.V. nor the
12
+ names of its contributors may be used to endorse or promote products
13
+ derived from this software without specific prior written permission.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
19
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2011-2016 Twitter, Inc.
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.
@@ -0,0 +1,9 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Chart.js Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013-2019 Andrew Kane
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2012-2020 Dan Grossman
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.
@@ -0,0 +1,20 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright © 2015 Nicolas Bevacqua
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ 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, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,29 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2006, Ivan Sagalaev.
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ * Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions and the following disclaimer.
11
+
12
+ * Redistributions in binary form must reproduce the above copyright notice,
13
+ this list of conditions and the following disclaimer in the documentation
14
+ and/or other materials provided with the distribution.
15
+
16
+ * Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2007-2016 Contributors at http://github.com/rails/jquery-ujs/contributors
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,20 @@
1
+ Copyright OpenJS Foundation and other contributors, https://openjsf.org/
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.