lhs 6.4.0 → 6.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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/.rubocop.yml +9 -0
  4. data/.ruby-version +1 -0
  5. data/README.md +15 -0
  6. data/cider-ci.yml +2 -2
  7. data/cider-ci/bin/bundle +27 -0
  8. data/cider-ci/bin/ruby_install +8 -0
  9. data/cider-ci/bin/ruby_version +25 -0
  10. data/cider-ci/jobs/rspec.yml +17 -41
  11. data/cider-ci/jobs/rubocop.yml +11 -48
  12. data/cider-ci/task_components/bundle.yml +18 -0
  13. data/cider-ci/task_components/rspec.yml +36 -0
  14. data/cider-ci/task_components/rubocop.yml +29 -0
  15. data/cider-ci/task_components/ruby.yml +15 -0
  16. data/lhs.gemspec +4 -4
  17. data/lib/lhs/concerns/item/validation.rb +2 -2
  18. data/lib/lhs/concerns/record/batch.rb +1 -1
  19. data/lib/lhs/concerns/record/endpoints.rb +5 -10
  20. data/lib/lhs/concerns/record/find.rb +2 -2
  21. data/lib/lhs/concerns/record/find_by.rb +1 -1
  22. data/lib/lhs/concerns/record/request.rb +2 -2
  23. data/lib/lhs/data.rb +4 -2
  24. data/lib/lhs/item.rb +1 -1
  25. data/lib/lhs/pagination.rb +2 -2
  26. data/lib/lhs/proxy.rb +1 -1
  27. data/lib/lhs/version.rb +1 -1
  28. data/spec/data/is_item_or_collection_spec.rb +2 -1
  29. data/spec/data/parent_spec.rb +2 -1
  30. data/spec/item/internal_data_structure_spec.rb +0 -6
  31. data/spec/item/save_spec.rb +2 -1
  32. data/spec/item/validation_spec.rb +6 -5
  33. data/spec/record/endpoint_inheritance_spec.rb +63 -0
  34. data/spec/record/includes_spec.rb +2 -1
  35. data/spec/record/mapping_spec.rb +2 -1
  36. metadata +31 -27
  37. data/cider-ci/scripts/bundle.yml +0 -3
  38. data/cider-ci/scripts/github_comment.yml +0 -6
  39. data/cider-ci/scripts/rspec.yml +0 -4
  40. data/cider-ci/scripts/rubocop.yml +0 -5
  41. data/cider-ci/scripts/ruby-version.yml +0 -2
  42. data/cider-ci/scripts/tmp-cache.yml +0 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8657e6a2962b433061940b5fbed11d69538233b0
4
- data.tar.gz: 588206ef328828b3ffa4ad5a33019f1c8e11f3fa
3
+ metadata.gz: 79a4e6c3e274aa01035b67be3b5eeff82c68ddbd
4
+ data.tar.gz: 9c9362c9aeed7f7e2ed352eb22701b0bce023a22
5
5
  SHA512:
6
- metadata.gz: f18c4f116090fbf214ca85552455b79e282f47f72c60f9484f35b927616c036a8ae732850e98cd7484db0d889444082afa94b69d653dd4e0a1b23b747d5012ee
7
- data.tar.gz: f241d8737f772951a5549ad847ff2905e190071254c8af57022c4e5d05d0375254d46b27496d4f1964c47e0cb4a0948557861b440120a71b1efeb86e7decfbe2
6
+ metadata.gz: 7cebde70543152187087c61cdfd89eb996ea93421393e3abd6062e63da99ba30a4f4ebc4abbd32474ed7f2ea9a3e7afc19c486881af22600d639b0184f8e17a3
7
+ data.tar.gz: b066b19b120054d863ab7c18f134796c70f7ba0ae84ec1d7a60280188ea2aefd2e48f91326a3c9f847c938a806c1da1e8dec6c0625503e7160da4d9166cb32dd
data/.gitignore CHANGED
@@ -24,7 +24,6 @@ config/secrets.yml
24
24
 
25
25
  # these should all be checked in to normalise the environment:
26
26
  Gemfile.lock
27
- .ruby-version
28
27
  .ruby-gemset
29
28
 
30
29
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
@@ -11,3 +11,12 @@ RSpec/DescribedClass:
11
11
 
