lhs 19.10.0 → 21.0.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: 57094afc8763a8fe1aab390ad385ac4ddee8c2abd59dd8b8651cd83c07826fef
4
- data.tar.gz: 2b06402e0aceb84e5d21aefeb15321610a6b13ada2959b6286434d8725578b13
3
+ metadata.gz: 80228cca0e4b14a7a21cf408db24114f85648afccc58fbc658fbe7ef579b69a9
4
+ data.tar.gz: 774070abf3a426ef7f68c9ee707c540f53c91499f8576220fcae2e610baca1bd
5
5
  SHA512:
6
- metadata.gz: ae00456701d8fa85fdf0e3f8d3d14eb58d87f1c87719b5ac2916959ebd449853f7a061a239fda5debc45faa0d34bb265f3cf429b584eba63cf2969a38b3c3ebe
7
- data.tar.gz: 0b142fc761ccda98c5524bd0810ca0147fd9a5d4ec923b4986cdc3698bce8f1881b240c8c3113d9f09d1c57ca92925848d29690d0da5fde0a099a7757b3e81a0
6
+ metadata.gz: 33f14c2fe5cd5e6cc9a8bdbee060d247bc3f62fe9a3dfde38ff87aadb4370de371996455a4ea55865c2ee13aa7b3728e405c73ad7185e29ec48a8f2a657b750d
7
+ data.tar.gz: 8aebc91f90fe095c4dc7d0d10dd8c389c0b1935928299421fce9df6c6245caa69a4991ce9f9a73758b5e316ea871a4437b7128243413634e4e7949ce96ac9405
data/Gemfile CHANGED
@@ -1,13 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  source 'https://rubygems.org/'
4
-
5
- # Declare your gem's dependencies in lhs.gemspec.
6
- # Bundler will treat runtime dependencies like base dependencies, and
7
- # development dependencies will be added by default to the :development group.
8
4
  gemspec
