sheets_v4 0.3.0 → 0.5.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.
data/lib/sheets_v4.rb CHANGED
@@ -2,8 +2,10 @@
2
2
 
3
3
  require_relative 'sheets_v4/version'
4
4
  require_relative 'sheets_v4/color'
5
- require_relative 'sheets_v4/validate_api_object'
5
+ require_relative 'sheets_v4/credential_creator'
6
+ require_relative 'sheets_v4/validate_api_objects'
6
7
 
8
+ require 'google/apis/sheets_v4'
7
9
  require 'json'
8
10
  require 'logger'
9
11
  require 'net/http'
@@ -13,6 +15,38 @@ require 'net/http'
13
15
  # @api public
14
16
  #
15
17
  module SheetsV4
18
+ # Create a new Google::Apis::SheetsV4::SheetsService object
19
+ #
20
+ # Simplifies creating and configuring a the credential.
21
+ #
22
+ # @example using the crednetial in `~/.google-api-credential`
23
+ # SheetsV4.sheets_service
24
+ #
25
+ # @example using a credential passed in as a string
26
+ # credential_source = File.read(File.join(Dir.home, '.credential'))
27
+ # SheetsV4.sheets_service(credential_source:
28
+ #
29
+ # @param credential_source [nil, String, IO, Google::Auth::*] may
30
+ # be either an already constructed credential, the credential read into a String or
31
+ # an open file with the credential ready to be read. Passing `nil` will result
32
+ # in the credential being read from `~/.google-api-credential.json`.
33
+ #
34
+ # @param scopes [Object, Array] one or more scopes to access.
35
+ #
36
+ # @param credential_creator [#credential] Used to inject the credential creator for
37
+ # testing.
38
+ #
39
+ # @return a new SheetsService instance
40
+ #
41
+ def self.sheets_service(credential_source: nil, scopes: nil, credential_creator: SheetsV4::CredentialCreator)
42
+ credential_source ||= File.read(File.expand_path('~/.google-api-credential.json'))
43
+ scopes ||= [Google::Apis::SheetsV4::AUTH_SPREADSHEETS]
44
+
45
+ Google::Apis::SheetsV4::SheetsService.new.tap do |service|
46
+ service.authorization = credential_creator.call(credential_source, scopes)
47
+ end
48
+ end
49
+
16
50
  # Validate the object using the named JSON schema
17
51
  #
18
52
  # The JSON schemas are loaded from the Google Disocvery API. The schemas names are
@@ -32,211 +66,36 @@ module SheetsV4
32
66
  # @return [void]
33
67
  #
34
68
  def self.validate_api_object(schema_name:, object:, logger: Logger.new(nil))
35
- ValidateApiObject.new(logger).call(schema_name, object)
69
+ SheetsV4::ValidateApiObjects::Validate.new(logger:).call(schema_name:, object:)
36
70
  end
37
71
 
38
- # A hash of schemas keyed by the schema name loaded from the Google Discovery API
39
- #
40
- # @example
41
- # SheetsV4.api_object_schemas #=> { 'PersonSchema' => { 'type' => 'object', ... } ... }
42
- #
43
- # @return [Hash<String, Object>] a hash of schemas keyed by schema name
72
+ # Given the name of the color, return a Google Sheets API color object
44
73
  #
45
- def self.api_object_schemas
46
- schema_load_semaphore.synchronize { @api_object_schemas ||= load_api_object_schemas }
47
- end
48
-
49
- # Validate
50
- # A mutex used to synchronize access to the schemas so they are only loaded
51
- # once.
52
- #
53
- @schema_load_semaphore = Thread::Mutex.new
54
-
55
- # A mutex used to synchronize access to the schemas so they are only loaded once
74
+ # Available color names are listed using `SheetsV4.color_names`.
56
75
  #
57
- # @return [Thread::Mutex]
76
+ # The object returned is frozen. If you want a color you can change (for instance,
77
+ # to adjust the `alpha` attribute), you must clone the object returned.
58
78
  #
59
- # @api private
79
+ # @example
80
+ # SheetsV4::Color.color(:red) #=> { "red": 1.0, "green": 0.0, "blue": 0.0 }
60
81
  #
61
- def self.schema_load_semaphore = @schema_load_semaphore
62
-
63
- # Load the schemas from the Google Discovery API
82
+ # @param name [#to_sym] the name of the color requested
64
83
  #
