Code Monkey home page Code Monkey logo

Comments (1)

cbisnett avatar cbisnett commented on July 28, 2024

I thought this was possible but after looking at the code and playing around with a few things I found it's only possible with some modifications. The problem boils down to the calls to generate_url() from the HTTP call methods such as get_json() don't pass in any options, instead they pass everything they received as parameters. This means that there is no way to pass any options to generate_url() from the top level functions such as Hubspot::Company.all().

I think the proper way to fix this is to modify the arguments lists of get_json, post_json, put_json, and delete_json to support passing the path, parameters, and options (eg def get_json(path, params, opts={})). Once this is done, the callers of these functions need to be updated to pass the URL parameters as the second argument and any options as the third argument. So Hubspot::Company.find_by_id would change from this:

def find_by_id(id)
  path = GET_COMPANY_BY_ID_PATH
  params = { company_id: id }
  raise Hubspot::InvalidParams, 'expecting Integer parameter' unless id.try(:is_a?, Integer)
  response = Hubspot::Connection.get_json(path, params)
  new(response)
end

to this

def find_by_id(id, opts={})
  path = GET_COMPANY_BY_ID_PATH
  params = { company_id: id }
  raise Hubspot::InvalidParams, 'expecting Integer parameter' unless id.try(:is_a?, Integer)
  response = Hubspot::Connection.get_json(path, params, opts)
  new(response)
end

Then generate_url() can be updated to support specifying an API key for each request as follows:

params["hapikey"] = options[:hapikey] || Hubspot::Config.hapikey unless options[:hapikey] == false

Using the library would still require setting at least something as the global hapikey since there are Hubspot::Config.ensure! :hapikey checks all over the codebase but it would be possible to override it with each call.

I think this is a useful feature and one that is supported by most API gems so it's something we should implement although there may be a better approach than what I've outlined here. Anyone care to take a stab at it and send a pull request?

from hubspot-ruby.

Related Issues (20)

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.