Giter VIP home page Giter VIP logo

patreon-ruby's Introduction

patreon-ruby

Interact with the Patreon API via OAuth.

Get the gem from RubyGems

Step 1. Get your client_id and client_secret

Visit the OAuth Documentation Page while logged in as a Patreon creator to register your client.

This will provide you with a client_id and a client_secret.

Step 2. Use this library

e.g. the example Sinatra app in this repo or the Rails route example below.


require 'patreon'

class OAuthController < ApplicationController
  def redirect
    oauth_client = Patreon::OAuth.new(client_id, client_secret)
    tokens = oauth_client.get_tokens(params[:code], redirect_uri)
    access_token = tokens['access_token']

    api_client = Patreon::API.new(access_token)
    user_response = api_client.fetch_user()
    # user_response uses [json-api-vanilla](https://github.com/trainline/json-api-vanilla) for easy usage
    @user = user_response.data
    # you can list all attributes and relationships with (@user.methods - Object.methods)
    @pledge = @user.pledges[0]
    # just like with @user, you can list all pledge attributes and relationships with (@pledge.methods - Object.methods)
    @pledge_amount = @pledge.amount_cents
  end
end

Step 3. (Optional) Customize your usage

Patreon::API instances have four methods:

  • fetch_user(includes=nil, fields=nil)
  • fetch_campaign(includes=nil, fields=nil)
  • fetch_campaign_and_patrons(includes=nil, fields=nil)
  • fetch_page_of_pledges(campaign_id, page_size, cursor=nil, includes=nil, fields=nil)

The includes and fields arguments to these methods specify the related resources and the resource attributes you want returned by our API, as per the JSON:API specification. The lists of valid includes and fields arguments are provided on Patreon::Schemas. For instance, if you wanted to request the total amount a patron has ever paid to your campaign, which is not included by default, you could do:

api_client = Patreon::API.new(patron_access_token)
patron_response = api_client.fetch_user(nil, {
  'pledge': Patreon::Schemas::Pledge.default_attributes + [Patreon::Schemas::Pledge::Attributes::TOTAL_HISTORICAL_AMOUNT_CENTS]
})

patreon-ruby's People

Contributors

21echoes avatar emosespatreon avatar evykassirer avatar joshbuddy avatar kakakikikeke-fork avatar neauoire avatar phildini avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

patreon-ruby's Issues

undefined method `pledges=' for nil:NilClass

After upgrading the Patreon gem to v0.3.0, performing the OAuth flow using the following code snippet throws an exception on the last line during the callback to my service. Downgrading the Patreon gem to v0.2.0 solves the error.

Initial sendover:

redirect_to("https://www.patreon.com/oauth2/authorize?response_type=code&client_id=#{ENV['PATREON_CLIENT_ID']}&redirect_uri=#{redirect_uri}")

Callback:

oauth_client = Patreon::OAuth.new(ENV['PATREON_CLIENT_ID'], ENV['PATREON_CLIENT_SECRET'])

tokens = oauth_client.get_tokens(params[:code], redirect_uri)
access_token = tokens['access_token']
refresh_token = tokens['refresh_token']

api_client = Patreon::API.new(access_token)
user_response = api_client.fetch_user() # raises exception
undefined method `pledges=' for nil:NilClass

app/controllers/patreon_users_controller.rb:16:in `in' # the user_response line

I don't see any patch notes so I'm unsure if this is an intentional change in how the gem should be used, or a bug.

I'm running Rails 5.1.4 on Ruby 2.4.2. Full trace is below. Thanks for any assistance!

json-api-vanilla (1.0.1) lib/json-api-vanilla/parser.rb:152:in `set_key'
json-api-vanilla (1.0.1) lib/json-api-vanilla/parser.rb:94:in `block (2 levels) in build'
json-api-vanilla (1.0.1) lib/json-api-vanilla/parser.rb:80:in `each'
json-api-vanilla (1.0.1) lib/json-api-vanilla/parser.rb:80:in `block in build'
json-api-vanilla (1.0.1) lib/json-api-vanilla/parser.rb:76:in `each'
json-api-vanilla (1.0.1) lib/json-api-vanilla/parser.rb:76:in `build'
json-api-vanilla (1.0.1) lib/json-api-vanilla/parser.rb:20:in `parse'
/usr/local/bundle/bundler/gems/patreon-ruby-0530a2fbb30f/lib/patreon/api.rb:39:in `get_json'
/usr/local/bundle/bundler/gems/patreon-ruby-0530a2fbb30f/lib/patreon/api.rb:13:in `fetch_user'
app/controllers/patreon_users_controller.rb:16:in `in'
actionpack (5.1.4) lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
actionpack (5.1.4) lib/abstract_controller/base.rb:186:in `process_action'
actionpack (5.1.4) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (5.1.4) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
activesupport (5.1.4) lib/active_support/callbacks.rb:131:in `run_callbacks'
actionpack (5.1.4) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (5.1.4) lib/action_controller/metal/rescue.rb:20:in `process_action'
actionpack (5.1.4) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
activesupport (5.1.4) lib/active_support/notifications.rb:166:in `block in instrument'
activesupport (5.1.4) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
activesupport (5.1.4) lib/active_support/notifications.rb:166:in `instrument'
actionpack (5.1.4) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (5.1.4) lib/action_controller/metal/params_wrapper.rb:252:in `process_action'
activerecord (5.1.4) lib/active_record/railties/controller_runtime.rb:22:in `process_action'
actionpack (5.1.4) lib/abstract_controller/base.rb:124:in `process'
actionview (5.1.4) lib/action_view/rendering.rb:30:in `process'
actionpack (5.1.4) lib/action_controller/metal.rb:189:in `dispatch'
actionpack (5.1.4) lib/action_controller/metal.rb:253:in `dispatch'
actionpack (5.1.4) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
actionpack (5.1.4) lib/action_dispatch/routing/route_set.rb:31:in `serve'
actionpack (5.1.4) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (5.1.4) lib/action_dispatch/journey/router.rb:33:in `each'
actionpack (5.1.4) lib/action_dispatch/journey/router.rb:33:in `serve'
actionpack (5.1.4) lib/action_dispatch/routing/route_set.rb:834:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
omniauth (1.7.1) lib/omniauth/strategy.rb:190:in `call!'
omniauth (1.7.1) lib/omniauth/strategy.rb:168:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
omniauth (1.7.1) lib/omniauth/builder.rb:63:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/rack/agent_hooks.rb:30:in `traced_call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/rack/browser_monitoring.rb:32:in `traced_call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
meta_request (0.4.3) lib/meta_request/middlewares/app_request_handler.rb:13:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
meta_request (0.4.3) lib/meta_request/middlewares/meta_request_handler.rb:13:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/etag.rb:25:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/conditional_get.rb:25:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/head.rb:12:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/session/abstract/id.rb:232:in `context'
rack (2.0.3) lib/rack/session/abstract/id.rb:226:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.1.4) lib/action_dispatch/middleware/cookies.rb:613:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
activerecord (5.1.4) lib/active_record/migration.rb:556:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.1.4) lib/action_dispatch/middleware/callbacks.rb:26:in `block in call'
activesupport (5.1.4) lib/active_support/callbacks.rb:97:in `run_callbacks'
actionpack (5.1.4) lib/action_dispatch/middleware/callbacks.rb:24:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.1.4) lib/action_dispatch/middleware/executor.rb:12:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
better_errors (2.4.0) lib/better_errors/middleware.rb:59:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.1.4) lib/action_dispatch/middleware/debug_exceptions.rb:59:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack-contrib (1.2.0) lib/rack/contrib/response_headers.rb:17:in `call'
meta_request (0.4.3) lib/meta_request/middlewares/headers.rb:16:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.1.4) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
railties (5.1.4) lib/rails/rack/logger.rb:36:in `call_app'
railties (5.1.4) lib/rails/rack/logger.rb:24:in `block in call'
activesupport (5.1.4) lib/active_support/tagged_logging.rb:69:in `block in tagged'
activesupport (5.1.4) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (5.1.4) lib/active_support/tagged_logging.rb:69:in `tagged'
railties (5.1.4) lib/rails/rack/logger.rb:24:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.1.4) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
request_store (1.3.2) lib/request_store/middleware.rb:9:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.1.4) lib/action_dispatch/middleware/request_id.rb:25:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/method_override.rb:22:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/runtime.rb:22:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
activesupport (5.1.4) lib/active_support/cache/strategy/local_cache_middleware.rb:27:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.1.4) lib/action_dispatch/middleware/executor.rb:12:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
actionpack (5.1.4) lib/action_dispatch/middleware/static.rb:125:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
rack (2.0.3) lib/rack/sendfile.rb:111:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
railties (5.1.4) lib/rails/engine.rb:522:in `call'
newrelic_rpm (4.5.0.337) lib/new_relic/agent/instrumentation/middleware_tracing.rb:92:in `call'
puma (3.10.0) lib/puma/configuration.rb:225:in `call'
puma (3.10.0) lib/puma/server.rb:605:in `handle_request'
puma (3.10.0) lib/puma/server.rb:437:in `process_client'
puma (3.10.0) lib/puma/server.rb:301:in `block in run'
puma (3.10.0) lib/puma/thread_pool.rb:120:in `block in spawn_thread'

Can't run test suite

patreon-ruby (master)$ rspec

An error occurred while loading ./spec/api_spec.rb.
Failure/Error:
  describe Patreon::API do
    before do
      @api = Patreon::API.new("some token")
    end
  
    describe "Patreon::API#fetch_user" do
      before(:all) do
        @response = File.read(File.expand_path("fixtures/current_user.json", __dir__))
      end

NameError:
  uninitialized constant Patreon::API
# ./spec/api_spec.rb:1:in `<top (required)>'

