spyke 6.1.1 → 7.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d8a623ec5e619581883a58962e9961e7bc04f889e7c4dfdfd5712d2e7e82953b
4
- data.tar.gz: e9730e060fbcd6cfb3bf4a718a779d9de490878da0728d1643fbb18f2004968f
3
+ metadata.gz: 6d4ddb1fd345f49012040e7f462f63003f1a1ff57ddc7173bb14cb5ca03c5bed
4
+ data.tar.gz: bd1674887dc87a21ca4bad570d7375299add2312a3af7183d466078b6510367f
5
5
  SHA512:
6
- metadata.gz: ec2cacb0215d0d780484fb184e5e06aab71cc06e5b7312c41cbf337830e3ad5e1167a00fd255c0354d4293409763e03d076a53362654512f4da19fa925980485
7
- data.tar.gz: 80607d11d9501f9b6f69cfbf311a099130c0904e37879b58a30df4794f758f131360b6c19eadd9d3086e5b8c284c4eed7399219f2edf82f8a260625c992a7997
6
+ metadata.gz: c83ab8e4a46d6afff3624e7a1b2baccef8b5fe97c875271268c0dd7c51b65a76e85e019cf4ed749b06ef5414566203f6e618e22aaafe12c6494ac39f113abc75
7
+ data.tar.gz: c2f0f2bb8bbce8cb8047be70f0f946305efdff464f6c0e4ad4a46b13cfc2fba19f87ff98c8139102a107e9c64e45035246f5f66d055ed7402772685ca16d348e
@@ -0,0 +1,85 @@
1
+ # Use the latest 2.1 version of CircleCI pipeline process engine.
2
+ # See: https://circleci.com/docs/2.0/configuration-reference
3
+ version: 2.1
4
+
5
+ # Orbs are reusable packages of CircleCI configuration that you may share across projects, enabling you to create encapsulated, parameterized commands, jobs, and executors that can be used across multiple projects.
6
+ # See: https://circleci.com/docs/2.0/orb-intro/
7
+ orbs:
8
+ ruby: circleci/ruby@0.1.2
9
+ coveralls: coveralls/coveralls@1.0.6
10
+ node: circleci/node@5.0.0
11
+
12
+ # Define a job to be invoked later in a workflow.
13
+ # See: https://circleci.com/docs/2.0/configuration-reference/#jobs
14
+ jobs:
15
+ build:
16
+ parameters:
17
+ ruby_version:
18
+ type: string
19
+ rails_version:
20
+ type: string
21
+ faraday_version:
22
+ type: string
23
+ docker:
24
+ - image: cimg/ruby:<< parameters.ruby_version >>
25
+ executor: ruby/default
26
+ environment:
27
+ RAILS_TEST_VERSION: << parameters.rails_version >>
28
+ FARADAY_TEST_VERSION: << parameters.faraday_version >>
29
+ EUID: 0 # not sure why this is needed, but sudo npm fails
30
+ steps:
31
+ - checkout
32
+ - run:
33
+ name: Which ruby?
34
+ command: ruby -v
35
+ - run:
36
+ name: Which bundler?
37
+ command: bundle -v
38
+ - ruby/bundle-install
39
+ - run:
40
+ name: Run tests
41
+ command: bundle exec rake
42
+ - node/install:
43
+ node-version: 10.0.0
44
+ - coveralls/upload:
45
+ parallel: true
46
+ coverage:
47
+ docker:
48
+ - image: circleci/node:10.0.0
49
+ steps:
50
+ - coveralls/upload:
51
+ parallel_finished: true
52
+
53
+ workflows:
54
+ tests:
55
+ jobs:
56
+ - build:
57
+ matrix:
58
+ alias: Rails 4
59
+ parameters:
60
+ rails_version: ["~> 4.0"]
61
+ ruby_version: ["2.6.9"]
62
+ faraday_version: ["< 2.0"]
63
+ - build:
64
+ matrix:
65
+ alias: Rails 5
66
+ parameters:
67
+ rails_version: ["~> 5.0"]
68
+ ruby_version: ["2.6.9", "2.7.5"]
69
+ faraday_version: ["< 2.0", ">= 2.0"]
70
+ - build:
71
+ matrix:
72
+ alias: Rails 6
73
+ parameters:
74
+ rails_version: ["~> 6.0"]
75
+ ruby_version: ["2.6.9", "2.7.5", "3.0.3"]
76
+ faraday_version: ["< 2.0", ">= 2.0"]
77
+ - build:
78
+ matrix:
79
+ alias: Rails 7
80
+ parameters:
81
+ rails_version: ["~> 7.0"]
82
+ ruby_version: ["2.7.5", "3.0.3", "3.1.1"]
83
+ faraday_version: ["< 2.0", ">= 2.0"]
84
+ - coverage:
85
+ requires: ["Rails 4", "Rails 5", "Rails 6", "Rails 7"]
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in spyke.gemspec
4
4
  gemspec
