lhs 15.3.1 → 15.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.localch.yml +158 -21
  3. data/.rubocop.yml +9 -3
  4. data/lhs.gemspec +10 -9
  5. data/lib/lhs/complex.rb +1 -1
  6. data/lib/lhs/concerns/autoload_records.rb +1 -1
  7. data/lib/lhs/concerns/collection/handle_nested.rb +1 -1
  8. data/lib/lhs/concerns/inspect.rb +1 -1
  9. data/lib/lhs/concerns/item/validation.rb +2 -2
  10. data/lib/lhs/concerns/proxy/accessors.rb +1 -1
  11. data/lib/lhs/concerns/proxy/problems.rb +1 -1
  12. data/lib/lhs/concerns/record/chainable.rb +1 -1
  13. data/lib/lhs/concerns/record/endpoints.rb +2 -2
  14. data/lib/lhs/concerns/record/model.rb +1 -1
  15. data/lib/lhs/concerns/record/request.rb +5 -5
  16. data/lib/lhs/data.rb +5 -4
  17. data/lib/lhs/endpoint.rb +1 -1
  18. data/lib/lhs/item.rb +8 -0
  19. data/lib/lhs/pagination/base.rb +0 -1
  20. data/lib/lhs/problems/base.rb +1 -1
  21. data/lib/lhs/record.rb +1 -1
  22. data/lib/lhs/version.rb +1 -1
  23. data/spec/autoloading_spec.rb +4 -4
  24. data/spec/collection/accessors_spec.rb +1 -1
  25. data/spec/collection/collection_items_spec.rb +1 -1
  26. data/spec/collection/configurable_spec.rb +1 -1
  27. data/spec/collection/meta_data_spec.rb +1 -1
  28. data/spec/collection/to_a_spec.rb +1 -1
  29. data/spec/collection/to_ary_spec.rb +6 -2
  30. data/spec/collection/without_object_items_spec.rb +1 -1
  31. data/spec/complex/reduce_spec.rb +2 -2
  32. data/spec/concerns/record/request_spec.rb +1 -1
  33. data/spec/data/collection_spec.rb +1 -1
  34. data/spec/data/equality_spec.rb +1 -1
  35. data/spec/data/inspect_spec.rb +1 -1
  36. data/spec/data/is_item_or_collection_spec.rb +1 -1
  37. data/spec/data/item_spec.rb +1 -1
  38. data/spec/data/merge_spec.rb +1 -1
  39. data/spec/data/parent_spec.rb +1 -1
  40. data/spec/data/raw_spec.rb +1 -1
  41. data/spec/data/respond_to_spec.rb +3 -3
  42. data/spec/data/root_spec.rb +1 -1
  43. data/spec/data/select_spec.rb +1 -1
  44. data/spec/data/to_ary_spec.rb +26 -0
  45. data/spec/data/to_json_spec.rb +1 -1
  46. data/spec/endpoint/for_url_spec.rb +1 -1
  47. data/spec/item/access_errors_spec.rb +1 -1
  48. data/spec/item/accessors_spec.rb +1 -1
  49. data/spec/item/add_error_spec.rb +1 -1
  50. data/spec/item/becomes_spec.rb +1 -1
  51. data/spec/item/blacklisted_keywords_spec.rb +1 -1
  52. data/spec/item/delegate_spec.rb +1 -1
  53. data/spec/item/destroy_spec.rb +2 -2
  54. data/spec/item/dig_spec.rb +1 -1
  55. data/spec/item/error_codes_spec.rb +1 -1
  56. data/spec/item/errors_spec.rb +22 -22
  57. data/spec/item/fetch_spec.rb +1 -1
  58. data/spec/item/getter_spec.rb +1 -1
  59. data/spec/item/internal_data_structure_spec.rb +1 -1
  60. data/spec/item/map_spec.rb +1 -1
  61. data/spec/item/partial_update_spec.rb +3 -3
  62. data/spec/item/save_spec.rb +2 -2
  63. data/spec/item/setter_spec.rb +1 -1
  64. data/spec/item/translate_errors_spec.rb +1 -1
  65. data/spec/item/update_spec.rb +1 -1
  66. data/spec/item/validation_spec.rb +4 -4
  67. data/spec/item/warning_codes_spec.rb +1 -1
  68. data/spec/item/warnings_spec.rb +1 -3
  69. data/spec/pagination/pages_left_spec.rb +1 -1
  70. data/spec/pagination/parameters_spec.rb +1 -1
  71. data/spec/proxy/create_sub_resource_spec.rb +5 -5
  72. data/spec/proxy/load_spec.rb +8 -10
  73. data/spec/proxy/record_identification_spec.rb +1 -1
  74. data/spec/record/all_spec.rb +3 -3
  75. data/spec/record/build_spec.rb +1 -1
  76. data/spec/record/cast_nested_data_spec.rb +1 -1
  77. data/spec/record/chain_error_handling_spec.rb +1 -1
  78. data/spec/record/create_spec.rb +4 -4
  79. data/spec/record/creation_failed_spec.rb +2 -2
  80. data/spec/record/definitions_spec.rb +1 -1
  81. data/spec/record/destroy_spec.rb +1 -1
  82. data/spec/record/dig_configuration_spec.rb +1 -1
  83. data/spec/record/endpoint_inheritance_spec.rb +3 -3
  84. data/spec/record/endpoint_options_spec.rb +2 -2
  85. data/spec/record/endpoints_spec.rb +7 -7
  86. data/spec/record/equality_spec.rb +1 -1
  87. data/spec/record/expanded_spec.rb +1 -1
  88. data/spec/record/fetch_spec.rb +1 -1
  89. data/spec/record/find_by_chains_spec.rb +1 -1
  90. data/spec/record/find_by_spec.rb +2 -2
  91. data/spec/record/find_each_spec.rb +1 -1
  92. data/spec/record/find_in_batches_spec.rb +2 -2
  93. data/spec/record/find_in_parallel_spec.rb +2 -2
  94. data/spec/record/find_spec.rb +3 -3
  95. data/spec/record/first_spec.rb +2 -2
  96. data/spec/record/handle_includes_errors_spec.rb +1 -1
  97. data/spec/record/has_many_spec.rb +3 -3
  98. data/spec/record/ignore_errors_spec.rb +5 -14
  99. data/spec/record/immutable_chains_spec.rb +1 -1
  100. data/spec/record/includes_all_spec.rb +6 -6
  101. data/spec/record/includes_spec.rb +13 -13
  102. data/spec/record/includes_warning_spec.rb +1 -1
  103. data/spec/record/item_key_spec.rb +1 -1
  104. data/spec/record/items_created_key_configuration_spec.rb +1 -1
  105. data/spec/record/mapping_spec.rb +1 -1
  106. data/spec/record/model_name_spec.rb +1 -1
  107. data/spec/record/new_spec.rb +5 -5
  108. data/spec/record/options_spec.rb +5 -5
  109. data/spec/record/paginatable_collection_spec.rb +5 -6
  110. data/spec/record/pagination_chain_spec.rb +3 -3
  111. data/spec/record/pagination_links_spec.rb +1 -1
  112. data/spec/record/pagination_spec.rb +1 -1
  113. data/spec/record/persisted_spec.rb +2 -1
  114. data/spec/record/references_spec.rb +1 -1
  115. data/spec/record/reload_by_id_spec.rb +1 -1
  116. data/spec/record/reload_spec.rb +2 -2
  117. data/spec/record/request_spec.rb +3 -3
  118. data/spec/record/scope_chains_spec.rb +1 -1
  119. data/spec/record/to_hash_spec.rb +1 -1
  120. data/spec/record/to_json_spec.rb +1 -1
  121. data/spec/record/where_chains_spec.rb +3 -3
  122. data/spec/record/where_spec.rb +1 -1
  123. data/spec/record/where_values_hash_spec.rb +1 -1
  124. data/spec/request_cycle_cache/main_spec.rb +2 -1
  125. data/spec/require_lhs_spec.rb +1 -1
  126. data/spec/support/cleanup.rb +1 -1
  127. data/spec/support/request_cycle_cache.rb +1 -1
  128. data/spec/views/form_for_spec.rb +1 -1
  129. metadata +47 -31