An error occurred while loading ./spec/util_spec.rb.
Failure/Error:
  describe Patreon::Utils::JSONAPI::URLUtil do
    describe "build_url" do
      it "should build a url" do
        url = Patreon::Utils::JSONAPI::URLUtil.build_url("/")
        assert_equal url, "/"
      end
  
      it "should build a url with a string includes" do
        url = Patreon::Utils::JSONAPI::URLUtil.build_url("/", "include")
        assert_equal url, "/?include=include"

NameError:
  uninitialized constant Patreon::Utils
# ./spec/util_spec.rb:1:in `<top (required)>'
No examples found.

NoMethodError on fetch_user() step

I am using this in a Rails application. I successfully handle the OAuth redirect and retrieve an access token. If I use this access token in a CURL request I get the correct response; however when I call

api_client = Patreon::API.new(access_token)
user_response = api_client.fetch_user()

I get the error: #<NoMethodError: undefined method `first_name=' for #User:0x007fc877d2cbd8

15:18:45 web.1 | NoMethodError - undefined methodfirst_name=' for #User:0x007fc87dad9240
15:18:45 web.1 | Did you mean? first_name:
15:18:45 web.1 | activemodel (3.2.22.5) lib/active_model/attribute_methods.rb:407:in method_missing' 15:18:45 web.1 | activerecord (3.2.22.5) lib/active_record/attribute_methods.rb:149:in method_missing'
15:18:45 web.1 | json-api-vanilla (1.0.1) lib/json-api-vanilla/parser.rb:152:in set_key' 15:18:45 web.1 | json-api-vanilla (1.0.1) lib/json-api-vanilla/parser.rb:66:in block (2 levels) in build'
15:18:45 web.1 | json-api-vanilla (1.0.1) lib/json-api-vanilla/parser.rb:65:in block in build' 15:18:45 web.1 | json-api-vanilla (1.0.1) lib/json-api-vanilla/parser.rb:59:in build'
15:18:45 web.1 | json-api-vanilla (1.0.1) lib/json-api-vanilla/parser.rb:20:in parse' 15:18:45 web.1 | patreon (0.5.0) lib/patreon/api.rb:53:in parse_json'
15:18:45 web.1 | patreon (0.5.0) lib/patreon/api.rb:33:in get_parse_json' 15:18:45 web.1 | patreon (0.5.0) lib/patreon/api.rb:8:in fetch_user'
15:18:45 web.1 | app/controllers/admin/integrations_controller.rb:24:in patreon_oauth' 15:18:45 web.1 | actionpack (3.2.22.5) lib/action_controller/metal/implicit_render.rb:4:in send_action'
15:18:45 web.1 | actionpack (3.2.22.5) lib/abstract_controller/base.rb:167:in process_action' 15:18:45 web.1 | actionpack (3.2.22.5) lib/action_controller/metal/rendering.rb:10:in process_action'
15:18:45 web.1 | actionpack (3.2.22.5) lib/abstract_controller/callbacks.rb:18:in block in process_action' 15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/callbacks.rb:536:in block in _run__3394448666547474360__process_action__4531161500479660945__callbacks'
15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/callbacks.rb:215:in block in _conditional_callback_around_48813' 15:18:45 web.1 | react-rails (2.4.4) lib/react/rails/controller_lifecycle.rb:31:in use_react_component_helper'
15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/callbacks.rb:214:in _conditional_callback_around_48813' 15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/callbacks.rb:458:in _run__3394448666547474360__process_action__4531161500479660945__callbacks'
15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/callbacks.rb:405:in __run_callback' 15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/callbacks.rb:385:in _run_process_action_callbacks'
15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/callbacks.rb:81:in run_callbacks' 15:18:45 web.1 | actionpack (3.2.22.5) lib/abstract_controller/callbacks.rb:17:in process_action'
15:18:45 web.1 | actionpack (3.2.22.5) lib/action_controller/metal/rescue.rb:29:in process_action' 15:18:45 web.1 | actionpack (3.2.22.5) lib/action_controller/metal/instrumentation.rb:30:in block in process_action'
15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/notifications.rb:123:in block in instrument' 15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/notifications/instrumenter.rb:20:in instrument'
15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/notifications.rb:123:in instrument' 15:18:45 web.1 | actionpack (3.2.22.5) lib/action_controller/metal/instrumentation.rb:29:in process_action'
15:18:45 web.1 | actionpack (3.2.22.5) lib/action_controller/metal/params_wrapper.rb:207:in process_action' 15:18:45 web.1 | activerecord (3.2.22.5) lib/active_record/railties/controller_runtime.rb:18:in process_action'
15:18:45 web.1 | actionpack (3.2.22.5) lib/abstract_controller/base.rb:121:in process' 15:18:45 web.1 | actionpack (3.2.22.5) lib/abstract_controller/rendering.rb:46:in process'
15:18:45 web.1 | actionpack (3.2.22.5) lib/action_controller/metal.rb:203:in dispatch' 15:18:45 web.1 | actionpack (3.2.22.5) lib/action_controller/metal/rack_delegation.rb:14:in dispatch'
15:18:45 web.1 | actionpack (3.2.22.5) lib/action_controller/metal.rb:246:in block in action' 15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/routing/route_set.rb:73:in dispatch'
15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/routing/route_set.rb:36:in call' 15:18:45 web.1 | journey (1.0.4) lib/journey/router.rb:68:in block in call'
15:18:45 web.1 | journey (1.0.4) lib/journey/router.rb:56:in call' 15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/routing/route_set.rb:608:in call'
15:18:45 web.1 | meta_request (0.4.3) lib/meta_request/middlewares/app_request_handler.rb:13:in call' 15:18:45 web.1 | meta_request (0.4.3) lib/meta_request/middlewares/meta_request_handler.rb:13:in call'
15:18:45 web.1 | bullet (5.4.3) lib/bullet/rack.rb:12:in call' 15:18:45 web.1 | () Users/wienerk/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/route_downcaser-e854b758a337/lib/route_downcaser/downcase_route_middleware.rb:21:in call'
15:18:45 web.1 | lib/middleware/cookie_tracking.rb:18:in call' 15:18:45 web.1 | lib/middleware/host_based_tld_length.rb:17:in call'
15:18:45 web.1 | lib/middleware/maintenance_sites.rb:14:in call' 15:18:45 web.1 | rack-iframe (0.0.3) lib/rack/iframe.rb:28:in call'
15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/middleware/best_standards_support.rb:17:in call' 15:18:45 web.1 | rack (1.4.7) lib/rack/etag.rb:23:in call'
15:18:45 web.1 | rack (1.4.7) lib/rack/conditionalget.rb:25:in call' 15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/middleware/head.rb:14:in call'
15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/middleware/params_parser.rb:21:in call' 15:18:45 web.1 | warden (1.2.7) lib/warden/manager.rb:36:in block in call'
15:18:45 web.1 | warden (1.2.7) lib/warden/manager.rb:35:in call' 15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/middleware/flash.rb:242:in call'
15:18:45 web.1 | rack (1.4.7) lib/rack/session/abstract/id.rb:210:in context' 15:18:45 web.1 | rack (1.4.7) lib/rack/session/abstract/id.rb:205:in call'
15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/middleware/cookies.rb:341:in call' 15:18:45 web.1 | activerecord (3.2.22.5) lib/active_record/query_cache.rb:64:in call'
15:18:45 web.1 | activerecord (3.2.22.5) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in call' 15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/middleware/callbacks.rb:28:in block in call'
15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/callbacks.rb:405:in _run__3756127200370713390__call__3957744422867323536__callbacks' 15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/callbacks.rb:405:in __run_callback'
15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/callbacks.rb:385:in _run_call_callbacks' 15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/callbacks.rb:81:in run_callbacks'
15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/middleware/callbacks.rb:27:in call' 15:18:45 web.1 | rails-dev-tweaks (1.2.0) lib/rails_dev_tweaks/granular_autoload/middleware.rb:36:in call'
15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/middleware/remote_ip.rb:31:in call' 15:18:45 web.1 | better_errors (2.1.1) lib/better_errors/middleware.rb:84:in protected_app_call'
15:18:45 web.1 | better_errors (2.1.1) lib/better_errors/middleware.rb:79:in better_errors_call' 15:18:45 web.1 | better_errors (2.1.1) lib/better_errors/middleware.rb:57:in call'
15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/middleware/debug_exceptions.rb:16:in call' 15:18:45 web.1 | rack-contrib (1.4.0) lib/rack/contrib/response_headers.rb:17:in call'
15:18:45 web.1 | meta_request (0.4.3) lib/meta_request/middlewares/headers.rb:16:in call' 15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/middleware/show_exceptions.rb:56:in call'
15:18:45 web.1 | railties (3.2.22.5) lib/rails/rack/logger.rb:32:in call_app' 15:18:45 web.1 | railties (3.2.22.5) lib/rails/rack/logger.rb:16:in block in call'
15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/tagged_logging.rb:22:in tagged' 15:18:45 web.1 | railties (3.2.22.5) lib/rails/rack/logger.rb:16:in call'
15:18:45 web.1 | quiet_assets (1.1.0) lib/quiet_assets.rb:27:in call_with_quiet_assets' 15:18:45 web.1 | request_store (1.3.2) lib/request_store/middleware.rb:9:in call'
15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/middleware/request_id.rb:22:in call' 15:18:45 web.1 | rack (1.4.7) lib/rack/methodoverride.rb:21:in call'
15:18:45 web.1 | rack (1.4.7) lib/rack/runtime.rb:17:in call' 15:18:45 web.1 | activesupport (3.2.22.5) lib/active_support/cache/strategy/local_cache.rb:72:in call'
15:18:45 web.1 | actionpack (3.2.22.5) lib/action_dispatch/middleware/static.rb:83:in call' 15:18:45 web.1 | () Users/wienerk/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/font_assets-fd695666a1b9/lib/font_assets/middleware.rb:21:in call'
15:18:45 web.1 | rack-cors (0.4.1) lib/rack/cors.rb:81:in call' 15:18:45 web.1 | honeybadger (3.1.2) lib/honeybadger/rack/error_notifier.rb:34:in block in call'
15:18:45 web.1 | honeybadger (3.1.2) lib/honeybadger/agent.rb:321:in with_rack_env' 15:18:45 web.1 | honeybadger (3.1.2) lib/honeybadger/rack/error_notifier.rb:31:in call'
15:18:45 web.1 | honeybadger (3.1.2) lib/honeybadger/rack/user_feedback.rb:31:in call' 15:18:45 web.1 | honeybadger (3.1.2) lib/honeybadger/rack/user_informer.rb:21:in call'
15:18:45 web.1 | railties (3.2.22.5) lib/rails/engine.rb:484:in call' 15:18:45 web.1 | railties (3.2.22.5) lib/rails/application.rb:231:in call'
15:18:45 web.1 | railties (3.2.22.5) lib/rails/railtie/configurable.rb:30:in method_missing' 15:18:45 web.1 | passenger (5.0.30) src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb:97:in process_request'
15:18:45 web.1 | passenger (5.0.30) src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:152:in accept_and_process_next_request' 15:18:45 web.1 | passenger (5.0.30) src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:113:in main_loop'
15:18:45 web.1 | passenger (5.0.30) src/ruby_supportlib/phusion_passenger/request_handler.rb:416:in block (3 levels) in start_threads' 15:18:45 web.1 | passenger (5.0.30) src/ruby_supportlib/phusion_passenger/utils.rb:113:in block in create_thread_and_abort_on_exception'
`

NoMethodError (undefined method `campaign=' for nil:NilClass)