65
- # @return [Hash<String, Object>] a hash of schemas keyed by schema name
84
+ # @return [Hash] The color requested e.g. `{ "red": 1.0, "green": 0.0, "blue": 0.0 }`
66
85
  #
67
- # @api private
86
+ # @api public
68
87
  #
69
- def self.load_api_object_schemas
70
- source = 'https://sheets.googleapis.com/$discovery/rest?version=v4'
71
- resp = Net::HTTP.get_response(URI.parse(source))
72
- data = resp.body
73
- JSON.parse(data)['schemas'].tap do |schemas|
74
- schemas.each { |_name, schema| schema['unevaluatedProperties'] = false }
75
- end
88
+ def self.color(name)
89
+ SheetsV4::Color::COLORS[name.to_sym] || raise("Color #{name} not found")
76
90
  end
77
91
 
78
- # Return a color object for the given name from SheetsV4::COLORS
92
+ # List the names of the colors available to use in the Google Sheets API
79
93
  #
80
94
  # @example
81
- # SheetsV4::Color.color(:red) #=> { "red": 1.0, "green": 0.0, "blue": 0.0 }
95
+ # SheetsV4::Color.color_names #=> [:black, :white, :red, :green, :blue, :yellow, :magenta, :cyan, ...]
82
96
  #
83
- # @param name [Symbol] the name of the color
84
- # @return [Hash] the color object
97
+ # @return [Array<Symbol>] the names of the colors available
85
98
  # @api public