data/lib/lhs/data.rb CHANGED
@@ -18,7 +18,8 @@ class LHS::Data
18
18
  delegate :instance_methods, :items_key, :limit_key, :total_key, :pagination_key, to: :class
19
19
 
20
20
  # prevent clashing with attributes of underlying data
21
- attr_accessor :_proxy, :_raw, :_parent, :_record, :_request, :_endpoint
21
+ attr_accessor :_proxy, :_parent, :_record, :_request, :_endpoint
22
+ attr_reader :_raw
22
23
 
23
24
  def initialize(input, parent = nil, record = nil, request = nil, endpoint = nil)
24
25
  self._raw = raw_from_input(input)
@@ -47,12 +48,12 @@ class LHS::Data
47
48
 
48
49
  def _root
49
50
  root = self
50
- root = root._parent while root && root._parent
51
+ root = root._parent while root&._parent
51
52
  root
52
53
  end
53
54
 
54
55
  def parent
55
- if _parent && _parent._record
56
+ if _parent&._record
56
57
  _parent._record.new(_parent, false)
57
58
  else
58
59
  _parent
@@ -65,7 +66,7 @@ class LHS::Data
65
66
 
66
67
  # enforce internal data structure to have deep symbolized keys
67
68
  def _raw=(raw)
68
- raw.to_hash.deep_symbolize_keys! if raw && raw.respond_to?(:to_hash)
69
+ raw.to_hash.deep_symbolize_keys! if raw&.respond_to?(:to_hash)
69
70
  @_raw = raw