5
+
6
+ if ENV['FARADAY_TEST_VERSION'] == '< 2.0'
7
+ gem 'faraday_middleware'
8
+ end
data/README.md CHANGED
@@ -1,15 +1,13 @@
1
- # Spyke
2
-
3
- <p align="center">
4
- <img src="http://upload.wikimedia.org/wikipedia/en/thumb/2/21/Spyke.jpg/392px-Spyke.jpg" width="15%" />
1
+ <div align="center">
2
+ <img src="spyke.svg" width="250" alt="Spyke" />
5
3
  <br/>
6
4
  Interact with remote <strong>REST services</strong> in an <strong>ActiveRecord-like</strong> manner.
7
5
  <br /><br />
8
6
  <a href="https://rubygems.org/gems/spyke"><img src="https://badge.fury.io/rb/spyke.svg?style=flat" alt="Gem Version"></a>
9
7
  <a href="https://codeclimate.com/github/balvig/spyke"><img src="https://codeclimate.com/github/balvig/spyke/badges/gpa.svg" /></a>
10
- <a href='https://coveralls.io/r/balvig/spyke?branch=master'><img src='https://img.shields.io/coveralls/balvig/spyke.svg?style=flat' /></a>
11
- <a href="https://travis-ci.org/balvig/spyke"><img src="https://travis-ci.org/balvig/spyke.svg?branch=master" /></a>
12
- </p>
8
+ <a href='https://coveralls.io/github/balvig/spyke'><img src="https://coveralls.io/repos/github/balvig/spyke/badge.svg" /></a>
9
+ <a href="https://circleci.com/gh/balvig/spyke"><img src="https://circleci.com/gh/balvig/spyke.svg?style=shield" /></a>
10
+ </div>
13
11
 
14
12
  ---
15
13
 
@@ -50,10 +48,10 @@ So, for example for an API that returns JSON like this:
50
48
  ```ruby
51
49
  # config/initializers/spyke.rb
52
50
 
53
- class JSONParser < Faraday::Response::Middleware
54
- def parse(body)
55
- json = MultiJson.load(body, symbolize_keys: true)
56
- {
51
+ class JSONParser < Faraday::Middleware
52
+ def on_complete(env)
53
+ json = MultiJson.load(env.body, symbolize_keys: true)
54
+ env.body = {
57
55
  data: json[:result],
58
56
  metadata: json[:extra],
59
57
  errors: json[:errors]
@@ -62,7 +60,8 @@ class JSONParser < Faraday::Response::Middleware
62
60
  end
63
61
 
64
62
  Spyke::Base.connection = Faraday.new(url: 'http://api.com') do |c|
65
- c.request :json
63
+ c.request :multipart
64
+ c.request :json # if using Faraday 1.x, please add `faraday_middleware` to your dependencies first
66
65
  c.use JSONParser
67
66
  c.adapter Faraday.default_adapter
68
67
  end
@@ -204,7 +203,7 @@ but this can be disabled or customized:
204
203
  ```ruby
205
204
  class Article < Spyke::Base
206
205
  # Default
207
- include_root_in_json true # { article: { title: ...} }
206
+ include_root_in_json true # { article: { title: ...} }
208
207
 
209
208
  # Custom
210
209
  include_root_in_json :post # { post: { title: ...} }
@@ -244,9 +243,3 @@ Completed 200 OK in 75ms (Views: 64.6ms | Spyke: 40.3ms | ActiveRecord: 0ms)
244
243
 
