fullcalendar.io-rails 2.8.0 → 2.9.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 97c1c9f136922333dd29691a912b6177fee23405
4
- data.tar.gz: 92a2a4efc4388a10ceeaca3df3be51fa28346931
3
+ metadata.gz: 8d30dd3218499cddafae61a0749e8fb9ca748b74
4
+ data.tar.gz: 5c3f5fedc1f56da63e9dc095df5e46924c02e23a
5
5
  SHA512:
6
- metadata.gz: e508564ee09050aea7351c7bd31d2122d41e8adae7a99ee05f6678692f988afd1793160e5a8fc16c8cc1f7e2e4e0119962dad3a89e94d509e47a926c34233e02
7
- data.tar.gz: 2dc54784ae31c0b61b8c2099acd570ea283ff0b79804f41c597cd01030347700074c780fb3b1bf5cc03ad4ff7f1e8ae13ae9b245e1c2b2a61a3064fcd6057be9
6
+ metadata.gz: 07ed7e3d07243e40f9e8e0c1ddd80eaaaf4f8c25d8e040d701d4236d12bc600f4a40c8d10698a024744d677de5611590a199c54ee76cd62effa9667a71e6463b
7
+ data.tar.gz: b93ccf3cf603cfb261b881fd29faa4b1a7309cbad46395afd1a2d594945f6c0170749d3bf5c19bc94630d37dcac010fcdb6a8b1301e0e8ee7fdae66f42c3556c
@@ -1,5 +1,5 @@
1
1
  module Fullcalendario
2
2
  module Rails
3
- VERSION = "2.8.0"
3
+ VERSION = "2.9.0"
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * FullCalendar v2.8.0
2
+ * FullCalendar v2.9.0
3
3
  * Docs & License: http://fullcalendar.io/
4
4
  * (c) 2016 Adam Shaw
5
5
  */
@@ -19,7 +19,7 @@
19
19
  ;;
20
20
 
21
21
  var FC = $.fullCalendar = {
22
- version: "2.8.0",
22
+ version: "2.9.0",
23
23
  internalApiVersion: 4
24
24
  };
25
25
  var fcViews = FC.views = {};