70
71
  end
71
72
 
data/lib/lhs/endpoint.rb CHANGED
@@ -5,6 +5,6 @@ class LHS::Endpoint
5
5
  template, record = LHS::Record::Endpoints.all.detect do |template, _record|
6
6
  LHC::Endpoint.match?(url, template)
7
7
  end
8
- record.endpoints.detect { |endpoint| endpoint.url == template } if record
8
+ record&.endpoints&.detect { |endpoint| endpoint.url == template }
9
9
  end
10
10
  end
data/lib/lhs/item.rb CHANGED
@@ -28,6 +28,14 @@ class LHS::Item < LHS::Proxy
28
28
  true
29
29
  end
30
30
 
31
+ def respond_to?(sym, include_all = false)
32
+ if sym == :to_ary
33
+ false
34
+ else
35
+ super(sym, include_all)
36
+ end
37
+ end
38
+
31
39
  protected
32
40
 
33
41
  def method_missing(name, *args, &_block)
@@ -27,7 +27,6 @@ module LHS::Pagination
27
27
  def offset
28
28
  data._raw.dig(*_record.pagination_key(:body)) || self.class::DEFAULT_OFFSET
29
29
  end
30
- alias current_page offset
31
30
  alias start offset
32
31
 
33
32
  def pages_left
@@ -67,7 +67,7 @@ module LHS::Problems
67
67
  end
68
68
 
69
69
  def empty?
70
- all? { |_k, v| v && v.empty? && !v.is_a?(String) }
70
+ all? { |_k, v| v&.empty? && !v.is_a?(String) }
71
71
  end
72
72
 
73
73
  private
data/lib/lhs/record.rb CHANGED
@@ -61,7 +61,7 @@ class LHS::Record
61
61
  delegate :_proxy, :_endpoint, :merge_raw!, :select, :becomes, to: :_data
62
62
 
63
63
  def initialize(data = nil, apply_customer_setters = true)
64
- data = LHS::Data.new({}, nil, self.class) unless data
64
+ data ||= LHS::Data.new({}, nil, self.class)
65
65
  data = LHS::Data.new(data, nil, self.class) unless data.is_a?(LHS::Data)
66
66
  define_singleton_method(:_data) { data }