86
- def self.color(name)
87
- SheetsV4::COLORS[name.to_sym]
88
- end
89
-
90
- # Colors to use in the Google Sheets API
91
- COLORS = {
92
- # Standard Google Sheets colors
93
-
94
- black: { red: 0.000000000, green: 0.000000000, blue: 0.000000000 },
95
- dark_gray4: { red: 0.262745098, green: 0.262745098, blue: 0.262745098 },
96
- dark_gray3: { red: 0.400000000, green: 0.400000000, blue: 0.400000000 },
97
- dark_gray2: { red: 0.600000000, green: 0.600000000, blue: 0.600000000 },
98
- dark_gray1: { red: 0.717647059, green: 0.717647059, blue: 0.717647059 },
99
- gray: { red: 0.800000000, green: 0.800000000, blue: 0.800000000 },
100
- light_gray1: { red: 0.850980392, green: 0.850980392, blue: 0.850980392 },
101
- light_gray2: { red: 0.937254902, green: 0.937254902, blue: 0.937254902 },
102
- light_gray3: { red: 0.952941176, green: 0.952941176, blue: 0.952941176 },
103
- white: { red: 1.000000000, green: 1.000000000, blue: 1.000000000 },
104
- red_berry: { red: 0.596078431, green: 0.000000000, blue: 0.000000000 },
105
- red: { red: 1.000000000, green: 0.000000000, blue: 0.000000000 },
106
- orange: { red: 1.000000000, green: 0.600000000, blue: 0.000000000 },
107
- yellow: { red: 1.000000000, green: 1.000000000, blue: 0.000000000 },
108
- green: { red: 0.000000000, green: 1.000000000, blue: 0.000000000 },
109
- cyan: { red: 0.000000000, green: 1.000000000, blue: 1.000000000 },
110
- cornflower_blue: { red: 0.290196078, green: 0.525490196, blue: 0.909803922 },
111
- blue: { red: 0.000000000, green: 0.000000000, blue: 1.000000000 },
112
- purple: { red: 0.600000000, green: 0.000000000, blue: 1.000000000 },
113
- magenta: { red: 1.000000000, green: 0.000000000, blue: 1.000000000 },
114
- light_red_berry3: { red: 0.901960784, green: 0.721568627, blue: 0.686274510 },
115
- light_red3: { red: 0.956862745, green: 0.800000000, blue: 0.800000000 },
116
- light_orange3: { red: 0.988235294, green: 0.898039216, blue: 0.803921569 },
117
- light_yellow3: { red: 1.000000000, green: 0.949019608, blue: 0.800000000 },
118
- light_green3: { red: 0.850980392, green: 0.917647059, blue: 0.827450980 },
119
- light_cyan3: { red: 0.815686275, green: 0.878431373, blue: 0.890196078 },
120
- light_cornflower_blue3: { red: 0.788235294, green: 0.854901961, blue: 0.972549020 },
121
- light_blue3: { red: 0.811764706, green: 0.886274510, blue: 0.952941176 },
122
- light_purple3: { red: 0.850980392, green: 0.823529412, blue: 0.913725490 },
123
- light_magenta3: { red: 0.917647059, green: 0.819607843, blue: 0.862745098 },
124
- light_red_berry2: { red: 0.866666667, green: 0.494117647, blue: 0.419607843 },
125
- light_red2: { red: 0.917647059, green: 0.600000000, blue: 0.600000000 },
126
- light_orange2: { red: 0.976470588, green: 0.796078431, blue: 0.611764706 },
127
- light_yellow2: { red: 1.000000000, green: 0.898039216, blue: 0.600000000 },
128
- light_green2: { red: 0.713725490, green: 0.843137255, blue: 0.658823529 },
129
- light_cyan2: { red: 0.635294118, green: 0.768627451, blue: 0.788235294 },
130
- light_cornflower_blue2: { red: 0.643137255, green: 0.760784314, blue: 0.956862745 },
131
- light_blue2: { red: 0.623529412, green: 0.772549020, blue: 0.909803922 },
132
- light_purple2: { red: 0.705882353, green: 0.654901961, blue: 0.839215686 },
133
- light_magenta2: { red: 0.835294118, green: 0.650980392, blue: 0.741176471 },
134
- light_red_berry1: { red: 0.800000000, green: 0.254901961, blue: 0.145098039 },
135
- light_red1: { red: 0.878431373, green: 0.400000000, blue: 0.400000000 },
136
- light_orange1: { red: 0.964705882, green: 0.698039216, blue: 0.419607843 },
137
- light_yellow1: { red: 1.000000000, green: 0.850980392, blue: 0.400000000 },
138
- light_green1: { red: 0.576470588, green: 0.768627451, blue: 0.490196078 },
139
- light_cyan1: { red: 0.462745098, green: 0.647058824, blue: 0.686274510 },
140
- light_cornflower_blue1: { red: 0.427450980, green: 0.619607843, blue: 0.921568627 },
141
- light_blue1: { red: 0.435294118, green: 0.658823529, blue: 0.862745098 },
142
- light_purple1: { red: 0.556862745, green: 0.486274510, blue: 0.764705882 },
143
- light_magenta1: { red: 0.760784314, green: 0.482352941, blue: 0.627450980 },
144
- dark_red_berry1: { red: 0.650980392, green: 0.109803922, blue: 0.000000000 },
145
- dark_red1: { red: 0.800000000, green: 0.000000000, blue: 0.000000000 },
146
- dark_orange1: { red: 0.901960784, green: 0.568627451, blue: 0.219607843 },
147
- dark_yellow1: { red: 0.945098039, green: 0.760784314, blue: 0.196078431 },
148
- dark_green1: { red: 0.415686275, green: 0.658823529, blue: 0.309803922 },
149
- dark_cyan1: { red: 0.270588235, green: 0.505882353, blue: 0.556862745 },
150
- dark_cornflower_blue1: { red: 0.235294118, green: 0.470588235, blue: 0.847058824 },
151
- dark_blue1: { red: 0.239215686, green: 0.521568627, blue: 0.776470588 },
152
- dark_purple1: { red: 0.403921569, green: 0.305882353, blue: 0.654901961 },
153
- dark_magenta1: { red: 0.650980392, green: 0.301960784, blue: 0.474509804 },
154
- dark_red_berry2: { red: 0.521568627, green: 0.125490196, blue: 0.047058824 },
155
- dark_red2: { red: 0.600000000, green: 0.000000000, blue: 0.000000000 },
156
- dark_orange2: { red: 0.705882353, green: 0.372549020, blue: 0.023529412 },
157
- dark_yellow2: { red: 0.749019608, green: 0.564705882, blue: 0.000000000 },
158
- dark_green2: { red: 0.219607843, green: 0.462745098, blue: 0.113725490 },
159
- dark_cyan2: { red: 0.074509804, green: 0.309803922, blue: 0.360784314 },
160
- dark_cornflower_blue2: { red: 0.066666667, green: 0.333333333, blue: 0.800000000 },
161
- dark_blue2: { red: 0.043137255, green: 0.325490196, blue: 0.580392157 },
162
- dark_purple2: { red: 0.207843137, green: 0.109803922, blue: 0.458823529 },
163
- dark_magenta2: { red: 0.454901961, green: 0.105882353, blue: 0.278431373 },
164
- dark_red_berry3: { red: 0.356862745, green: 0.058823529, blue: 0.000000000 },
165
- dark_red3: { red: 0.400000000, green: 0.000000000, blue: 0.000000000 },
166
- dark_orange3: { red: 0.470588235, green: 0.247058824, blue: 0.015686275 },
167
- dark_yellow3: { red: 0.498039216, green: 0.376470588, blue: 0.000000000 },
168
- dark_green3: { red: 0.152941176, green: 0.305882353, blue: 0.074509804 },
169
- darn_cyan3: { red: 0.047058824, green: 0.203921569, blue: 0.239215686 },
170
- dark_cornflower_blue3: { red: 0.109803922, green: 0.270588235, blue: 0.529411765 },
171
- dark_blue3: { red: 0.027450980, green: 0.215686275, blue: 0.388235294 },
172
- dark_purple3: { red: 0.125490196, green: 0.070588235, blue: 0.301960784 },
173
- dark_magenta3: { red: 0.298039216, green: 0.066666667, blue: 0.188235294 },
174
-
175
- # Yahoo brand colors
176
-
177
- grape_jelly: { red: 0.376470588, green: 0.003921569, blue: 0.823529412 },
178
- hulk_pants: { red: 0.494117647, green: 0.121568627, blue: 1.000000000 },
179
- malbec: { red: 0.223529412, green: 0.000000000, blue: 0.490196078 },
180
- tumeric: { red: 1.000000000, green: 0.654901961, blue: 0.000000000 },
181
- mulah: { red: 0.101960784, green: 0.772549020, blue: 0.403921569 },
182
- dory: { red: 0.058823529, green: 0.411764706, blue: 1.000000000 },
183
- malibu: { red: 1.000000000, green: 0.000000000, blue: 0.501960784 },
184
- sea_foam: { red: 0.066666667, green: 0.827450980, blue: 0.803921569 },
185
- tumeric_tint: { red: 0.980392157, green: 0.866666667, blue: 0.694117647 },
186
- mulah_tint: { red: 0.733333333, green: 0.901960784, blue: 0.776470588 },
187
- dory_tint: { red: 0.662745098, green: 0.772549020, blue: 0.984313725 },
188
- malibu_tint: { red: 0.968627451, green: 0.682352941, blue: 0.800000000 },
189
- sea_foam_tint: { red: 0.749019608, green: 0.925490196, blue: 0.921568627 },
190
-
191
- # Yahoo health colors
192
-
193
- health_green: { red: 0.000000000, green: 0.690196078, blue: 0.313725490 },
194
- health_yellow: { red: 1.000000000, green: 0.654901961, blue: 0.000000000 },
195
- health_red: { red: 1.000000000, green: 0.000000000, blue: 0.000000000 },
196
-
197
- # Yahoo Fuji design color palette
198
-
199
- fuji_color_watermelon: { red: 1.000000000, green: 0.321568627, blue: 0.341176471 },
200
- fuji_color_solo_cup: { red: 0.921568627, green: 0.058823529, blue: 0.160784314 },
201
- fuji_color_malibu: { red: 1.000000000, green: 0.000000000, blue: 0.501960784 },
202
- fuji_color_barney: { red: 0.800000000, green: 0.000000000, blue: 0.549019608 },
203
- fuji_color_mimosa: { red: 1.000000000, green: 0.827450980, blue: 0.200000000 },
204
- fuji_color_turmeric: { red: 1.000000000, green: 0.654901961, blue: 0.000000000 },
205
- fuji_color_cheetos: { red: 0.992156863, green: 0.380392157, blue: 0.000000000 },
206
- fuji_color_carrot_juice: { red: 1.000000000, green: 0.321568627, blue: 0.050980392 },
207
- fuji_color_mulah: { red: 0.101960784, green: 0.772549020, blue: 0.403921569 },
208
- fuji_color_bonsai: { red: 0.000000000, green: 0.529411765, blue: 0.317647059 },
209
- fuji_color_spirulina: { red: 0.000000000, green: 0.627450980, blue: 0.627450980 },
210
- fuji_color_sea_foam: { red: 0.066666667, green: 0.827450980, blue: 0.803921569 },
211
- fuji_color_peeps: { red: 0.490196078, green: 0.796078431, blue: 1.000000000 },
212
- fuji_color_sky: { red: 0.070588235, green: 0.662745098, blue: 1.000000000 },
213
- fuji_color_dory: { red: 0.058823529, green: 0.411764706, blue: 1.000000000 },
214
- fuji_color_scooter: { red: 0.000000000, green: 0.388235294, blue: 0.921568627 },
215
- fuji_color_cobalt: { red: 0.000000000, green: 0.227450980, blue: 0.737254902 },
216
- fuji_color_denim: { red: 0.101960784, green: 0.050980392, blue: 0.670588235 },
217
- fuji_color_blurple: { red: 0.364705882, green: 0.368627451, blue: 1.000000000 },
218
- fuji_color_hendrix: { red: 0.972549020, green: 0.956862745, blue: 1.000000000 },
219
- fuji_color_thanos: { red: 0.564705882, green: 0.486274510, blue: 1.000000000 },
220
- fuji_color_starfish: { red: 0.466666667, green: 0.349019608, blue: 1.000000000 },
221
- fuji_color_hulk_pants: { red: 0.494117647, green: 0.121568627, blue: 1.000000000 },
222
- fuji_color_grape_jelly: { red: 0.376470588, green: 0.003921569, blue: 0.823529412 },
223
- fuji_color_mulberry: { red: 0.313725490, green: 0.082352941, blue: 0.690196078 },
224
- fuji_color_malbec: { red: 0.223529412, green: 0.000000000, blue: 0.490196078 },
225
- fuji_grayscale_black: { red: 0.000000000, green: 0.000000000, blue: 0.000000000 },
226
- fuji_grayscale_midnight: { red: 0.062745098, green: 0.082352941, blue: 0.094117647 },
227
- fuji_grayscale_inkwell: { red: 0.113725490, green: 0.133333333, blue: 0.156862745 },
228
- fuji_grayscale_batcave: { red: 0.137254902, green: 0.164705882, blue: 0.192156863 },
229
- fuji_grayscale_ramones: { red: 0.172549020, green: 0.211764706, blue: 0.247058824 },
230
- fuji_grayscale_charcoal: { red: 0.274509804, green: 0.305882353, blue: 0.337254902 },
231
- fuji_grayscale_battleship: { red: 0.356862745, green: 0.388235294, blue: 0.415686275 },
232
- fuji_grayscale_dolphin: { red: 0.431372549, green: 0.466666667, blue: 0.501960784 },
233
- fuji_grayscale_shark: { red: 0.509803922, green: 0.541176471, blue: 0.576470588 },
234
- fuji_grayscale_gandalf: { red: 0.592156863, green: 0.619607843, blue: 0.658823529 },
235
- fuji_grayscale_bob: { red: 0.690196078, green: 0.725490196, blue: 0.756862745 },
236
- fuji_grayscale_pebble: { red: 0.780392157, green: 0.803921569, blue: 0.823529412 },
237
- fuji_grayscale_dirty_seagull: { red: 0.878431373, green: 0.894117647, blue: 0.913725490 },
238
- fuji_grayscale_grey_hair: { red: 0.941176471, green: 0.952941176, blue: 0.960784314 },
239
- fuji_grayscale_marshmallow: { red: 0.960784314, green: 0.972549020, blue: 0.980392157 },
240
- fuji_grayscale_white: { red: 1.000000000, green: 1.000000000, blue: 1.000000000 }
241
- }.freeze
99
+ #
100
+ def self.color_names = SheetsV4::Color::COLORS.keys
242
101
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sheets_v4
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Couball
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-29 00:00:00.000000000 Z
11
+ date: 2023-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler-audit
@@ -257,9 +257,16 @@ files:
257
257
  - README.md