12
12
  RSpec/AnyInstance:
13
13
  Enabled: false
14
+
15
+ Style/MethodMissing:
16
+ Enabled: false
17
+
18
+ Rails/OutputSafety:
19
+ Enabled: false
20
+
21
+ Style/SignalException:
22
+ Enabled: false
@@ -0,0 +1 @@
1
+ ruby-2.3.0
data/README.md CHANGED
@@ -674,6 +674,21 @@ The behaviour of `count` and `length` is based on ActiveRecord's behaviour.
674
674
 
675
675
  `length` This returns the number of elements loaded from an endpoint/api. In case of paginated resources this can be different to count, as it depends on how many pages have been loaded.
676
676
 
677
+ ## Inheritance
678
+
679
+ You can inherit from previously defined records and also inherit endpoints that way:
680
+
681
+ ```
682
+ class Base < LHS::Record
683
+ endpoint 'records/:id'
684
+ end
685
+
686
+ class Example < Base
687
+ end
688
+
689
+ Example.find(1) # GET records/1
690
+ ```
691
+
677
692
  ## License
678
693
 
679
694
  [GNU Affero General Public License Version 3.](https://www.gnu.org/licenses/agpl-3.0.en.html)
@@ -1,4 +1,4 @@
1
1
  jobs:
2
- _cider-ci_include:
3
- - cider-ci/jobs/rubocop.yml
2
+ include:
4
3
  - cider-ci/jobs/rspec.yml
4
+ - cider-ci/jobs/rubocop.yml
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env bash
2
+ set -eux
3
+
4
+ export PATH=~/.rubies/$RUBY/bin:$PATH
5
+ rm -f .bundle/config
6
+
7
+ if [ ! -f ~/.rubies/$RUBY/bin/bundle ]; then
8
+ gem install bundler
9
+ fi
10
+
11
+ sed "s/^source 'https:\/\/rubygems\.intra\.local\.ch'*/source 'http\:\/\/52.29.7.59:9292'/g" Gemfile > Gemfile.tmp
12
+ mv Gemfile.tmp Gemfile
13
+
14
+ DIGEST=$(git ls-tree HEAD --\
15
+ cider-ci.yml cider-ci Gemfile.lock \
16
+ | openssl dgst -sha1 | cut -d ' ' -f 2)
17
+
18
+ DIGEST=$(echo "$DIGEST $PATH" \
19
+ | openssl dgst -sha1 | cut -d ' ' -f 2)
20
+
21
+ CACHE_SIGNATURE_FILE="/tmp/bundle_cache_signature_${DIGEST}"
22
+
23
+ if [ ! -f $CACHE_SIGNATURE_FILE ] ; then
24
+ bundle install
25
+ touch $CACHE_SIGNATURE_FILE
26
+ fi
27
+
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -eux
3
+
4
+ export PATH=~/.rubies/$RUBY/bin:$PATH
5
+
6
+ if [ ! -d ~/.rubies/$RUBY ]; then
7
+ ruby-install --no-install-deps $RUBY
8
+ fi
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+ set -eux
3
+
4
+ if [ -f ./.ruby-version ]; then
5
+ echo ".ruby-version file found"
6
+ fi
7
+
8
+ if [ ! -f ./.ruby-version ]; then
9
+ echo ".ruby-version file not found"
10
+ exit 1
11
+ fi
12
+
13
+ IFS='-' read -ra EXPLODED_RUBY <<< "$RUBY"
14
+
15
+ if [ "${#EXPLODED_RUBY[@]}" == "1" ]; then
16
+ echo 'No engine/version separator "-" found in .ruby-version file.'
17
+ exit 1
18
+ fi
19
+
20
+ if [ "${#EXPLODED_RUBY[@]}" != "1" ] && [ "${#EXPLODED_RUBY[@]}" != "2" ]; then
21
+ echo "Unknown format of .ruby-version file"
22
+ exit 1
23
+ fi
24
+
25
+ echo $RUBY
@@ -1,48 +1,24 @@
1
1
  rspec:
2
- name: 'RSPec tests'
2
+ name: 'rspec'
3
3
 
4
- run-on:
5
- - type: branch
6
- include-match: ^.*$
4
+ run_when:
5
+ 'some HEAD has been updated':
6
+ type: branch
7
+ include_match: ^.*$
7
8
 
8
9
  context:
9
- task-defaults:
10
- ports:
11
- CAPYBARA_PORT:
12
- inet_address: "localhost"
13
- min: 8000
14
- max: 8999
15
- PHANTOMJS_PORT:
16
- inet_address: "localhost"
17
- min: 44600
18
- max: 44999
19
10
 
20
- scripts:
21
- rspec:
22
- start-when:
23
- - script: bundle
24
- - script: ruby-version
25
- - script: tmp-cache
11
+ script_defaults:
12
+ template_environment_variables: true
26
13
 
14
+ task_defaults:
15
+ max_trials: 2
16
+ dispatch_storm_delay_duration: 1 Seconds
17
+ include:
18
+ - cider-ci/task_components/ruby.yml
19
+ - cider-ci/task_components/bundle.yml
20
+ - cider-ci/task_components/rspec.yml
27
21
 
28
- _cider-ci_include:
29
- - cider-ci/scripts/bundle.yml
30
- - cider-ci/scripts/tmp-cache.yml
31
- - cider-ci/scripts/ruby-version.yml
32
- - cider-ci/scripts/rspec.yml
33
-
34
-
35
- trial-attachments:
36
- logs:
37
- include-match: log\/.*\.log$
38
- content-type: text/plain
39
- image-screenshots:
40
- include-match: tmp\/capybara\/.*\.png$
41
- content-type: image/png
42
- html-screenshots:
43
- include-match: tmp\/capybara\/.*\.html$
44
- content-type: text/html
45
-
46
- _cider-ci_generate-tasks:
47
- include-match: spec/.*_spec.rb
48
- exclude-match: spec/support/shared/*
22
+ tasks:
23
+ all-rspec:
24
+ name: All rspec tests
@@ -1,55 +1,18 @@
1
1
  rubocop:
2
- name: 'Rubocop analysis'
2
+ name: 'Rubocop'
3
3
 
4
- run-on:
5
- - type: branch
6
- include-match: ^.*$
4
+ run_when:
5
+ 'some HEAD has been updated':
6
+ type: branch
7
+ include_match: ^.*$
7
8
 
8
9
  context:
9
- task-defaults:
10
- environment-variables:
11
- GIT_REPOSITORY: local-ch/location-app
12
- RESULT_PATH: 'tmp/checkstyle.json'
13
-
14
- scripts:
15
- rubocop:
16
- start-when:
17
- - script: bundle
18
- - script: ruby-version
19
- - script: tmp-cache
20
-
21
-
22
- github_comment:
23
- start-when:
24
- - script: rubocop
25
- states: [failed]
26
-
27
-
28
- _cider-ci_include:
29
- - cider-ci/scripts/bundle.yml
30
- - cider-ci/scripts/tmp-cache.yml
31
- - cider-ci/scripts/ruby-version.yml
32
- - cider-ci/scripts/rubocop.yml
33
-
34
- - cider-ci/scripts/github_comment.yml
35
-
36
-
37
- max-auto-trials: 1
38
-
39
- trial-attachments:
40
- logs:
41
- include-match: tmp\/checkstyle.json$
42
- content-type: application/json
43
-
44
- tree-attachments:
45
- logs:
46
- include-match: tmp\/checkstyle.json$
47
- content-type: application/json
48
10
 
49
11
  tasks:
12
+
50
13
  rubocop:
51
- scripts:
52
- rubocop: {}
53
-
54
- github_comment: {}
55
-
14
+
15
+ include:
16
+ - cider-ci/task_components/ruby.yml
17
+ - cider-ci/task_components/bundle.yml
18
+ - cider-ci/task_components/rubocop.yml
@@ -0,0 +1,18 @@
1
+ traits:
2
+ ruby-install: true
3
+ Bash: true
4
+
5
+ trial_attachments:
6
+ gemfile:
7
+ include_match: Gemfile
8
+ content_type: text/plain
9
+
10
+ scripts:
11
+
12
+ bundle:
13
+ exclusive_executor_resource: ruby-install_{{$RUBY}}
14
+ timeout: 20 Minutes
15
+ body: cider-ci/bin/bundle
16
+ start_when:
17
+ 'ruby installed':
18
+ script_key: ruby-install
@@ -0,0 +1,36 @@
1
+ ports:
2
+ CAPYBARA_PORT:
3
+ min: 8000
4
+ max: 8999
5
+ PHANTOMJS_PORT:
6
+ min: 44600
7
+ max: 44999
8
+
9
+ environment_variables:
10
+ RUBY:
11
+ read_and_replace_with: .ruby-version
12
+
13
+ scripts:
14
+ rspec:
15
+ body: |
16
+ #!/usr/bin/env bash
17
+ set -eux
18
+ mkdir -p tmp/cache
19
+ export PATH=~/.rubies/$RUBY/bin:$PATH
20
+ bundle exec rspec
21
+
22
+ start_when:
23
+ 'bundled':
24
+ script_key: bundle
25
+
26
+
27
+ trial_attachments:
28
+ logs:
29
+ include_match: log\/.*\.log$
30
+ content_type: text/plain
31
+ image-screenshots:
32
+ include_match: tmp\/capybara\/.*\.png$
33
+ content_type: image/png
34
+ html-screenshots:
35
+ include_match: tmp\/capybara\/.*\.html$
36
+ content_type: text/html
@@ -0,0 +1,29 @@
1
+ trial_attachments:
2
+ logs:
3
+ include_match: tmp\/checkstyle.json$
4
+ content_type: application/json
5
+
6
+ tree_attachments:
7
+ logs:
8
+ include_match: tmp\/checkstyle.json$
9
+ content_type: application/json
10
+
11
+ environment_variables:
12
+ RUBY:
13
+ read_and_replace_with: .ruby-version
14
+ RESULT_PATH: 'tmp/checkstyle.json'
15
+
16
+ max_trials: 1
17
+
18
+ scripts:
19
+ rubocop:
20
+ start_when:
21
+ 'bundled':
22
+ script_key: bundle
23
+ body: |
24
+ #!/usr/bin/env bash
25
+ set -eux
26
+ mkdir -p tmp/cache
27
+ export PATH=~/.rubies/$RUBY/bin:$PATH
28
+ bundle exec rubocop --config .rubocop.yml \
29
+ --format json --out $RESULT_PATH --format progress
@@ -0,0 +1,15 @@
1
+ environment_variables:
2
+ RUBY:
3
+ read_and_replace_with: .ruby-version
4
+
5
+ scripts:
6
+ ruby-version:
7
+ body: cider-ci/bin/ruby_version
8
+ ruby-install:
9
+ exclusive_executor_resource: ruby-install_{{$RUBY}}
10
+ timeout: 20 Minutes
11
+ body: cider-ci/bin/ruby_install
12
+ start_when:
13
+ 'ruby version checked':
14
+ script_key: ruby-version
15
+
@@ -22,15 +22,15 @@ Gem::Specification.new do |s|
22
22
 
23
23
  s.add_dependency 'lhc', '>= 3.6.0'
24
24
  s.add_dependency 'lhc-core-interceptors', '>= 2.0.1'
25
+ s.add_dependency 'activesupport', '> 4'
25
26
 
26
27
  s.add_development_dependency 'rspec-rails', '>= 3.0.0'
27
28
  s.add_development_dependency 'rails', '>= 4.0.0'
28
29
  s.add_development_dependency 'webmock'
29
- s.add_development_dependency 'geminabox'
30
30
  s.add_development_dependency 'pry'
31
- s.add_development_dependency 'pry-byebug'
32
- s.add_development_dependency 'ciderizer'
33
31
  s.add_development_dependency 'capybara'
34
-
32
+ s.add_development_dependency 'rubocop'
33
+ s.add_development_dependency 'json', '>= 1.8.2'
34
+
35
35
  s.license = 'GPL-3'
36
36
  end
@@ -8,7 +8,7 @@ class LHS::Item < LHS::Proxy
8
8
  def valid?(options = {})
9
9
  options ||= {}
10
10
  self.errors = nil
11
- fail 'No validation endpoint found!' unless validation_endpoint
11
+ raise 'No validation endpoint found!' unless validation_endpoint
12
12
  record = LHS::Record.for_url(validation_endpoint.url)
13
13
  validation_params = validation_endpoint.options[:validates] == true ? { persist: false } : { validation_endpoint.options[:validates] => false }
14
14
  params = validation_endpoint.options.fetch(:params, {})
@@ -38,7 +38,7 @@ class LHS::Item < LHS::Proxy
38
38
  endpoint = embeded_endpoint if _data.href # take embeded first
39
39
  endpoint ||= _data._record.find_endpoint(_data._raw)
40
40
  validates = endpoint.options && endpoint.options.fetch(:validates, false)
41
- fail 'Endpoint does not support validations!' unless validates
41
+ raise 'Endpoint does not support validations!' unless validates
42
42
  endpoint
43
43
  end
44
44
 
@@ -18,7 +18,7 @@ class LHS::Record
18
18
 
19
19
  # Process batches of entries
20
20
  def find_in_batches(options = {})
21
- fail 'No block given' unless block_given?
21
+ raise 'No block given' unless block_given?
22
22
  start = options[:start] || 1
23
23
  batch_size = options[:batch_size] || LHS::Pagination::DEFAULT_LIMIT
24
24
  params = options[:params] || {}
@@ -12,16 +12,11 @@ class LHS::Record
12
12
  mattr_accessor :all
13
13
 
14
14
  module ClassMethods
15
- def endpoints
16
- @endpoints ||= []
17
- end
18
-
19
- def endpoints=(endpoints)
20
- @endpoints = endpoints
21
- end
22
-
23
15
  # Adds the endpoint to the list of endpoints.
24
16
  def endpoint(url, options = nil)
17
+ class_attribute :endpoints unless defined? endpoints
18
+ self.endpoints ||= []
19
+ self.endpoints = endpoints.clone
25
20
  endpoint = LHC::Endpoint.new(url, options)
26
21
  sanity_check(endpoint)
27
22
  endpoints.push(endpoint)
@@ -52,7 +47,7 @@ class LHS::Record
52
47
  invalid = existing_endpoint.placeholders.sort == new_endpoint.placeholders.sort &&
53
48
  existing_endpoint.url != new_endpoint.url
54
49
  next unless invalid
55
- fail "Clashing endpoints! Cannot differentiate between #{existing_endpoint.url} and #{new_endpoint.url}"
50
+ raise "Clashing endpoints! Cannot differentiate between #{existing_endpoint.url} and #{new_endpoint.url}"
56
51
  end
57
52
  end
58
53
 
@@ -89,7 +84,7 @@ class LHS::Record
89
84
  endpoint.placeholders.length
90
85
  end
91
86
  bases = endpoints[endpoints.keys.min]
92
- fail 'Multiple base endpoints found' if bases.count > 1
87
+ raise 'Multiple base endpoints found' if bases.count > 1
93
88
  bases.first
94
89
  end
95
90
  end
@@ -38,8 +38,8 @@ class LHS::Record
38
38
 
39
39
  def get_unique_item!(data)
40
40
  if data._proxy.is_a?(LHS::Collection)
41
- fail LHC::NotFound.new('Requested unique item. Multiple were found.', data._request.response) if data.length > 1
42
- data.first || fail(LHC::NotFound.new('No item was found.', data._request.response))
41
+ raise LHC::NotFound.new('Requested unique item. Multiple were found.', data._request.response) if data.length > 1
42
+ data.first || raise(LHC::NotFound.new('No item was found.', data._request.response))
43
43
  else
44
44
  data
45
45
  end
@@ -25,7 +25,7 @@ class LHS::Record
25
25
  params = params.dup.merge(limit: 1)
26
26
  data = request(options.merge(params: params))
27
27
  if data._proxy.is_a?(LHS::Collection)
28
- data.first || fail(LHC::NotFound.new('No item was found.', data._request.response))
28
+ data.first || raise(LHC::NotFound.new('No item was found.', data._request.response))
29
29
  else
30
30
  data._record.new(data)
31
31
  end
@@ -234,7 +234,7 @@ class LHS::Record
234
234
  error_class = LHC::Error.find(response)
235
235
  error = error_class.new(error_class, response)
236
236
  handlers = handlers.to_a.select { |error_handler| error.is_a? error_handler.class }
237
- fail(error) unless handlers.any?
237
+ raise(error) unless handlers.any?
238
238
  handlers.each do |handler|
239
239
  handlers_return = handler.call(response)
240
240
  return_data = handlers_return if handlers_return.present?
@@ -251,7 +251,7 @@ class LHS::Record
251
251
  next unless record
252
252
  records.push(record)
253
253
  end
254
- fail 'Found more than one record that could be used to do the request' if records.uniq.count > 1
254
+ raise 'Found more than one record that could be used to do the request' if records.uniq.count > 1
255
255
  records.uniq.first
256
256
  else # Hash
257
257
  LHS::Record.for_url(options[:url])
@@ -79,7 +79,9 @@ class LHS::Data
79
79
  private
80
80
 
81
81
  def collection_proxy?(input)
82
- !! (input.is_a?(Hash) && input[items_key]) || input.is_a?(Array) || _raw.is_a?(Array)
82
+ (input.is_a?(Hash) && input[items_key]) ||
83
+ input.is_a?(Array) ||
84
+ _raw.is_a?(Array)
83
85
  end
84
86
 
85
87
  def root_item
@@ -110,7 +112,7 @@ class LHS::Data
110
112
  end
111
113
 
112
114
  def raw_from_input(input)
113
- if input.is_a?(String) && input.length > 0
115
+ if input.is_a?(String) && !input.empty?
114
116
  raw_from_json_string(input)
115
117
  elsif defined?(input._raw)
116
118
  input._raw
@@ -49,7 +49,7 @@ class LHS::Item < LHS::Proxy
49
49
  private
50
50
 
51
51
  # FIXME: Extend the set of keywords
52
- BLACKLISTED_KEYWORDS = %w( new proxy_association )
52
+ BLACKLISTED_KEYWORDS = %w(new proxy_association)
53
53
 
54
54
  def convert(value)
55
55
  return value unless value.is_a?(String)
@@ -34,11 +34,11 @@ class LHS::Pagination
34
34
  end
35
35
 
36
36
  def next_offset
37
- fail 'to be implemented in subclass'
37
+ raise 'to be implemented in subclass'
38
38
  end
39
39
 
40
40
  def current_page
41
- fail 'to be implemented in subclass'
41
+ raise 'to be implemented in subclass'
42
42
  end
43
43
 
44
44
  def first_page
@@ -16,7 +16,7 @@ class LHS::Proxy
16
16
  end
17
17
 
18
18
  def reload!
19
- fail 'No href found' unless _data.href
19
+ raise 'No href found' unless _data.href
20
20
  data = _data.class.request(url: _data.href, method: :get)
21
21
  _data.merge_raw!(data)
22
22
  self._loaded = true
@@ -1,3 +1,3 @@
1
1
  module LHS
2
- VERSION = "6.4.0"
2
+ VERSION = "6.5.0"
3
3
  end
@@ -24,7 +24,8 @@ describe LHS::Data do
24
24
  {
25
25
  href: 'http://local.ch/records',
26
26
  items: [item]
27
- }, nil, Record)
27
+ }, nil, Record
28
+ )
28
29
  end
29
30
 
30
31
  it 'provides the information which type of proxy data ist' do
@@ -22,7 +22,8 @@ describe LHS::Data do
22
22
  {
23
23
  href: 'http://local.ch/records',
24
24
  items: [item]
25
- }, nil, Record)
25
+ }, nil, Record
26
+ )
26
27
  end
27
28
 
28
29
  it 'possible to navigate the parent' do
@@ -32,10 +32,4 @@ describe LHS::Item do
32
32
  feedback = Feedback.build('name' => 'BB8')
33
33
  expect(feedback._data._raw.keys).to include(:name)
34
34
  end
35
-
36
- it 'can handle ActionController::Parameters' do
37
- params = ActionController::Parameters.new('name' => 'Han')
38
- feedback = Feedback.build(params)
39
- expect(feedback._data._raw.keys).to include(:name)
40
- end
41
35
  end
@@ -56,7 +56,8 @@ describe LHS::Item do
56
56
  request = stub_request(:post, item.href)
57
57
  .with(
58
58
  body: item._raw.to_json,
59
- headers: headers)
59
+ headers: headers
60
+ )
60
61
  .to_return(status: 200, body: item._raw.to_json)
61
62
 
62
63
  item.save!(headers: headers)
@@ -46,11 +46,12 @@ describe LHS::Item do
46
46
 
47
47
  let(:failing_validation) do
48
48
  stub_request(:post, "#{datastore}/v2/users?persist=false")
49
- .to_return(status: 400,
50
- body: {
51
- field_errors: [{ code: "UNSUPPORTED_PROPERTY_VALUE", "path" => ["email"] }]
52
- }.to_json
53
- )
49
+ .to_return(
50
+ status: 400,
51
+ body: {
52
+ field_errors: [{ code: "UNSUPPORTED_PROPERTY_VALUE", "path" => ["email"] }]
53
+ }.to_json
54
+ )
54
55
  end
55
56
 
56
57
  context 'valid data' do
@@ -0,0 +1,63 @@
1
+ require 'rails_helper'
2
+
3
+ describe LHS::Record do
4
+ context 'inherit endpoints' do
5
+ before(:each) do
6
+ class Base < LHS::Record
7
+ endpoint 'records/:id'
8
+ end
9
+
10
+ class Example < Base
11
+ end
12
+ end
13
+
14
+ it 'inherits endpoints based on ruby class_attribute behaviour' do
15
+ request = stub_request(:get, 'http://records/1').to_return(body: [].to_json)
16
+ Example.find(1)
17
+ Base.find(1)
18
+ assert_requested(request, times: 2)
19
+ end
20
+ end
21
+
22
+ context 'define endpoints in subclass' do
23
+ before(:each) do
24
+ class Base < LHS::Record
25
+ endpoint 'records/:id'
26
+ end
27
+
28
+ class Example < Base
29
+ endpoint 'records'
30
+ end
31
+ end
32
+
33
+ it 'inherits endpoints based on ruby class_attribute behaviour' do
34
+ stub_request(:get, 'http://records?color=blue').to_return(body: [].to_json)
35
+ Example.where(color: 'blue')
36
+ expect(
37
+ -> { Base.all }
38
+ ).to raise_error(RuntimeError, 'Compilation incomplete. Unable to find value for id.')
39
+ end
40
+ end
41
+
42
+ context 'clashing endpoints between super and subclass' do
43
+ before(:each) do
44
+ class Base < LHS::Record
45
+ endpoint 'records'
46
+ end
47
+
48
+ class Example < Base
49
+ endpoint 'examples/:id'
50
+ end
51
+ end
52
+
53
+ it 'inherits endpoints based on ruby class_attribute behaviour' do
54
+ request = stub_request(:get, 'http://records?limit=100').to_return(body: [].to_json)
55
+ Base.all
56
+ assert_requested(request)
57
+
58
+ request = stub_request(:get, 'http://examples/1').to_return(body: {}.to_json)
59
+ Example.find(1)
60
+ assert_requested(request)
61
+ end
62
+ end
63
+ end
@@ -204,7 +204,8 @@ describe LHS::Record do
204
204
  'optional_child' => {
205
205
  'href' => "#{datastore}/local-children/1"
206
206
  }
207
- }]
207
+ }
208
+ ]
208
209
  }.to_json)
209
210
 
210
211
  stub_request(:get, "#{datastore}/local-children/1")
@@ -65,7 +65,8 @@ describe LHS::Record do
65
65
  'href' => "#{datastore}/agbs/547f02c61c266c4830ea6ce7",
66
66
  'preceding_agb' => { 'href' => preceding_agb_url },
67
67
  'binary_url_pdf_de' => 'de'
68
- }.to_json)
68
+ }.to_json
69
+ )
69
70
 
70
71
  # includes request
71
72
  stub_request(:get, preceding_agb_url).to_return(
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: 6.4.0
4
+ version: 6.5.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-08-26 00:00:00.000000000 Z
11
+ date: 2016-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lhc
@@ -39,49 +39,49 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.0.1
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec-rails
42
+ name: activesupport
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - ">"
46
46
  - !ruby/object:Gem::Version
47
- version: 3.0.0
48
- type: :development
47
+ version: '4'
48
+ type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - ">"
53
53
  - !ruby/object:Gem::Version
54
- version: 3.0.0
54
+ version: '4'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rails
56
+ name: rspec-rails
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 4.0.0
61
+ version: 3.0.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 4.0.0
68
+ version: 3.0.0
69
69
  - !ruby/object:Gem::Dependency
70
- name: webmock
70
+ name: rails
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 4.0.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 4.0.0
83
83
  - !ruby/object:Gem::Dependency
84
- name: geminabox
84
+ name: webmock
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -109,7 +109,7 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: pry-byebug
112
+ name: capybara
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">="
@@ -123,7 +123,7 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: ciderizer
126
+ name: rubocop
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
@@ -137,19 +137,19 @@ dependencies:
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
- name: capybara
140
+ name: json
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - ">="
144
144
  - !ruby/object:Gem::Version
145
- version: '0'
145
+ version: 1.8.2
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
- version: '0'
152
+ version: 1.8.2
153
153
  description: Rails gem providing an easy, active-record-like interface for http json
154
154
  services
155
155
  email:
@@ -161,18 +161,20 @@ files:
161
161
  - ".gitignore"
162
162
  - ".rubocop.localch.yml"
163
163
  - ".rubocop.yml"
164
+ - ".ruby-version"
164
165
  - Gemfile
165
166
  - README.md
166
167
  - Rakefile
167
168
  - cider-ci.yml
169
+ - cider-ci/bin/bundle
170
+ - cider-ci/bin/ruby_install
171
+ - cider-ci/bin/ruby_version
168
172
  - cider-ci/jobs/rspec.yml
169
173
  - cider-ci/jobs/rubocop.yml
170
- - cider-ci/scripts/bundle.yml
171
- - cider-ci/scripts/github_comment.yml
172
- - cider-ci/scripts/rspec.yml
173
- - cider-ci/scripts/rubocop.yml
174
- - cider-ci/scripts/ruby-version.yml
175
- - cider-ci/scripts/tmp-cache.yml
174
+ - cider-ci/task_components/bundle.yml
175
+ - cider-ci/task_components/rspec.yml
176
+ - cider-ci/task_components/rubocop.yml
177
+ - cider-ci/task_components/ruby.yml
176
178
  - lhs.gemspec
177
179
  - lib/lhs.rb
178
180
  - lib/lhs/collection.rb
@@ -291,6 +293,7 @@ files:
291
293
  - spec/record/create_spec.rb
292
294
  - spec/record/creation_failed_spec.rb
293
295
  - spec/record/definitions_spec.rb
296
+ - spec/record/endpoint_inheritance_spec.rb
294
297
  - spec/record/endpoint_misconfiguration_spec.rb
295
298
  - spec/record/endpoint_options_spec.rb
296
299
  - spec/record/endpoints_spec.rb
@@ -352,7 +355,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
352
355
  requirements:
353
356
  - Ruby >= 2.0.0
354
357
  rubyforge_project:
355
- rubygems_version: 2.4.6
358
+ rubygems_version: 2.5.1
356
359
  signing_key:
357
360
  specification_version: 4
358
361
  summary: Rails gem providing an easy, active-record-like interface for http json services
@@ -437,6 +440,7 @@ test_files:
437
440
  - spec/record/create_spec.rb
438
441
  - spec/record/creation_failed_spec.rb
439
442
  - spec/record/definitions_spec.rb
443
+ - spec/record/endpoint_inheritance_spec.rb
440
444
  - spec/record/endpoint_misconfiguration_spec.rb
441
445
  - spec/record/endpoint_options_spec.rb
442
446
  - spec/record/endpoints_spec.rb
@@ -1,3 +0,0 @@
1
- bundle:
2
- exclusive-executor-resource: bundler
3
- body: sed 's/^source.*/source "http\:\/\/52.29.7.59:9292"/g' Gemfile > Gemfile.tmp ; mv Gemfile.tmp Gemfile && bundle install
@@ -1,6 +0,0 @@
1
- github_comment:
2
- ignore-state: true
3
- body: |
4
- #!/usr/bin/env bash
5
-
6
- bundle exec rake checkstyle
@@ -1,4 +0,0 @@
1
- rspec:
2
- body: |
3
- #!/usr/bin/env bash
4
- bundle exec rspec $CIDER_CI_TASK_FILE
@@ -1,5 +0,0 @@
1
- rubocop:
2
- body: |
3
- #!/usr/bin/env bash
4
-
5
- bundle exec rubocop --config .rubocop.yml --format json --out $RESULT_PATH --format progress
@@ -1,2 +0,0 @@
1
- ruby-version:
2
- body: ruby --version
@@ -1,2 +0,0 @@
1
- tmp-cache:
2
- body: mkdir -p tmp/cache