67
67
  apply_custom_setters! if apply_customer_setters
data/lib/lhs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module LHS
2
- VERSION = '15.3.1'
2
+ VERSION = '15.3.2'
3
3
  end
@@ -6,14 +6,14 @@ describe LHS, type: :request do
6
6
  because it's necessary for endpoint-to-record-class-discovery",
7
7
  cleanup_before: false do
8
8
  all_endpoints = LHS::Record::Endpoints.all
9
- expect(all_endpoints['http://datastore/v2/users']).to be
10
- expect(all_endpoints['http://datastore/v2/users/{id}']).to be
9
+ expect(all_endpoints['http://datastore/v2/users']).to be_present
10
+ expect(all_endpoints['http://datastore/v2/users/{id}']).to be_present
11
11
  expect(
12
12
  User.endpoints.detect { |endpoint| endpoint.url == 'http://datastore/v2/users' }
13
- ).to be
13
+ ).to be_present
14
14
  expect(
15
15
  User.endpoints.detect { |endpoint| endpoint.url == 'http://datastore/v2/users/{id}' }
16
- ).to be
16
+ ).to be_present
17
17
  end
18
18
  end
19
19
  end
@@ -14,7 +14,7 @@ describe LHS::Collection do
14
14
  }
15
15
  end
16
16
 
17
- before(:each) do
17
+ before do
18
18
  class Record < LHS::Record
19
19
  endpoint 'http://datastore/records`'
20
20
  end
@@ -5,7 +5,7 @@ describe LHS::Collection do
5
5
  let(:items) { [{ name: 'Steve' }] }
6
6
  let(:collection) { Account.where }
7
7
 
8
- before(:each) do
8
+ before do
9
9
  LHC.config.placeholder('datastore', datastore)
10
10
  class Account < LHS::Record
11
11
  endpoint '{+datastore}/accounts'
@@ -5,7 +5,7 @@ describe LHS::Collection do
5
5
  let(:limit) { 10 }
6
6
  let(:total) { 20 }
7
7
 
8
- before(:each) do
8
+ before do
9
9
  LHC.config.placeholder('search', search)
10
10
  class Search < LHS::Record
11
11
  configuration items_key: :docs, limit_key: :size, pagination_key: :start, pagination_strategy: :start, total_key: :totalResults
@@ -26,7 +26,7 @@ describe LHS::Collection do
26
26
 
27
27
  let(:datastore) { 'http://local.ch/v2' }
28
28
 
29
- before(:each) do
29
+ before do
30
30
  LHC.config.placeholder('datastore', datastore)
31
31
  class Feedback < LHS::Record
32
32
  endpoint '{+datastore}/feedbacks'
@@ -16,7 +16,7 @@ describe LHS::Collection do
16
16
 
17
17
  let(:subject) { collection.to_a }
18
18
 
19
- before(:each) do
19
+ before do
20
20
  class Record < LHS::Record
21
21
  endpoint 'http://datastore/records`'
22
22
  end
@@ -6,7 +6,7 @@ describe LHS::Collection do
6
6
  let(:collection) { Record.where }
7
7
 
8
8
  context 'to_ary' do
9
- before(:each) do
9
+ before do
10
10
  class Record < LHS::Record
11
11
  endpoint 'http://datastore/records`'
12
12
  end
@@ -25,10 +25,14 @@ describe LHS::Collection do
25
25
  let(:subject) { collection.to_ary }
26
26
 
27
27
  it 'returns an array' do
28
- expect(subject).to be
28
+ expect(subject).to be_present
29
29
  expect(subject).to be_kind_of Array
30
30
  expect(subject[0]).to be_kind_of Record
31
31
  expect(subject[0].name).to eq 'Steve'
32
32
  end
33
+
34
+ it 'responds to to_ary' do
35
+ expect(subject.respond_to?(:to_ary)).to eq true
36
+ end
33
37
  end
34
38
  end
@@ -3,7 +3,7 @@ require 'rails_helper'
3
3
  describe LHS::Collection do
