lhs 7.0.3 → 7.1.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
  SHA1:
3
- metadata.gz: 3b68013c1cbb727863cd5e9663514a40475d0227
4
- data.tar.gz: daf3023f0202a22500cdd1c6a76a50130e8efd84
3
+ metadata.gz: 1020f5e98607e2dc01ebebe52f23961c9e9a4034
4
+ data.tar.gz: b15fddb284dcdca4254c155e07d09075a5dacfe4
5
5
  SHA512:
6
- metadata.gz: b36060eba538b2f162068cd0a22d60e2de23546277c2393713c20d910a6d308546c2ebc7ec4af5287e97d6b9d8823841cdfff05c45c8a7be5d74bdd4776f32f7
7
- data.tar.gz: a838dbb8de2e897f4f2914920538c31fe1d83a2f536b557fd89a8db660852c3367f462b99e4e90844728ade7aff3d3765f7affb215b6fc2bdd9c924b5f922099
6
+ metadata.gz: c0106d5e6468c5a81a60e3fe216406225fa937364884def8a8e1d5c6ce6065259c306909f7e25bea56eee9f8fbcf67df42490974ee672b2596dd23803c2e938f
7
+ data.tar.gz: 5a22af86fa15061d27946df81439b75a8dde9773be8d8ff7c7bceda700f50c632a3d1f75678408875ce6b916a7fbecaf40a331322cb68ad3c426a5657cfa9c80
@@ -5,13 +5,49 @@ module Inspect
5
5
 
6
6
  def inspect
7
7
  [
8
- "#{to_s.match('LHS::Data') ? 'Data of ' : nil}#{self.class}##{object_id}",
8
+ [
9
+ [
10
+ [
11
+ to_s.match('LHS::Data') ? 'Data of ' : nil,
12
+ self.class
13
+ ].join,
14
+ _inspect_id
15
+ ].join(' '),
16
+ _inspect_path
17
+ ].compact.join("\n"),
9
18
  pretty_raw
10
19
  ].compact.join("\n")
11
20
  end
12
21
 
13
22
  private
14
23
 
24
+ def _inspect_id
25
+ _root.href || (_root.item? ? _root.id : nil) || object_id
26
+ end
27
+
28
+ def _inspect_path
29
+ current = self
30
+ path = []
31
+ _collect_parents_for_inspect!(path, current)
32
+ return unless path.present?
33
+ "> #{path.reverse.join(' > ')}"
34
+ end
35
+
36
+ def _collect_parents_for_inspect!(path, current)
37
+ return unless current.parent
38
+ parent_raw = current.parent._raw
39
+ if parent_raw.is_a?(Array)
40
+ parent_raw.each_with_index do |element, index|
41
+ path.push(index) if element == current._raw
42
+ end
43
+ elsif parent_raw.is_a?(Hash)
44
+ parent_raw.each do |key, value|
45
+ path.push(key) if value == current._raw
46
+ end
47
+ end
48
+ _collect_parents_for_inspect!(path, current.parent)
49
+ end
50
+
15
51
  def pretty_raw
16
52
  return if _raw.blank?
17
53
  if _raw.is_a?(Array)
@@ -1,3 +1,3 @@
1
1
  module LHS
2
- VERSION = "7.0.3"
2
+ VERSION = "7.1.0"
3
3
  end
@@ -2,9 +2,14 @@ require 'rails_helper'
2
2
 
3
3
  describe LHS::Data do
4
4
  context 'inspect' do
5
+ def expect_inspect_to_look_like(data, string)
6
+ expect(data.inspect).to eq string.gsub(/ +/, '').strip
7
+ end
8
+
5
9
  before(:each) do
6
10
  class Record < LHS::Record
7
11
  endpoint 'http://local.ch/records'
12
+ endpoint 'http://local.ch/records/:id'
8
13
  end
9
14
  end
10
15
 
@@ -21,12 +26,61 @@ describe LHS::Data do
21
26
  ] }
22
27
  end
23
28
 
29
+ let(:record) do
30
+ stub_request(:get, 'http://local.ch/records/1').to_return(body: raw.to_json)
31
+ Record.find(1)
32
+ end
33
+
24
34
  let(:data) do
25
35
  LHS::Data.new(raw, nil, Record).pets.first
26
36
  end
27
37
 
28
38
  it 'prints inspected data on multiple lines' do