Hi,

I am trying to fetch patrons but I am getting errors:

api_client = Patreon::API.new(ENV.fetch('PATREON_ACCESS_TOKEN'))
=> #<Patreon::API:0x0000558727862be0 @access_token="xxx">
irb(main):002:0> campaign_response = api_client.fetch_campaign
opening connection to www.patreon.com:443...
opened
starting SSL for www.patreon.com:443...
SSL established
<- "GET /api/oauth2/api/current_user/campaigns HTTP/1.1\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nAccept: */*\r\nUser-Agent: Patreon-Ruby, version 0.5.0, platform x86_64-pc-linux-gnu\r\nAuthorization: Bearer xxx\r\nConnection: close\r\nHost: www.patreon.com\r\n\r\n"
-> "HTTP/1.1 200 OK\r\n"
-> "Date: xxx\r\n"
-> "Content-Type: application/vnd.api+json\r\n"
-> "Transfer-Encoding: chunked\r\n"
-> "Connection: close\r\n"
-> "Set-Cookie: __cfduid=xxx; expires=Wed, XXX GMT; path=/; domain=.patreon.com; HttpOnly; Secure\r\n"
-> "Vary: Accept-Encoding\r\n"
-> "Cache-control: private\r\n"
-> "Set-Cookie: patreon_device_id=xxx; Domain=patreon.com; Expires=Mon, xxxx GMT; Max-Age=630720000; Path=/\r\n"
-> "X-Patreon-UUID: xxx\r\n"
-> "Content-Encoding: gzip\r\n"
-> "Strict-Transport-Security: max-age=2592000\r\n"
-> "X-Content-Type-Options: nosniff\r\n"
-> "Expect-CT: max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"\r\n"
-> "Server: cloudflare\r\n"
-> "CF-RAY:xxx\r\n"
-> "\r\n"
-> "ddf\r\n"
reading 3551 bytes...
-> "\x1F\x8B\b\x00\x00\x00\x00\x00\x00\x03\xE5Z\ts\xD4F\x16\xFE+\x9D\xA9\xDDMR\xEB\x99\xD1}\xCC\x12X\xC0\x06\x9B`\xB0\x19\x83qBj\xAA%\xB5F\x8Du\xA1ny\x18R\xFC\xF7}\xAF%\xCDm0&lm\xB2U>f\xFA|\xFD\xDE\xF7\xBD\xA3\xA5\xDF{\x11\x95\xB47\xFA\xF5\xF7\x1E\x95\xB2\xE2A-\x99\xE8\x8D\xE0\xDB\x15\xB4W\x932)d1\xA9\xAB\xB47\xEA%R\x96b4\x1C\x86\xBA6(\xA9\xACX\x91\xD7\x82Ua\x91K\x96\xCBAXdCs\xC8\xE6O\xCC\xA3\xB7\xC5\xFCx\xFF\x81?lG\xF53\x16q:,\x87!\xCDJ\xCA\xA7\xF9\xD005\xCD\xD0\x87\xA6a9\x86n\a~l\xC4\x16\xA3A\x10F\xBEah\x1Au\r\xDF\x8F\x02:\xD4\xEF\xC9\xE2\x92\xE5}\xC93\xF6\x93\xA1[\xB6\xAF;\x9E\xA6\xFD\xA3iM\xA8H~:9\x9F\xF8G\xE3\xD7\xFB\xE7'G\xE3jr\xFF\t\xB7\xDE_8\xE7\xD1\xFE\x93\x93W\x87V\xFC\xE4\xDD\xAB\xD7\xB3\xEC\xF2\xF4Y\xC9\xAD\x8B\xBF\x9B\xFB\xBD\xBD^X\\\xB1\xDB\x1F\xEC\xFD\xF3\xB3\xA3Y|\nK\xC1\xCFg\x0F\xE8\xF8\xA6\xC9B\xDF\xB7\x9D\xC8\xB4<\xC7\xF6\x9C\x98\x99N\xA0{N\xE4\x84\x81\xB9q@\xDD\xB65\xDD\xF36\x0ExJ\x1F\xF6\x8F\xCB\x0F\xDE\x87\xC7\xC7\xCF\x8B\xF9x\x16\x96\xC9\xE1\x91\x17\xD7/O_\x94\xF7_\xCF\xE9\xF4\"\b^Di>>x\xD9\x1E\xB0bT\xB2hB%\x9C\xCD\xD0t\xBB\xAFk}C?\xD3\xED\x91m\x8F\f\xFD\x9F\x9A6\xD2\xB4n /\xF2IX\xD49\f6\xEC\x95\xB6\x9Cf\f\xE6\v8\xA0\f\x93tNh\x1E\x91B&\xAC\"E\xC9r\"\x8A\xBA\n\x19\x11\xB2\x8EcX+\xE2\",\xAAh\x02zC\xF5\xF2\b\xE6Z\xB6i[pl\xCB0\\\xD7s\\\xC7h\x06\x96)\x9DOPu\xB0\xCD\xB4\xA0)\x00.\x86\xBFl\xAF\xC7h\x95\xF3|*&W\\\xF0\x80\xA7\\\xCEa\x9D\xB2\x0ER\x1E\xC2\\\x9E\xD1)\x9B\x88\x8C\xA6\xE9\x17\x9A\xAE\x00\xD3\x19\xCF\xF6\xEF\x8B\xA3<\xE4\xCF\xDF^h\xC7\x87\xDA\x7F\xCB\x80N8NN\xAF\x1C\xB3o\x9D\xBD\x7F5}\xF0\xF2\xC9\xD8\b\x0F\r\xD7\xFB\xC5\xBEJg\xE1\xC5\x81|\xE4\xBF\xD3\xC7\xC6\x81\xEE\xCE"
-> "\x1A\x036\xC7\xFCKb\x93\x8BI\x98\xD0\n\x8FW\xC6`\x7F\xB90\xFD\xA2'\x9A\xF0L\xC9,Y:_\xED\xCE`x\x82M\xB2\xAA\x9B\x96\\\xC4\xB3\xD5\x11eZW4]\xB4d\x94\xE7\x80\xA4\x88\x15\x13\x96\x05\f!\xD9[kmT\fm-\xD8\x9F\xD0\x9C\x1C\x16W\x140r\t\xADE\xCE&)\xCFY\x05]\xFB\x88o@6\xA0\x93\x00\t\xC8\x8C\xCEI\x11\x93\ac<UQK!\x81\x1F\xD0\t\xB8\x9Eg`\x99\t\xCD\x90T\x93\x10>\x03\xBE\xB5\xBD^\v\xF8\x8Ek:\xB6\x00\r\x80,\xED\xEE\xEA|\xB0Z\x99\xB2\ba^g\xBD\x91i:\xFE\xA2\xA5\x11w\xF8\xB6\xE0\xF90Y\x8A\xA9\xE8!\x92\x15\xC6\xBB}]\xEFk\x062\xDE\xF0G\xB6\xB9`<\xAC\x99\xD1\n9u'\xE2W@\xDEy\xCA~z\xD3\x93\xEC\xBD\xEC\xD3\x14\xC01\"(0\xAB\xFE\xF5\xA6w\xF7M\xFEF\xDEI\xCC\xBB\x87|\x8Fds\x82R\x12.\xC8`0\xB83\x84\xE67\xF9\x9D!,\x02\xFFW\xD5\xA6\xDC\xC4\xD1\xF7\x19\xF8\x87X\xCEh\xC5H\xC4\xAEX\n.\xA3\"`\xF0\x8C\x8CS\x18y\xC9\xE9\x1E\xA9\xF84\x91$/f$\xE5W\xA8W\x9C:+\xAAK\xFC\xCCsrR\xD1)\x18\x9A<\xFC\xC0\xC2\x84T\xACq\x03\x03\x02\e\a\xD5\xDD\xEE\xEFQ\x8E\xC2\x89\x12\xB7B\xA4\xAA\xCD\xA3\x02\xD7@?\xD5\xEF\xFCT'\x8EL\xA8$\tt\xC5u\n^m\xC6\xD3\x94d\xF4\x92\x919\f\x04IbF\x02&A\x05\x03\xF2`NP\xD7\xB8\x14lq\x82|\xA2EN\x80sY\x9D\x83k\xC2)\x04\xD7La\x82\x1A\xC5\xC8%\x9EG\xED\xD1u\xD6\xA2\xC5L\xA6\x0E\xB8\xE8\x9B\xD1\\\xE2\f\xA42\xCFk\xB68:l\x81\xA3\a\xEB\xE7\xBC\xB1\xC1\xAC\xBB\v\x9F\rv\xB2V\xECt\x87gS\"\xAA\x10\x16\xE8\xDCJEg\x83)\x97I\x1Dlz\x95\x0E`\xC3\xC5j\xC3\x8C\n\xD8i\xD9\xD0\xCFxX\x15\x01h\xE5rP\xE6S\x90\xA0\x15\x95e\xED\xA7\xC5P\x14\x02Z\x11?0E\x88>\xC4\x00\x19\x17\x15\xE8\xA4,\e\x9DT,\xE3y$\x94ndA$\xDAD\xAD-\xC8,\x81\x80\xD3\xA9g\x06\xE2\xA2\r\xCA\x1A\x8D\xB4\xAA\"\xB0W\xC4bZ\xA7r\x8FpX\xB0\xCE\x05\xE2H\x19VV\xB4\ta\")f\xA2\xDD\f09\x83\x7F`1\xC0h5'\xBA\x06\xE0\x82\x0EL\x82\xF6\x1A\xA9@`\x15\xEE@VbhD0\xD0Q\x04\x9D\xA8*\xDA`\x03\\\tU\xFD+\xEA\xD8\x00\xE9\x81Z\xDE\xD4\xC8bq\x90\xAF\x91\xA4\x15`\xD7zi\x91OAD\xBB\x9D\xD5hc\x13\x16_\n\x8E\xCE\x91\x81\xE7Z\x83\xC7\x1985h[A7\xB8\xBE\xCB\xB4hhy\x06Z\x87\x85\b\r\x95\xFF\x1A\xBC\xA9!K\xD3ps\xF5\v\xA6=\xA6\x11#\x94\x88\xB0\xE2\xA5\xBCG\xCE+\x9C\x90CK\x80k\x94\x85\x80\xC6G07\x82&\xC0\x1A\xB0\x8F\xC8Z\x16\x15\xA7\xE9=2N\x90)\xA0\x13e\\\xB9%\nd\x1D\x8C\x80F\xDE\xD6B\x12\x96C~\t\x98\x00\xEB(\xB3\x81\x9B&\f\x1C>\x81\x90\x04z\x83-\xBES`[Hws\xE5\xC0\xAEc\x16\xB6z\x81\xA6[\x11\xA6Y\xA4c\v\xE0{H\x85`R\fU\\\x17\xC3@D\x00\xA3\x961Kv6\xD3\x10p3\x16\b\x0E\xF6V\xCAh\xE8\x04\x90\x88\x04\xCF \x10(\xCD\xC0\xC0\xBAj\x0E\t\xBF\xA8\xA1\xFB\x11\xA4L\xA0M&\x94\xBD\xEE\xE79(\"d\x18\x8A\xC4\x80\xA8\xA18\xB1b1\xAB\x04\xF2\v\xBF\xC54\xE3\xA9\x8Ac\xCF\xC1?S\xE5\xC3\xC6s\x10;\x839/:\xF7\x8CL@\xFD\xA3\x89\xE8\xFA6tu\e\x85YX\bO\xB2G\x1EU\x8C\xA9\x0F\xCF\x98T\xFF\x8Fy\x94\xE3\x92\xB81\xCE-\xE31\xCB\x05\e\xDC\x12\xC7\xD94\xDApo\xD0BT\x18\x16-\e\xA3(e\x19\xCD\xFB\x8D\xBD\xFA\x11+\xD3\xA2\xF5\xF8\x14\xA0\x97\xC1\x81C\x8AA \xA8y\x1A5~\xE2\xB8\x9B\xD5\xE0V\tZ\x8B\x04\xB1\tJSC\xA6I\xBFDC\x02\x1F\xC1\xE0\t\xF9\x016\xA3\xF9\xBCM\x8E\xDBF\xD0\xA9\x1A\x1C&\x05\x0F\xD9\x8F\xB7w\xE6\xC7<\xA7\xA3\xD1\xB8\x06\x03)\xD5o\x9E\xFA,\x01\xC4\xC0\x0F%\xCB1\xE4\x87\xB2*B&\x84r+U\x91\x12\xA1\xAC\xFA#\x99U\x80G\f\xC5JA9\xDD\xE1M M\x00\xCF\x97_\x8A\xD5\xA4\xA9m\xC9\xC4\x14\xBE\x1FrB\xA7\xE0\xAC\xBAx\x06=jAu\xE0&W\xF9\x8Et\xEC;\x027v\x05QN\xD5\x15\eAY\xE5\n\x80Ie\x04\x8C\xC9\x8D\v\x00\xFB\x04\xE0g\xB3.\x12\xABqmP\x1E(\xBC\x9C\xA4\x8C\x02\xE11:+o\x81\xD5G-\x04\xD4-j,\xC4\xE3E,\x9E\xB5\xF1\xF6{h\xE6\x10R\xC0\x8A\x821\x92\x83\xD2\x97BB\x06\xB3\xF0\x16\xA8\b\xE5\xDD\xC8\xBA6VR\xC6\x1CR\x87\xBD\xDEz\x82>\x9B\xCD\xBA\x04}\xCD\x1D\xF4>Bj\x8AZl\xD2nX\xAFb\xA9*\xB1D\xC2KUk+\xDD\x14\x15~l\xAA\xF1\xDF\xDB\x19\x96\x059\xBA\x87\"\xCCK\xCC\x10\xD1\xE5\xE0z\xE8\x99\xD5L\xB5\x94\xB2\xD1ub\xD0\x92\x0Fq\xDA\xB0[\xEC#\xCCo\x8B\xAE\xDF\x97\xC5\xBF\xDAO\xD7\f\xD7\xD1\xF4\xE5~8\xAE\xF7\xF1\xB7\x8F(3$O\xD1\x8E9\xFD\x95\xE1\xCD \x10\xB0\xED\xD3\xAE\xEF2tCs\x9DO\xCCm\x06\xD8\x9F\x19\xE0}r\x80n\xFB\x8E\xF7\xC9\x01\x8EnY\x9F\e\xE0l\x0F\xF8\r\x95\xD8"
-> "\xB6ue\x15\xB4\x82\xA1\xF30\xAD#4\xC8\xF6\x85J\x00U\x02\x16\xD4\xDByq\x9FLk.)r\x87\xCE\xD5\xF7\xB2`\x12\x12\x06dN\xD5\xA20\xA49\x14\xD7\xAC\xADy\x1A\x04\xB6\x95\xFEz\x99\xAF\xF9#\xD3\x1A\x19\xDE\"\xE9os\xA2\xA6\xF2\xA8\xE6\xF0?b\xDD\n]\xD9\xDE\xD4\xEB\x80O\xC7\xD7L\xCD\xF1}\xC7\x82?.\xCC\x06_\xC8\x11\xE7*A\x19\x88*\xAA\xFE=\xC5&D\x17t\xC74dAQ\\v\vv\xDF\xD5\x8Am\x13\xAF\x84\x9C,K,\x9C\x05\x1D\x93\xDDE\xD7\x94a^\xA6*&\x88\xE7PN\t\x01\x99_\xB4\xA8\xFAnY\e\xEF\xBE\x90Ze\xC6\xD0v\xA9\xAF\e\xAEO-[\xB3,O\x0F|\xDB\xB0\xA1\x85\xDA\xA1e\xD8^|\x93\xDB\xA8P\x7F\xEA\x9B?\xBF\xE6\x8F\xDF\xBFv\xC4}3\xE1\xDE\xC5\xC5\x83wW??>\xC9\x1FO}\xAD\x9E=|\xFE\xF0\x85\x93N\x9Fj\xC7\x8B\x828b\xE0\xAF\xD0\x8A\xCBBV)}\x82\xE5f\xCC\xD7{\xF2\xFAr\xBDA\xD4\xA2D\x95-\eS\xBAT\xF7\x8AbE\x11B\xAE\x05\xD6\xCFs\x16*\xFF\xA3\xD8\xCC\xAE8\x14\"\xB4\x92\e\x90\xC0N\xF8P\"z\x7F\xEDM1B\n4\x8F\xFA0@\xCF\x8B\xD2G\xA0h\x1E\xCF{\xBF\xB5\xEE\xB0\xF5\x8Cbq\x05\xB4\r\xA9\x8F\xDB\xA0\xE1P(\xD0iE\xB3\xAE\xA1bQ\xC4\x17\x12\x89\xB2P\x9B\xB4_%\xE4Ea\xB2\xFAM\"`\x9A\xAF\xE0\xE9e\x1D\xB4\xF8F\x96&u\x16\xFC\x85\xF0r\xCD\xE1\x91E+\xB6\xBEah\xDA\xEB\xC1\x87\xE6\x8Em\xA5mS\x85\e\xB1h;|u\x1Ep+~u\x11o\xCBU~q\b\xEB\xA6\x8A\xF6\xF6\n\xC2\xD8\xC7\xCD\xB0\xB8\xE5q\xB3\xE6\xAA\x05<\xC9\xD6e\xCC\xEA\x1Di\v{\xD6\x94.p2X\xF2\xA0-,\xD4y\xB3\xA60S\x13+\xF6\xAE\xE6\x15\x03\xDE\xC1\xF1K\xD5\xDA\xD2n\x13\xFF)\xCF:\bwJ\xBC&X\xEE\x16[\xDF\x14[\xFF\xBC\xD8'\xEA\x8EI\x90\xE7y:\xFFcE\xDF\x1D\xCB\xAF\x91\\\xDBR\xB9j\xDA\xBC\x98\xEE\xAE\xA94\x0F\xFA!b\r\\\xC35=m%p\xAD\x9E\xEDHe\xD4M6\x89\xA9~s[T\xA7\xEBy\x1D\x97bq\xA3\x12u1\x16\xCB\x93\xB6d]\xB9\xAA\x86\xBC\x98\x81\x97\x12\xDD\xD1\x81\xE3\xDB\xD2\xD9\xEA\xDA\xDC\x19i\xDE\xC0C\xE49\v\xE9V\"Q3\x7F\xE3\x82\x0F\x1A\xA0\xE8\xED\xBEj+\xF7t],\xBB\xEE\xE2nuO\xCDs\xCD\xA5FV\f\xDA9\xCA\xEBl*\xB9L\xD5\xAD\"\xA8J\x11\x04l\x9B\xAF\xEF\xB8\x9A\xC6\xAE\xDF*\x0E\xC3\x84\x85\x97\xE0\a\xEEU<\xFAi\x99\xAC]\x87\x8E\xE5\x88\xFF=\xEF\xF0M\xE0j\x8E\fs`\xFB>lw\x03\xB8\xB6\xA5\xFD6b\xD5\xC5\xA3\xA8\x9B\xBB\x0F\x88\x81s\x81\xB7Vh\xE0\xDB\xC3\x15p\xA3\x8F\f}\xE0\x83t\xF6N\xB8~Q \xD4v\x06\xC2F\xA9\xC36K\x1F\x1A\xAEa\x85\xA1g\xFA\xA6\xC3\xAC(\xC4\x87w\x81\xAE{\xBE\xEDQ\xDFd6\xBBI(|\xFE\xF4\xAC`\xFEd\x7Fn\xF6\x83\xF3\x93\xF1\x87\x0F^\x15\x18\x96Y\xB1\x87\xF4\x80\x8E\x1F\xA5\xFD\x93\xB7\xAF\xAE\xD89}:=hB\xE1:\xDF\xB4\xAF\xE2\xDBBi\xF8\xA0J\xFF\x1A\xBE\xB5\xB6\x06\xECD\x7F\x00\xE9\xEC\xCF\x92\xCE\xFE\xBF!\x9D\x89Nq\xE0\x9A\x96o\xBB7 \xDD\xCAE\xE75\xB1\"+\xD4\xAD\x96\xE4a\xAA\xEE{g\x8C\xC9\xE6^+g3\x91\xAA\v\a\xF1\x95D4\xED\x81k\x9B\xBE\xE6\xFF\x17\x88\xE8\xD9C\xD3\xF1Y\xC0\\\xCF2\xE3\xD8\xB2\xA3\xC8\xD3Y\xE4\x99V\x1Ci\xB6f[\x81u\x13\"\xDAo\x8F\x0F?\xD4W\xC6\\\xCF\xF9<\xD0\xCF\\\xF7\x15\x9F\xE8\xC7\xD6\xD4\x96\xEE\xCC\x1D\x1F\x8B\x97\xCF~>}\xD5\x7F9~w\xFF\e\x11\x11\x95f\xEA\x96\xFFU\x81o\xD5\xFE\x7F\f\e\xBD\xCF\xB2\xD1\xFB\xEB\xB3Q\xEB\x9B\xFA\x19\xA4k\xBA?2\xFC\x81o[\xAE\xAD\xDF\x80\x8D\xEB\xEF\x11l\xDF\xC7]\x9B\xB7}\x82~\xBF\xF6,\xDBvM\xC34,\xD7p<\xC7\xF6m\r+\xD1\rBz}\xCD\x01x\x9D\xE9\xD6H3F\x86;\xF0|\xCF\xD4\xF5oMHu\xFB4\f\xAD8\xB6#+\xA0q\xACY\xA6f\xD2\xD01-\b\x8EA\xA4\a\xAE\x17\xDF\x88\x90\xEE\xC5\xC9\xF9\x8B\xE4\xC5\xF3_\xC6\xD31\xF3-\xED\xFD\xF4\xD8:?\x7F,\x1F\x9F\x16\x8F\xC7\xF3\xF9\xBC\xA8\xE8\xBB\xD3\x0F\x8F\xF6'\a\xC5.B\xEA\xFEm\x18\xB9\xAD5\x885\xBE\xF35\x8C\\b\xE0\xAB\x13\xD2\xEEj\xEFz6v#\xFE\x84l\xB4\xB7\xD9h\x7F\x92\x8D\xE6HsG\xB6>\xD0,\xCBt\xACk\xD88\xAE\xCB\xB2\xA8\xE4\xD6\x05|\x00\x81\x10oq\xA0\xDA\x8D\xF0q\xE9\x8B\x83\xFB\xFB\xC7\a\xCDS$\xBC\xB3$\xEAa\xC7\x80<]\xBBT\xE7aB\xCA\xAAx\xCBB\xD9FVE\xF5\x96\xD1\ek\xDE2\x86\x1Ag\xE0dt\x03\x0E?\xF0MOwwRvW\xED\xF5\xC9\x10\xD4\x82r\x17\xF2n\x83\xE9F\xAB;\xE1|\x93\x93\xDC\b\xEC\xED5\xF5'\xC0\xDE\x8E\xF8\x13\x82\x1D\xE2\xCC\xAE\xD8\xF3\x19\xB8C6\xE8\x0F4W\xB3\xDD\xEBR\xC1\xF3]\xA0,)\x12 V\xCF\x8C\x96\xDE(,\xD4k\x1A\x90\xEC\xDD#\x17\xF8fF\xF3\x04\x8A\xD0 U\x13\xAF\n\xC9\xF0\xAD\f\x9E\xA1\xA9\xF1\xB5\x8D\x88\x85\x1C\x9F65\xD9\xA2\xA4\xE9%Q\xF7\xFB\x988\x92\x18\xC4\x86\x92\xAEy\x93a+\xEB\x1C|2\x94Y"
-> "XCy\x96\rq\xC0\xF9l(\xB3\x80\xF1\xA6\xA3\xAD\xA8\xE0[\x852|\f2\f5;0\xA0\"\xA31\x8D\xAC\xD8\xD2ih;\xA1\xED\x05\x8E\e:\xD4r\xCD\x9B\x84\xB2w\xFB\xAF\x02\xDB\x1C\xF3\xBA?\xB9x+\xA6\xBF\x9C\xCA\x17/\x9F\\\x1D\xF6_\xCAG\xD9\xF1\xFC\xEC(a\x0F\x9E=}\xECX\xEF\xD4\xEBy[\xA1\xCC\xFC\xFAH\x86J\x83\xE0\xA0\xED,\xF2\xDC/\vcK\xE0|]0k\x9F2\xAD\xF2[\xD7\xD6\xD9\xED\xFC\x19\xD9\xDD\xF1\x19@\xA0\b]\xE0\v\f\x88\xE7\x12p\b]\x00\xD6\xDE\xC8\xBA\xA6\xE83\xB43C\eY\xDE\xE8\xDA\xFC\xF2\x1C_\vR\xCF\x8F!\x18\xFD\r6!\xF84M\xBDF\xB7G\x8E\xBE_'1\xBE>D\xF0U\x91\b_\x04\"P\xEB\xE1W|\xFBA\xBD@\xB6\xF5N\xEB\x1E\xA1\x11\xBE\xD0\xB7\xA4\xF3\xF2\xCD\xAD-N\xB7\xCF\xE8\x94$k\xE6\xEF0\xB3x\n|\xED3\xD6\xFF\x00\\{\x80z\x8A-\x00\x00"
read 3551 bytes
reading 2 bytes...
-> "\r\n"
read 2 bytes
-> "0\r\n"
-> "\r\n"
Conn close
Traceback (most recent call last):
        1: from (irb):2
NoMethodError (undefined method `campaign=' for nil:NilClass)

when I call it within a background job, I see this error:

undefined method `campaign=' for nil:NilClass
/app/vendor/bundle/ruby/2.5.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:152:in `set_key'
/app/vendor/bundle/ruby/2.5.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:94:in `block (2 levels) in build'
/app/vendor/bundle/ruby/2.5.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:80:in `each'
/app/vendor/bundle/ruby/2.5.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:80:in `block in build'
/app/vendor/bundle/ruby/2.5.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:76:in `each'
/app/vendor/bundle/ruby/2.5.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:76:in `build'
/app/vendor/bundle/ruby/2.5.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:20:in `parse'
/app/vendor/bundle/ruby/2.5.0/gems/patreon-0.5.0/lib/patreon/api.rb:53:in `parse_json'
/app/vendor/bundle/ruby/2.5.0/gems/patreon-0.5.0/lib/patreon/api.rb:33:in `get_parse_json'
/app/vendor/bundle/ruby/2.5.0/gems/patreon-0.5.0/lib/patreon/api.rb:12:in `fetch_campaign'
/app/app/services/patreon/get_patrons_service.rb:7:in `perform'
/app/app/jobs/set_patreon_contributors_job.rb:4:in `perform'
/app/vendor/bundle/ruby/2.5.0/gems/activejob-5.2.2/lib/active_job/execution.rb:39:in `block in perform_now'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb:109:in `block in run_callbacks'
/app/vendor/bundle/ruby/2.5.0/gems/i18n-1.5.3/lib/i18n.rb:284:in `with_locale'
/app/vendor/bundle/ruby/2.5.0/gems/activejob-5.2.2/lib/active_job/translation.rb:9:in `block (2 levels) in <module:Translation>'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb:118:in `instance_exec'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb:118:in `block in run_callbacks'
/app/vendor/bundle/ruby/2.5.0/gems/activejob-5.2.2/lib/active_job/logging.rb:26:in `block (4 levels) in <module:Logging>'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/notifications.rb:168:in `block in instrument'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/notifications.rb:168:in `instrument'
/app/vendor/bundle/ruby/2.5.0/gems/activejob-5.2.2/lib/active_job/logging.rb:25:in `block (3 levels) in <module:Logging>'
/app/vendor/bundle/ruby/2.5.0/gems/activejob-5.2.2/lib/active_job/logging.rb:46:in `block in tag_logger'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/tagged_logging.rb:71:in `block in tagged'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/tagged_logging.rb:28:in `tagged'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/tagged_logging.rb:71:in `tagged'
/app/vendor/bundle/ruby/2.5.0/gems/activejob-5.2.2/lib/active_job/logging.rb:46:in `tag_logger'
/app/vendor/bundle/ruby/2.5.0/gems/activejob-5.2.2/lib/active_job/logging.rb:22:in `block (2 levels) in <module:Logging>'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb:118:in `instance_exec'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb:118:in `block in run_callbacks'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb:136:in `run_callbacks'
/app/vendor/bundle/ruby/2.5.0/gems/activejob-5.2.2/lib/active_job/execution.rb:38:in `perform_now'
/app/vendor/bundle/ruby/2.5.0/gems/activejob-5.2.2/lib/active_job/execution.rb:24:in `block in execute'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb:109:in `block in run_callbacks'
/app/vendor/bundle/ruby/2.5.0/gems/activejob-5.2.2/lib/active_job/railtie.rb:28:in `block (4 levels) in <class:Railtie>'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/execution_wrapper.rb:87:in `wrap'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/reloader.rb:73:in `block in wrap'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/execution_wrapper.rb:87:in `wrap'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/reloader.rb:72:in `wrap'
/app/vendor/bundle/ruby/2.5.0/gems/activejob-5.2.2/lib/active_job/railtie.rb:27:in `block (3 levels) in <class:Railtie>'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb:118:in `instance_exec'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb:118:in `block in run_callbacks'
/app/vendor/bundle/ruby/2.5.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb:136:in `run_callbacks'
/app/vendor/bundle/ruby/2.5.0/gems/activejob-5.2.2/lib/active_job/execution.rb:22:in `execute'
/app/vendor/bundle/ruby/2.5.0/gems/activejob-5.2.2/lib/active_job/queue_adapters/delayed_job_adapter.rb:42:in `perform'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/backend/base.rb:81:in `block in invoke_job'
/app/vendor/bundle/ruby/2.5.0/gems/rollbar-2.18.2/lib/rollbar/plugins/delayed_job/plugin.rb:39:in `block in invoke_job_callback'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:79:in `block (2 levels) in add'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:61:in `block in initialize'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:79:in `block in add'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:66:in `execute'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:40:in `run_callbacks'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/backend/base.rb:78:in `invoke_job'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:230:in `block (2 levels) in run'
/app/vendor/ruby-2.5.3/lib/ruby/2.5.0/timeout.rb:93:in `block in timeout'
/app/vendor/ruby-2.5.3/lib/ruby/2.5.0/timeout.rb:103:in `timeout'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:230:in `block in run'
/app/vendor/ruby-2.5.3/lib/ruby/2.5.0/benchmark.rb:308:in `realtime'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:229:in `run'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:312:in `block in reserve_and_run_one_job'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:61:in `block in initialize'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:66:in `execute'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:40:in `run_callbacks'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:312:in `reserve_and_run_one_job'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:213:in `block in work_off'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:212:in `times'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:212:in `work_off'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:175:in `block (4 levels) in start'
/app/vendor/ruby-2.5.3/lib/ruby/2.5.0/benchmark.rb:308:in `realtime'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:174:in `block (3 levels) in start'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:61:in `block in initialize'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:66:in `execute'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:40:in `run_callbacks'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:173:in `block (2 levels) in start'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:172:in `loop'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:172:in `block in start'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/plugins/clear_locks.rb:7:in `block (2 levels) in <class:ClearLocks>'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:79:in `block (2 levels) in add'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:61:in `block in initialize'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:79:in `block in add'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:66:in `execute'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/lifecycle.rb:40:in `run_callbacks'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/worker.rb:171:in `start'
/app/vendor/bundle/ruby/2.5.0/gems/delayed_job-4.1.5/lib/delayed/tasks.rb:9:in `block (2 levels) in <main>'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/task.rb:273:in `block in execute'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/task.rb:273:in `each'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/task.rb:273:in `execute'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/task.rb:214:in `block in invoke_with_call_chain'
/app/vendor/ruby-2.5.3/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/task.rb:194:in `invoke_with_call_chain'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/task.rb:183:in `invoke'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/application.rb:160:in `invoke_task'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/application.rb:116:in `each'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/application.rb:116:in `block in top_level'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/application.rb:125:in `run_with_threads'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/application.rb:110:in `top_level'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/application.rb:83:in `block in run'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/application.rb:186:in `standard_exception_handling'
/app/vendor/bundle/ruby/2.5.0/gems/rake-12.3.2/lib/rake/application.rb:80:in `run'
/app/bin/rake:9:in `<main>'

Namespace conflict with "User" model.

I catch an error that I can't solve. Why Your api call does not works after active record call?

require 'patreon'
require File.expand_path('../../config/environment',  __FILE__)
@api_client = Patreon::API.new("key")


def check_and_create(message, bot)
  if !User.exists?(telegram_id: 1)
    User.create(:telegram_id => 1, :first_name => "message.from.first_name")
    return User.last
  else
    return User.where(telegram_id: 1).first
  end
end

#block works
patron_response = @api_client.fetch_campaign_and_patrons()
p patron_response.data[0].pledges[2].patron.email
p patron_response.data[0].pledges[2].reward.id

user = check_and_create(nil, nil)

#block does not work
patron_response = @api_client.fetch_campaign_and_patrons()
p patron_response.data[0].pledges[2].patron.email
p patron_response.data[0].pledges[2].reward.id

The error looks like:

/Library/Ruby/Gems/2.3.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:152:in `set_key': undefined method `campaign=' for nil:NilClass (NoMethodError)
	from /Library/Ruby/Gems/2.3.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:94:in `block (2 levels) in build'
	from /Library/Ruby/Gems/2.3.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:80:in `each'
	from /Library/Ruby/Gems/2.3.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:80:in `block in build'
	from /Library/Ruby/Gems/2.3.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:76:in `each'
	from /Library/Ruby/Gems/2.3.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:76:in `build'
	from /Library/Ruby/Gems/2.3.0/gems/json-api-vanilla-1.0.1/lib/json-api-vanilla/parser.rb:20:in `parse'
	from /Library/Ruby/Gems/2.3.0/gems/patreon-0.5.0/lib/patreon/api.rb:53:in `parse_json'
	from /Library/Ruby/Gems/2.3.0/gems/patreon-0.5.0/lib/patreon/api.rb:33:in `get_parse_json'
	from /Library/Ruby/Gems/2.3.0/gems/patreon-0.5.0/lib/patreon/api.rb:12:in `fetch_campaign'
	from /Library/Ruby/Gems/2.3.0/gems/patreon-0.5.0/lib/patreon/api.rb:18:in `fetch_campaign_and_patrons'
	from bin/untitled.rb:21:in `<main>'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.