kennel 1.8.3 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
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