29
- expect(data.inspect).to eq "Data of Record##{data.object_id}\n:name => \"Steve\"\n:kind => {:animal=>{:type=>\"Monkey\"}}"
39
+ expect_inspect_to_look_like data, %Q{
40
+ Data of Record #{data.object_id}
41
+ > pets > 0
42
+ :name => \"Steve\"
43
+ :kind => {:animal=>{:type=>\"Monkey\"}}
44
+ }
45
+ end
46
+
47
+ context 'breadcrumb' do
48
+ let(:data) { record.pets.first.kind.animal }
49
+
50
+ it 'prints the breadcrumb that shows you the current location within the main record' do
51
+ expect_inspect_to_look_like data, %Q{
52
+ Data of Record #{data.object_id}
53
+ > pets > 0 > kind > animal
54
+ :type => \"Monkey\"
55
+ }
56
+ end
57
+ end
58
+
59
+ context 'href as id' do
60
+ let(:href) { 'http://datastore/places/1' }
61
+ let(:raw) { { href: href, items: [{ name: 'Steve' }] } }
62
+ let(:data) { record.first }
63
+
64
+ it 'prints href as object id' do
65
+ expect_inspect_to_look_like data, %Q{
66
+ Record #{href}
67
+ :name => \"Steve\"
68
+ }
69
+ end
70
+ end
71
+
72
+ context 'id attribute as id' do
73
+ let(:id) { 1 }
74
+ let(:raw) { { id: id, name: 'Steve' } }
75
+ let(:data) { record }
76
+
77
+ it 'prints id attribute as object id' do
78
+ expect_inspect_to_look_like data, %Q{
79
+ Record #{id}
80
+ :id => 1
81
+ :name => \"Steve\"
82
+ }
83
+ end
30
84
  end
31
85
  end
32
86
  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: 7.0.3
4
+ version: 7.1.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: 2016-12-09 00:00:00.000000000 Z
11
+ date: 2016-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lhc
@@ -325,7 +325,6 @@ files:
325
325
  - spec/record/first_spec.rb
326
326
  - spec/record/immutable_chains_spec.rb
327
327
  - spec/record/includes_spec.rb
328
- - spec/record/inspect_spec.rb
329
328
  - spec/record/loading_twice_spec.rb
330
329
  - spec/record/mapping_spec.rb
331
330
  - spec/record/model_name_spec.rb
@@ -374,7 +373,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
374
373
  requirements:
375
374
  - Ruby >= 2.0.0
376
375
  rubyforge_project:
377
- rubygems_version: 2.5.1
376
+ rubygems_version: 2.6.8
378
377
  signing_key:
379
378
  specification_version: 4
380
379
  summary: Rails gem providing an easy, active-record-like interface for http json services
@@ -476,7 +475,6 @@ test_files:
476
475
  - spec/record/first_spec.rb
477
476
  - spec/record/immutable_chains_spec.rb
478
477
  - spec/record/includes_spec.rb
479
- - spec/record/inspect_spec.rb
480
478
  - spec/record/loading_twice_spec.rb
481
479
  - spec/record/mapping_spec.rb
482
480
  - spec/record/model_name_spec.rb
@@ -1,45 +0,0 @@
1
- require 'rails_helper'
2
-
3
- describe LHS::Record do
4
- before(:each) do
5
- class Record < LHS::Record
6
- endpoint 'http://datastore/records/:id'
7
- end
8
- stub_request(:get, "http://datastore/records/1")
9
- .to_return(body: attrbitutes.to_json)
10
- end
11
-
12
- let(:record) { Record.find(1) }
13
- let(:attrbitutes) do
14
- {
15
- name: 'Steve',
16
- kind: {
17
- animal: {
18
- type: 'Monkey'
19
- }
20
- }
21
- }
22
- end
23
-
24
- let(:output) { "Record##{record.object_id}\n:name => \"Steve\"\n:kind => {:animal=>{:type=>\"Monkey\"}}" }
25
-
26
- context 'inspect' do
27
- it 'prints the record on the terminal: each attrbitute on a new line' do
28
- expect(record.inspect).to eq(output)
29
- end
30
-
31
- context 'with custom setters that do no touch raw data' do
32
- before do
33
- class Record
34
- attr_accessor :listing
35
- end
36
- end
37
-
38
- let(:record) { Record.new(attrbitutes.merge(listing: double('listing'))) }
39
-
40
- it 'does not print what is not in raw' do
41
- expect(record.inspect).to eq(output)
42
- end
43
- end
44
- end
45
- end