kennel 1.8.3 → 1.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
  SHA256:
3
- metadata.gz: 59fe17a63e746b5fbb0eea29538ca8ade0a27622af5ed0fa5efb64f7696398c3
4
- data.tar.gz: 738a1e4812523a39217ae695aa33b4f10508c9def87d776da2575275b230114f
3
+ metadata.gz: f12b86071e1e495725a1f4fe210c0a51ed8503bc8c1f8fdeae9cb3d1703335fd
4
+ data.tar.gz: cf352fce060f9547781ec6faae4387bb3e8e1486f6499e0f2841fe0b287f6460
5
5
  SHA512:
6
- metadata.gz: 24436ff45b17584d7cb999c85b58b5c21eae3eace37df622f93e9088164f12adb6fa156c9decbc3bc13b75d425cf8d331988a84b073a538d9226ec9e94b290f7
7
- data.tar.gz: bdd2f5d1fd851b502a8a7da48b2820d1aa329a9b4d721708341177d9a41c42b0d8bb1d17e9226fb5e06d1c8ea033deaabaea5eb32bd928da4217cf1e89fa4805
6
+ metadata.gz: 52f1e980cb83c6249c03c455bb72b0d3675ac8d37088cf403a634b21d01546a9cab9ffc530045ef8d847b11bebd744a2234d23ceba84614f2d09ecf3296b1875
7
+ data.tar.gz: 7429f9056cefd2a83b21b810e8aae07033d10d61daee7d8b141e9c9a838b218ec513889cb4c8727508470ada5a1dab3e4ff07a5fe293773323512bab6a2342c1
@@ -79,8 +79,7 @@ module Kennel
79
79
 
80
80
  READONLY_ATTRIBUTES.each { |k| actual.delete k }
81
81
 
82
- diff = HashDiff.diff(actual, expected, use_lcs: false)
83
- diff if diff.any?
82
+ HashDiff.diff(actual, expected, use_lcs: false)
84
83
  end
85
84
 
86
85
  def tracking_id
@@ -71,7 +71,7 @@ module Kennel
71
71
 
72
72
  # check for fields that are unsettable
73
73
  data[:graphs].each do |g|
74
- if g.dig(:definition, :status)
74
+ if g[:definition].key?(:status)
75
75
  raise "#{tracking_id} remove definition status, it is unsettable and will always produce a diff"
76
76
  end
77
77
  end
@@ -3,8 +3,14 @@ module Kennel
3
3
  module Models
4
4
  class Screen < Base
5
5
  include TemplateVariables
6
+ include OptionalValidations
6
7
 
7
8
  API_LIST_INCOMPLETE = true
9
+ REQUEST_DEFAULTS = {
10
+ style: { width: "normal", palette: "dog_classic", type: "solid" },
11
+ conditional_formats: [],
12
+ aggregator: "avg"
13
+ }.freeze
8
14
 
9
15
  settings :id, :board_title, :description, :widgets, :kennel_id
10
16
 
@@ -34,6 +40,9 @@ module Kennel
34
40
  widgets: render_widgets,
35
41
  template_variables: render_template_variables
36
42
  }
43
+
44
+ validate_json(@json) if validate
45
+
37
46
  @json
38
47
  end
39
48
 
@@ -51,14 +60,29 @@ module Kennel
51
60
  actual.delete(:board_bgtype)
52
61
  actual.delete(:height)
53
62
  actual.delete(:width)
63
+ actual.delete(:showGlobalTimeOnboarding)
54
64
  actual[:template_variables] ||= []
55
65
  (actual[:widgets] || []).each do |w|
56
66
  # api randomly returns time.live_span or timeframe
57
67
  w[:timeframe] = w.delete(:time)[:live_span] if w[:time]
58
68
 
59
- # board_id is a copied value, can ignore
60
- w.delete :board_id
69
+ w.delete :board_id # copied value, can ignore
70
+ w.delete :isShared # copied value, can ignore
71
+ end
72
+
73
+ # discard styles/conditional_formats/aggregator if nothing would change when we applied (both are default or nil)
74
+ as_json[:widgets].each_with_index do |e_w, wi|
75
+ (e_w.dig(:tile_def, :requests) || []).each_with_index do |e_r, ri|
76
+ next unless a_r = actual.dig(:widgets, wi, :tile_def, :requests, ri) # skip newly added widgets/requests
77
+ REQUEST_DEFAULTS.each do |key, default|
78
+ if [a_r, e_r].all? { |r| r[key].nil? || r[key] == default }
79
+ a_r.delete(key)
80
+ e_r.delete(key)
81
+ end
82
+ end
83
+ end
61
84
  end
85
+
62
86
  super
63
87
  end
64
88
 
@@ -68,14 +92,23 @@ module Kennel
68
92
 
69
93
  private
70
94
 
95
+ def validate_json(data)
96
+ # check for fields that are unsettable
97
+ data[:widgets].each do |w|
98
+ [:isShared, :board_id].each do |ignored|
99
+ if w.key?(ignored)
100
+ raise "#{tracking_id} remove definition #{ignored}, it is unsettable and will always produce a diff"
101
+ end
102
+ end
103
+ end
104
+ end
105
+
71
106
  def render_widgets
72
107
  widgets.map do |widget|
73
108
  widget = widget_defaults(widget[:type]).merge(widget)
74
109
  if tile = widget[:tile_def]
75
- tile.fetch(:requests).each { |r| r[:conditional_formats] ||= [] }
76
110
  tile[:autoscale] = true unless widget[:tile_def].key?(:autoscale)
77
111
  end
78
- widget.delete :board_id
79
112
  widget
80
113
  end
81
114
  end
data/lib/kennel/syncer.rb CHANGED
@@ -67,7 +67,8 @@ module Kennel
67
67
 
68
68
  if e = delete_matching_expected(a)
69
69
  fill_details(a, cache) if e.class::API_LIST_INCOMPLETE
70
- if diff = e.diff(a)
70
+ diff = e.diff(a)
71
+ if diff.any?
71
72
  @update << [id, e, a, diff]
72
73
  end
73
74
  elsif tracking_id(a) # was previously managed
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Kennel
3
- VERSION = "1.8.3"
3
+ VERSION = "1.9.0"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kennel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.3
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-22 00:00:00.000000000 Z
11
+ date: 2018-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday