lws 9.0.2 → 10.0.1

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: 79de0146785b0838a7841f343e1fd37b602efdb7c6bb566befce04ac32a07281
4
- data.tar.gz: 71e2f9a348e48af15bc37f241ddfb3881973361d388754b81a224ffe55da898a
3
+ metadata.gz: b95bfeece7dd86ad3600b16dcb9144c705c4229d470812260af4d1d0970ce8d4
4
+ data.tar.gz: 59ce679a1c5343c37be5c5ac2c59c3560e51e79f62fafba17f48e561d504cf42
5
5
  SHA512:
6
- metadata.gz: 5bc54b5ef614447d7d38c363b621a20d6a542eb9966f07e05a9ff09c7f81d196651b3515743f80149088ee35f056060fe59f86a1c63328f136b1bbe0a7c6e494
7
- data.tar.gz: 7d0d5414dff5c32164c73d185cf8f3dad902e32dce64dbe0bf35ca5de1bce4a989705986ec8d4f439f171793137d3c1a302d33677c273c2581f39d1fc8ae02bc
6
+ metadata.gz: 979c5b1e4565900eed76bc588674cf75a52c7ddb1bb227eb6913c43b17316d940d68775d19427281b34534d60705277b9babb16ad116372ccfcfea48adfd7847
7
+ data.tar.gz: 4eeb72294ada48b88afda88ab5c706f44eea5a181ecb7ed0de31cab4321025a8fb7c29d414715da99eae0733ceecaba7c151ddfd0177ea9d9e4a8cc8900103f0
data/CHANGELOG.md ADDED
@@ -0,0 +1,581 @@
1
+ # LeftClick Web Services Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ Up until version 6.1.0, we used the standard Gem version numbering starting at
6
+ version 0.0.1. From version 6.1.0 on the version will follow the API version
7
+ of LWS in the major/minor part of te version.
8
+
9
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
10
+
11
+ ## [10.0.1] - 2024-10-10
12
+
13
+ ### Fixed
14
+
15
+ - Bring back the dependency on the `net-http-persistent` gem (in case Faraday
16
+ 1.x is used)
17
+
18
+ ## [10.0.0] - 2024-10-10
19
+
20
+ ### Added
21
+
22
+ - Add vendored caching firmware from the Faraday Middleware project for use
23
+ with Faraday 2.x
24
+
25
+ ### Changed
26
+
27
+ - Tighten dependency on `faraday` gem to 1.0; extend support to 2.x (less
28
+ than 3.0)
29
+ - Rework the `Gemfile`/`gemspec` files; split up runtime and dev dependencies
30
+
31
+ ### Fixed
32
+
33
+ - Correct the name of the minitest module
34
+
35
+ ## [9.0.2] - 2024-08-12
36
+
37
+ ### Fixed
38
+
39
+ - Fix crash when creating models that have has-many associations
40
+
41
+ ## [9.0.1] - 2024-06-24
42
+
43
+ ### Add
44
+
45
+ - Add missing `_ids` attributes for all has-many associations
46
+
47
+ ### Fixed
48
+
49
+ - Fix dirty model/changes stracking for has-many associations (#12133)
50
+ - Various documentation improvements
51
+
52
+ ### Removed
53
+
54
+ - Remove all collection item attributes (except for `items`) from the
55
+ collection model; they don't actually work
56
+
57
+ ## [9.0.0] - 2024-06-19
58
+
59
+ ### Changed
60
+
61
+ - Further restrict the depency on spyke
62
+
63
+ ## [9.0.0.beta1] - 2024-06-05
64
+
65
+ ### Changed
66
+
67
+ - Update the dependency on the `spyke` gem
68
+
69
+ ## [8.1.1] - 2023-12-11
70
+
71
+ ### Changed
72
+
73
+ - Relax the dependency on hashie to allow version 3.5 through 5
74
+ - Update the `leftclick.eu` domain to `leftclick.network`
75
+ - Remove unnecessary test file from the gemspec
76
+
77
+ ## [8.1.0] - 2023-12-11
78
+
79
+ ### Fixed
80
+
81
+ - Fix all tests (on the LWS side)
82
+
83
+ ### Removed
84
+
85
+ - Remove the `start_app` attribute from the account model
86
+
87
+ ## [7.5.2] - 2022-05-13
88
+
89
+ ### Changed
90
+
91
+ - Use safe loading when loading stubs/config YAML (#12134)
92
+
93
+ ### Fixed
94
+
95
+ - Fix compatibility issue with newer versions of Psych (#12134)
96
+
97
+ ## [7.5.1] - 2022-03-02
98
+
99
+ ### Added
100
+
101
+ - Add attributes to the customizable model (#12132)
102
+
103
+ ### Changed
104
+
105
+ - Renamed the `hint_message` attribute to `title` on the customizable model
106
+
107
+ ## [7.5.0] - 2022-01-21
108
+
109
+ ### Added
110
+
111
+ - Add the `email` attribute to the folder model (#12130)
112
+ - Add the `service_reason` attribute to the player model (#12131)
113
+
114
+ ## [7.4.1] - 2021-10-21
115
+
116
+ ### Changed
117
+
118
+ - Relax the dependency on the `spyke` gem
119
+
120
+ ## [7.4.0] - 2021-10-21
121
+
122
+ ### Changed
123
+
124
+ - Relax the dependency on the `net-http-persisent` gem
125
+
126
+ ### Fixed
127
+
128
+ - Fix missing default documentation for option `http_persistent`
129
+
130
+ ## [7.3.2] - 2021-10-04
131
+
132
+ ### Fixed
133
+
134
+ - Fix some model URIs (endpoint not in plural form)
135
+
136
+ ## [7.3.1] - 2021-09-29
137
+
138
+ ### Added
139
+
140
+ - Add the `invite_remarks` and `reservation_required` attributes to the
141
+ location model (#12127)
142
+ - Add the `layout_kind` attribute to the channel model (#12128)
143
+ - Add the `uuid` attribute to the slide model (#12129)
144
+
145
+ ### Changed
146
+
147
+ - Update the `status` attribute of the layout version model to allow for
148
+ the "stage" status (#12128)
149
+ - Updated the copyright, company name and address
150
+
151
+ ## [7.3.0] - 2021-04-22
152
+
153
+ ### Changed
154
+
155
+ - Start using Rubocop 1.8; add basic To Do config
156
+
157
+ ### Fixed
158
+
159
+ - Fixed small Rubocop offences
160
+
161
+ ## [7.2.5] - 2021-01-13
162
+
163
+ ### Added
164
+
165
+ - Add support for HTTP proxy configuration (#12126)
166
+ - Add method `endpoint` on app modules that returns the currently used
167
+ endpoint (#12096)
168
+
169
+ ### Changed
170
+
171
+ - Default options in config file are merged into environment-specific
172
+ configuration
173
+
174
+ ### Fixed
175
+
176
+ - Documentation tweaks
177
+
178
+ ## [7.2.4] - 2021-01-11
179
+
180
+ ### Added
181
+
182
+ - Add support for short environment names ("prod" and "dev")
183
+
184
+ ### Changed
185
+
186
+ - Relax the `faraday_middleware` gem dependency to less than 2.0 (#12118)
187
+ - Use API token (middleware) for Active Storage (#12125)
188
+
189
+ ## [7.2.3] - 2020-12-02
190
+
191
+ ### Added
192
+
193
+ - Added the "reserved" and "permanent_reserved" status variant for the location
194
+ model
195
+ - Added the `import_ref` attribute to the location model
196
+ - Added the `definition` attribute to the layout element model
197
+
198
+ ### Changed
199
+
200
+ - Enabled HTTP caching for LWS Console
201
+ - Switched to Bundler version 2.1
202
+
203
+ ### Fixed
204
+
205
+ - Fixed small documentation errors and inaccurracies
206
+
207
+ ## [7.2.2] - 2020-11-06
208
+
209
+ ### Changed
210
+
211
+ - HTTP caching is disable by default; opt-in via config
212
+ - Updated the README to show HTTP caching in an example
213
+
214
+ ## [7.2.1] - 2020-10-29
215
+
216
+ ### Added
217
+
218
+ - Added HTTP caching using faraday-http-cache gem (#12014)
219
+
220
+ ### Fixed
221
+
222
+ - Fixed `#dig` on models stumbling over missing methods/attributes
223
+
224
+ ## [7.2.0] - 2020-10-23
225
+
226
+ ### Added
227
+
228
+ - Added the `address`, `birthdate`, `city`, `country` and `zip_code` attributes
229
+ to the person model (#12123)
230
+ - Added the `recent_os` attribute to the player model (#12121)
231
+
232
+ ### Fixed
233
+
234
+ - Fixed storage uploads (almost) always failing (#12124)
235
+
236
+ ## [7.1.4] - 2020-09-17
237
+
238
+ ### Added
239
+
240
+ - Added the `archive_storage_id` and `archive_url` attributes to the layout
241
+ version model
242
+ - Added the `company`, `company_id`, `name` and `serial_number` attributes
243
+ to the reader model (#12113)
244
+
245
+ ### Changed
246
+
247
+ - Updated the copyright and company address
248
+
249
+ ## [7.1.3] - 2020-09-03
250
+
251
+ ### Added
252
+
253
+ - Added the `name` and `status_updated_at` attributes to the player model
254
+ - Added the `comments`, `duration`, `edit_account_ids`, `editable_by_me` and
255
+ `thumbnail_url` attributes to the slide model (#12119)
256
+ - Added the `category_ids`, `company_shared_ids`, `description_html`,
257
+ `duration_kind`, `public`, `rotation` and `thumbnail_url` attributes to the
258
+ layout model (#12122)
259
+
260
+ ### Changed
261
+
262
+ - Renamed the `operation_hours` (from `operational_hours`) and `feedback`
263
+ (from `feedbacks`) attributes on the player model
264
+ - Renamed the `company_owner` (from `company`) and `company_owner_id`
265
+ (from `company_id`) atributes on the layout model
266
+
267
+ ### Fixed
268
+
269
+ - LS Console environment argument now correctly switches to that
270
+ environment (#12144)
271
+ - Correctly show the debug modes for LWS Console
272
+ - Documentation fixes and improvements
273
+
274
+ ## [7.1.2] - 2020-07-07
275
+
276
+ ### Added
277
+
278
+ - Added the journal model to the Presence app
279
+
280
+ ### Fixed
281
+
282
+ - Use fixed model IDs to find models in tests wherever possible
283
+
284
+ ## [7.1.1] - 2020-06-17
285
+
286
+ ### Added
287
+
288
+ - Added a `deep_dup` method to the generic model
289
+
290
+ ### Fixed
291
+
292
+ - Documentation fixes and tweaks
293
+
294
+ ## [7.1.0] - 2020-05-11
295
+
296
+ ### Added
297
+
298
+ - Added the `reset_reason` attribute to the location model (#12121)
299
+ - Added the `checkout_alter_status` and `status` attribute to the location model
300
+ - Added the `location_status_change_permissions` attribute to the person model
301
+
302
+ ### Changed
303
+
304
+ - Add compatibility with newer Pry versions
305
+ - Changed the `feedbacks` attribute on the player model to a plain hash (#12110)
306
+
307
+ ### Removed
308
+
309
+ - Removed the player feedback and player feedback result models (#12110)
310
+
311
+ ## [7.0.4] - 2020-03-25
312
+
313
+ ### Fixed
314
+
315
+ - Decreased minimum test coverage to 95% to work around simplecov issue
316
+
317
+ ## [7.0.3] - 2020-03-25
318
+
319
+ ### Added
320
+
321
+ - Added `image_storage_id` and `image_url` attributes to the location model (#12117)
322
+ - Added `image_storage_id` and `image_url` attributes to the location map model (#12117)
323
+ - Added `image_storage_id` and `image_url` attributes to the person model (#12117)
324
+ - Added the `Storage` class to the Presence app
325
+ - Added the `Storage.download` helper method
326
+
327
+ ### Deprecated
328
+
329
+ - Deprecated the `picture_url` on the location map model (#12117)
330
+ - Deprecated the `picture_url` on the person model (#12117)
331
+ - Deprecated the `Generic::Storage.create` helper method in favour of
332
+ `Generic::Storage.upload`
333
+
334
+ ## [7.0.2] - 2020-03-19
335
+
336
+ ### Added
337
+
338
+ - Added `processing`, `permission` and `tempory` attributes to the collection
339
+ model (#12115)
340
+ - Added `status` attribute to the slide model (#12116)
341
+ - Added associations between the slide, channel and channel group models
342
+ - Added a lot of missing attributes to the digital signage models
343
+
344
+ ### Fixed
345
+
346
+ - Fixed digital signage test queries
347
+
348
+ ## [7.0.1] - 2020-02-20
349
+
350
+ ### Added
351
+
352
+ - Added `kind` attribute to the layout mode (#12122)
353
+ - Added `hostname` attribute to the player model (#12122)
354
+
355
+ ### Fixed
356
+
357
+ - Tweaked documentation of the `checkin_status` attribute
358
+
359
+ ## [7.0.0] - 2020-02-03
360
+
361
+ ### Added
362
+
363
+ - Added `checkin_status` attribute to the location model (#12111)
364
+ - Added `people_responsible_for` attribute to the person model (#12111)
365
+ - Added `person_responsible`, `person_responsible_id` attributes to the person
366
+ model (#12111)
367
+
368
+ ### Fixed
369
+
370
+ - Fixed the digital signage test queries for displays
371
+ - Fixed the caching test for newer `faraday_middleware` gem versions
372
+
373
+ ## [6.4.0] - 2020-01-08
374
+
375
+ ### Added
376
+
377
+ - Added `company_name` attribute to the person model (#11997)
378
+ - Added `time_zone` attribute to the location model (#12109)
379
+
380
+ ### Fixed
381
+
382
+ - Fixed the layout version model URI
383
+ - Removed duplicate generic attributes from models
384
+ - Fixed some typos in attribute name and order
385
+
386
+ ## [6.3.2] - 2019-09-26
387
+
388
+ ### Added
389
+
390
+ - Expanded the models and attributes in the presence app (#12108)
391
+ - Added a `#dig` method for the generic/all models
392
+
393
+ ### Fixed
394
+
395
+ - Fixed the reduced/dropped test coverage (#12107)
396
+
397
+ ## [6.3.1] - 2019-09-05
398
+
399
+ ### Changed
400
+
401
+ - Reworked the JSON parser to handle metadata better
402
+ - Updated/reworked the Resource app models: added/removed/updated attributes
403
+ where necessary (#12106)
404
+
405
+ ### Removed
406
+
407
+ - Removed some attributes that are already part of the generic model from
408
+ DigitalSignage app models
409
+
410
+ ## [6.3.0] - 2019-09-05
411
+
412
+ ### Added
413
+
414
+ - Added slide, layout and related models to the DigitalSignage app (#12103)
415
+ - Added the `Storage` class to the DigitalSignage and Resource apps
416
+
417
+ ### Changed
418
+
419
+ - All non-persisted objects are always saved (even without changes)
420
+
421
+ ### Fixed
422
+
423
+ - Fixed typos in documentation
424
+ - Fixed some code style issues
425
+ - Default to an empty object if the API provides no data
426
+
427
+ ## v6.2.3
428
+
429
+ - Move common attributes to the generic model and add `url`/`url_html` (#12004)
430
+ - Add password expiration attributes to the `Company` and `User` model of
431
+ the Auth app (#12012)
432
+ - Add new attributes to the `Collection` model of the Resource app (#12012)
433
+
434
+ ## v6.2.2.1
435
+
436
+ - Add missing dependency on net-http-persistent in the gemspec file
437
+
438
+ ## v6.2.2
439
+
440
+ - Add some more attributes to the Presence app
441
+ - Use persistent HTTP connections from now on (#12101)
442
+ * Add a configuration option for enabling/disabling persistent HTTP
443
+ connections
444
+ - Add support for dirtiness checking for all models (#12100)
445
+ * Only save models using the HTTP if dirty
446
+
447
+ ## v6.2.1
448
+
449
+ - Add new models and attributes to the Presence app (#12098, #12099)
450
+ - Replace Fixnum by Integer in the documentation (for Ruby ≥ 2.3)
451
+
452
+ ## v6.2.0
453
+
454
+ - Add the Resource app implementation (#12097)
455
+ - Update the CorporateWebsite app for recent API changes
456
+
457
+ ## v6.1.5
458
+
459
+ - Update the gemspec to relax the dependency on WebMock to support 2.x and 3.x
460
+
461
+ ## v6.1.4
462
+
463
+ - Fix LWS Console environment command-line parameter not overriding the config
464
+ - Print LWS setup on LWS Console start
465
+
466
+ ### Apps
467
+
468
+ - Add some fields to the DigitalSignage app (closes: #12001)
469
+ - Fix some relations in the Auth app (closes: #12026)
470
+
471
+ ## v6.1.3
472
+
473
+ - Fix `#find` on has many-associations not working
474
+
475
+ ### Development
476
+
477
+ - Many fixes in the gemspec
478
+ - Use the SpecReporter for tests
479
+
480
+ ## v6.1.2
481
+
482
+ - Small tweaks to LWS Console
483
+ - Add LWS Console documentation (in the README)
484
+ - Documentation improvements
485
+
486
+ ### Development
487
+
488
+ - Fix caching tests not tearing down the specific setup
489
+
490
+ ## v6.1.1
491
+
492
+ - Support a global and user-specific config file for LWS Console
493
+ - Use a separate history and specific prompt for LWS Console
494
+ - Small documentation fixes
495
+ - Speed up the tests
496
+
497
+ ## v6.1.0
498
+
499
+ - Switch to LWS/LeftClick platform release versions
500
+ - Switch to Spyke as the REST ORM library (closes: #10671)
501
+ - Add some Her backward compatibility support
502
+ - Use JSON as the wire format for sending data to LWS
503
+ - Switch to using our own exceptions (see LWS::Errors)
504
+ - Add support for setting the LWS API token in the environment
505
+ - Switch to Pry as the REPL used by the LWS Console
506
+ - Add commands to the LWS Console to toggle debug options
507
+ - Add option parsing and app/environment/debug mode selection to LWS Console
508
+
509
+ ### Apps
510
+
511
+ - Add a first implementation of the Digital Signage app (closes: #11110)
512
+ - Update some fields for the Ticket app (closes: #11997)
513
+ - Add the Reader model to the Presence app, add fields to the Location model
514
+
515
+ ### Development
516
+
517
+ - Reorganize the file structure of the library
518
+ - Add and improve tests and documentation
519
+ - Document and fix model relations throughout all apps
520
+ - Documentation fixes for switch to Spyke
521
+
522
+ ## v0.4.2
523
+
524
+ - Documentation fixes
525
+ - Obtain full test coverage by adding some tests
526
+
527
+ ## v0.4.1
528
+
529
+ - Test improvements; use simplecov for coverage metrics.
530
+
531
+ ## v0.4.0
532
+
533
+ - Add support for the ticket and corporate website app/web service
534
+ - Gem/packaging and documentation fixes
535
+
536
+ ## v0.3.1
537
+
538
+ - Add a release_if_needed task
539
+
540
+
541
+
542
+ ## v0.0.1
543
+
544
+ Initial release
545
+
546
+ [6.3.0]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v6.2.3...v6.3.0
547
+ [6.3.1]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v6.3.0...v6.3.1
548
+ [6.3.2]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v6.3.1...v6.3.2
549
+ [6.4.0]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v6.3.2...v6.4.0
550
+ [7.0.0]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v6.4.0...v7.0.0
551
+ [7.0.1]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.0.0...v7.0.1
552
+ [7.0.2]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.0.1...v7.0.2
553
+ [7.0.3]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.0.2...v7.0.3
554
+ [7.0.4]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.0.3...v7.0.4
555
+ [7.1.0]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.0.4...v7.1.0
556
+ [7.1.1]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.1.0...v7.1.1
557
+ [7.1.2]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.1.1...v7.1.2
558
+ [7.1.3]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.1.2...v7.1.3
559
+ [7.1.4]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.1.3...v7.1.4
560
+ [7.2.0]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.1.4...v7.2.0
561
+ [7.2.1]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.2.0...v7.2.1
562
+ [7.2.2]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.2.1...v7.2.2
563
+ [7.2.3]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.2.2...v7.2.3
564
+ [7.2.4]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.2.3...v7.2.4
565
+ [7.2.5]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.2.4...v7.2.5
566
+ [7.3.0]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.2.5...v7.3.0
567
+ [7.3.1]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.3.0...v7.3.1
568
+ [7.3.2]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.3.1...v7.3.2
569
+ [7.4.0]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.3.2...v7.4.0
570
+ [7.4.1]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.4.0...v7.4.1
571
+ [7.5.0]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.4.1...v7.5.0
572
+ [7.5.1]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.5.0...v7.5.1
573
+ [7.5.2]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.5.1...v7.5.2
574
+ [8.1.0]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v7.5.2...v8.1.0
575
+ [8.1.1]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v8.1.0...v8.1.1
576
+ [9.0.0.beta1]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v8.1.1...v9.0.0.beta1
577
+ [9.0.0]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v9.0.0.beta1...v9.0.0
578
+ [9.0.1]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v9.0.0...v9.0.1
579
+ [9.0.2]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v9.0.1...v9.0.2
580
+ [10.0.0]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v9.0.2...v10.0.0
581
+ [10.0.1]: https://gitlab.leftclick.network/platform/ruby-lws/compare/v10.0.0...v10.0.1
data/README.md ADDED
@@ -0,0 +1,170 @@
1
+ # LeftClick Web Services
2
+
3
+ LWS is a library for Ruby provides access to the LeftClick web
4
+ services/applications using a model-based structure that abstracts from API
5
+ calls using the available REST interfaces.
6
+
7
+ ## Installation
8
+
9
+ In your Gemfile, add:
10
+
11
+ ```
12
+ gem "lws"
13
+ ```
14
+
15
+ or install the `ruby-lws` package.
16
+
17
+
18
+ ## Usage
19
+
20
+ First, you have to initialize the library. For example, with Rails, you
21
+ would create a new `config/initializers/lws.rb` file with these lines:
22
+
23
+ ```ruby
24
+ # config/initializers/lws.rb
25
+ LWS.setup do |config|
26
+ config.api_token = "…" # Get it from some place
27
+ end
28
+ ```
29
+
30
+ After that, due to the fact that LWS is based on
31
+ [Spyke](https://github.com/balvig/spyke), you can access the objects in the
32
+ LeftClick Web Services similary to many ActiveRecord-like ORM's:
33
+
34
+ ### Get all map markers of the first map
35
+
36
+ ```ruby
37
+ map = Maps::Map.all.first
38
+ markers = map.markers
39
+ ```
40
+
41
+ ### Create an account for company with ID 6
42
+
43
+ ```ruby
44
+ company = Company.find(6)
45
+ account = Auth::Account.create(name: "Foo Bar",
46
+ company: company)
47
+ ```
48
+
49
+ ### Destroy all locations named "Test"
50
+
51
+ ```ruby
52
+ loc = Presence::Location.where(name: "Test")
53
+ loc.destroy
54
+ ```
55
+
56
+ ## Configuration
57
+
58
+ The following example uses a much more elaborate setup:
59
+
60
+ ```ruby
61
+ LWS.setup do |config|
62
+ config.api_token_middleware = TokenAuthenticator
63
+ config.caching_object = MyRedisCache.new
64
+ config.environment = :development
65
+ config.endpoints = { maps: "https://maps.leftclick.cloud" }
66
+ config.http_caching = true
67
+ config.http_debug = true
68
+ config.json_debug = true
69
+ config.logger = Rails.logger
70
+ config.proxy = "http://proxyserver:8080"
71
+ end
72
+ ```
73
+
74
+ In this setup, a caching object is used that follows the
75
+ `FaradayMiddleWare::Caching` API. It uses all development API endpoints,
76
+ except for maps, which is overriden to use the production endpoint. Also
77
+ HTTP request and JSON data debug logging is enabled and LWS will use
78
+ the Rails logger to log the messages. Also HTTP responses will be cached
79
+ in accordance to their ETag/last modification time and the proxy server with
80
+ URL `http://proxyserver:8080` will be used.
81
+ Finally, a custom API token authenticator class is used that should implement
82
+ the `Faraday::Middleware` interface and set the `X-Token` header with the
83
+ runtime determined API token as value, for example:
84
+
85
+ ```ruby
86
+ class TokenAuthenticator < Faraday::Middleware
87
+
88
+ def call(env)
89
+ env[:request_headers]["X-Token"] = … # Some calculated token
90
+ @app.call(env)
91
+ end
92
+
93
+ end
94
+ ```
95
+
96
+ The `LC_LWS_ENV` environment variable is supported to override the LWS
97
+ environment. Allowed values are "production" (default) and "development".
98
+ The `LC_LWS_API_TOKEN` is supported to set the LWS API token default.
99
+ This only works if a custom API token middleware is not used.
100
+
101
+ ## LWS Console
102
+
103
+ This library comes with the program `lwsconsole`, which is a command-line
104
+ tool that can be used to interactively use the library. (This is similar
105
+ to the Rails console.) See `lwsconsole --help` for the supported
106
+ command-line arguments.
107
+
108
+ LWS Console will perform the setup for you and give you a prompt in the
109
+ `LWS` module namespace or the module of an app if this is selected via the
110
+ arguments. It uses the production environment per default using the token
111
+ provided by a command-line argument. These defaults can be overriden using
112
+ the configuration. For example, to rename a map:
113
+
114
+ ```console
115
+ $ lwsconsole -t "my_token" -a maps
116
+ [1] lwsconsole(LWS::Maps)> Map.all.map(&:name)
117
+ => ["Gebouw 1",
118
+ "Gebouw 3"]
119
+ [2] lwsconsole(LWS::Maps)> map = Map.find(2)
120
+ => #<LWS::Maps::Map(maps/(:id)) id: 2 name: "Gebouw 3" ... markers: []>
121
+ [3] lwsconsole(LWS::Maps)> map.name = "Gebouw 2"
122
+ "Gebouw 2"
123
+ [4] lwsconsole(LWS::Maps)> map.save
124
+ nil
125
+ ```
126
+
127
+ Besides the API calls, LWS console supports a few commands to change its
128
+ behaviour:
129
+
130
+ * `http_debug true|false`: Toggles HTTP debugging for API calls
131
+ * `http_debug_headers true|false`: Toggles logging of HTTP headers in the HTTP debug output
132
+ * `json_debug true|false`: Toggles JSON debug output for API calls
133
+ * `reload!`: Reloads all apps
134
+
135
+ ```
136
+ [5] lwsconsole(LWS::Maps)> http_debug true
137
+ true
138
+ ```
139
+
140
+ LWS Console keeps a history of all calls and commands, use the command
141
+ `history --all` to seem them. Use the command `help` to see all other
142
+ available commands (provided by Pry).
143
+
144
+ ### Configuration files
145
+
146
+ LWS Console will look for the configuration files first in
147
+ `/etc/LeftClick/lws.yml` and then `~/.config/LeftClick/lws.yml`; they are
148
+ in the YAML format.
149
+
150
+ The configuration file can set defaults per environment. It is possible to
151
+ set the API key, endpoints and debug modes.
152
+
153
+ ```yaml
154
+ development:
155
+ api_token: "my_token"
156
+ endpoints:
157
+ maps: "https://maps.leftclick.cloud
158
+ http_debug: true
159
+ http_debug_headers: true
160
+ json_debug: true
161
+ ```
162
+
163
+ To override the default environment or to set default options, use the default section.
164
+ For example:
165
+
166
+ ```yaml
167
+ default:
168
+ environment: "development"
169
+ json_debug: true
170
+ ```
@@ -255,13 +255,15 @@ module LWS::Generic
255
255
  # without caching).
256
256
  @as_connection = Faraday.new(url: api.url_prefix, proxy: config.proxy) do |c|
257
257
  # Request
258
- c.request :json
259
258
  c.use LWS::Middleware::RequestHeaders, config.api_token
260
259
  c.use config.api_token_middleware if config.api_token_middleware.present?
260
+ c.use LWS::Middleware::JSONEncoder
261
261
 
262
262
  # Response
263
- c.use LWS::JSONLogger, config.logger if config.json_debug
264
- c.use LWS::HTTPLogger, config.logger, config.http_debug_headers if config.http_debug
263
+ c.use LWS::Middleware::JSONLogger, config.logger if config.json_debug
264
+ if config.http_debug
265
+ c.use LWS::Middleware::HTTPLogger, config.logger, config.http_debug_headers
266
+ end
265
267
 
266
268
  # Adapter
267
269
  if config.http_persistent
@@ -271,19 +273,21 @@ module LWS::Generic
271
273
  end
272
274
  end
273
275
 
274
- # A plain file connection to LWS (with token autnentication and caching but without
276
+ # A plain file connection to LWS (with token authentication and caching but without
275
277
  # JSON request/response).
276
278
  @lws_connection = Faraday.new(url: api.url_prefix, proxy: config.proxy) do |c|
277
279
  # Request
278
280
  if config.caching_object
279
- c.use FaradayMiddleware::Caching, config.caching_object
281
+ c.use LWS::Middleware::ObjectCaching, config.caching_object
280
282
  end
281
283
  c.use LWS::Middleware::RequestHeaders, config.api_token
282
284
  c.use config.api_token_middleware if config.api_token_middleware.present?
283
285
 
284
286
  # Response
285
- c.use FaradayMiddleware::FollowRedirects, limit: 3
286
- c.use LWS::HTTPLogger, config.logger, config.http_debug_headers if config.http_debug
287
+ c.use LWS::Middleware::FollowRedirects, limit: 3
288
+ if config.http_debug
289
+ c.use LWS::Middleware::HTTPLogger, config.logger, config.http_debug_headers
290
+ end
287
291
 
288
292
  # Adapter
289
293
  if config.http_persistent
@@ -0,0 +1,158 @@
1
+ # Vendored copy from the `faraday-middleware` gem version 1.2.0
2
+ # See also: https://github.com/lostisland/faraday_middleware/blob/main/lib/faraday_middleware/response/caching.rb
3
+ #
4
+ # Copyright (c) 2011 Erik Michaels-Ober, Wynn Netherland, et al.
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in
14
+ # all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+
24
+ # frozen_string_literal: true
25
+
26
+ require 'faraday'
27
+ require 'forwardable'
28
+ require 'digest/sha1'
29
+
30
+ # :nocov:
31
+ module LWS::Middleware
32
+ # Public: Caches GET responses and pulls subsequent ones from the cache.
33
+ class Caching < Faraday::Middleware
34
+ attr_reader :cache
35
+
36
+ # Internal: List of status codes that can be cached:
37
+ # * 200 - 'OK'
38
+ # * 203 - 'Non-Authoritative Information'
39
+ # * 300 - 'Multiple Choices'
40
+ # * 301 - 'Moved Permanently'
41
+ # * 302 - 'Found'
42
+ # * 404 - 'Not Found'
43
+ # * 410 - 'Gone'
44
+ CACHEABLE_STATUS_CODES = [200, 203, 300, 301, 302, 404, 410].freeze
45
+
46
+ extend Forwardable
47
+ def_delegators :'Faraday::Utils', :parse_query, :build_query
48
+
49
+ # Public: initialize the middleware.
50
+ #
51
+ # cache - An object that responds to read and write (default: nil).
52
+ # options - An options Hash (default: {}):
53
+ # :ignore_params - String name or Array names of query
54
+ # params that should be ignored when forming
55
+ # the cache key (default: []).
56
+ # :write_options - Hash of settings that should be passed as the
57
+ # third options parameter to the cache's #write
58
+ # method. If not specified, no options parameter
59
+ # will be passed.
60
+ # :full_key - Boolean - use full URL as cache key:
61
+ # (url.host + url.request_uri)
62
+ # :status_codes - Array of http status code to be cache
63
+ # (default: CACHEABLE_STATUS_CODE)
64
+ #
65
+ # Yields if no cache is given. The block should return a cache object.
66
+ def initialize(app, cache = nil, options = {})
67
+ super(app)
68
+ if cache.is_a?(Hash) && block_given?
69
+ options = cache
70
+ cache = nil
71
+ end
72
+ @cache = cache || yield
73
+ @options = options
74
+ end
75
+
76
+ def call(env)
77
+ if env[:method] == :get
78
+ if env[:parallel_manager]
79
+ # callback mode
80
+ cache_on_complete(env)
81
+ else
82
+ # synchronous mode
83
+ key = cache_key(env)
84
+ unless (response = cache.read(key)) && response
85
+ response = @app.call(env)
86
+ store_response_in_cache(key, response)
87
+ end
88
+ finalize_response(response, env)
89
+ end
90
+ else
91
+ @app.call(env)
92
+ end
93
+ end
94
+
95
+ def cache_key(env)
96
+ url = env[:url].dup
97
+ if url.query && params_to_ignore.any?
98
+ params = parse_query url.query
99
+ params.reject! { |k,| params_to_ignore.include? k }
100
+ url.query = params.any? ? build_query(params) : nil
101
+ end
102
+ url.normalize!
103
+ digest = full_key? ? url.host + url.request_uri : url.request_uri
104
+ Digest::SHA1.hexdigest(digest)
105
+ end
106
+
107
+ def params_to_ignore
108
+ @params_to_ignore ||= Array(@options[:ignore_params]).map(&:to_s)
109
+ end
110
+
111
+ def full_key?
112
+ @full_key ||= @options[:full_key]
113
+ end
114
+
115
+ def custom_status_codes
116
+ @custom_status_codes ||= begin
117
+ codes = CACHEABLE_STATUS_CODES & Array(@options[:status_codes]).map(&:to_i)
118
+ codes.any? ? codes : CACHEABLE_STATUS_CODES
119
+ end
120
+ end
121
+
122
+ def cache_on_complete(env)
123
+ key = cache_key(env)
124
+ if (cached_response = cache.read(key))
125
+ finalize_response(cached_response, env)
126
+ else
127
+ # response.status is nil at this point
128
+ # any checks need to be done inside on_complete block
129
+ @app.call(env).on_complete do |response_env|
130
+ store_response_in_cache(key, response_env.response)
131
+ response_env
132
+ end
133
+ end
134
+ end
135
+
136
+ def store_response_in_cache(key, response)
137
+ return unless custom_status_codes.include?(response.status)
138
+
139
+ if @options[:write_options]
140
+ cache.write(key, response, @options[:write_options])
141
+ else
142
+ cache.write(key, response)
143
+ end
144
+ end
145
+
146
+ def finalize_response(response, env)
147
+ response = response.dup if response.frozen?
148
+ env[:response] = response
149
+ unless env[:response_headers]
150
+ env.update response.env
151
+ # FIXME: omg hax
152
+ response.instance_variable_set('@env', env)
153
+ end
154
+ response
155
+ end
156
+ end
157
+ end
158
+ # :nocov:
@@ -16,7 +16,9 @@ module LWS
16
16
 
17
17
  # @private
18
18
  # @!visibility private
19
- class HTTPLogger < Faraday::Response::Middleware
19
+ class HTTPLogger <
20
+ # Use `Faraday::Response::Middleware` if it exists (Faraday < 2.0)
21
+ defined?(Faraday::Response::Middleware) ? Faraday::Response::Middleware : Faraday::Middleware
20
22
 
21
23
  def initialize(app, logger, show_headers)
22
24
  if logger.nil?
@@ -40,7 +42,6 @@ module LWS
40
42
  end
41
43
 
42
44
  def on_complete(env)
43
- super
44
45
  @logger.debug "<<< HTTP #{env[:status].to_s}"
45
46
  if @show_headers
46
47
  env[:response_headers].each do |hdr, val|
@@ -16,7 +16,9 @@ module LWS
16
16
 
17
17
  # @private
18
18
  # @!visibility private
19
- class JSONLogger < Faraday::Response::Middleware
19
+ class JSONLogger <
20
+ # Use `Faraday::Response::Middleware` if it exists (Faraday < 2.0)
21
+ defined?(Faraday::Response::Middleware) ? Faraday::Response::Middleware : Faraday::Middleware
20
22
 
21
23
  def initialize(app, logger)
22
24
  if logger.nil?
@@ -16,7 +16,9 @@ module LWS
16
16
 
17
17
  # @private
18
18
  # @!visibility private
19
- class JSONParser < Faraday::Response::Middleware
19
+ class JSONParser <
20
+ # Use `Faraday::Response::Middleware` if it exists (Faraday < 2.0)
21
+ defined?(Faraday::Response::Middleware) ? Faraday::Response::Middleware : Faraday::Middleware
20
22
 
21
23
  def parse(body)
22
24
  json = MultiJson.load(body, symbolize_keys: true)
@@ -19,7 +19,36 @@ module LWS
19
19
 
20
20
  end
21
21
 
22
+ require "lws/middleware/caching"
22
23
  require "lws/middleware/http_logger"
23
24
  require "lws/middleware/json_logger"
24
25
  require "lws/middleware/json_parser"
25
26
  require "lws/middleware/request_headers"
27
+
28
+ # Set up Faraday 1.0/2.0 portability using middleware class aliases.
29
+ module LWS
30
+ module Middleware
31
+ FollowRedirects =
32
+ if defined? Faraday::FollowRedirects::Middleware
33
+ Faraday::FollowRedirects::Middleware
34
+ else
35
+ FaradayMiddleware::FollowRedirects
36
+ end
37
+
38
+ JSONEncoder =
39
+ if defined? Faraday::Request::Json
40
+ Faraday::Request::Json
41
+ else
42
+ FaradayMiddleware::EncodeJson
43
+ end
44
+
45
+ ObjectCaching =
46
+ if defined? FaradayMiddleware::Caching
47
+ FaradayMiddleware::Caching
48
+ else
49
+ # Use this vendored middleware implementation because it is not
50
+ # available for Faraday ≥ 2.0
51
+ Caching
52
+ end
53
+ end
54
+ end
data/lib/lws/version.rb CHANGED
@@ -14,6 +14,6 @@ module LWS
14
14
 
15
15
  # The LWS library version.
16
16
  # @note The major and minor version parts match the LWS API version!
17
- VERSION = "9.0.2".freeze
17
+ VERSION = "10.0.1".freeze
18
18
 
19
19
  end
data/lib/lws.rb CHANGED
@@ -9,8 +9,16 @@
9
9
  # Schootense Dreef 20A, 5708 HZ Helmond, The Netherlands,
10
10
  # info@leftclick.eu, +3185-4444-004.
11
11
 
12
- require "faraday_middleware"
12
+ require "faraday"
13
13
  require "faraday/http_cache"
14
+ if Gem::Version.new(Faraday::VERSION) < Gem::Version.new("2.0")
15
+ # For Faraday < 2.0 load deprecated middleware.
16
+ require "faraday_middleware"
17
+ else
18
+ # For Faraday ≥ 2.0 load these middleware gems separately.
19
+ require "faraday/follow_redirects"
20
+ require "faraday/net_http_persistent"
21
+ end
14
22
  require "hashie"
15
23
  require "multi_json"
16
24
  require "spyke"
@@ -115,7 +123,7 @@ module LWS
115
123
  api = Faraday.new(url: api_url, proxy: config.proxy) do |c|
116
124
  # Request
117
125
  if config.caching_object
118
- c.use FaradayMiddleware::Caching, config.caching_object
126
+ c.use Middleware::ObjectCaching, config.caching_object
119
127
  end
120
128
  if config.http_caching
121
129
  logger = config.http_debug ? config.logger : nil
@@ -125,13 +133,15 @@ module LWS
125
133
  end
126
134
  c.use RequestHeaders, config.api_token
127
135
  c.use config.api_token_middleware if config.api_token_middleware.present?
128
- c.request :json
136
+ c.use Middleware::JSONEncoder
129
137
 
130
138
  # Response
131
- c.use JSONLogger, config.logger if config.json_debug
132
- c.use JSONParser
133
- c.use FaradayMiddleware::FollowRedirects, limit: 3
134
- c.use HTTPLogger, config.logger, config.http_debug_headers if config.http_debug
139
+ c.use Middleware::JSONLogger, config.logger if config.json_debug
140
+ c.use Middleware::JSONParser
141
+ c.use Middleware::FollowRedirects, limit: 3
142
+ if config.http_debug
143
+ c.use Middleware::HTTPLogger, config.logger, config.http_debug_headers
144
+ end
135
145
 
136
146
  # Adapter
137
147
  if config.http_persistent
metadata CHANGED
@@ -1,15 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lws
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.0.2
4
+ version: 10.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - LeftClick B.V.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-12 00:00:00.000000000 Z
11
+ date: 2024-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3.0'
13
33
  - !ruby/object:Gem::Dependency
14
34
  name: faraday-http-cache
15
35
  requirement: !ruby/object:Gem::Requirement
@@ -44,6 +64,26 @@ dependencies:
44
64
  - - "<"
45
65
  - !ruby/object:Gem::Version
46
66
  version: '2.0'
67
+ - !ruby/object:Gem::Dependency
68
+ name: net-http-persistent
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '2.9'
74
+ - - "<"
75
+ - !ruby/object:Gem::Version
76
+ version: '5.0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '2.9'
84
+ - - "<"
85
+ - !ruby/object:Gem::Version
86
+ version: '5.0'
47
87
  - !ruby/object:Gem::Dependency
48
88
  name: hashie
49
89
  requirement: !ruby/object:Gem::Requirement
@@ -78,26 +118,6 @@ dependencies:
78
118
  - - "~>"
79
119
  - !ruby/object:Gem::Version
80
120
  version: '1.12'
81
- - !ruby/object:Gem::Dependency
82
- name: net-http-persistent
83
- requirement: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- version: '2.9'
88
- - - "<"
89
- - !ruby/object:Gem::Version
90
- version: '4.0'
91
- type: :runtime
92
- prerelease: false
93
- version_requirements: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- version: '2.9'
98
- - - "<"
99
- - !ruby/object:Gem::Version
100
- version: '4.0'
101
121
  - !ruby/object:Gem::Dependency
102
122
  name: pry
103
123
  requirement: !ruby/object:Gem::Requirement
@@ -152,108 +172,10 @@ dependencies:
152
172
  - - "<"
153
173
  - !ruby/object:Gem::Version
154
174
  version: '4'
155
- - !ruby/object:Gem::Dependency
156
- name: bundler
157
- requirement: !ruby/object:Gem::Requirement
158
- requirements:
159
- - - "~>"
160
- - !ruby/object:Gem::Version
161
- version: '2.1'
162
- type: :development
163
- prerelease: false
164
- version_requirements: !ruby/object:Gem::Requirement
165
- requirements:
166
- - - "~>"
167
- - !ruby/object:Gem::Version
168
- version: '2.1'
169
- - !ruby/object:Gem::Dependency
170
- name: minitest
171
- requirement: !ruby/object:Gem::Requirement
172
- requirements:
173
- - - "~>"
174
- - !ruby/object:Gem::Version
175
- version: '5.10'
176
- type: :development
177
- prerelease: false
178
- version_requirements: !ruby/object:Gem::Requirement
179
- requirements:
180
- - - "~>"
181
- - !ruby/object:Gem::Version
182
- version: '5.10'
183
- - !ruby/object:Gem::Dependency
184
- name: minitest-reporters
185
- requirement: !ruby/object:Gem::Requirement
186
- requirements:
187
- - - "~>"
188
- - !ruby/object:Gem::Version
189
- version: '1.0'
190
- type: :development
191
- prerelease: false
192
- version_requirements: !ruby/object:Gem::Requirement
193
- requirements:
194
- - - "~>"
195
- - !ruby/object:Gem::Version
196
- version: '1.0'
197
- - !ruby/object:Gem::Dependency
198
- name: rake
199
- requirement: !ruby/object:Gem::Requirement
200
- requirements:
201
- - - "~>"
202
- - !ruby/object:Gem::Version
203
- version: '12.3'
204
- type: :development
205
- prerelease: false
206
- version_requirements: !ruby/object:Gem::Requirement
207
- requirements:
208
- - - "~>"
209
- - !ruby/object:Gem::Version
210
- version: '12.3'
211
- - !ruby/object:Gem::Dependency
212
- name: simplecov
213
- requirement: !ruby/object:Gem::Requirement
214
- requirements:
215
- - - "~>"
216
- - !ruby/object:Gem::Version
217
- version: '0.14'
218
- type: :development
219
- prerelease: false
220
- version_requirements: !ruby/object:Gem::Requirement
221
- requirements:
222
- - - "~>"
223
- - !ruby/object:Gem::Version
224
- version: '0.14'
225
- - !ruby/object:Gem::Dependency
226
- name: simplecov-rcov
227
- requirement: !ruby/object:Gem::Requirement
228
- requirements:
229
- - - "~>"
230
- - !ruby/object:Gem::Version
231
- version: '0.2'
232
- type: :development
233
- prerelease: false
234
- version_requirements: !ruby/object:Gem::Requirement
235
- requirements:
236
- - - "~>"
237
- - !ruby/object:Gem::Version
238
- version: '0.2'
239
- - !ruby/object:Gem::Dependency
240
- name: yard
241
- requirement: !ruby/object:Gem::Requirement
242
- requirements:
243
- - - "~>"
244
- - !ruby/object:Gem::Version
245
- version: '0.9'
246
- type: :development
247
- prerelease: false
248
- version_requirements: !ruby/object:Gem::Requirement
249
- requirements:
250
- - - "~>"
251
- - !ruby/object:Gem::Version
252
- version: '0.9'
253
175
  description: |-
254
- This library for Ruby provides access to the LeftClick
255
- web services/applications using a model-based structure that abstracts from API calls
256
- using the available REST interfaces.
176
+ This library for Ruby provides access to the LeftClick Web
177
+ Services and its applications using a model-based structure that abstracts
178
+ from API calls using the available REST interfaces.
257
179
  email:
258
180
  - gem@leftclick.eu
259
181
  executables:
@@ -261,6 +183,8 @@ executables:
261
183
  extensions: []
262
184
  extra_rdoc_files: []
263
185
  files:
186
+ - CHANGELOG.md
187
+ - README.md
264
188
  - bin/lwsconsole
265
189
  - lib/lws.rb
266
190
  - lib/lws/apps/auth.rb
@@ -274,6 +198,7 @@ files:
274
198
  - lib/lws/config.rb
275
199
  - lib/lws/errors.rb
276
200
  - lib/lws/middleware.rb
201
+ - lib/lws/middleware/caching.rb
277
202
  - lib/lws/middleware/http_logger.rb
278
203
  - lib/lws/middleware/json_logger.rb
279
204
  - lib/lws/middleware/json_parser.rb
@@ -301,5 +226,5 @@ requirements: []
301
226
  rubygems_version: 3.3.15
302
227
  signing_key:
303
228
  specification_version: 4
304
- summary: LeftClick web services library for Ruby
229
+ summary: LeftClick Web Services library for Ruby
305
230
  test_files: []