258
258
  - Rakefile
259
259
  - examples/README.md
260
+ - examples/set_background_color
261
+ - examples/set_background_color2
260
262
  - lib/sheets_v4.rb
261
263
  - lib/sheets_v4/color.rb
262
- - lib/sheets_v4/validate_api_object.rb
264
+ - lib/sheets_v4/credential_creator.rb
265
+ - lib/sheets_v4/validate_api_objects.rb
266
+ - lib/sheets_v4/validate_api_objects/load_schemas.rb
267
+ - lib/sheets_v4/validate_api_objects/resolve_schema_ref.rb
268
+ - lib/sheets_v4/validate_api_objects/traverse_object_tree.rb
269
+ - lib/sheets_v4/validate_api_objects/validate.rb
263
270
  - lib/sheets_v4/version.rb
264
271
  homepage: https://github.com/main-branch/sheets_v4
265
272
  licenses:
@@ -1,132 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json_schemer'
4
-
5
- module SheetsV4
6
- # Validate objects against a Google Sheets API request object schema
7
- #
8
- # @api public
9
- #
10
- class ValidateApiObject
11
- # Create a new validator
12
- #
13
- # By default, a nil logger is used. This means that no messages are logged.
14
- #
15
- # @example
16
- # logger = Logger.new(STDOUT, :level => Logger::INFO)
17
- # validator = SheetsV4::ValidateApiObject.new(logger)
18
- #
19
- # @param logger [Logger] the logger to use
20
- #
21
- def initialize(logger = Logger.new(nil))
22
- @logger = logger
23
- end
24
-
25
- # The logger to use internally
26
- #
27
- # Validation errors are logged at the error level. Other messages are logged
28
- # at the debug level.
29
- #
30
- # @example
31
- # logger = Logger.new(STDOUT, :level => Logger::INFO)
32
- # validator = SheetsV4::ValidateApiObject.new(logger)
33
- # validator.logger == logger # => true
34
- # validator.logger.debug { "Debug message" }
35
- #
36
- # @return [Logger]
37
- #
38
- attr_reader :logger
39
-
40
- # Validate the object using the JSON schema named schema_name
41
- #
42
- # @example
43
- # schema_name = 'BatchUpdateSpreadsheetRequest'
44
- # object = { 'requests' => [] }
45
- # validator = SheetsV4::ValidateApiObject.new
46
- # validator.call(schema_name, object)
47
- #
48
- # @param schema_name [String] the name of the schema to validate against
49
- # @param object [Object] the object to validate
50
- #
51
- # @raise [RuntimeError] if the object does not conform to the schema
52
- #
53
- # @return [void]
54
- #
55
- def call(schema_name, object)
56
- logger.debug { "Validating #{object} against #{schema_name}" }
57
-
58
- schema = { '$ref' => schema_name }
59
- schemer = JSONSchemer.schema(schema, ref_resolver:)
60
- errors = schemer.validate(object)
61
- raise_error!(schema_name, object, errors) if errors.any?
62
-
63
- logger.debug { "Object #{object} conforms to #{schema_name}" }
64
- end
65
-
66
- private
67
-
68
- # The resolver to use to resolve JSON schema references
69
- # @return [SchemaRefResolver]
70
- # @api private
71
- def ref_resolver = @ref_resolver ||= SchemaRefResolver.new(logger)
72
-
73
- # Raise an error when the object does not conform to the schema
74
- # @return [void]
75
- # @raise [RuntimeError]
76
- # @api private
77
- def raise_error!(schema_name, object, errors)
78
- error = errors.first['error']
79
- error_message = "Object #{object} does not conform to #{schema_name}: #{error}"
80
- logger.error(error_message)
81
- raise error_message
82
- end
83
- end
84
-
85
- # Resolve JSON schema references to Google Sheets API schemas
86
- #
87
- # Uses the Google Discovery API to get the schemas. This is an implementation
88
- # detail used to interact with JSONSchemer.
89
- #
90
- # @api private
91
- #
92
- class SchemaRefResolver
93
- # Create a new schema resolver
94
- #
95
- # @param logger [Logger] the logger to use
96
- #
97
- # @api private
98
- #
99
- def initialize(logger)
100
- @logger = logger
101
- end
102
-
103
- # The logger to use internally
104
- #
105
- # Currently, only info messages are logged.
106
- #
107
- # @return [Logger]
108
- #
109
- # @api private
110
- #
111
- attr_reader :logger
112
-
113
- # Resolve a JSON schema reference
114
- #
115
- # @param ref [String] the reference to resolve usually in the form "#/definitions/schema_name"
116
- #
117
- # @return [Hash] the schema object as a hash
118
- #
119
- # @api private
120
- #
121
- def call(ref)
122
- schema_name = ref.path[1..]
123
- logger.debug { "Reading schema #{schema_name}" }
124
- schema_object = SheetsV4.api_object_schemas[schema_name]
125
- raise "Schema for #{ref} not found" unless schema_object
126
-
127
- schema_object.to_h.tap do |schema|
128
- schema['unevaluatedProperties'] = false
129
- end
130
- end
131
- end
132
- end