pg_rails 7.0.8.pre.alpha.26 → 7.0.8.pre.alpha.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/pg_engine/app/controllers/concerns/pg_engine/resource.rb +1 -0
- data/pg_engine/app/controllers/pg_engine/base_controller.rb +4 -0
- data/pg_engine/app/lib/pg_engine/error_helper.rb +2 -0
- data/pg_engine/app/lib/pg_form_builder.rb +19 -2
- data/pg_engine/spec/lib/pg_engine/error_helper_spec.rb +2 -2
- data/pg_engine/spec/lib/pg_form_builder_spec.rb +33 -1
- data/pg_layout/app/javascript/application.js +28 -0
- data/pg_layout/app/javascript/controllers/pg_form_controller.js +12 -0
- data/pg_layout/app/lib/navbar.rb +3 -0
- data/pg_layout/app/views/layouts/pg_layout/base.html.slim +3 -1
- data/pg_layout/app/views/pg_layout/_navbar.html.erb +7 -7
- data/pg_rails/lib/version.rb +1 -1
- metadata +2 -3
- data/pg_layout/app/views/pg_layout/_rollbar.html.erb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2090fbe898d25e227b13261a788564b15149cc5e732bd73609b9fa1ca7dd2f0
|
4
|
+
data.tar.gz: 5024586aeba0ceaa65887565aa638762e70807e8db8518094b2f3f5085941902
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b97d2de94a3db6ab66be03341ce2df03c1632fa7e13a7435619202a5f3cb0d71ffa537d30add4f997112d2680b87839d26bde254c997c46fd660a8abdae40ee
|
7
|
+
data.tar.gz: 4cf0d683b00d0a3e548c823c16b273cb2e9e12206d8baf6b2b821f09f9a031b1eebadd37abf962297310ddc70fd2092fdab081a6acabf9bd7e3471aecb753c73
|
@@ -21,6 +21,7 @@ module PgEngine
|
|
21
21
|
@collection = filtros_y_policy atributos_para_buscar
|
22
22
|
@collection = sort_collection(@collection)
|
23
23
|
@records_filtered = policy_scope(clase_modelo).any? if @collection.empty?
|
24
|
+
# FIXME: si hay pero en páginas anteriores, mostrar texto correspondiente
|
24
25
|
pg_respond_index
|
25
26
|
end
|
26
27
|
|
@@ -54,6 +54,10 @@ module PgEngine
|
|
54
54
|
'opened'
|
55
55
|
end
|
56
56
|
@navbar = Navbar.new(current_user)
|
57
|
+
|
58
|
+
if Rollbar.configuration.enabled && Rails.application.credentials.rollbar.present?
|
59
|
+
@rollbar_token = Rails.application.credentials.rollbar.access_token_client
|
60
|
+
end
|
57
61
|
end
|
58
62
|
|
59
63
|
def mobile_device?
|
@@ -2,6 +2,8 @@ module PgEngine
|
|
2
2
|
module ErrorHelper
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
|
+
# pg_engine/config/initializers/simple_form_monkey_patch.rb
|
6
|
+
|
5
7
|
def merge_association_errors(object, details, assoc_key)
|
6
8
|
details = details.except(assoc_key)
|
7
9
|
assoc_items = object.send(assoc_key).map(&:errors).map(&:details)
|
@@ -26,11 +26,28 @@ class PgFormBuilder < SimpleForm::FormBuilder
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def mensajes_de_error
|
29
|
+
title = error_notification(message: mensaje, class: 'text-danger mb-2 error-title') if mensaje
|
30
|
+
|
29
31
|
base_errors = object.errors[:base]
|
30
32
|
base_message = (base_errors.map(&:to_s).join('<br>') if base_errors.present?)
|
31
|
-
title = error_notification(message: mensaje, class: 'text-danger mb-2') if mensaje
|
32
33
|
base_tag = error_notification(message: base_message, class: 'alert alert-danger') if base_message
|
33
|
-
|
34
|
+
|
35
|
+
all_errors_tag = build_all_errors_tag unless base_tag
|
36
|
+
|
37
|
+
"#{title}#{base_tag}#{all_errors_tag}".html_safe # rubocop:disable Rails/OutputSafety
|
38
|
+
end
|
39
|
+
|
40
|
+
def build_all_errors_tag
|
41
|
+
details = object.errors.details.dup
|
42
|
+
details.delete(:base)
|
43
|
+
not_base_errors = details.any?
|
44
|
+
|
45
|
+
return unless not_base_errors
|
46
|
+
|
47
|
+
# TODO!: poder pasar un block para que no se ejecute si no se va a loguear por el log level
|
48
|
+
pg_warn "Not base errors en pg_form: #{object.errors.details}. Record: #{object.inspect}", :debug
|
49
|
+
|
50
|
+
"<span class='not_base_errors' data-errors='#{object.errors.details.to_json}'></span>"
|
34
51
|
end
|
35
52
|
|
36
53
|
def mensaje
|
@@ -29,7 +29,7 @@ describe PgEngine::ErrorHelper do
|
|
29
29
|
|
30
30
|
context 'cuando solo tiene otros errores' do
|
31
31
|
before do
|
32
|
-
categoria.
|
32
|
+
categoria.validate_base = true
|
33
33
|
end
|
34
34
|
|
35
35
|
it do
|
@@ -39,7 +39,7 @@ describe PgEngine::ErrorHelper do
|
|
39
39
|
|
40
40
|
context 'cuando tiene multiples errores' do
|
41
41
|
before do
|
42
|
-
categoria.
|
42
|
+
categoria.validate_base = true
|
43
43
|
categoria.nombre = nil
|
44
44
|
end
|
45
45
|
|
@@ -2,11 +2,43 @@ require 'rails_helper'
|
|
2
2
|
|
3
3
|
describe PgFormBuilder do
|
4
4
|
let(:categoria) { create :categoria_de_cosa }
|
5
|
-
let(:template)
|
5
|
+
let(:template) do
|
6
|
+
klass = Class.new
|
7
|
+
klass.include ActionView::Helpers::TagHelper
|
8
|
+
klass.new
|
9
|
+
end
|
10
|
+
|
6
11
|
let(:instancia) { described_class.new('bla', categoria, template, {}) }
|
7
12
|
|
8
13
|
before { create_list :cosa, 2, categoria_de_cosa: categoria }
|
9
14
|
|
15
|
+
describe '#mensajes_de_error' do
|
16
|
+
subject { instancia.mensajes_de_error }
|
17
|
+
|
18
|
+
# expect(subject)
|
19
|
+
# it { expect(subject).to eq 'Por favor, revisá los campos obligatorios:' }
|
20
|
+
|
21
|
+
context 'cuando solo tiene errores de presencia' do
|
22
|
+
before do
|
23
|
+
categoria.nombre = nil
|
24
|
+
categoria.validate
|
25
|
+
end
|
26
|
+
|
27
|
+
it { expect(subject).to include 'Por favor, revisá los campos obligatorios:' }
|
28
|
+
it { expect(subject).to include 'not_base_errors' }
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'cuando solo tiene errores de :base' do
|
32
|
+
before do
|
33
|
+
categoria.validate_base = true
|
34
|
+
categoria.validate
|
35
|
+
end
|
36
|
+
|
37
|
+
it { expect(subject).to include 'Por favor, revisá los siguientes errores' }
|
38
|
+
it { expect(subject).not_to include 'not_base_errors' }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
10
42
|
describe '#mensaje' do
|
11
43
|
subject { instancia.mensaje }
|
12
44
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import Rollbar from 'rollbar'
|
2
|
+
|
1
3
|
import './config'
|
2
4
|
import './channels'
|
3
5
|
import './controllers'
|
@@ -5,6 +7,32 @@ import './controllers'
|
|
5
7
|
// Bootstrap's toasts
|
6
8
|
import * as bootstrap from 'bootstrap'
|
7
9
|
|
10
|
+
let rollbarToken = document.head.querySelector('meta[name=rollbar-token]')
|
11
|
+
rollbarToken = rollbarToken && rollbarToken.content
|
12
|
+
if (rollbarToken) {
|
13
|
+
let rollbarEnv = document.head.querySelector('meta[name=rollbar-env]')
|
14
|
+
rollbarEnv = rollbarEnv && rollbarEnv.content
|
15
|
+
rollbarEnv = rollbarEnv || 'unknown'
|
16
|
+
|
17
|
+
window.Rollbar = Rollbar
|
18
|
+
|
19
|
+
Rollbar.init()
|
20
|
+
|
21
|
+
Rollbar.global({
|
22
|
+
itemsPerMinute: 2,
|
23
|
+
maxItems: 5
|
24
|
+
})
|
25
|
+
Rollbar.configure({
|
26
|
+
accessToken: rollbarToken,
|
27
|
+
captureUncaught: true,
|
28
|
+
captureUnhandledRejections: true,
|
29
|
+
reportLevel: 'warning',
|
30
|
+
payload: {
|
31
|
+
environment: rollbarEnv
|
32
|
+
}
|
33
|
+
})
|
34
|
+
}
|
35
|
+
|
8
36
|
document.addEventListener('turbo:load', bindToasts)
|
9
37
|
document.addEventListener('turbo:render', bindToasts)
|
10
38
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { Controller } from '@hotwired/stimulus'
|
2
|
+
import Rollbar from 'rollbar'
|
2
3
|
|
3
4
|
export default class extends Controller {
|
4
5
|
connect () {
|
@@ -9,5 +10,16 @@ export default class extends Controller {
|
|
9
10
|
}
|
10
11
|
})
|
11
12
|
})
|
13
|
+
const notBaseErrors = this.element.querySelector('.not_base_errors')
|
14
|
+
|
15
|
+
if (notBaseErrors) {
|
16
|
+
const invalidFields = document.querySelector('.form-control.is-invalid,.form-select.is-invalid')
|
17
|
+
if (!invalidFields) {
|
18
|
+
console.error(notBaseErrors.dataset.errors)
|
19
|
+
Rollbar.error(notBaseErrors.dataset.errors)
|
20
|
+
const errorTitle = this.element.querySelector('.error-title')
|
21
|
+
errorTitle.innerText = 'Lo lamentamos mucho pero ocurrió algo inesperado'
|
22
|
+
}
|
23
|
+
}
|
12
24
|
}
|
13
25
|
}
|
data/pg_layout/app/lib/navbar.rb
CHANGED
@@ -16,7 +16,9 @@ html
|
|
16
16
|
|
17
17
|
= stylesheet_link_tag 'application', 'data-turbo-track': 'reload'
|
18
18
|
= javascript_include_tag 'application', 'data-turbo-track': 'reload', type: 'module'
|
19
|
-
|
19
|
+
- if @rollbar_token.present?
|
20
|
+
meta name="rollbar-token" content="#{@rollbar_token}"
|
21
|
+
meta name="rollbar-env" content="#{Rails.env}"
|
20
22
|
body
|
21
23
|
div class="#{ @sidebar == false ? '' : 'with-sidebar' }"
|
22
24
|
- unless @sidebar == false
|
@@ -54,16 +54,16 @@
|
|
54
54
|
</a>
|
55
55
|
</li>
|
56
56
|
<% end %>
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
57
|
+
<% end %>
|
58
|
+
</ul>
|
59
|
+
<% unless user_signed_in? %>
|
60
|
+
<%= link_to t("devise.sign_up"), new_user_registration_path, class: 'btn btn-success' %>
|
61
|
+
<ul class="navbar-nav mb-2 mb-lg-0">
|
62
62
|
<li class="nav-item">
|
63
63
|
<%= link_to t("devise.sign_in"), new_user_session_path, class: 'nav-link' %>
|
64
64
|
</li>
|
65
|
-
|
66
|
-
|
65
|
+
</ul>
|
66
|
+
<% end %>
|
67
67
|
<% @navbar.extensiones.each do |extension| %>
|
68
68
|
<%= extension %>
|
69
69
|
<% end %>
|
data/pg_rails/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.8.pre.alpha.
|
4
|
+
version: 7.0.8.pre.alpha.28
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martín Rosso
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-04-
|
11
|
+
date: 2024-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -200,7 +200,6 @@ files:
|
|
200
200
|
- pg_layout/app/views/pg_layout/_flash.html.slim
|
201
201
|
- pg_layout/app/views/pg_layout/_flash_alert.html.slim
|
202
202
|
- pg_layout/app/views/pg_layout/_navbar.html.erb
|
203
|
-
- pg_layout/app/views/pg_layout/_rollbar.html.erb
|
204
203
|
- pg_layout/app/views/pg_layout/_sidebar.html.erb
|
205
204
|
- pg_layout/lib/pg_layout.rb
|
206
205
|
- pg_layout/lib/pg_layout/engine.rb
|
@@ -1,28 +0,0 @@
|
|
1
|
-
<% if Rollbar.configuration.enabled && Rails.application.credentials.rollbar.present? %>
|
2
|
-
<script>
|
3
|
-
var _rollbarConfig = {
|
4
|
-
accessToken: '<%= Rails.application.credentials.rollbar.access_token_client %>',
|
5
|
-
captureUncaught: true,
|
6
|
-
captureUnhandledRejections: true,
|
7
|
-
payload: {
|
8
|
-
environment: <%= Rails.env %>,
|
9
|
-
//trace_id: 'abc',
|
10
|
-
client: {
|
11
|
-
javascript: {
|
12
|
-
code_version: '1.0.0',
|
13
|
-
//source_map_enabled: true,
|
14
|
-
//guess_uncaught_frames: true
|
15
|
-
}
|
16
|
-
},
|
17
|
-
//server: {
|
18
|
-
//root: 'http://localhost:8000/demo/',
|
19
|
-
//host: 'host-1',
|
20
|
-
//branch: 'HEAD',
|
21
|
-
//},
|
22
|
-
}
|
23
|
-
};
|
24
|
-
// Rollbar Snippet
|
25
|
-
!function(r){var e={};function o(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return r[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=r,o.c=e,o.d=function(r,e,n){o.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},o.r=function(r){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},o.t=function(r,e){if(1&e&&(r=o(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var t in r)o.d(n,t,function(e){return r[e]}.bind(null,t));return n},o.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return o.d(e,"a",e),e},o.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},o.p="",o(o.s=0)}([function(r,e,o){"use strict";var n=o(1),t=o(5);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||"https://cdn.rollbar.com/rollbarjs/refs/tags/v2.26.3/rollbar.min.js",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){"use strict";var n=o(2),t=o(3);function a(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error("[Rollbar]: Internal error",r)}catch(r){}}}}var l=0;function i(r,e){this.options=r,this._rollbarOldOnError=null;var o=l++;this.shimId=function(){return o},"undefined"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}var s=o(4),d=function(r,e){return new i(r,e)},c=function(r){return new s(d,r)};function u(r){return a((function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)}))}i.prototype.loadFull=function(r,e,o,n,t){var l=!1,i=e.createElement("script"),s=e.getElementsByTagName("script")[0],d=s.parentNode;i.crossOrigin="",i.src=n.rollbarJsUrl,o||(i.async=!0),i.onload=i.onreadystatechange=a((function(){if(!(l||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){i.onload=i.onreadystatechange=null;try{d.removeChild(i)}catch(r){}l=!0,function(){var e;if(void 0===r._rollbarDidLoad){e=new Error("rollbar.js did not load");for(var o,n,a,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(a=n.args||[],i=0;i<a.length;++i)if("function"==typeof(l=a[i])){l(e);break}}"function"==typeof t&&t(e)}()}})),d.insertBefore(i,s)},i.prototype.wrap=function(r,e,o){try{var n;if(n="function"==typeof e?e:function(){return e||{}},"function"!=typeof r)return r;if(r._isWrap)return r;if(!r._rollbar_wrapped&&(r._rollbar_wrapped=function(){o&&"function"==typeof o&&o.apply(this,arguments);try{return r.apply(this,arguments)}catch(o){var e=o;throw e&&("string"==typeof e&&(e=new String(e)),e._rollbarContext=n()||{},e._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=e),e}},r._rollbar_wrapped._isWrap=!0,r.hasOwnProperty))for(var t in r)r.hasOwnProperty(t)&&(r._rollbar_wrapped[t]=r[t]);return r._rollbar_wrapped}catch(e){return r}};for(var p="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad".split(","),f=0;f<p.length;++f)i.prototype[p[f]]=u(p[f]);r.exports={setupShim:function(r,e){if(r){var o=e.globalAlias||"Rollbar";if("object"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var l=new c(e);return a((function(){e.captureUncaught&&(l._rollbarOldOnError=r.onerror,n.captureUncaughtExceptions(r,l,!0),e.wrapGlobalEventHandlers&&t(r,l,!0)),e.captureUnhandledRejections&&n.captureUnhandledRejections(r,l,!0);var a=e.autoInstrument;return!1!==e.enabled&&(void 0===a||!0===a||function(r){return!("object"!=typeof r||void 0!==r.page&&!r.page)}(a))&&r.addEventListener&&(r.addEventListener("load",l.captureLoad.bind(l)),r.addEventListener("DOMContentLoaded",l.captureDomContentLoaded.bind(l))),r[o]=l,l}))()}},Rollbar:c}},function(r,e,o){"use strict";function n(r,e,o,n){r._rollbarWrappedError&&(n[4]||(n[4]=r._rollbarWrappedError),n[5]||(n[5]=r._rollbarWrappedError._rollbarContext),r._rollbarWrappedError=null);var t=e.handleUncaughtException.apply(e,n);o&&o.apply(r,n),"anonymous"===t&&(e.anonymousErrorsPending+=1)}r.exports={captureUncaughtExceptions:function(r,e,o){if(r){var t;if("function"==typeof e._rollbarOldOnError)t=e._rollbarOldOnError;else if(r.onerror){for(t=r.onerror;t._rollbarOldOnError;)t=t._rollbarOldOnError;e._rollbarOldOnError=t}e.handleAnonymousErrors();var a=function(){var o=Array.prototype.slice.call(arguments,0);n(r,e,t,o)};o&&(a._rollbarOldOnError=t),r.onerror=a}},captureUnhandledRejections:function(r,e,o){if(r){"function"==typeof r._rollbarURH&&r._rollbarURH.belongsToShim&&r.removeEventListener("unhandledrejection",r._rollbarURH);var n=function(r){var o,n,t;try{o=r.reason}catch(r){o=void 0}try{n=r.promise}catch(r){n="[unhandledrejection] error getting `promise` from event"}try{t=r.detail,!o&&t&&(o=t.reason,n=t.promise)}catch(r){}o||(o="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(o,n)};n.belongsToShim=o,r._rollbarURH=n,r.addEventListener("unhandledrejection",n)}}}},function(r,e,o){"use strict";function n(r,e,o){if(e.hasOwnProperty&&e.hasOwnProperty("addEventListener")){for(var n=e.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var t=function(e,o,t){n.call(this,e,r.wrap(o),t)};t._rollbarOldAdd=n,t.belongsToShim=o,e.addEventListener=t;for(var a=e.removeEventListener;a._rollbarOldRemove&&a.belongsToShim;)a=a._rollbarOldRemove;var l=function(r,e,o){a.call(this,r,e&&e._rollbar_wrapped||e,o)};l._rollbarOldRemove=a,l.belongsToShim=o,e.removeEventListener=l}}r.exports=function(r,e,o){if(r){var t,a,l="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(t=0;t<l.length;++t)r[a=l[t]]&&r[a].prototype&&n(e,r[a].prototype,o)}}},function(r,e,o){"use strict";function n(r,e){this.impl=r(e,this),this.options=e,function(r){for(var e=function(r){return function(){var e=Array.prototype.slice.call(arguments,0);if(this.impl[r])return this.impl[r].apply(this.impl,e)}},o="log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad".split(","),n=0;n<o.length;n++)r[o[n]]=e(o[n])}(n.prototype)}n.prototype._swapAndProcessMessages=function(r,e){var o,n,t;for(this.impl=r(this.options);o=e.shift();)n=o.method,t=o.args,this[n]&&"function"==typeof this[n]&&("captureDomContentLoaded"===n||"captureLoad"===n?this[n].apply(this,[t[0],o.ts]):this[n].apply(this,t));return this},r.exports=n},function(r,e,o){"use strict";r.exports=function(r){return function(e){if(!e&&!window._rollbarInitialized){for(var o,n,t=(r=r||{}).globalAlias||"Rollbar",a=window.rollbar,l=function(r){return new a(r)},i=0;o=window._rollbarShims[i++];)n||(n=o.handler),o.handler._swapAndProcessMessages(l,o.messages);window[t]=n,window._rollbarInitialized=!0}}}}]);
|
26
|
-
// End Rollbar Snippet
|
27
|
-
</script>
|
28
|
-
<% end %>
|