245
244
  For more examples of how Spyke can be used, check out [fixtures.rb](https://github.com/balvig/spyke/blob/master/test/support/fixtures.rb) and the
246
245
  [test suite](https://github.com/balvig/spyke/tree/master/test).
247
-
248
-
249
- ## Contributing
250
-
251
- If possible please take a look at the [tests marked "wishlisted"](https://github.com/balvig/spyke/search?l=ruby&q=wishlisted&utf8=%E2%9C%93)!
252
- These are features/fixes I'd like to implement but haven't gotten around to doing yet :)
data/bin/console ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'spyke'
5
+ require 'pry'
6
+
7
+ # Require support files via `bin/console -t`
8
+ if ARGV.any? { |o| %w(-t --test).include? o }
9
+ require_relative '../test/support/fixtures.rb'
10
+ Spyke::Base.connection.response :logger
11
+ end
12
+
13
+ Pry.start
@@ -94,9 +94,9 @@ module Spyke
94
94
 
95
95
  def method_missing(name, *args, &block)
96
96
  case
97
- when association?(name) then association(name).load
98
- when attribute?(name) then attribute(name)
99
- when predicate?(name) then predicate(name)
97
+ when association?(name) then association(name, *args).load
98
+ when attribute?(name) then attribute(name, *args)
99
+ when predicate?(name) then predicate(name, *args)
100
100
  when setter?(name) then set_attribute(name, args.first)
101
101
  else super
102
102
  end
@@ -12,7 +12,7 @@ module Spyke
12
12
  case
13
13
  when value.is_a?(Spyke::Base) then value.attributes.to_params
14
14
  when value.is_a?(Array) then value.map { |v| parse_value(v) }
15
- when value.respond_to?(:content_type) then Faraday::UploadIO.new(value.path, value.content_type)
15
+ when value.respond_to?(:content_type) then Faraday::Multipart::FilePart.new(value.path, value.content_type)
16
16
  else value
17
17
  end
18
18
  end
data/lib/spyke/http.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'faraday'
2
- require 'faraday_middleware'
3
1
  require 'spyke/config'
4
2
  require 'spyke/path'
5
3
  require 'spyke/result'
@@ -114,10 +112,10 @@ module Spyke
114
112
  field_errors.each do |error_attributes|
115
113
  error = NormalizedValidationError.new(error_attributes)
116
114
 
117
- if errors.method(:add).arity == -2
118
- errors.add(field.to_sym, error.message, **error.options)
119
- else
115
+ if ActiveSupport::VERSION::MAJOR < 5
120
116
  errors.add(field.to_sym, error.message, error.options)
117
+ else
118
+ errors.add(field.to_sym, error.message, **error.options)
121
119
  end
122
120
  end
123
121
  end
@@ -1,17 +1,28 @@
1
1
  module Spyke
2
2
  class ScopeRegistry
3
- extend ActiveSupport::PerThreadRegistry
3
+ # https://github.com/balvig/spyke/pull/128
4
+ if ActiveSupport::VERSION::MAJOR >= 7
5
+ class << self
6
+ delegate :value_for, :set_value_for, to: :new
7
+ end
8
+
9
+ thread_mattr_accessor :registry
10
+ else
11
+ extend ActiveSupport::PerThreadRegistry
12
+
13
+ attr_accessor :registry
14
+ end
4
15
 
5
16
  def initialize
6
- @registry = Hash.new { |hash, key| hash[key] = {} }
17
+ self.registry ||= Hash.new { |hash, key| hash[key] = {} }
7
18
  end
8
19
 
9
20
  def value_for(scope_type, variable_name)
10
- @registry[scope_type][variable_name]
21
+ registry[scope_type][variable_name]
11
22
  end
12
23
 
13
24
  def set_value_for(scope_type, variable_name, value)
14
- @registry[scope_type][variable_name] = value
25
+ registry[scope_type][variable_name] = value
15
26
  end
16
27
  end
17
28
  end
data/lib/spyke/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Spyke
2
- VERSION = '6.1.1'
2
+ VERSION = '7.0.0'
3
3
  end
data/lib/spyke.rb CHANGED
@@ -1,5 +1,21 @@
1
1
  require 'active_support'
2
2
  require 'active_support/core_ext'
3
+
4
+ require 'faraday'
5
+ require 'faraday/multipart'
6
+
7
+ if Gem.loaded_specs["faraday"].version < Gem::Version.new("2.0")
8
+ begin
9
+ require 'faraday_middleware'
10
+ rescue LoadError => e
11
+ puts <<~MSG
12
+ Please add `faraday_middleware` to your Gemfile when using Faraday 1.x. Alternatively,
13
+ upgrade to Faraday `~> 2` to avoid this dependency.
14
+ MSG
15
+ raise e
16
+ end
17
+ end
18
+
3
19
  require 'spyke/base'
4
20
  require 'spyke/instrumentation' if defined?(Rails)
5
21
  require 'spyke/version'
data/spyke.gemspec CHANGED
@@ -18,15 +18,14 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency 'activesupport', '>= 4.0.0'
22
- spec.add_dependency 'activemodel', '>= 4.0.0'
23
- spec.add_dependency 'faraday', '>= 0.9.0', '< 2.0'
24
- spec.add_dependency 'faraday_middleware', '>= 0.9.1', '< 2.0'
21
+ spec.add_dependency 'activesupport', ENV.fetch('RAILS_TEST_VERSION', '>= 4.0.0')
22
+ spec.add_dependency 'activemodel', ENV.fetch('RAILS_TEST_VERSION', '>= 4.0.0')
23
+ spec.add_dependency 'faraday', ENV.fetch('FARADAY_TEST_VERSION', '>= 1.0.0'), '< 3.0'
24
+ spec.add_dependency 'faraday-multipart', '~> 1.0'
25
25
  spec.add_dependency 'addressable', '>= 2.5.2'
26
26
 
27
- spec.add_development_dependency 'actionpack', '>= 4.0.0'
27
+ spec.add_development_dependency 'actionpack', ENV.fetch('RAILS_TEST_VERSION', '>= 4.0.0')
28
28
  spec.add_development_dependency 'bundler', '>= 1.6'
29
- spec.add_development_dependency 'coveralls', '~> 0.7'
30
29
  spec.add_development_dependency 'minitest'
31
30
  spec.add_development_dependency 'minitest-line'
32
31
  spec.add_development_dependency 'minitest-reporters'
@@ -34,5 +33,7 @@ Gem::Specification.new do |spec|
34
33
  spec.add_development_dependency 'multi_json'
35
34
  spec.add_development_dependency 'pry'
36
35
  spec.add_development_dependency 'rake'
36
+ spec.add_development_dependency 'simplecov'
37
+ spec.add_development_dependency 'simplecov-lcov'
37
38
  spec.add_development_dependency 'webmock'
38
39
  end
data/spyke.svg ADDED
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="180" height="70" viewBox="0 0 180 70" xml:space="preserve">
4
+ <desc>Created with Fabric.js 4.6.0</desc>
5
+ <defs>
6
+ </defs>
7
+ <g transform="matrix(0.83 0 0 0.8 31.5 36)" id="6X9shhn5tjKNE9PTybgYf" >
8
+ <path style="stroke: rgb(252,0,51); stroke-width: 3; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(255,255,255); fill-opacity: 0; fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(0, 0)" d="M -19.8939 12.44496 L 19.8939 -12.44496 L 19.8939 12.44496" stroke-linecap="round" />
9
+ </g>
10
+ <g transform="matrix(1 0 0 1 48 26)" id="qfktuO63U17zxOoFBmSIk" >
11
+ <path style="stroke: rgb(23,172,60); stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(252,0,51); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-4, -4)" d="M 4 0 C 6.208 0 8 1.792 8 4 C 8 6.208 6.208 8 4 8 C 1.7919999999999998 8 0 6.208 0 4 C 0 1.7919999999999998 1.792 0 4 0 z" stroke-linecap="round" />
12
+ </g>
13
+ <g transform="matrix(1 0 0 1 48 45)" id="CoP4qh0-57aRlWWd5gWpq" >
14
+ <path style="stroke: rgb(23,172,60); stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(252,0,51); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-4, -4)" d="M 4 0 C 6.208 0 8 1.792 8 4 C 8 6.208 6.208 8 4 8 C 1.7919999999999998 8 0 6.208 0 4 C 0 1.7919999999999998 1.792 0 4 0 z" stroke-linecap="round" />
15
+ </g>
16
+ <g transform="matrix(1 0 0 1 16 45)" id="0AYtWnywiPmVyWgmd3Nax" >
17
+ <path style="stroke: rgb(23,172,60); stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(252,0,51); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-4, -4)" d="M 4 0 C 6.208 0 8 1.792 8 4 C 8 6.208 6.208 8 4 8 C 1.7919999999999998 8 0 6.208 0 4 C 0 1.7919999999999998 1.792 0 4 0 z" stroke-linecap="round" />
18
+ </g>
19
+ <g transform="matrix(1.01 0 0 1.02 111 35.5)" id="0CUp8y4TleogKJWzIB5ti" >
20
+ <path style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-115.71, -44.78)" d="M 72.39608287 59.952 L 72.39608287 59.952 Q 69.77208287 59.952 67.88608287 59.1525 Q 66.00008287 58.353 64.99558287 57.3075 Q 63.99108287 56.262 63.99108287 55.524 L 63.99108287 55.524 Q 63.99108287 55.196 64.17558287 54.827 Q 64.36008287 54.458 64.64708287 54.2325 Q 64.93408287 54.007 65.22108287 54.007 L 65.22108287 54.007 Q 65.63108287 54.007 66.06158287 54.5195 Q 66.49208287 55.032 67.20958287 55.7085 Q 67.92708287 56.385 69.11608287 56.8975 Q 70.30508287 57.41 72.23208287 57.41 L 72.23208287 57.41 Q 74.15908287 57.41 75.53258287 56.7745 Q 76.90608287 56.139 77.62358287 54.8885 Q 78.34108287 53.638 78.34108287 51.752 L 78.34108287 51.752 Q 78.34108287 49.784 77.60308287 48.5745 Q 76.86508287 47.365 75.65558287 46.6065 Q 74.44608287 45.848 73.01108287 45.2945 Q 71.57608287 44.741 70.12058287 44.1875 Q 68.66508287 43.634 67.45558287 42.7935 Q 66.24608287 41.953 65.48758287 40.5795 Q 64.72908287 39.206 64.72908287 37.074 L 64.72908287 37.074 Q 64.72908287 34.819 65.54908287 33.384 Q 66.36908287 31.949 67.66058287 31.129 Q 68.95208287 30.309 70.46908287 29.9605 Q 71.98608287 29.612 73.42108287 29.612 L 73.42108287 29.612 Q 74.56908287 29.612 75.77858287 29.7965 Q 76.98808287 29.981 78.01308287 30.309 Q 79.03808287 30.637 79.67358287 31.088 Q 80.30908287 31.539 80.30908287 32.113 L 80.30908287 32.113 Q 80.30908287 32.4 80.16558287 32.7485 Q 80.02208287 33.097 79.77608287 33.3635 Q 79.53008287 33.63 79.12008287 33.63 L 79.12008287 33.63 Q 78.75108287 33.63 78.09508287 33.2405 Q 77.43908287 32.851 76.31158287 32.4615 Q 75.18408287 32.072 73.38008287 32.072 L 73.38008287 32.072 Q 71.90408287 32.072 70.53058287 32.5025 Q 69.15708287 32.933 68.29608287 33.958 Q 67.43508287 34.983 67.43508287 36.828 L 67.43508287 36.828 Q 67.43508287 38.468 68.19358287 39.4725 Q 68.95208287 40.477 70.16158287 41.092 Q 71.37108287 41.707 72.80608287 42.2195 Q 74.24108287 42.732 75.69658287 43.3675 Q 77.15208287 44.003 78.36158287 44.9665 Q 79.57108287 45.93 80.30908287 47.488 Q 81.04708287 49.046 81.04708287 51.506 L 81.04708287 51.506 Q 81.04708287 54.417 79.94008287 56.2825 Q 78.83308287 58.148 76.88558287 59.05 Q 74.93808287 59.952 72.39608287 59.952 Z M 87.23808287 59.665 L 87.23808287 59.665 Q 86.70508287 59.665 86.29508287 59.3985 Q 85.88508287 59.132 85.88508287 58.599 L 85.88508287 58.599 L 85.88508287 30.678 Q 85.88508287 30.268 86.19258287 30.0015 Q 86.50008287 29.735 87.03308287 29.694 L 87.03308287 29.694 L 94.57708287 29.694 Q 96.95508287 29.694 98.88208287 30.555 Q 100.80908287 31.416 101.91608287 33.3225 Q 103.02308287 35.229 103.02308287 38.386 L 103.02308287 38.386 L 103.02308287 38.796 Q 103.02308287 41.994 101.89558287 43.9005 Q 100.76808287 45.807 98.82058287 46.668 Q 96.87308287 47.529 94.49508287 47.529 L 94.49508287 47.529 L 88.59108287 47.529 L 88.59108287 58.599 Q 88.59108287 59.132 88.16058287 59.3985 Q 87.73008287 59.665 87.23808287 59.665 Z M 88.59108287 32.195 L 88.59108287 45.192 L 94.49508287 45.192 Q 97.24208287 45.192 98.77958287 43.6545 Q 100.31708287 42.117 100.31708287 38.919 L 100.31708287 38.919 L 100.31708287 38.427 Q 100.31708287 35.229 98.77958287 33.712 Q 97.24208287 32.195 94.49508287 32.195 L 94.49508287 32.195 L 88.59108287 32.195 Z M 115.15908287 59.665 L 115.15908287 59.665 Q 114.66708287 59.665 114.23658287 59.3985 Q 113.80608287 59.132 113.80608287 58.599 L 113.80608287 58.599 L 113.80608287 48.185 Q 113.80608287 47.98 113.76508287 47.857 L 113.76508287 47.857 L 105.27808287 31.58 Q 105.15508287 31.334 105.11408287 31.1495 Q 105.07308287 30.965 105.07308287 30.842 L 105.07308287 30.842 Q 105.07308287 30.473 105.29858287 30.227 Q 105.52408287 29.981 105.87258287 29.8375 Q 106.22108287 29.694 106.54908287 29.694 L 106.54908287 29.694 Q 106.87708287 29.694 107.14358287 29.899 Q 107.41008287 30.104 107.61508287 30.514 L 107.61508287 30.514 L 115.15908287 45.479 L 122.74408287 30.514 Q 122.99008287 30.104 123.25658287 29.899 Q 123.52308287 29.694 123.81008287 29.694 L 123.81008287 29.694 Q 124.17908287 29.694 124.50708287 29.8375 Q 124.83508287 29.981 125.06058287 30.227 Q 125.28608287 30.473 125.28608287 30.842 L 125.28608287 30.842 Q 125.28608287 30.965 125.24508287 31.1495 Q 125.20408287 31.334 125.12208287 31.58 L 125.12208287 31.58 L 116.59408287 47.857 Q 116.51208287 47.98 116.51208287 48.185 L 116.51208287 48.185 L 116.51208287 58.599 Q 116.51208287 59.132 116.10208287 59.3985 Q 115.69208287 59.665 115.15908287 59.665 Z M 130.49308287 59.665 L 130.49308287 59.665 Q 129.96008287 59.665 129.55008287 59.3985 Q 129.14008287 59.132 129.14008287 58.599 L 129.14008287 58.599 L 129.14008287 30.678 Q 129.14008287 30.145 129.55008287 29.9195 Q 129.96008287 29.694 130.49308287 29.694 L 130.49308287 29.694 Q 130.98508287 29.694 131.41558287 29.9195 Q 131.84608287 30.145 131.84608287 30.678 L 131.84608287 30.678 L 131.84608287 45.192 L 143.69508287 30.104 Q 143.98208287 29.694 144.55608287 29.694 L 144.55608287 29.694 Q 144.88408287 29.694 145.23258287 29.899 Q 145.58108287 30.104 145.80658287 30.4115 Q 146.03208287 30.719 146.03208287 31.088 L 146.03208287 31.088 Q 146.03208287 31.211 145.99108287 31.3955 Q 145.95008287 31.58 145.82708287 31.703 L 145.82708287 31.703 L 137.01208287 42.65 L 147.09808287 57.82 Q 147.26208287 58.066 147.26208287 58.353 L 147.26208287 58.353 Q 147.26208287 58.722 147.03658287 59.0295 Q 146.81108287 59.337 146.46258287 59.5215 Q 146.11408287 59.706 145.70408287 59.706 L 145.70408287 59.706 Q 145.41708287 59.706 145.15058287 59.5625 Q 144.88408287 59.419 144.67908287 59.132 L 144.67908287 59.132 L 135.20808287 44.905 L 131.84608287 49.169 L 131.84608287 58.599 Q 131.84608287 59.132 131.41558287 59.3985 Q 130.98508287 59.665 130.49308287 59.665 Z M 166.40908287 59.665 L 151.81308287 59.665 Q 151.36208287 59.665 150.97258287 59.3985 Q 150.58308287 59.132 150.58308287 58.599 L 150.58308287 58.599 L 150.58308287 30.719 Q 150.58308287 30.227 150.97258287 29.9605 Q 151.36208287 29.694 151.81308287 29.694 L 151.81308287 29.694 L 166.40908287 29.694 Q 166.94208287 29.694 167.18808287 30.0835 Q 167.43408287 30.473 167.43408287 30.883 L 167.43408287 30.883 Q 167.43408287 31.416 167.16758287 31.8055 Q 166.90108287 32.195 166.40908287 32.195 L 166.40908287 32.195 L 153.28908287 32.195 L 153.28908287 43.47 L 159.72608287 43.47 Q 160.21808287 43.47 160.48458287 43.839 Q 160.75108287 44.208 160.75108287 44.7 L 160.75108287 44.7 Q 160.75108287 45.069 160.50508287 45.438 Q 160.25908287 45.807 159.72608287 45.807 L 159.72608287 45.807 L 153.28908287 45.807 L 153.28908287 57.164 L 166.40908287 57.164 Q 166.90108287 57.164 167.16758287 57.533 Q 167.43408287 57.902 167.43408287 58.435 L 167.43408287 58.435 Q 167.43408287 58.886 167.18808287 59.2755 Q 166.94208287 59.665 166.40908287 59.665 L 166.40908287 59.665 Z" stroke-linecap="round" />
21
+ </g>
22
+ </svg>
@@ -6,7 +6,7 @@ module Spyke
6
6
  recipe = RecipeWithDirty.new(title: 'Cheeseburger')
7
7
 
8
8
  # If @attributes is set on recipe ActiveModel::Dirty will crash
9
- assert_equal false, recipe.attribute_changed_in_place?(:title)
9
+ assert_equal({}, recipe.changes)
10
10
  end
11
11
  end
12
12
  end
@@ -18,8 +18,13 @@ module Spyke
18
18
  end
19
19
 
20
20
  def test_initializing_using_unpermitted_strong_params
21
- assert_raises ActionController::UnfilteredParameters do
22
- Ingredient.new(strong_params(name: 'Flour'))
21
+ if ActiveSupport::VERSION::MAJOR < 5
22
+ ingredient = Ingredient.new(strong_params(name: 'Flour'))
23
+ assert_equal({}, ingredient.attributes)
24
+ else
25
+ assert_raises ActionController::UnfilteredParameters do
26
+ Ingredient.new(strong_params(name: 'Flour'))
27
+ end
23
28
  end
24
29
  end
25
30
 
@@ -129,7 +134,7 @@ module Spyke
129
134
  end
130
135
 
131
136
  def test_converting_files_to_faraday_io
132
- Faraday::UploadIO.stubs(:new).with('/photo.jpg', 'image/jpeg').returns('UploadIO')
137
+ Faraday::Multipart::FilePart.stubs(:new).with('/photo.jpg', 'image/jpeg').returns('UploadIO')
133
138
  file = mock
134
139
  file.stubs(:path).returns('/photo.jpg')
135
140
  file.stubs(:content_type).returns('image/jpeg')
@@ -157,7 +162,6 @@ module Spyke
157
162
  end
158
163
 
159
164
  def test_rejecting_wrong_number_of_args
160
- skip 'wishlisted'
161
165
  stub_request(:any, /.*/)
162
166
  recipe = Recipe.new(description: 'Delicious')
163
167
  assert_raises ArgumentError do
@@ -70,7 +70,7 @@ module Spyke
70
70
 
71
71
  def test_multiple_apis_with_custom_fallback
72
72
  fallback_endpoint = stub_request(:get, 'http://sushi.com/recipes')
73
- primary_endpoint = stub_request(:get, 'http://sashimi.com/recipes').to_timeout
73
+ _primary_endpoint = stub_request(:get, 'http://sashimi.com/recipes').to_timeout
74
74
  OtherRecipe.all.to_a
75
75
  assert_requested fallback_endpoint
76
76
  end
@@ -7,6 +7,12 @@ module Spyke
7
7
  stub_request(:get, "http://sushi.com/recipes?published=true").to_timeout
8
8
  end
9
9
 
10
+ def test_find_without_fallback
11
+ assert_raises ConnectionError do
12
+ Recipe.find(1)
13
+ end
14
+ end
15
+
10
16
  def test_find_with_default_fallback
11
17
  assert_raises ResourceNotFound do
12
18
  Recipe.with_fallback.find(1)
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+
3
+ module Spyke
4
+ class ScopeRegistryTest < MiniTest::Test
5
+ def test_setting_and_fetching_values
6
+ ScopeRegistry.set_value_for('foo', 'bar', 1)
7
+
8
+ assert_equal 1, ScopeRegistry.value_for('foo', 'bar')
9
+ end
10
+ end
11
+ end
@@ -1,18 +1,21 @@
1
+ require 'multi_json'
2
+
1
3
  # Dummy api
2
- class JSONParser < Faraday::Response::Middleware
3
- def parse(body)
4
- json = MultiJson.load(body, symbolize_keys: true)
5
- {
4
+ class JSONParser < Faraday::Middleware
5
+ def on_complete(env)
6
+ json = MultiJson.load(env.body, symbolize_keys: true)
7
+ env.body = {
6
8
  data: json[:result],
7
9
  metadata: json[:metadata],
8
10
  errors: json[:errors]
9
11
  }
10
12
  rescue MultiJson::ParseError => exception
11
- { errors: { base: [ error: exception.message ] } }
13
+ env.body = { errors: { base: [ error: exception.message ] } }
12
14
  end
13
15
  end
14
16
 
15
17
  Spyke::Base.connection = Faraday.new(url: 'http://sushi.com') do |faraday|
18
+ faraday.request :multipart
16
19
  faraday.request :json
17
20
  faraday.use JSONParser
18
21
  faraday.adapter Faraday.default_adapter
data/test/test_helper.rb CHANGED
@@ -1,7 +1,10 @@
1
- # Coverage
2
- require 'coveralls'
3
- Coveralls.wear!
4
- SimpleCov.formatter = Coveralls::SimpleCov::Formatter
1
+ require 'simplecov'
2
+ require 'simplecov-lcov'
3
+ SimpleCov::Formatter::LcovFormatter.config do |c|
4
+ c.report_with_single_file = true
5
+ c.single_report_path = 'coverage/lcov.info'
6
+ end
7
+ SimpleCov.formatter = SimpleCov::Formatter::LcovFormatter
5
8
  SimpleCov.start do
6
9
  add_filter 'test'
7
10
  end
@@ -10,7 +13,6 @@ require 'spyke'
10
13
  require 'minitest/autorun'
11
14
  require 'minitest/reporters'
12
15
  require 'mocha/minitest'
13
- require 'multi_json'
14
16
  require 'pry'
15
17
 
16
18
  # Require support files
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spyke
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.1.1
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Balvig
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-16 00:00:00.000000000 Z
11
+ date: 2022-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -44,40 +44,34 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 0.9.0
47
+ version: 1.0.0
48
48
  - - "<"
49
49
  - !ruby/object:Gem::Version
50
- version: '2.0'
50
+ version: '3.0'
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
55
  - - ">="
56
56
  - !ruby/object:Gem::Version
57
- version: 0.9.0
57
+ version: 1.0.0
58
58
  - - "<"
59
59
  - !ruby/object:Gem::Version
60
- version: '2.0'
60
+ version: '3.0'
61
61
  - !ruby/object:Gem::Dependency
62
- name: faraday_middleware
62
+ name: faraday-multipart
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- version: 0.9.1
68
- - - "<"
65
+ - - "~>"
69
66
  - !ruby/object:Gem::Version
70
- version: '2.0'
67
+ version: '1.0'
71
68
  type: :runtime
72
69
  prerelease: false
73
70
  version_requirements: !ruby/object:Gem::Requirement
74
71
  requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- version: 0.9.1
78
- - - "<"
72
+ - - "~>"
79
73
  - !ruby/object:Gem::Version
80
- version: '2.0'
74
+ version: '1.0'
81
75
  - !ruby/object:Gem::Dependency
82
76
  name: addressable
83
77
  requirement: !ruby/object:Gem::Requirement
@@ -121,21 +115,21 @@ dependencies:
121
115
  - !ruby/object:Gem::Version
122
116
  version: '1.6'
123
117
  - !ruby/object:Gem::Dependency
124
- name: coveralls
118
+ name: minitest
125
119
  requirement: !ruby/object:Gem::Requirement
126
120
  requirements:
127
- - - "~>"
121
+ - - ">="
128
122
  - !ruby/object:Gem::Version
129
- version: '0.7'
123
+ version: '0'
130
124
  type: :development
131
125
  prerelease: false
132
126
  version_requirements: !ruby/object:Gem::Requirement
133
127
  requirements:
134
- - - "~>"
128
+ - - ">="
135
129
  - !ruby/object:Gem::Version
136
- version: '0.7'
130
+ version: '0'
137
131
  - !ruby/object:Gem::Dependency
138
- name: minitest
132
+ name: minitest-line
139
133
  requirement: !ruby/object:Gem::Requirement
140
134
  requirements:
141
135
  - - ">="
@@ -149,7 +143,7 @@ dependencies:
149
143
  - !ruby/object:Gem::Version
150
144
  version: '0'
151
145
  - !ruby/object:Gem::Dependency
152
- name: minitest-line
146
+ name: minitest-reporters
153
147
  requirement: !ruby/object:Gem::Requirement
154
148
  requirements:
155
149
  - - ">="
@@ -163,7 +157,7 @@ dependencies:
163
157
  - !ruby/object:Gem::Version
164
158
  version: '0'
165
159
  - !ruby/object:Gem::Dependency
166
- name: minitest-reporters
160
+ name: mocha
167
161
  requirement: !ruby/object:Gem::Requirement
168
162
  requirements:
169
163
  - - ">="
@@ -177,7 +171,7 @@ dependencies:
177
171
  - !ruby/object:Gem::Version
178
172
  version: '0'
179
173
  - !ruby/object:Gem::Dependency
180
- name: mocha
174
+ name: multi_json
181
175
  requirement: !ruby/object:Gem::Requirement
182
176
  requirements:
183
177
  - - ">="
@@ -191,7 +185,7 @@ dependencies:
191
185
  - !ruby/object:Gem::Version
192
186
  version: '0'
193
187
  - !ruby/object:Gem::Dependency
194
- name: multi_json
188
+ name: pry
195
189
  requirement: !ruby/object:Gem::Requirement
196
190
  requirements:
197
191
  - - ">="
@@ -205,7 +199,7 @@ dependencies:
205
199
  - !ruby/object:Gem::Version
206
200
  version: '0'
207
201
  - !ruby/object:Gem::Dependency
208
- name: pry
202
+ name: rake
209
203
  requirement: !ruby/object:Gem::Requirement
210
204
  requirements:
211
205
  - - ">="
@@ -219,7 +213,21 @@ dependencies:
219
213
  - !ruby/object:Gem::Version
220
214
  version: '0'
221
215
  - !ruby/object:Gem::Dependency
222
- name: rake
216
+ name: simplecov
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - ">="
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ type: :development
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: '0'
229
+ - !ruby/object:Gem::Dependency
230
+ name: simplecov-lcov
223
231
  requirement: !ruby/object:Gem::Requirement
224
232
  requirements:
225
233
  - - ">="
@@ -249,16 +257,18 @@ dependencies:
249
257
  description: Interact with REST services in an ActiveRecord-like manner
250
258
  email:
251
259
  - jens@balvig.com
252
- executables: []
260
+ executables:
261
+ - console
253
262
  extensions: []
254
263
  extra_rdoc_files: []
255
264
  files:
265
+ - ".circleci/config.yml"
256
266
  - ".gitignore"
257
- - ".travis.yml"
258
267
  - Gemfile
259
268
  - LICENSE.txt
260
269
  - README.md
261
270
  - Rakefile
271
+ - bin/console
262
272
  - lib/spyke.rb
263
273
  - lib/spyke/associations.rb
264
274
  - lib/spyke/associations/association.rb
@@ -286,6 +296,7 @@ files:
286
296
  - lib/spyke/scoping.rb
287
297
  - lib/spyke/version.rb
288
298
  - spyke.gemspec
299
+ - spyke.svg
289
300
  - test/activemodel_dirty_test.rb
290
301
  - test/associations_test.rb
291
302
  - test/attributes_test.rb
@@ -295,6 +306,7 @@ files:
295
306
  - test/fallbacks_test.rb
296
307
  - test/orm_test.rb
297
308
  - test/path_test.rb
309
+ - test/scope_registry_test.rb
298
310
  - test/scopes_test.rb
299
311
  - test/support/fixtures.rb
300
312
  - test/support/webmock.rb
@@ -332,6 +344,7 @@ test_files:
332
344
  - test/fallbacks_test.rb
333
345
  - test/orm_test.rb
334
346
  - test/path_test.rb
347
+ - test/scope_registry_test.rb
335
348
  - test/scopes_test.rb
336
349
  - test/support/fixtures.rb
337
350
  - test/support/webmock.rb
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- notifications:
2
- email: false
3
- rvm:
4
- - 2.6.6
5
- - 2.7.2
6
- - 3.0.0
7
- sudo: false