lhs 6.4.0 → 6.5.0

Sign up to get free protection for your applications and to get access to all the features.
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