@@ -5663,6 +5663,11 @@ var DayGrid = FC.DayGrid = Grid.extend(DayTableMixin, {
5663
5663
  },
5664
5664
 
5665
5665
 
5666
+ unrenderBusinessHours: function() {
5667
+ this.unrenderFill('businessHours');
5668
+ },
5669
+
5670
+
5666
5671
  // Generates the HTML for a single row, which is a div that wraps a table.
5667
5672
  // `row` is the row number.
5668
5673
  renderDayRowHtml: function(row, isRigid) {
@@ -8110,12 +8115,12 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, {
8110
8115
  // Does everything necessary to display the view centered around the given unzoned date.
8111
8116
  // Does every type of rendering EXCEPT rendering events.
8112
8117
  // Is asychronous and returns a promise.
8113
- display: function(date) {
8118
+ display: function(date, explicitScrollState) {
8114
8119
  var _this = this;
8115
- var scrollState = null;
8120
+ var prevScrollState = null;
8116
8121
 
8117
- if (this.displaying) {
8118
- scrollState = this.queryScroll();
8122
+ if (explicitScrollState != null && this.displaying) { // don't need prevScrollState if explicitScrollState
8123
+ prevScrollState = this.queryScroll();
8119
8124
  }
8120
8125
 
8121
8126
  this.calendar.freezeContentHeight();
@@ -8124,7 +8129,17 @@ var View = FC.View = Class.extend(EmitterMixin, ListenerMixin, {
8124
8129
  return (
8125
8130
  _this.displaying =
8126
8131
  syncThen(_this.displayView(date), function() { // displayView might return a promise
8127
- _this.forceScroll(_this.computeInitialScroll(scrollState));
8132
+
8133
+ // caller of display() wants a specific scroll state?
8134
+ if (explicitScrollState != null) {
8135
+ // we make an assumption that this is NOT the initial render,
8136
+ // and thus don't need forceScroll (is inconveniently asynchronous)
8137
+ _this.setScroll(explicitScrollState);
8138
+ }
8139
+ else {
8140
+ _this.forceScroll(_this.computeInitialScroll(prevScrollState));
8141
+ }
8142
+
8128
8143
  _this.calendar.unfreezeContentHeight();
8129
8144
  _this.triggerRender();
8130
8145
  })
@@ -9068,6 +9083,7 @@ var Calendar = FC.Calendar = Class.extend({
9068
9083
  dirDefaults: null, // option defaults related to LTR or RTL
9069
9084
  langDefaults: null, // option defaults related to current locale
9070
9085
  overrides: null, // option overrides given to the fullCalendar constructor
9086
+ dynamicOverrides: null, // options set with dynamic setter method. higher precedence than view overrides.
9071
9087
  options: null, // all defaults combined with overrides
9072
9088
  viewSpecCache: null, // cache of view definitions
9073
9089
  view: null, // current View object
@@ -9085,24 +9101,25 @@ var Calendar = FC.Calendar = Class.extend({
9085
9101
  },
9086
9102
 
9087
9103
 
9088
- // Initializes `this.options` and other important options-related objects
9089
- initOptions: function(overrides) {
9104
+ // Computes the flattened options hash for the calendar and assigns to `this.options`.
9105
+ // Assumes this.overrides and this.dynamicOverrides have already been initialized.
9106
+ populateOptionsHash: function() {
9090
9107
  var lang, langDefaults;
9091
9108
  var isRTL, dirDefaults;
9092
9109
 
9093
- // converts legacy options into non-legacy ones.
9094
- // in the future, when this is removed, don't use `overrides` reference. make a copy.
9095
- overrides = massageOverrides(overrides);
9096
-
9097
- lang = overrides.lang;
9110
+ lang = firstDefined( // explicit lang option given?
9111
+ this.dynamicOverrides.lang,
9112
+ this.overrides.lang
9113
+ );
9098
9114
  langDefaults = langOptionHash[lang];
9099
- if (!langDefaults) {
9115
+ if (!langDefaults) { // explicit lang option not given or invalid?
9100
9116
  lang = Calendar.defaults.lang;
9101
9117
  langDefaults = langOptionHash[lang] || {};
9102
9118
  }
9103
9119
 
9104
- isRTL = firstDefined(
9105
- overrides.isRTL,
9120
+ isRTL = firstDefined( // based on options computed so far, is direction RTL?
9121
+ this.dynamicOverrides.isRTL,
9122
+ this.overrides.isRTL,
9106
9123
  langDefaults.isRTL,
9107
9124
  Calendar.defaults.isRTL
9108
9125
  );
@@ -9110,16 +9127,14 @@ var Calendar = FC.Calendar = Class.extend({
9110
9127
 
9111
9128
  this.dirDefaults = dirDefaults;
9112
9129
  this.langDefaults = langDefaults;
9113
- this.overrides = overrides;
9114
9130
  this.options = mergeOptions([ // merge defaults and overrides. lowest to highest precedence
9115
9131
  Calendar.defaults, // global defaults
9116
9132
  dirDefaults,
9117
9133
  langDefaults,
9118
- overrides
9134
+ this.overrides,
9135
+ this.dynamicOverrides
9119
9136
  ]);
9120
- populateInstanceComputableOptions(this.options);
9121
-
9122
- this.viewSpecCache = {}; // somewhat unrelated
9137
+ populateInstanceComputableOptions(this.options); // fill in gaps with computed options
9123
9138
  },
9124
9139
 
9125
9140
 
@@ -9233,7 +9248,8 @@ var Calendar = FC.Calendar = Class.extend({
9233
9248
  this.dirDefaults,
9234
9249
  this.langDefaults, // locale and dir take precedence over view's defaults!
9235
9250
  this.overrides, // calendar's overrides (options given to constructor)
9236
- spec.overrides // view's overrides (view-specific options)
9251
+ spec.overrides, // view's overrides (view-specific options)
9252
+ this.dynamicOverrides // dynamically set via setter. highest precedence
9237
9253
  ]);
9238
9254
  populateInstanceComputableOptions(spec.options);
9239
9255
  },
@@ -9252,6 +9268,7 @@ var Calendar = FC.Calendar = Class.extend({
9252
9268
 
9253
9269
  // highest to lowest priority
9254
9270
  spec.buttonTextOverride =
9271
+ queryButtonText(this.dynamicOverrides) ||
9255
9272
  queryButtonText(this.overrides) || // constructor-specified buttonText lookup hash takes precedence
9256
9273
  spec.overrides.buttonText; // `buttonText` for view-specific options is a string
9257
9274
 
@@ -9324,10 +9341,6 @@ function Calendar_constructor(element, overrides) {
9324
9341
  var t = this;
9325
9342
 
9326
9343
 
9327
- t.initOptions(overrides || {});
9328
- var options = this.options;
9329
-
9330
-
9331
9344
  // Exports
9332
9345
  // -----------------------------------------------------------------------------------
9333
9346
 
@@ -9352,50 +9365,76 @@ function Calendar_constructor(element, overrides) {
9352
9365
  t.getDate = getDate;
9353
9366
  t.getCalendar = getCalendar;
9354
9367
  t.getView = getView;
9355
- t.option = option;
9368
+ t.option = option; // getter/setter method
9356
9369
  t.trigger = trigger;
9357
9370
 
9358
9371
 
9372
+ // Options
9373
+ // -----------------------------------------------------------------------------------
9374
+
9375
+ t.dynamicOverrides = {};
9376
+ t.viewSpecCache = {};
9377
+ t.optionHandlers = {}; // for Calendar.options.js
9378
+
9379
+ // convert legacy options into non-legacy ones.
9380
+ // in the future, when this is removed, don't use `overrides` reference. make a copy.
9381
+ t.overrides = massageOverrides(overrides || {});
9382
+
9383
+ t.populateOptionsHash(); // sets this.options
9384
+
9385
+
9359
9386
 
9360
9387
  // Language-data Internals
9361
9388
  // -----------------------------------------------------------------------------------
9362
9389
  // Apply overrides to the current language's data
9363
9390
 
9391
+ var localeData;
9364
9392
 
9365
- var localeData = createObject( // make a cheap copy
9366
- getMomentLocaleData(options.lang) // will fall back to en
9367
- );
9393
+ // Called immediately, and when any of the options change.
9394
+ // Happens before any internal objects rebuild or rerender, because this is very core.
9395
+ t.bindOptions([
9396
+ 'lang', 'monthNames', 'monthNamesShort', 'dayNames', 'dayNamesShort', 'firstDay', 'weekNumberCalculation'
9397
+ ], function(lang, monthNames, monthNamesShort, dayNames, dayNamesShort, firstDay, weekNumberCalculation) {
9368
9398
 
9369
- if (options.monthNames) {
9370
- localeData._months = options.monthNames;
9371
- }
9372
- if (options.monthNamesShort) {
9373
- localeData._monthsShort = options.monthNamesShort;
9374
- }
9375
- if (options.dayNames) {
9376
- localeData._weekdays = options.dayNames;
9377
- }
9378
- if (options.dayNamesShort) {
9379
- localeData._weekdaysShort = options.dayNamesShort;
9380
- }
9381
- if (options.firstDay != null) {
9382
- var _week = createObject(localeData._week); // _week: { dow: # }
9383
- _week.dow = options.firstDay;
9384
- localeData._week = _week;
9385
- }
9399
+ localeData = createObject( // make a cheap copy
9400
+ getMomentLocaleData(lang) // will fall back to en
9401
+ );
9402
+
9403
+ if (monthNames) {
9404
+ localeData._months = monthNames;
9405
+ }
9406
+ if (monthNamesShort) {
9407
+ localeData._monthsShort = monthNamesShort;
9408
+ }
9409
+ if (dayNames) {
9410
+ localeData._weekdays = dayNames;
9411
+ }
9412
+ if (dayNamesShort) {
9413
+ localeData._weekdaysShort = dayNamesShort;
9414
+ }
9415
+ if (firstDay != null) {
9416
+ var _week = createObject(localeData._week); // _week: { dow: # }
9417
+ _week.dow = firstDay;
9418
+ localeData._week = _week;
9419
+ }
9386
9420
 
9387
- // assign a normalized value, to be used by our .week() moment extension
9388
- localeData._fullCalendar_weekCalc = (function(weekCalc) {
9389
- if (typeof weekCalc === 'function') {
9390
- return weekCalc;
9421
+ if (weekNumberCalculation === 'iso') {
9422
+ weekNumberCalculation = 'ISO'; // normalize
9391
9423
  }
9392
- else if (weekCalc === 'local') {
9393
- return weekCalc;
9424
+ if ( // whitelist certain kinds of input
9425
+ weekNumberCalculation === 'ISO' ||
9426
+ weekNumberCalculation === 'local' ||
9427
+ typeof weekNumberCalculation === 'function'
9428
+ ) {
9429
+ localeData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it
9394
9430
  }
9395
- else if (weekCalc === 'iso' || weekCalc === 'ISO') {
9396
- return 'ISO';
9431
+
9432
+ // If the internal current date object already exists, move to new locale.
9433
+ // We do NOT need to do this technique for event dates, because this happens when converting to "segments".
9434
+ if (date) {
9435
+ localizeMoment(date); // sets to localeData
9397
9436
  }
9398
- })(options.weekNumberCalculation);
9437
+ });
9399
9438
 
9400
9439
 
9401
9440
 
@@ -9403,8 +9442,8 @@ function Calendar_constructor(element, overrides) {
9403
9442
  // -----------------------------------------------------------------------------------
9404
9443
 
9405
9444
 
9406
- t.defaultAllDayEventDuration = moment.duration(options.defaultAllDayEventDuration);
9407
- t.defaultTimedEventDuration = moment.duration(options.defaultTimedEventDuration);
9445
+ t.defaultAllDayEventDuration = moment.duration(t.options.defaultAllDayEventDuration);
9446
+ t.defaultTimedEventDuration = moment.duration(t.options.defaultTimedEventDuration);
9408
9447
 
9409
9448
 
9410
9449
  // Builds a moment using the settings of the current calendar: timezone and language.
@@ -9412,7 +9451,7 @@ function Calendar_constructor(element, overrides) {
9412
9451
  t.moment = function() {
9413
9452
  var mom;
9414
9453
 
9415
- if (options.timezone === 'local') {
9454
+ if (t.options.timezone === 'local') {
9416
9455
  mom = FC.moment.apply(null, arguments);
9417
9456
 
9418
9457
  // Force the moment to be local, because FC.moment doesn't guarantee it.
@@ -9420,28 +9459,34 @@ function Calendar_constructor(element, overrides) {
9420
9459
  mom.local();
9421
9460
  }
9422
9461
  }
9423
- else if (options.timezone === 'UTC') {
9462
+ else if (t.options.timezone === 'UTC') {
9424
9463
  mom = FC.moment.utc.apply(null, arguments); // process as UTC
9425
9464
  }
9426
9465
  else {
9427
9466
  mom = FC.moment.parseZone.apply(null, arguments); // let the input decide the zone
9428
9467
  }
9429
9468
 
9469
+ localizeMoment(mom);
9470
+
9471
+ return mom;
9472
+ };
9473
+
9474
+
9475
+ // Updates the given moment's locale settings to the current calendar locale settings.
9476
+ function localizeMoment(mom) {
9430
9477
  if ('_locale' in mom) { // moment 2.8 and above
9431
9478
  mom._locale = localeData;
9432
9479
  }
9433
9480
  else { // pre-moment-2.8
9434
9481
  mom._lang = localeData;
9435
9482
  }
9436
-
9437
- return mom;
9438
- };
9483
+ }
9439
9484
 
9440
9485
 
9441
9486
  // Returns a boolean about whether or not the calendar knows how to calculate
9442
9487
  // the timezone offset of arbitrary dates in the current timezone.
9443
9488
  t.getIsAmbigTimezone = function() {
9444
- return options.timezone !== 'local' && options.timezone !== 'UTC';
9489
+ return t.options.timezone !== 'local' && t.options.timezone !== 'UTC';
9445
9490
  };
9446
9491
 
9447
9492
 
@@ -9470,7 +9515,7 @@ function Calendar_constructor(element, overrides) {
9470
9515
  // Returns a moment for the current date, as defined by the client's computer or from the `now` option.
9471
9516
  // Will return an moment with an ambiguous timezone.
9472
9517
  t.getNow = function() {
9473
- var now = options.now;
9518
+ var now = t.options.now;
9474
9519
  if (typeof now === 'function') {
9475
9520
  now = now();
9476
9521
  }
@@ -9512,7 +9557,7 @@ function Calendar_constructor(element, overrides) {
9512
9557
  // Produces a human-readable string for the given duration.
9513
9558
  // Side-effect: changes the locale of the given duration.
9514
9559
  t.humanizeDuration = function(duration) {
9515
- return (duration.locale || duration.lang).call(duration, options.lang) // works moment-pre-2.8
9560
+ return (duration.locale || duration.lang).call(duration, t.options.lang) // works moment-pre-2.8
9516
9561
  .humanize();
9517
9562
  };
9518
9563
 
@@ -9522,7 +9567,7 @@ function Calendar_constructor(element, overrides) {
9522
9567
  // -----------------------------------------------------------------------------------
9523
9568
 
9524
9569
 
9525
- EventManager.call(t, options);
9570
+ EventManager.call(t);
9526
9571
  var isFetchNeeded = t.isFetchNeeded;
9527
9572
  var fetchEvents = t.fetchEvents;
9528
9573
  var fetchEventSources = t.fetchEventSources;
@@ -9535,7 +9580,6 @@ function Calendar_constructor(element, overrides) {
9535
9580
 
9536
9581
  var _element = element[0];
9537
9582
  var header;
9538
- var headerElement;
9539
9583
  var content;
9540
9584
  var tm; // for making theme classes
9541
9585
  var currentView; // NOTE: keep this in sync with this.view
@@ -9553,8 +9597,8 @@ function Calendar_constructor(element, overrides) {
9553
9597
 
9554
9598
 
9555
9599
  // compute the initial ambig-timezone date
9556
- if (options.defaultDate != null) {
9557
- date = t.moment(options.defaultDate).stripZone();
9600
+ if (t.options.defaultDate != null) {
9601
+ date = t.moment(t.options.defaultDate).stripZone();
9558
9602
  }
9559
9603
  else {
9560
9604
  date = t.getNow(); // getNow already returns unzoned
@@ -9574,38 +9618,43 @@ function Calendar_constructor(element, overrides) {
9574
9618
 
9575
9619
 
9576
9620
  function initialRender() {
9577
- tm = options.theme ? 'ui' : 'fc';
9578
9621
  element.addClass('fc');
9579
9622
 
9580
- if (options.isRTL) {
9581
- element.addClass('fc-rtl');
9582
- }
9583
- else {
9584
- element.addClass('fc-ltr');
9585
- }
9623
+ // called immediately, and upon option change
9624
+ t.bindOption('theme', function(theme) {
9625
+ tm = theme ? 'ui' : 'fc'; // affects a larger scope
9626
+ element.toggleClass('ui-widget', theme);
9627
+ element.toggleClass('fc-unthemed', !theme);
9628
+ });
9586
9629
 
9587
- if (options.theme) {
9588
- element.addClass('ui-widget');
9589
- }
9590
- else {
9591
- element.addClass('fc-unthemed');
9592
- }
9630
+ // called immediately, and upon option change.
9631
+ // HACK: lang often affects isRTL, so we explicitly listen to that too.
9632
+ t.bindOptions([ 'isRTL', 'lang' ], function(isRTL) {
9633
+ element.toggleClass('fc-ltr', !isRTL);
9634
+ element.toggleClass('fc-rtl', isRTL);
9635
+ });
9593
9636
 
9594
9637
  content = $("<div class='fc-view-container'/>").prependTo(element);
9595
9638
 
9596
- header = t.header = new Header(t, options);
9597
- headerElement = header.render();
9598
- if (headerElement) {
9599
- element.prepend(headerElement);
9600
- }
9639
+ header = t.header = new Header(t);
9640
+ renderHeader();
9601
9641
 
9602
- renderView(options.defaultView);
9642
+ renderView(t.options.defaultView);
9603
9643
 
9604
- if (options.handleWindowResize) {
9605
- windowResizeProxy = debounce(windowResize, options.windowResizeDelay); // prevents rapid calls
9644
+ if (t.options.handleWindowResize) {
9645
+ windowResizeProxy = debounce(windowResize, t.options.windowResizeDelay); // prevents rapid calls
9606
9646
  $(window).resize(windowResizeProxy);
9607
9647
  }
9608
9648
  }
9649
+
9650
+
9651
+ // can be called repeatedly and Header will rerender
9652
+ function renderHeader() {
9653
+ header.render();
9654
+ if (header.el) {
9655
+ element.prepend(header.el);
9656
+ }
9657
+ }
9609
9658
 
9610
9659
 
9611
9660
  function destroy() {
@@ -9639,15 +9688,14 @@ function Calendar_constructor(element, overrides) {
9639
9688
 
9640
9689
  // Renders a view because of a date change, view-type change, or for the first time.
9641
9690
  // If not given a viewType, keep the current view but render different dates.
9642
- function renderView(viewType) {
9691
+ // Accepts an optional scroll state to restore to.
9692
+ function renderView(viewType, explicitScrollState) {
9643
9693
  ignoreWindowResize++;
9644
9694
 
9645
9695
  // if viewType is changing, remove the old view's rendering
9646
9696
  if (currentView && viewType && currentView.type !== viewType) {
9647
- header.deactivateButton(currentView.type);
9648
9697
  freezeContentHeight(); // prevent a scroll jump when view element is removed
9649
- currentView.removeElement();
9650
- currentView = t.view = null;
9698
+ clearView();
9651
9699
  }
9652
9700
 
9653
9701
  // if viewType changed, or the view was never created, create a fresh view
@@ -9674,7 +9722,7 @@ function Calendar_constructor(element, overrides) {
9674
9722
  ) {
9675
9723
  if (elementVisible()) {
9676
9724
 
9677
- currentView.display(date); // will call freezeContentHeight
9725
+ currentView.display(date, explicitScrollState); // will call freezeContentHeight
9678
9726
  unfreezeContentHeight(); // immediately unfreeze regardless of whether display is async
9679
9727
 
9680
9728
  // need to do this after View::render, so dates are calculated
@@ -9690,6 +9738,32 @@ function Calendar_constructor(element, overrides) {
9690
9738
  ignoreWindowResize--;
9691
9739
  }
9692
9740
 
9741
+
9742
+ // Unrenders the current view and reflects this change in the Header.
9743
+ // Unregsiters the `currentView`, but does not remove from viewByType hash.
9744
+ function clearView() {
9745
+ header.deactivateButton(currentView.type);
9746
+ currentView.removeElement();
9747
+ currentView = t.view = null;
9748
+ }
9749
+
9750
+
9751
+ // Destroys the view, including the view object. Then, re-instantiates it and renders it.
9752
+ // Maintains the same scroll state.
9753
+ // TODO: maintain any other user-manipulated state.
9754
+ function reinitView() {
9755
+ ignoreWindowResize++;
9756
+ freezeContentHeight();
9757
+
9758
+ var viewType = currentView.type;
9759
+ var scrollState = currentView.queryScroll();
9760
+ clearView();
9761
+ renderView(viewType, scrollState);
9762
+
9763
+ unfreezeContentHeight();
9764
+ ignoreWindowResize--;
9765
+ }
9766
+
9693
9767
 
9694
9768
 
9695
9769
  // Resizing
@@ -9705,7 +9779,7 @@ function Calendar_constructor(element, overrides) {
9705
9779
 
9706
9780
 
9707
9781
  t.isHeightAuto = function() {
9708
- return options.contentHeight === 'auto' || options.height === 'auto';
9782
+ return t.options.contentHeight === 'auto' || t.options.height === 'auto';
9709
9783
  };
9710
9784
 
9711
9785
 
@@ -9733,14 +9807,14 @@ function Calendar_constructor(element, overrides) {
9733
9807
 
9734
9808
 
9735
9809
  function _calcSize() { // assumes elementVisible
9736
- if (typeof options.contentHeight === 'number') { // exists and not 'auto'
9737
- suggestedViewHeight = options.contentHeight;
9810
+ if (typeof t.options.contentHeight === 'number') { // exists and not 'auto'
9811
+ suggestedViewHeight = t.options.contentHeight;
9738
9812
  }
9739
- else if (typeof options.height === 'number') { // exists and not 'auto'
9740
- suggestedViewHeight = options.height - (headerElement ? headerElement.outerHeight(true) : 0);
9813
+ else if (typeof t.options.height === 'number') { // exists and not 'auto'
9814
+ suggestedViewHeight = t.options.height - (header.el ? header.el.outerHeight(true) : 0);
9741
9815
  }
9742
9816
  else {
9743
- suggestedViewHeight = Math.round(content.width() / Math.max(options.aspectRatio, .5));
9817
+ suggestedViewHeight = Math.round(content.width() / Math.max(t.options.aspectRatio, .5));
9744
9818
  }
9745
9819
  }
9746
9820
 
@@ -9785,7 +9859,7 @@ function Calendar_constructor(element, overrides) {
9785
9859
 
9786
9860
 
9787
9861
  function getAndRenderEvents() {
9788
- if (!options.lazyFetching || isFetchNeeded(currentView.start, currentView.end)) {
9862
+ if (!t.options.lazyFetching || isFetchNeeded(currentView.start, currentView.end)) {
9789
9863
  fetchAndRenderEvents();
9790
9864
  }
9791
9865
  else {
@@ -9964,13 +10038,69 @@ function Calendar_constructor(element, overrides) {
9964
10038
 
9965
10039
 
9966
10040
  function option(name, value) {
9967
- if (value === undefined) {
9968
- return options[name];
10041
+ var newOptionHash;
10042
+
10043
+ if (typeof name === 'string') {
10044
+ if (value === undefined) { // getter
10045
+ return t.options[name];
10046
+ }
10047
+ else { // setter for individual option
10048
+ newOptionHash = {};
10049
+ newOptionHash[name] = value;
10050
+ setOptions(newOptionHash);
10051
+ }
10052
+ }
10053
+ else if (typeof name === 'object') { // compound setter with object input
10054
+ setOptions(name);
10055
+ }
10056
+ }
10057
+
10058
+
10059
+ function setOptions(newOptionHash) {
10060
+ var optionCnt = 0;
10061
+ var optionName;
10062
+
10063
+ for (optionName in newOptionHash) {
10064
+ t.dynamicOverrides[optionName] = newOptionHash[optionName];
9969
10065
  }
9970
- if (name == 'height' || name == 'contentHeight' || name == 'aspectRatio') {
9971
- options[name] = value;
9972
- updateSize(true); // true = allow recalculation of height
10066
+
10067
+ t.viewSpecCache = {}; // the dynamic override invalidates the options in this cache, so just clear it
10068
+ t.populateOptionsHash(); // this.options needs to be recomputed after the dynamic override
10069
+
10070
+ // trigger handlers after this.options has been updated
10071
+ for (optionName in newOptionHash) {
10072
+ t.triggerOptionHandlers(optionName); // recall bindOption/bindOptions
10073
+ optionCnt++;
9973
10074
  }
10075
+
10076
+ // special-case handling of single option change.
10077
+ // if only one option change, `optionName` will be its name.
10078
+ if (optionCnt === 1) {
10079
+ if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') {
10080
+ updateSize(true); // true = allow recalculation of height
10081
+ return;
10082
+ }
10083
+ else if (optionName === 'defaultDate') {
10084
+ return; // can't change date this way. use gotoDate instead
10085
+ }
10086
+ else if (optionName === 'businessHours') {
10087
+ if (currentView) {
10088
+ currentView.unrenderBusinessHours();
10089
+ currentView.renderBusinessHours();
10090
+ }
10091
+ return;
10092
+ }
10093
+ else if (optionName === 'timezone') {
10094
+ t.rezoneArrayEventSources();
10095
+ refetchEvents();
10096
+ return;
10097
+ }
10098
+ }
10099
+
10100
+ // catch-all. rerender the header and rebuild/rerender the current view
10101
+ renderHeader();
10102
+ viewsByType = {}; // even non-current views will be affected by this option change. do before rerender
10103
+ reinitView();
9974
10104
  }
9975
10105
 
9976
10106
 
@@ -9980,14 +10110,78 @@ function Calendar_constructor(element, overrides) {
9980
10110
  thisObj = thisObj || _element;
9981
10111
  this.triggerWith(name, thisObj, args); // Emitter's method
9982
10112
 
9983
- if (options[name]) {
9984
- return options[name].apply(thisObj, args);
10113
+ if (t.options[name]) {
10114
+ return t.options[name].apply(thisObj, args);
9985
10115
  }
9986
10116
  }
9987
10117
 
9988
10118
  t.initialize();
9989
10119
  }
9990
10120
 
10121
+ ;;
10122
+ /*
10123
+ Options binding/triggering system.
10124
+ */
10125
+ Calendar.mixin({
10126
+
10127
+ // A map of option names to arrays of handler objects. Initialized to {} in Calendar.
10128
+ // Format for a handler object:
10129
+ // {
10130
+ // func // callback function to be called upon change
10131
+ // names // option names whose values should be given to func
10132
+ // }
10133
+ optionHandlers: null,
10134
+
10135
+ // Calls handlerFunc immediately, and when the given option has changed.
10136
+ // handlerFunc will be given the option value.
10137
+ bindOption: function(optionName, handlerFunc) {
10138
+ this.bindOptions([ optionName ], handlerFunc);
10139
+ },
10140
+
10141
+ // Calls handlerFunc immediately, and when any of the given options change.
10142
+ // handlerFunc will be given each option value as ordered function arguments.
10143
+ bindOptions: function(optionNames, handlerFunc) {
10144
+ var handlerObj = { func: handlerFunc, names: optionNames };
10145
+ var i;
10146
+
10147
+ for (i = 0; i < optionNames.length; i++) {
10148
+ this.registerOptionHandlerObj(optionNames[i], handlerObj);
10149
+ }
10150
+
10151
+ this.triggerOptionHandlerObj(handlerObj);
10152
+ },
10153
+
10154
+ // Puts the given handler object into the internal hash
10155
+ registerOptionHandlerObj: function(optionName, handlerObj) {
10156
+ (this.optionHandlers[optionName] || (this.optionHandlers[optionName] = []))
10157
+ .push(handlerObj);
10158
+ },
10159
+
10160
+ // Reports that the given option has changed, and calls all appropriate handlers.
10161
+ triggerOptionHandlers: function(optionName) {
10162
+ var handlerObjs = this.optionHandlers[optionName] || [];
10163
+ var i;
10164
+
10165
+ for (i = 0; i < handlerObjs.length; i++) {
10166
+ this.triggerOptionHandlerObj(handlerObjs[i]);
10167
+ }
10168
+ },
10169
+
10170
+ // Calls the callback for a specific handler object, passing in the appropriate arguments.
10171
+ triggerOptionHandlerObj: function(handlerObj) {
10172
+ var optionNames = handlerObj.names;
10173
+ var optionValues = [];
10174
+ var i;
10175
+
10176
+ for (i = 0; i < optionNames.length; i++) {
10177
+ optionValues.push(this.options[optionNames[i]]);
10178
+ }
10179
+
10180
+ handlerObj.func.apply(this, optionValues); // maintain the Calendar's `this` context
10181
+ }
10182
+
10183
+ });
10184
+
9991
10185
  ;;
9992
10186
 
9993
10187
  Calendar.defaults = {
@@ -10318,7 +10512,7 @@ FC.lang('en', Calendar.englishDefaults);
10318
10512
  ----------------------------------------------------------------------------------------------------------------------*/
10319
10513
  // TODO: rename all header-related things to "toolbar"
10320
10514
 
10321
- function Header(calendar, options) {
10515
+ function Header(calendar) {
10322
10516
  var t = this;
10323
10517
 
10324
10518
  // exports
@@ -10330,38 +10524,50 @@ function Header(calendar, options) {
10330
10524
  t.disableButton = disableButton;
10331
10525
  t.enableButton = enableButton;
10332
10526
  t.getViewsWithButtons = getViewsWithButtons;
10527
+ t.el = null; // mirrors local `el`
10333
10528
 
10334
10529
  // locals
10335
- var el = $();
10530
+ var el;
10336
10531
  var viewsWithButtons = [];
10337
10532
  var tm;
10338
10533
 
10339
10534
 
10535
+ // can be called repeatedly and will rerender
10340
10536
  function render() {
10537
+ var options = calendar.options;
10341
10538
  var sections = options.header;
10342
10539
 
10343
10540
  tm = options.theme ? 'ui' : 'fc';
10344
10541
 
10345
10542
  if (sections) {
10346
- el = $("<div class='fc-toolbar'/>")
10347
- .append(renderSection('left'))
10543
+ if (!el) {
10544
+ el = this.el = $("<div class='fc-toolbar'/>");
10545
+ }
10546
+ else {
10547
+ el.empty();
10548
+ }
10549
+ el.append(renderSection('left'))
10348
10550
  .append(renderSection('right'))
10349
10551
  .append(renderSection('center'))
10350
10552
  .append('<div class="fc-clear"/>');
10351
-
10352
- return el;
10553
+ }
10554
+ else {
10555
+ removeElement();
10353
10556
  }
10354
10557
  }
10355
10558
 
10356
10559
 
10357
10560
  function removeElement() {
10358
- el.remove();
10359
- el = $();
10561
+ if (el) {
10562
+ el.remove();
10563
+ el = t.el = null;
10564
+ }
10360
10565
  }
10361
10566
 
10362
10567
 
10363
10568
  function renderSection(position) {
10364
10569
  var sectionEl = $('<div class="fc-' + position + '"/>');
10570
+ var options = calendar.options;
10365
10571
  var buttonStr = options.header[position];
10366
10572
 
10367
10573
  if (buttonStr) {
@@ -10387,7 +10593,7 @@ function Header(calendar, options) {
10387
10593
  isOnlyButtons = false;
10388
10594
  }
10389
10595
  else {
10390
- if ((customButtonProps = (calendar.options.customButtons || {})[buttonName])) {
10596
+ if ((customButtonProps = (options.customButtons || {})[buttonName])) {
10391
10597
  buttonClick = function(ev) {
10392
10598
  if (customButtonProps.click) {
10393
10599
  customButtonProps.click.call(button[0], ev);
@@ -10523,33 +10729,43 @@ function Header(calendar, options) {
10523
10729
 
10524
10730
 
10525
10731
  function updateTitle(text) {
10526
- el.find('h2').text(text);
10732
+ if (el) {
10733
+ el.find('h2').text(text);
10734
+ }
10527
10735
  }
10528
10736
 
10529
10737
 
10530
10738
  function activateButton(buttonName) {
10531
- el.find('.fc-' + buttonName + '-button')
10532
- .addClass(tm + '-state-active');
10739
+ if (el) {
10740
+ el.find('.fc-' + buttonName + '-button')
10741
+ .addClass(tm + '-state-active');
10742
+ }
10533
10743
  }
10534
10744
 
10535
10745
 
10536
10746
  function deactivateButton(buttonName) {
10537
- el.find('.fc-' + buttonName + '-button')
10538
- .removeClass(tm + '-state-active');
10747
+ if (el) {
10748
+ el.find('.fc-' + buttonName + '-button')
10749
+ .removeClass(tm + '-state-active');
10750
+ }
10539
10751
  }
10540
10752
 
10541
10753
 
10542
10754
  function disableButton(buttonName) {
10543
- el.find('.fc-' + buttonName + '-button')
10544
- .prop('disabled', true)
10545
- .addClass(tm + '-state-disabled');
10755
+ if (el) {
10756
+ el.find('.fc-' + buttonName + '-button')
10757
+ .prop('disabled', true)
10758
+ .addClass(tm + '-state-disabled');
10759
+ }
10546
10760
  }
10547
10761
 
10548
10762
 
10549
10763
  function enableButton(buttonName) {
10550
- el.find('.fc-' + buttonName + '-button')
10551
- .prop('disabled', false)
10552
- .removeClass(tm + '-state-disabled');
10764
+ if (el) {
10765
+ el.find('.fc-' + buttonName + '-button')
10766
+ .prop('disabled', false)
10767
+ .removeClass(tm + '-state-disabled');
10768
+ }
10553
10769
  }
10554
10770
 
10555
10771
 
@@ -10572,7 +10788,7 @@ var ajaxDefaults = {
10572
10788
  var eventGUID = 1;
10573
10789
 
10574
10790
 
10575
- function EventManager(options) { // assumed to be a calendar
10791
+ function EventManager() { // assumed to be a calendar
10576
10792
  var t = this;
10577
10793
 
10578
10794
 
@@ -10609,7 +10825,7 @@ function EventManager(options) { // assumed to be a calendar
10609
10825
 
10610
10826
 
10611
10827
  $.each(
10612
- (options.events ? [ options.events ] : []).concat(options.eventSources || []),
10828
+ (t.options.events ? [ t.options.events ] : []).concat(t.options.eventSources || []),
10613
10829
  function(i, sourceInput) {
10614
10830
  var source = buildEventSource(sourceInput);
10615
10831
  if (source) {
@@ -10743,7 +10959,7 @@ function EventManager(options) { // assumed to be a calendar
10743
10959
  source,
10744
10960
  rangeStart.clone(),
10745
10961
  rangeEnd.clone(),
10746
- options.timezone,
10962
+ t.options.timezone,
10747
10963
  callback
10748
10964
  );
10749
10965
 
@@ -10766,7 +10982,7 @@ function EventManager(options) { // assumed to be a calendar
10766
10982
  t, // this, the Calendar object
10767
10983
  rangeStart.clone(),
10768
10984
  rangeEnd.clone(),
10769
- options.timezone,
10985
+ t.options.timezone,
10770
10986
  function(events) {
10771
10987
  callback(events);
10772
10988
  t.popLoading();
@@ -10801,9 +11017,9 @@ function EventManager(options) { // assumed to be a calendar
10801
11017
  // and not affect the passed-in object.
10802
11018
  var data = $.extend({}, customData || {});
10803
11019
 
10804
- var startParam = firstDefined(source.startParam, options.startParam);
10805
- var endParam = firstDefined(source.endParam, options.endParam);
10806
- var timezoneParam = firstDefined(source.timezoneParam, options.timezoneParam);
11020
+ var startParam = firstDefined(source.startParam, t.options.startParam);
11021
+ var endParam = firstDefined(source.endParam, t.options.endParam);
11022
+ var timezoneParam = firstDefined(source.timezoneParam, t.options.timezoneParam);
10807
11023
 
10808
11024
  if (startParam) {
10809
11025
  data[startParam] = rangeStart.format();
@@ -10811,8 +11027,8 @@ function EventManager(options) { // assumed to be a calendar
10811
11027
  if (endParam) {
10812
11028
  data[endParam] = rangeEnd.format();
10813
11029
  }
10814
- if (options.timezone && options.timezone != 'local') {
10815
- data[timezoneParam] = options.timezone;
11030
+ if (t.options.timezone && t.options.timezone != 'local') {
11031
+ data[timezoneParam] = t.options.timezone;
10816
11032
  }
10817
11033
 
10818
11034
  t.pushLoading();
@@ -11144,7 +11360,7 @@ function EventManager(options) { // assumed to be a calendar
11144
11360
 
11145
11361
  reportEvents(cache);
11146
11362
  }
11147
-
11363
+
11148
11364
 
11149
11365
  function clientEvents(filter) {
11150
11366
  if ($.isFunction(filter)) {
@@ -11158,7 +11374,33 @@ function EventManager(options) { // assumed to be a calendar
11158
11374
  }
11159
11375
  return cache; // else, return all
11160
11376
  }
11161
-
11377
+
11378
+
11379
+ // Makes sure all array event sources have their internal event objects
11380
+ // converted over to the Calendar's current timezone.
11381
+ t.rezoneArrayEventSources = function() {
11382
+ var i;
11383
+ var events;
11384
+ var j;
11385
+
11386
+ for (i = 0; i < sources.length; i++) {
11387
+ events = sources[i].events;
11388
+ if ($.isArray(events)) {
11389
+
11390
+ for (j = 0; j < events.length; j++) {
11391
+ rezoneEventDates(events[j]);
11392
+ }
11393
+ }
11394
+ }
11395
+ };
11396
+
11397
+ function rezoneEventDates(event) {
11398
+ event.start = t.moment(event.start);
11399
+ if (event.end) {
11400
+ event.end = t.moment(event.end);
11401
+ }
11402
+ backupEventDates(event);
11403
+ }
11162
11404
 
11163
11405
 
11164
11406
  /* Event Normalization
@@ -11174,8 +11416,8 @@ function EventManager(options) { // assumed to be a calendar
11174
11416
  var start, end;
11175
11417
  var allDay;
11176
11418
 
11177
- if (options.eventDataTransform) {
11178
- input = options.eventDataTransform(input);
11419
+ if (t.options.eventDataTransform) {
11420
+ input = t.options.eventDataTransform(input);
11179
11421
  }
11180
11422
  if (source && source.eventDataTransform) {
11181
11423
  input = source.eventDataTransform(input);
@@ -11241,7 +11483,7 @@ function EventManager(options) { // assumed to be a calendar
11241
11483
  if (allDay === undefined) { // still undefined? fallback to default
11242
11484
  allDay = firstDefined(
11243
11485
  source ? source.allDayDefault : undefined,
11244
- options.allDayDefault
11486
+ t.options.allDayDefault
11245
11487
  );
11246
11488
  // still undefined? normalizeEventDates will calculate it
11247
11489
  }
@@ -11277,7 +11519,7 @@ function EventManager(options) { // assumed to be a calendar
11277
11519
  }
11278
11520
 
11279
11521
  if (!eventProps.end) {
11280
- if (options.forceEventDuration) {
11522
+ if (t.options.forceEventDuration) {
11281
11523
  eventProps.end = t.getDefaultEventEnd(eventProps.allDay, eventProps.start);
11282
11524
  }
11283
11525
  else {
@@ -11578,7 +11820,7 @@ function EventManager(options) { // assumed to be a calendar
11578
11820
  // Returns an array of events as to when the business hours occur in the given view.
11579
11821
  // Abuse of our event system :(
11580
11822
  function getBusinessHoursEvents(wholeDay) {
11581
- var optionVal = options.businessHours;
11823
+ var optionVal = t.options.businessHours;
11582
11824
  var defaultVal = {
11583
11825
  className: 'fc-nonbusiness',
11584
11826
  start: '09:00',
@@ -11630,12 +11872,12 @@ function EventManager(options) { // assumed to be a calendar
11630
11872
  var constraint = firstDefined(
11631
11873
  event.constraint,
11632
11874
  source.constraint,
11633
- options.eventConstraint
11875
+ t.options.eventConstraint
11634
11876
  );
11635
11877
  var overlap = firstDefined(
11636
11878
  event.overlap,
11637
11879
  source.overlap,
11638
- options.eventOverlap
11880
+ t.options.eventOverlap
11639
11881
  );
11640
11882
  return isSpanAllowed(span, constraint, overlap, event);
11641
11883
  }
@@ -11664,7 +11906,7 @@ function EventManager(options) { // assumed to be a calendar
11664
11906
 
11665
11907
  // Determines the given span (unzoned start/end with other misc data) can be selected.
11666
11908
  function isSelectionSpanAllowed(span) {
11667
- return isSpanAllowed(span, options.selectConstraint, options.selectOverlap);
11909
+ return isSpanAllowed(span, t.options.selectConstraint, t.options.selectOverlap);
11668
11910
  }
11669
11911
 
11670
11912
 
@@ -11932,6 +12174,11 @@ var BasicView = FC.BasicView = View.extend({
11932
12174
  },
11933
12175
 
11934
12176
 
12177
+ unrenderBusinessHours: function() {
12178
+ this.dayGrid.unrenderBusinessHours();
12179
+ },
12180
+
12181
+
11935
12182
  // Builds the HTML skeleton for the view.
11936
12183
  // The day-grid component will render inside of a container defined by this HTML.
11937
12184
  renderSkeletonHtml: function() {
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * FullCalendar v2.8.0 Google Calendar Plugin
2
+ * FullCalendar v2.9.0 Google Calendar Plugin
3
3
  * Docs & License: http://fullcalendar.io/
4
4
  * (c) 2016 Adam Shaw
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * FullCalendar v2.8.0 Stylesheet
2
+ * FullCalendar v2.9.0 Stylesheet
3
3
  * Docs & License: http://fullcalendar.io/
4
4
  * (c) 2016 Adam Shaw
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * FullCalendar v2.8.0 Print Stylesheet
2
+ * FullCalendar v2.9.0 Print Stylesheet
3
3
  * Docs & License: http://fullcalendar.io/
4
4
  * (c) 2016 Adam Shaw
5
5
  */
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fullcalendar.io-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.0
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - dbackowski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-20 00:00:00.000000000 Z
11
+ date: 2016-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jquery-rails
@@ -194,8 +194,11 @@ files:
194
194
  - spec/dummy/public/500.html
195
195
  - spec/dummy/public/favicon.ico
196
196
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/-T/-TF4g7ysiPxZNjb74I1D6AzI5XvgNMbr95XXvfHMHIo.cache
197
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/-f/-flwuy20EVU9ESo_tKL16xZVvvI7SwQmwVbpMLChyCQ.cache
198
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/0W/0Wz8D0EznVnMnz3ehYaTQfMKdaJteMO3m5mXRu4ArMg.cache
197
199
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/0d/0dWZcBegoEBzhzEOVOg1-czy-2COMnxE1Y35OISW6L4.cache
198
200
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/0r/0rn-tU1eBUPgW0KozwYPjcPwoscBdQbePooRBwPnl5U.cache
201
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/1h/1hjmejkroeKsAP3yAN3vQCALGPW6pNoIjMdrXF8LdIs.cache
199
202
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/1j/1jBm32Lhwj7n0HxpBGOR2Z9eCn883XjM94yW_nhGo7s.cache
200
203
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/1z/1zrToN9dimlnr4_kkdSJaL1-bVHicMTTNrygrZbiKmE.cache
201
204
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/2v/2v_enXedOXrk8P_wrCDrUgQBIv8vNep_8WXDcPpOAPk.cache
@@ -218,19 +221,27 @@ files:
218
221
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Bb/BbaJr2dSDQ-CoLaPJjh5WAi0189AJulGNC4lzLzVqkU.cache
219
222
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Bf/Bf_n1jfIt5qNRlpPc3UZYQjwBLNdHzQr1HjUwN_CPUg.cache
220
223
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/CZ/CZq3-YHsX4JRsWjEqR6qrEYF7RFwmX9NrXx1CJZUK1Y.cache
224
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/Cm/CmoyYJ08AFtRSvy8ZHYQSehv2bkLOS0Xf0bI3I6fkZc.cache
221
225
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Ct/CtooulHOPWAF3hCtvujVdQqeQE2SbD7XiGowGPxEPS4.cache
226
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/D3/D3IHgyAar4g0H18XxoobTqDZtky89z5TOeSBKW8wLEw.cache
227
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/Df/Df6WoQgsLTI7ykMN0UF20G0ntZpRgUiG3NY-_TYegpI.cache
228
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/FV/FVdbk4mFx244QCLaBrYQH8aLlAFnS7oum8x0LVtktLc.cache
222
229
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Fz/FzdbPGtKVpZ6nDkCriaiHgtArNZYx1ve40vYH158oRA.cache
223
230
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/G-/G-8Lslwz1mDDFAtXjhKYd_lwxyvWRJvGScPYLnWXza4.cache
224
231
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/G_/G_eBie5yKayIsXqQ2t82QYclCtPlk8e0C-Ypy3XrWNE.cache
225
232
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Gi/Gixq_YmHosFFDXNI2jeU6PnDa_N3wq6Ln1nYw3SmJMo.cache
226
233
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/H5/H5qdR_G864tFoVyd7cVaE540FPIboV4NrYdS9XVOBQ0.cache
227
234
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/HG/HGGxWu67qhwPzf057coeqynsitAYqFmxubc0qu_8Z70.cache
235
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/HH/HHn3wp7W6eXU3aH8S_96s55mIIjGvwfwa05z-WOlIkQ.cache
228
236
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/HZ/HZlT4NkCNicSxzlB1VNJ2xcAjBb5EdKfX5p5UeFlrGQ.cache
229
237
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/H_/H_AMg2V0XStjP--4CexdXop4Rl3AiH8h4F3l-5i9CT4.cache
230
238
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/IN/INEiSFSAFtsUHgd4Lp3oC18Q19q_DoEWfCLqk858T0M.cache
239
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/IQ/IQTwOY6NGWx2P3Ut3no3dFF8wuPB41lYhCgZcMVJ4Mw.cache
231
240
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Il/Il1-ZHURKrBas9WU2p1_KKDGRvtj8sQNdB7mn1rog0c.cache
232
241
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Ip/IpbN3-B8GDUhWNahkeuBlIwntRm5Fh8Qi0lR6NKGHsQ.cache
242
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/Jd/JdOtBWcAWsDJwDXbnR69OI3_AfSjPfzV2oeWvkzJCyE.cache
233
243
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/LG/LGLCJcDHu0oVE5-mPjAFByMRf17dScWmYXaA1YpjXlk.cache
244
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/LL/LLNU-hKAfS_hAJAYEJbJ5pHHPmErgeAH_8W19cybpBk.cache
234
245
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/LX/LX4btAhr-I8jRXhkKHzUc8Faqgbn3ys0o-D0oH6RNF4.cache
235
246
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/MN/MNBCSdGyIyMratNDaFz7KWwfyjpW_FNpMjpSZf6K818.cache
236
247
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Mn/MnSdFKH9CP9eCumnvcwL9GWVXpSGfgQ7YGfZm5OJXEg.cache
@@ -251,10 +262,13 @@ files:
251
262
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/RR/RRmYgXTQIf1QHewBaH8pACfSf3MJWSvj53F68VKeV1Q.cache
252
263
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/RT/RT1_5OfeAqSEryp5KSK3d6TPazplXoDsvB9v8XziExw.cache
253
264
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Ro/RoiPZLDHochxcheNmbSflLdiYxeeeB0udVfH90fZMoY.cache
265
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/SZ/SZe341ZkUNShB-Ocws-WjvDBCoWKnNGimJxAOo1yuz8.cache
254
266
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Sy/Sy0zDepYO5qFhcrwEA4dpnv383lLc0aj2FZJAMbpUHI.cache
255
267
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Sz/Sz63PYjJ5GHyNpOgNmSivcjRrZvTOmKgqQUsVPZaoxw.cache
256
268
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/UT/UTEAD_z-iBqDiXqGiP5QtVfmbl-zhJegmf69V2w1vo8.cache
269
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/Uj/UjaVj8xAGm110YZ_jW3xTaynZuuRo8KGlZj_aI_wnKU.cache
257
270
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/VO/VOwlPpsIlEdmiC7yzKRMfZpuG8kmaIKhqvONJvinJL0.cache
271
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/V_/V_ZC96lHPmREo8Aziw9ZKbrfRF0_UyO3HTMUHI10xCk.cache
258
272
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/W6/W66CRiH8240LjHOrl-iP_PDAWagFYeHve-h7zmvogFY.cache
259
273
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/XG/XGTA5rMaxWtazw4qqIz73ZTmM5xyfKoJE6ioHzgUeP8.cache
260
274
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/XI/XIB5kXcDIOqve-1dCw9NIeC2sTraclA8MZNWH-Eg-Gc.cache
@@ -273,8 +287,13 @@ files:
273
287
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/dK/dKdJe2pcCVe5ErXkxS4Fb9AjhsXvuZV7W5vODb6jYDM.cache
274
288
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/dL/dLsumIPJ1BortrKmtkZhkTLRQzKjIt7rvdT7wVKQEw8.cache
275
289
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/dQ/dQJtf4Z9ZZdgIXnmMmtdwb042qXZw0Jy94_oUJLjQ0M.cache
290
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/dU/dUmRcXwSY4MjYgk1Cqb7OxoqGK9NscTDTjKTqWl9s60.cache
276
291
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/dY/dYXBxXudeAWyE96PzziKRH1EojVkAcdud7xSTHCzV18.cache
292
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/dq/dq-KdDkS0rh4pHBa26h9r9Ul9rffrU0uRUIclBNH594.cache
277
293
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/eD/eDTtekOUPXw2hKvqwRNuu3muujadtjnxTCxdn1JXJxQ.cache
294
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/eh/ehLlkv5_n4dHM4bHAcdVCQ2SfaFl09uOak7ZOUa2SOI.cache
295
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/f2/f2A9TRHyx-Bmd5XNkRFlADD3gI_vW8hAw8pOQTizp_k.cache
296
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/fD/fD91WD0cHiPy9ZEmvizOuGnR8gAA5lVwskXB-vK4oos.cache
278
297
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/fQ/fQF4Nb2ST_kdJsW1xEb26JjDtN0M2L6MpgaJcwzKKjM.cache
279
298
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/fo/fode1W4tMDtFpZe5FeINHtwaGES8oc1bVkUyVE5hsE0.cache
280
299
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/gL/gL3vp0OIRNPI_2oSsei0xl-u1_DLCZr5aY-rGXJK_bI.cache
@@ -283,17 +302,24 @@ files:
283
302
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/gZ/gZSBHrt-mcVTM9d04uNDtPaoYzDMdcDekcn8gs4s1gs.cache
284
303
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/h8/h8vODE9RP0gop3pyz7IptAaJ6IV8k3HJtsEBCavNdzs.cache
285
304
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/hE/hEgsr1a9ZTofCiuLY5Xfpe9NbkDMxgsZGzyONS7Q6mk.cache
305
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/i-/i-9mOkA2nA5NC-OYwrbFuvfXFLcFL5s-DB5vRuWM8Hk.cache
286
306
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/iD/iDcTlKrrMYW3VupDw4ZcdL3NoDaCS2JiuR7vyOgtiqI.cache
287
307
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/jb/jbxaZ7HlUD_M4HRCDDVn6AY88wVNfK8qQC6WGZeugcQ.cache
308
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/jr/jr9bVNc85QvdVGVHFt2bIiSNXtQQkn-fSmr7Q2gFbvs.cache
288
309
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/kD/kDijzygjFK1LQ1m_gcdnDX1p5MUEu4POB3f25TCjIA8.cache
289
310
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/lE/lEcIbUanrpnsXYY0JbuW2Py7GzFX32ZEINj8uT9TTXk.cache
290
311
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/lR/lR5vlgxKHWKnxT-F_nmvBQgz4Sjphq8sMQPauO3VkCQ.cache
291
312
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/lV/lVbEWtshH9PhN9KdbJQ6s6V0VGcjSRD5NrMk45brK0Y.cache
292
313
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/m1/m12Jp1qK-c8QP1fAcCAH3gKPYqKakGwAHQlzrykt4O0.cache
293
314
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/m6/m6JlAtdEZ7WJ5YUPFDkb2aDjQmuN90hVNI5QRSbQOgU.cache
315
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/m6/m6sRqll-Vk_H9pK8cq28hh3-AsS9CqYZJyrN1llCu-U.cache
294
316
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/nO/nOBqk0fujhBp9RAnozuXFuWlBtlMsi_UwWsyqfuGpgc.cache
317
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/nv/nvNB4s_MucKdL-zH70ueUtL5IrtdrX-90W_HwloQ744.cache
318
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/nw/nwEj_d_NOvzjAGBfdOXw3r1xZLMdoEj-0o2PFri4pnE.cache
295
319
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/oU/oU13u_SXM0UNadLB9ya0oa9xs2-d6cCoMtbapd9Z_r8.cache
296
320
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/od/od1V62SeO78vztS37dh-CVvdiGW-MQxCsc117YltWwU.cache
321
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/pp/ppJ0FRLFipXGAqgFjUjPNB9hPxyjjBWkOA6WSjU4Knc.cache
322
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/qQ/qQRGf10j8-V9wxCyq1IS1UsxyonONSvYlE9U0_ySHiI.cache
297
323
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/qm/qmU2FOfiMLieppKQS8ZB12--RXgFUJMlLPy1YvZFX54.cache
298
324
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/qu/qu8n-TPZgqg5iw3fenMKHfLG_-hrq2BYhSVawDXOYGM.cache
299
325
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/r1/r1owugK9kIfLP5ZpsUBZ56ihX0DuIgmyeX4I41lApoY.cache
@@ -306,9 +332,12 @@ files:
306
332
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/tn/tn0mV9ZacLCzOMYrVEPDhwNMWJsKdReAQuw2VrrRqxg.cache
307
333
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/tn/tnmq0e1BKBoOTFiELZw2hOFQ_tcDhhwNuE1349KIct8.cache
308
334
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/u6/u6pileax9Y82QOXq8weMppwJaCjFAn_YMVdShR1JadY.cache
335
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/ub/ubrZpkeMSGGMThmVNbnBxKqf6uZlbvbX-74TeM2qjkY.cache
309
336
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/vK/vKmDWNjBPqpBw4W3ypKlJIbZi6I4pYXwRR5bMPrazXI.cache
310
337
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/vP/vPCWcZYSAY-60_mny0My8Y_k-WAtemmU3NU5m6nsccc.cache
338
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/w-/w-6okbah0gkpSm4AbK5PIwqY6zcv07Poo9JoK7cg4ZA.cache
311
339
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/wk/wkQHj4SqvRDNITiQxLPbntXY-TCW1crkQhN5BRMoGLk.cache
340
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/xI/xItqwS5KpDlOJnqQzQI-CXJYA0A6gfsBZ29AsBmypwE.cache
312
341
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/yF/yFmF8pySkf4pcqRNBs3J7MRa_iuiTV8g-GZOxbMcajE.cache
313
342
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/yw/ywal2DJbH1zBIkcrB5D5A2A0SzxUxZa_0qQ_fitfuCY.cache
314
343
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/z1/z160gWiw23VnMocixasBhG_-tz62-Fz2F_jrEr06atk.cache
@@ -444,6 +473,8 @@ test_files:
444
473
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Qs/Qs_rijpiJFWJE4uEHuPBC1xfRqhkIrV0hMo8zDMGqTI.cache
445
474
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/s1/s1lxIZZIIS4LwNCJQce7xFcoGVElRR0T4KtRBgHsJjo.cache
446
475
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/RT/RT1_5OfeAqSEryp5KSK3d6TPazplXoDsvB9v8XziExw.cache
476
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/D3/D3IHgyAar4g0H18XxoobTqDZtky89z5TOeSBKW8wLEw.cache
477
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/jr/jr9bVNc85QvdVGVHFt2bIiSNXtQQkn-fSmr7Q2gFbvs.cache
447
478
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/5P/5PYCfeahBKl0iSuwOCidlYsY453rmAPP0ZNNcF67tqQ.cache
448
479
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/dL/dLsumIPJ1BortrKmtkZhkTLRQzKjIt7rvdT7wVKQEw8.cache
449
480
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/-T/-TF4g7ysiPxZNjb74I1D6AzI5XvgNMbr95XXvfHMHIo.cache
@@ -452,12 +483,14 @@ test_files:
452
483
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/sA/sAwLZYrHoysBb4qQ2gi8BThpDTvtKcxVlcvKz1CgGAw.cache
453
484
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/vK/vKmDWNjBPqpBw4W3ypKlJIbZi6I4pYXwRR5bMPrazXI.cache
454
485
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/gL/gL3vp0OIRNPI_2oSsei0xl-u1_DLCZr5aY-rGXJK_bI.cache
486
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/fD/fD91WD0cHiPy9ZEmvizOuGnR8gAA5lVwskXB-vK4oos.cache
455
487
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/ab/abLztZ6RIpy8ik3QuEnFS7pEaWu_8_d2Q_dUNAvZrlY.cache
456
488
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/LX/LX4btAhr-I8jRXhkKHzUc8Faqgbn3ys0o-D0oH6RNF4.cache
457
489
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/7h/7hrD5-Wk9P1k6q3aBjBTI3R7qF7RGHypmsWGE1RfUeI.cache
458
490
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Zy/Zy-fKbxo3HN5HVfV-NBmL6_YaD7p2XsAjHVOl80NSQA.cache
459
491
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/kD/kDijzygjFK1LQ1m_gcdnDX1p5MUEu4POB3f25TCjIA8.cache
460
492
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Ip/IpbN3-B8GDUhWNahkeuBlIwntRm5Fh8Qi0lR6NKGHsQ.cache
493
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/nw/nwEj_d_NOvzjAGBfdOXw3r1xZLMdoEj-0o2PFri4pnE.cache
461
494
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/lR/lR5vlgxKHWKnxT-F_nmvBQgz4Sjphq8sMQPauO3VkCQ.cache
462
495
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/LG/LGLCJcDHu0oVE5-mPjAFByMRf17dScWmYXaA1YpjXlk.cache
463
496
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Pj/PjcfBhdHinscaB3d3l7RLfN3Y4H_bS04MlUVrhgSBX0.cache
@@ -473,36 +506,54 @@ test_files:
473
506
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/fQ/fQF4Nb2ST_kdJsW1xEb26JjDtN0M2L6MpgaJcwzKKjM.cache
474
507
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/5n/5nJ_AmkIC2TFecZP7L8R5Y7dQToE3_8yrUTDDXTnT5g.cache
475
508
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/an/an1XWH0BZHBC6wy3AVX--VKIHIKQreCDOcoFMMokLCE.cache
509
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/i-/i-9mOkA2nA5NC-OYwrbFuvfXFLcFL5s-DB5vRuWM8Hk.cache
476
510
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/8M/8M1wIdL8evq90VzC-9RI5WSBnPSBA7qcqm-w3Wc5zQk.cache
477
511
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/3r/3rUGi1AnbqRyUSqvq_rKBgbV9FHvkouIbN9fEovz0LA.cache
478
512
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Gi/Gixq_YmHosFFDXNI2jeU6PnDa_N3wq6Ln1nYw3SmJMo.cache
479
513
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/z9/z9MaMihYLUcWOw4349_kVcKdO99VFxOxk3SBk0VdSpk.cache
480
514
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/G-/G-8Lslwz1mDDFAtXjhKYd_lwxyvWRJvGScPYLnWXza4.cache
515
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/qQ/qQRGf10j8-V9wxCyq1IS1UsxyonONSvYlE9U0_ySHiI.cache
516
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/Uj/UjaVj8xAGm110YZ_jW3xTaynZuuRo8KGlZj_aI_wnKU.cache
517
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/eh/ehLlkv5_n4dHM4bHAcdVCQ2SfaFl09uOak7ZOUa2SOI.cache
481
518
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/gT/gTvrFJh7Q5YvlX82v262_fyF5eenvG41sbxZ7MwqzMo.cache
519
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/Cm/CmoyYJ08AFtRSvy8ZHYQSehv2bkLOS0Xf0bI3I6fkZc.cache
482
520
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/NP/NPjpVLA29t8KKcRIeX6c0zPNNt9AB0IxQJKdzQVs1DQ.cache
483
521
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/H_/H_AMg2V0XStjP--4CexdXop4Rl3AiH8h4F3l-5i9CT4.cache
484
522
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/O1/O1TPegoZK0bcAJLK1XkYSX-Dcehqm33eqwa864eho6o.cache
485
523
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/HZ/HZlT4NkCNicSxzlB1VNJ2xcAjBb5EdKfX5p5UeFlrGQ.cache
486
524
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/XI/XIB5kXcDIOqve-1dCw9NIeC2sTraclA8MZNWH-Eg-Gc.cache
487
525
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/wk/wkQHj4SqvRDNITiQxLPbntXY-TCW1crkQhN5BRMoGLk.cache
526
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/Jd/JdOtBWcAWsDJwDXbnR69OI3_AfSjPfzV2oeWvkzJCyE.cache
527
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/V_/V_ZC96lHPmREo8Aziw9ZKbrfRF0_UyO3HTMUHI10xCk.cache
528
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/ub/ubrZpkeMSGGMThmVNbnBxKqf6uZlbvbX-74TeM2qjkY.cache
529
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/xI/xItqwS5KpDlOJnqQzQI-CXJYA0A6gfsBZ29AsBmypwE.cache
488
530
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/dK/dKdJe2pcCVe5ErXkxS4Fb9AjhsXvuZV7W5vODb6jYDM.cache
531
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/w-/w-6okbah0gkpSm4AbK5PIwqY6zcv07Poo9JoK7cg4ZA.cache
489
532
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/eD/eDTtekOUPXw2hKvqwRNuu3muujadtjnxTCxdn1JXJxQ.cache
490
533
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Bf/Bf_n1jfIt5qNRlpPc3UZYQjwBLNdHzQr1HjUwN_CPUg.cache
491
534
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/MN/MNBCSdGyIyMratNDaFz7KWwfyjpW_FNpMjpSZf6K818.cache
535
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/IQ/IQTwOY6NGWx2P3Ut3no3dFF8wuPB41lYhCgZcMVJ4Mw.cache
492
536
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/G_/G_eBie5yKayIsXqQ2t82QYclCtPlk8e0C-Ypy3XrWNE.cache
493
537
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/c6/c6-OeCLASq51m3hakyLc_K0gBEz9shanluuN3Q0o0Pc.cache
538
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/Df/Df6WoQgsLTI7ykMN0UF20G0ntZpRgUiG3NY-_TYegpI.cache
494
539
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/2v/2v_enXedOXrk8P_wrCDrUgQBIv8vNep_8WXDcPpOAPk.cache
495
540
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/nO/nOBqk0fujhBp9RAnozuXFuWlBtlMsi_UwWsyqfuGpgc.cache
496
541
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/99/99YOZP_hr5T0vw6WS412byFFyBNV3c3XJH4z9aMwbvw.cache
542
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/dq/dq-KdDkS0rh4pHBa26h9r9Ul9rffrU0uRUIclBNH594.cache
543
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/1h/1hjmejkroeKsAP3yAN3vQCALGPW6pNoIjMdrXF8LdIs.cache
544
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/HH/HHn3wp7W6eXU3aH8S_96s55mIIjGvwfwa05z-WOlIkQ.cache
497
545
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/RR/RRmYgXTQIf1QHewBaH8pACfSf3MJWSvj53F68VKeV1Q.cache
498
546
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/rP/rPV-6Lrf4GGkK48HiRlW9KH7JDu8OSOvbr5NoId5G_Q.cache
499
547
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/5_/5_6aeP7ewY8bCsSqLZXz4K1YqSET8eddKqIJChoaDo0.cache
548
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/m6/m6sRqll-Vk_H9pK8cq28hh3-AsS9CqYZJyrN1llCu-U.cache
500
549
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/m6/m6JlAtdEZ7WJ5YUPFDkb2aDjQmuN90hVNI5QRSbQOgU.cache
550
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/pp/ppJ0FRLFipXGAqgFjUjPNB9hPxyjjBWkOA6WSjU4Knc.cache
501
551
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Mo/MouVQPQhx90B7DGl-_xgHJifHwIKkM1LeSml6LgtgZ8.cache
502
552
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/iD/iDcTlKrrMYW3VupDw4ZcdL3NoDaCS2JiuR7vyOgtiqI.cache
503
553
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/rN/rNXqW6x1bR11OVcs3nPGn0QWihc8p0XmzqRrp4oobTY.cache
504
554
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/h8/h8vODE9RP0gop3pyz7IptAaJ6IV8k3HJtsEBCavNdzs.cache
505
555
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/IN/INEiSFSAFtsUHgd4Lp3oC18Q19q_DoEWfCLqk858T0M.cache
556
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/f2/f2A9TRHyx-Bmd5XNkRFlADD3gI_vW8hAw8pOQTizp_k.cache
506
557
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/O9/O9kviXg4hfnmcC54J0MRPgrAxRWKhnArPSXStaFeI30.cache
507
558
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/4v/4v74yXsoUNW6CAlmFbD2cqJk2BF_Iik0VWsa0h7Asg4.cache
508
559
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/t1/t1LLf5xvHQaFFYEYGv4e0lW5m_B4wfMX8zjc6qJ2kx0.cache
@@ -517,10 +568,13 @@ test_files:
517
568
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/XG/XGTA5rMaxWtazw4qqIz73ZTmM5xyfKoJE6ioHzgUeP8.cache
518
569
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Sy/Sy0zDepYO5qFhcrwEA4dpnv383lLc0aj2FZJAMbpUHI.cache
519
570
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Pb/PbAKo6a2uKJlGVrfzUz0IlxW9_OK0UAbTFZ4c-ebTfM.cache
571
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/0W/0Wz8D0EznVnMnz3ehYaTQfMKdaJteMO3m5mXRu4ArMg.cache
520
572
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/u6/u6pileax9Y82QOXq8weMppwJaCjFAn_YMVdShR1JadY.cache
521
573
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Yw/YwRQST2FfmjmkqBLEM28FNWkAL6PoXPsHrPFgiEdu2Q.cache
522
574
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/W6/W66CRiH8240LjHOrl-iP_PDAWagFYeHve-h7zmvogFY.cache
523
575
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Ro/RoiPZLDHochxcheNmbSflLdiYxeeeB0udVfH90fZMoY.cache
576
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/LL/LLNU-hKAfS_hAJAYEJbJ5pHHPmErgeAH_8W19cybpBk.cache
577
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/-f/-flwuy20EVU9ESo_tKL16xZVvvI7SwQmwVbpMLChyCQ.cache
524
578
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/RC/RCHlDXb7Z_rpK7zeiX-JHO1ytKZsIY-sFwNFhg3Anm8.cache
525
579
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/gP/gPqmECuss-A-RLqP9madF_pKFWHZMwZwmiHDV5Ewr-E.cache
526
580
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/z1/z1ychbk3GbeFb0PifITr8-CRFFt0Hry2CNDPUk-O08g.cache
@@ -544,10 +598,12 @@ test_files:
544
598
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/jb/jbxaZ7HlUD_M4HRCDDVn6AY88wVNfK8qQC6WGZeugcQ.cache
545
599
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/75/75mPJA72MJqvREExf-2D9n1ZKTecwrF79a7UEstdmPg.cache
546
600
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/qm/qmU2FOfiMLieppKQS8ZB12--RXgFUJMlLPy1YvZFX54.cache
601
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/nv/nvNB4s_MucKdL-zH70ueUtL5IrtdrX-90W_HwloQ744.cache
547
602
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/vP/vPCWcZYSAY-60_mny0My8Y_k-WAtemmU3NU5m6nsccc.cache
548
603
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/aU/aUE6fJNaavxKXzcGwcIlC-bv5LhTDELDOn5KTCk3ehk.cache
549
604
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Py/PyLoN42JfBw2PAJQZv3EM_p0_zrlHUSZndlW8_9Sg-s.cache
550
605
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/hE/hEgsr1a9ZTofCiuLY5Xfpe9NbkDMxgsZGzyONS7Q6mk.cache
606
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/dU/dUmRcXwSY4MjYgk1Cqb7OxoqGK9NscTDTjKTqWl9s60.cache
551
607
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/3F/3FwWB3dso0BiDgmo2rJzOmvMIR9ZsrWRwUOMCoWiczg.cache
552
608
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Bb/BbaJr2dSDQ-CoLaPJjh5WAi0189AJulGNC4lzLzVqkU.cache
553
609
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Fz/FzdbPGtKVpZ6nDkCriaiHgtArNZYx1ve40vYH158oRA.cache
@@ -556,8 +612,10 @@ test_files:
556
612
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/H5/H5qdR_G864tFoVyd7cVaE540FPIboV4NrYdS9XVOBQ0.cache
557
613
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/HG/HGGxWu67qhwPzf057coeqynsitAYqFmxubc0qu_8Z70.cache
558
614
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/Yc/YcdiUoRCOarKX8lIPBk4-m5IvXS_7KY9x-Bgu0TOPqc.cache
615
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/SZ/SZe341ZkUNShB-Ocws-WjvDBCoWKnNGimJxAOo1yuz8.cache
559
616
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/3I/3Iv6wudtl40HRz9yxD1L3HZPlhCb-qF1GqubP515ljU.cache
560
617
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/tO/tOxC1i0yU7Pv0qeh6_DIEtXGQGqCu8PcR3ncjUnKAU0.cache
618
+ - spec/dummy/tmp/cache/assets/sprockets/v3.0/FV/FVdbk4mFx244QCLaBrYQH8aLlAFnS7oum8x0LVtktLc.cache
561
619
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/CZ/CZq3-YHsX4JRsWjEqR6qrEYF7RFwmX9NrXx1CJZUK1Y.cache
562
620
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/dY/dYXBxXudeAWyE96PzziKRH1EojVkAcdud7xSTHCzV18.cache
563
621
  - spec/dummy/tmp/cache/assets/sprockets/v3.0/yw/ywal2DJbH1zBIkcrB5D5A2A0SzxUxZa_0qQ_fitfuCY.cache