4
4
  let(:datastore) { 'http://local.ch/v2' }
5
5
 
6
- before(:each) do
6
+ before do
7
7
  LHC.config.placeholder('datastore', datastore)
8
8
  class Account < LHS::Record
9
9
  endpoint '{+datastore}/accounts/{id}'
@@ -171,7 +171,7 @@ describe LHS::Complex do
171
171
  )
172
172
  end
173
173
 
174
- it 'reduces another complex multi-level example' do
174
+ it 'reduces another complex multi-level example (single plus array)' do
175
175
  expect(LHS::Complex.reduce([
176
176
  { entries: :products },
177
177
  { entries: [:customer, :contracts] }
@@ -180,7 +180,7 @@ describe LHS::Complex do
180
180
  )
181
181
  end
182
182
 
183
- it 'reduces another complex multi-level example' do
183
+ it 'reduces another complex multi-level example (single hash plus array)' do
184
184
  expect(LHS::Complex.reduce([
185
185
  { entries: { customer: :contracts } },
186
186
  { entries: [:customer, :content_ads] }
@@ -21,7 +21,7 @@ describe LHS::Record::Request do
21
21
  expect(subject.send(:prepare_options_for_include_all_request!, abc: 'def')).to eq(abc: 'def')
22
22
  end
23
23
 
24
- it 'calls correct prepare method for a Hash' do
24
+ it 'calls correct prepare method for a Hash (collection)' do
25
25
  expect(subject).to receive(:prepare_option_for_include_all_request!)
26
26
  .with(abc: 'def').and_return('ignore')
27
27
  expect(subject).to receive(:prepare_option_for_include_all_request!)
@@ -9,7 +9,7 @@ describe LHS::Data do
9
9
  LHS::Data.new(json, nil, Record)
10
10
  end
11
11
 
12
- before(:each) do
12
+ before do
13
13
  class Record < LHS::Record
14
14
  endpoint '{+datastore}/v2/data'
15
15
  end
@@ -2,7 +2,7 @@ require 'rails_helper'
2
2
 
3
3
  describe LHS::Data do
4
4
  context 'equality' do
5
- before(:each) do
5
+ before do
6
6
  class Record < LHS::Record
7
7
  endpoint 'http://local.ch/records'
8
8
  end
@@ -6,7 +6,7 @@ describe LHS::Data do
6
6
  expect(data.inspect).to eq string.gsub(/ +/, '').strip
7
7
  end
8
8
 
9
- before(:each) do
9
+ before do
10
10
  class Record < LHS::Record
11
11
  endpoint 'http://local.ch/records'
12
12
  endpoint 'http://local.ch/records/{id}'
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  describe LHS::Data do
4
- before(:each) do
4
+ before do
5
5
  class Record < LHS::Record
6
6
  endpoint 'http://local.ch/records'
7
7
  end
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  describe LHS::Data do
4
- before(:each) do
4
+ before do
5
5
  class Record < LHS::Record
6
6
  endpoint '{+datastore}/v2/{campaign_id}/feedbacks'
7
7
  endpoint '{+datastore}/v2/feedbacks'
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  describe LHS::Data do
4
- before(:each) do
4
+ before do
5
5
  class Record < LHS::Record
6
6
  endpoint '{+datastore}/v2/{campaign_id}/feedbacks'
7
7
  endpoint '{+datastore}/v2/feedbacks'
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  describe LHS::Data do
4
- before(:each) do
4
+ before do
5
5
  class Record < LHS::Record
6
6
  endpoint 'http://local.ch/records'
7
7
  end
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  describe LHS::Data do
4
- before(:each) do
4
+ before do
5
5
  class Record < LHS::Record
6
6
  endpoint '{+datastore}/v2/entries/{entry_id}/content-ads/{campaign_id}/feedbacks'
7
7
  endpoint '{+datastore}/v2/{campaign_id}/feedbacks'
@@ -1,21 +1,21 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  describe LHS::Data do
4
- before(:each) do
4
+ before do
5
5
  class Record < LHS::Record
6
6
  map :test_mapping?, ->(_item) { true }
7
7
  end
8
8
  end
9
9
 
10
10
  context '#respond_to?' do
11
- it 'it is true for mappings that are defined' do
11
+ it 'is true for mappings that are defined' do
12
12
  data = LHS::Data.new({ 'campaign' => { 'id' => 123 } }, nil, Record)
13
13
 
14
14
  expect(data.respond_to?(:test_mapping?)).to be(true)
15
15
  end
16
16
 
17
17
  # proxy for this example is LHC::Collection which implements total
18
- it 'it is true for calls forwarded to proxy' do
18
+ it 'is true for calls forwarded to proxy' do
19
19
  data = LHS::Data.new({ 'items' => [{ 'campaign' => { 'id' => 123 } }] }, nil, Record)
20
20
 
21
21
  expect(data.respond_to?(:total)).to be(true)
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  describe LHS::Data do
4
- before(:each) do
4
+ before do
5
5
  class Record < LHS::Record
6
6
  endpoint '{+datastore}/v2/entries/{entry_id}/content-ads/{campaign_id}/feedbacks'
7
7
  endpoint '{+datastore}/v2/{campaign_id}/feedbacks'
@@ -9,7 +9,7 @@ describe LHS::Data do
9
9
  LHS::Data.new(raw, nil, Record)
10
10
  end
11
11
 
12
- before(:each) do
12
+ before do
13
13
  class Record < LHS::Record
14
14
  endpoint '{+datastore}/v2/data'
15
15
  end
@@ -0,0 +1,26 @@
1
+ require 'rails_helper'
2
+
3
+ describe LHS::Data do
4
+ before(:each) do
5
+ class Record < LHS::Record
6
+ endpoint '{+datastore}/v2/{campaign_id}/feedbacks'
7
+ endpoint '{+datastore}/v2/feedbacks'
8
+ end
9
+ end
10
+
11
+ let(:json) do
12
+ load_json(:feedbacks)
13
+ end
14
+
15
+ let(:data) do
16
+ LHS::Data.new(json, nil, Record)
17
+ end
18
+
19
+ let(:item) do
20
+ data[0]
21
+ end
22
+
23
+ it 'does not respond to to_ary' do
24
+ expect(item.respond_to?(:to_ary)).to eq false
25
+ end
26
+ end
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  describe LHS::Data do
4
- before(:each) do
4
+ before do
5
5
  class Record < LHS::Record
6
6
  endpoint '{+datastore}/v2/{campaign_id}/feedbacks'
7
7
  endpoint '{+datastore}/v2/feedbacks'
@@ -2,7 +2,7 @@ require 'rails_helper'
2
2
 
3
3
  describe LHS::Endpoint do
4
4
  context 'for url' do
5
- before(:each) do
5
+ before do
6
6
  class Record < LHS::Record
7
7
  endpoint '{+datastore}/entries/{entry_id}/content-ads/{campaign_id}/feedbacks'
8
8
  endpoint '{+datastore}/{campaign_id}/feedbacks'
@@ -4,7 +4,7 @@ describe LHS::Item do
4
4
 
5
5
  context 'make errors available' do
6
6
 
7
- before(:each) do
7
+ before do
8
8
  class Presence < LHS::Record
9
9
  endpoint 'http://opm/presences'
10
10
  end
@@ -2,7 +2,7 @@ require 'rails_helper'
2
2
 
3
3
  describe LHS::Item do
4
4
  context 'accessors' do
5
- before(:each) do
5
+ before do
6
6
  class Record < LHS::Record
7
7
  endpoint 'http://datastore/records'
8
8
  end
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  describe LHS::Item do
4
- before(:each) do
4
+ before do
5
5
  class Record < LHS::Record
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  require 'rails_helper'
2
2
 
3
3
  describe LHS::Item do
4
- before(:each) do
4
+ before do
5
5
  class Location < LHS::Record
6
6
  endpoint 'http://sync/locations'
7
7
  endpoint 'http://sync/locations/{id}'