9
-
10
- # Declare any dependencies that are still in development here instead of in
11
- # your gemspec. These might include edge Rails or gems from your path or
12
- # Git. Remember to move these dependencies to your gemspec before releasing
13
- # your gem to rubygems.org.
data/README.md CHANGED
@@ -139,7 +139,9 @@ record.review # "Lunch was great
139
139
  * [Request tracing](#request-tracing)
140
140
  * [Extended Rollbar Logging](#extended-rollbar-logging)
141
141
  * [Testing with LHS](#testing-with-lhs)
142
- * [Test helper for request cycle cache](#test-helper-for-request-cycle-cache)
142
+ * [Test helper](#test-helper)
143
+ * [Stub](#stub)
144
+ * [Stub All](#stub-all)
143
145
  * [Test query chains](#test-query-chains)
144
146
  * [By explicitly resolving the chain: fetch](#by-explicitly-resolving-the-chain-fetch)
145
147
  * [Without resolving the chain: where_values_hash](#without-resolving-the-chain-where_values_hash)
@@ -1629,6 +1631,15 @@ POST https://service.example.com/records/1z-5r1fkaj { body: "{ 'name': 'Starbuck
1629
1631
 
1630
1632
  -> See [record validation](#record-validation) for how to handle validation errors when updating records.
1631
1633
 
1634
+ You can also pass explicit request options to `update`, by passing two explicit hashes:
1635
+
1636
+ ```ruby
1637
+ # app/controllers/some_controller.rb
1638
+
1639
+ record.update({ recommended: true }, { method: 'put' })
1640
+
1641
+ ```
1642
+
1632
1643
  ##### partial_update
1633
1644
 
1634
1645
  `partial_update` updates just the provided parameters.
@@ -1660,6 +1671,15 @@ POST https://service.example.com/records/1z-5r1fkaj { body: "{ 'name': 'Starbuck
1660
1671
 
1661
1672
  -> See [record validation](#record-validation) for how to handle validation errors when updating records.
1662
1673
 
1674
+ You can also pass explicit request options to `partial_update`, by passing two explicit hashes:
1675
+
1676
+ ```ruby
1677
+ # app/controllers/some_controller.rb
1678
+
1679
+ record.partial_update({ recommended: true }, { method: 'put' })
1680
+
1681
+ ```
1682
+
1663
1683
  #### Endpoint url parameter injection during record creation/change
1664
1684
 
1665
1685
  LHS injects parameters provided to `create`, `update`, `partial_update`, `save` etc. into an endpoint's URL when matching:
@@ -2502,17 +2522,70 @@ it 'displays contracts' do
2502
2522
  end
2503
2523
  ```
2504
2524
 
2505
- ### Test helper for request cycle cache
2525
+ ### Test helper
2506
2526
 
2507
- In order to not run into caching issues during your tests, when (request cycle cache)[#request-cycle-cache] is enabled, simply require the following helper in your tests:
2527
+ In order to load LHS test helpers into your tests, add the following to your spec helper:
2508
2528
 
2509
2529
  ```ruby
2510
2530
  # spec/spec_helper.rb
2511
2531
 
2512
- require 'lhs/test/request_cycle_cache_helper'
2532
+ require 'lhs/rspec'
2533
+ ```
2534
+
2535
+ This e.g. will prevent running into caching issues during your tests, when (request cycle cache)[#request-cycle-cache] is enabled.
2536
+ It will initialize a MemoryStore cache for LHC::Caching interceptor and resets the cache before every test.
2537
+
2538
+ #### Stub
2539
+
2540
+ LHS offers stub helpers that simplify stubbing https request to your apis through your defined Records.
2541
+
2542
+ ##### stub_all
2543
+
2544
+ `Record.stub_all(url, items, additional_options)`
2545
+
2546
+ ```ruby
2547
+ # your_spec.rb
2548
+
2549
+ before do
2550
+ class Record < LHS::Record
2551
+ endpoint 'https://records'
2552
+ end
2553
+
2554
+ Record.stub_all(
2555
+ 'https://records',
2556
+ 200.times.map{ |index| { name: "Item #{index}" } },
2557
+ headers: {
2558
+ 'Authorization' => 'Bearer 123'
2559
+ }
2560
+ )
2561
+ end
2562
+ ```
2563
+ ```
2564
+ GET https://records?limit=100
2565
+ GET https://records?limit=100&offset=100
2513
2566
  ```
2514
2567
 
2515
- This will initialize a MemoryStore cache for LHC::Caching interceptor and resets the cache before every test.
2568
+ LHS also uses Record configuration when stubbing all.
2569
+ ```ruby
2570
+ # your_spec.rb
2571
+
2572
+ before do
2573
+ class Record < LHS::Record
2574
+ configuration limit_key: :per_page, pagination_strategy: :page, pagination_key: :page
2575
+
2576
+ endpoint 'https://records'
2577
+ end
2578
+
2579
+ Record.stub_all(
2580
+ 'https://records',
2581
+ 200.times.map{ |index| { name: "Item #{index}" } }
2582
+ )
2583
+ end
2584
+ ```
2585
+ ```
2586
+ GET https://records?per_page=100
2587
+ GET https://records?per_page=100&page=2
2588
+ ```
2516
2589
 
2517
2590
  ### Test query chains
2518
2591
 
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
25
25
  s.add_dependency 'activemodel'
26
26
  s.add_dependency 'activesupport', '>= 4.2.11'
27
27
  s.add_dependency 'lhc', '~> 10.2'
28
+ s.add_dependency 'local_uri'
28
29
 
29
30
  s.add_development_dependency 'capybara'
30
31
  s.add_development_dependency 'json', '>= 1.8.2'
@@ -35,6 +36,7 @@ Gem::Specification.new do |s|
35
36
  s.add_development_dependency 'rspec-rails', '>= 3.7.0'
36
37
  s.add_development_dependency 'rubocop', '~> 0.57.1'
37
38
  s.add_development_dependency 'rubocop-rspec', '~> 1.26.0'
39
+ s.add_development_dependency 'sprockets', '< 4'
38
40
  s.add_development_dependency 'webmock'
39
41
 
40
42
  s.license = 'GPL-3'
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support'
4
+ require 'active_support/per_thread_registry'
4
5
 
5
6
  module LHS
6
7
  module OptionBlocks
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support'
4
+ require 'active_support/per_thread_registry'
4
5
 
5
6
  module LHS
6
7
  module Interceptors
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support'
4
+ require 'active_support/per_thread_registry'
4
5
 
5
6
  module LHS
6
7
  module Interceptors
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'lhs'
4
+ require 'lhs/test/stubbable_records'
5
+
3
6
  RSpec.configure do |config|
4
7
  config.before(:each) do
5
8
  LHS.config.request_cycle_cache.clear
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'local_uri'
4
+ require 'webmock'
5
+
6
+ class LHS::Record
7
+ DEFAULT_LIMIT = LHS::Pagination::Base::DEFAULT_LIMIT
8
+
9
+ def self.stub_all(url, items, options = {})
10
+ extend WebMock::API
11
+
12
+ items.each_slice(DEFAULT_LIMIT).with_index do |(*batch), index|
13
+ uri = LocalUri::URI.new(url)
14
+ uri.query.merge!(
15
+ limit_key(:parameter) => DEFAULT_LIMIT
16
+ )
17
+ offset = pagination_class.page_to_offset(index + 1, DEFAULT_LIMIT)
18
+ unless index.zero?
19
+ uri.query.merge!(
20
+ pagination_key(:parameter) => offset
21
+ )
22
+ end
23
+ request_stub = stub_request(:get, uri.to_s)
24
+ request_stub.with(options) if options.present?
25
+ request_stub.to_return(
26
+ body: {
27
+ items: batch,
28
+ offset: index.zero? ? 0 : offset,
29
+ total: items.length
30
+ }.to_json
31
+ )
32
+ end
33
+ end
34
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LHS
4
- VERSION = '19.10.0'
4
+ VERSION = '21.0.0'
5
5
  end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+ require 'lhs/rspec'
5
+
6
+ describe LHS do
7
+
8
+ before do
9
+ class Record < LHS::Record
10
+ endpoint 'https://records'
11
+ end
12
+
13
+ Record.stub_all(
14
+ 'https://records',
15
+ 200.times.map { |index| { name: "Item #{index}" } },
16
+ headers: {
17
+ 'Authorization' => 'Bearer 123'
18
+ }
19
+ )
20
+ end
21
+
22
+ it 'stubs all requests' do
23
+ records = Record.options(headers: { 'Authorization' => 'Bearer 123' }).all.fetch
24
+ expect(records.count).to eq 200
25
+ expect(records.length).to eq 200
26
+ expect(records.first.name).to eq 'Item 0'
27
+ end
28
+
29
+ context 'without conditions' do
30
+
31
+ before do
32
+ class Record < LHS::Record
33
+ endpoint 'https://records'
34
+ end
35
+
36
+ Record.stub_all(
37
+ 'https://records',
38
+ 200.times.map { |index| { name: "Item #{index}" } }
39
+ )
40
+ end
41
+
42
+ it 'stubs all requests without a webmock "with"' do
43
+ records = Record.all.fetch
44
+ expect(records.count).to eq 200
45
+ expect(records.length).to eq 200
46
+ expect(records.first.name).to eq 'Item 0'
47
+ end
48
+ end
49
+
50
+ context 'with configured record' do
51
+
52
+ before do
53
+ class Record < LHS::Record
54
+ configuration limit_key: :per_page, pagination_strategy: :page, pagination_key: :page
55
+
56
+ endpoint 'https://records'
57
+ end
58
+
59
+ Record.stub_all(
60
+ 'https://records',
61
+ 200.times.map { |index| { name: "Item #{index}" } }
62
+ )
63
+ end
64
+
65
+ it 'stubs all requests with record configurations for pagination' do
66
+ records = Record.all.fetch
67
+ expect(records.count).to eq 200
68
+ expect(records.length).to eq 200
69
+ expect(records.first.name).to eq 'Item 0'
70
+ end
71
+ end
72
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lhs
3
3
  version: !ruby/object:Gem::Version
4
- version: 19.10.0
4
+ version: 21.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - https://github.com/local-ch/lhs/graphs/contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-12 00:00:00.000000000 Z
11
+ date: 2019-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: local_uri
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: capybara
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +192,20 @@ dependencies:
178
192
  - - "~>"
179
193
  - !ruby/object:Gem::Version
180
194
  version: 1.26.0
195
+ - !ruby/object:Gem::Dependency
196
+ name: sprockets
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "<"
200
+ - !ruby/object:Gem::Version
201
+ version: '4'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "<"
207
+ - !ruby/object:Gem::Version
208
+ version: '4'
181
209
  - !ruby/object:Gem::Dependency
182
210
  name: webmock
183
211
  requirement: !ruby/object:Gem::Requirement
@@ -300,7 +328,8 @@ files:
300
328
  - lib/lhs/proxy.rb
301
329
  - lib/lhs/railtie.rb
302
330
  - lib/lhs/record.rb
303
- - lib/lhs/test/request_cycle_cache_helper.rb
331
+ - lib/lhs/rspec.rb
332
+ - lib/lhs/test/stubbable_records.rb
304
333
  - lib/lhs/unprocessable.rb
305
334
  - lib/lhs/version.rb
306
335
  - script/ci/build.sh
@@ -487,6 +516,7 @@ files:
487
516
  - spec/request_cycle_cache_spec.rb
488
517
  - spec/require_lhs_spec.rb
489
518
  - spec/spec_helper.rb
519
+ - spec/stubs/all_spec.rb
490
520
  - spec/support/fixtures/json/feedback.json
491
521
  - spec/support/fixtures/json/feedbacks.json
492
522
  - spec/support/fixtures/json/localina_content_ad.json
@@ -514,8 +544,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
514
544
  version: '0'
515
545
  requirements:
516
546
  - Ruby >= 2.3.0
517
- rubyforge_project:
518
- rubygems_version: 2.7.8
547
+ rubygems_version: 3.0.6
519
548
  signing_key:
520
549
  specification_version: 4
521
550
  summary: 'REST services accelerator: Rails gem providing an easy, active-record-like
@@ -703,6 +732,7 @@ test_files:
703
732
  - spec/request_cycle_cache_spec.rb
704
733
  - spec/require_lhs_spec.rb
705
734
  - spec/spec_helper.rb
735
+ - spec/stubs/all_spec.rb
706
736
  - spec/support/fixtures/json/feedback.json
707
737
  - spec/support/fixtures/json/feedbacks.json
708
738
  - spec/support/fixtures/json/localina_content_ad.json