Git Product home page Git Product logo

Comments (7)

remi avatar remi commented on May 27, 2024

There’s a non documented feature in Her that removes any parameters matching /^_/. I added a new line in the main HTTP request wrapper that allows you to pass a custom _headers variable in all HTTP/ORM methods, like so:

User.all(:type => "regular", :_headers => { "X-Page" => 2 })

This will call GET /users?type=regular with a X-Page: 2 HTTP header. Is this something you’d like to see in the library? I plan on adding it in 0.2.6.

Thanks for the request!

from her.

mbell697 avatar mbell697 commented on May 27, 2024

Awesome! Thank you for the fast response!

This is perfect for my needs on the request side, is there any way to access the response headers? The only thing missing with this change in place is a way to pull something like X-Total-Items: 500 out of the response.

Cheers!

from her.

remi avatar remi commented on May 27, 2024

Unfortunately, there's currently no way for an instance of a model to access the response data, other than the actual resource data.

Currently, the parser middleware must return a hash with three keys (example), data, metadata and errors — but only the data one is used by the constructor (because of lines like these that are present in a few places).

In the meantime, you could create your own parser middleware (they're very simple, check out the default SecondLevelParseJSON and FirstLevelParseJSON) that store the value env[:headers]["X-Total-Items"] in a variable that you could access later from your model.

Handling the metadata and errors keys is in the works though, I just have to come up with a backward compatible way of using them easily.

Thanks!

from her.

mbell697 avatar mbell697 commented on May 27, 2024

Gotcha, I'll come up with a way to pass that data around, thank you for the great info.

One small side problem I ran into today that perhaps should be a separate issue:

Currently the default JSON parse middleware doesn't set the 'Accept' header in the request to 'application/json'. It comes out as '*/*' this was easy to change with small bit of middleware but it would be a nice to have as a default set by the parser.

Cheers!

from her.

remi avatar remi commented on May 27, 2024

Alright, I'll look into it. Thank you for your help! :)

from her.

remi avatar remi commented on May 27, 2024

Currently the default JSON parse middleware doesn't set the 'Accept' header in the request to 'application/json'. It comes out as '/' this was easy to change with small bit of middleware but it would be a nice to have as a default set by the parser.

Actually, I thought about it and this is the kind of thing that Faraday lets you do through middleware:

class Foo < Faraday::Middleware
  def call(env)
    env[:request_headers]["Accept"] = "application/json"
    @app.call(env)
  end
end

Her::API.setup :url => "https://api.example.com" do |connection|
  connection.use Foo
  connection.use Faraday::Request::UrlEncoded
  connection.use Her::Middleware::FirstLevelParseJSON
  connection.use Faraday::Adapter::NetHttp
end

from her.

mbell697 avatar mbell697 commented on May 27, 2024

That is exactly what I did to get around it. I guess i was expecting to be
set by default by the JSON middleware as the JSON middleware is expecting
JSON so to me it would make sense that it would set the accept header as
such.

On Tue, Jun 26, 2012 at 6:55 PM, Rémi Prévost <
[email protected]

wrote:

Currently the default JSON parse middleware doesn't set the 'Accept'
header in the request to 'application/json'. It comes out as '/' this was
easy to change with small bit of middleware but it would be a nice to have
as a default set by the parser.

Actually, I thought about it and this is the kind of thing that Faraday
lets you do through middleware:

class Foo < Faraday::Middleware
 def call(env)
   env[:request_headers]["Accept"] = "application/json"
   @app.call(env)
 end
end

Her::API.setup :url => "https://api.example.com" do |connection|
 connection.use Foo
 connection.use Faraday::Request::UrlEncoded
 connection.use Her::Middleware::FirstLevelParseJSON
 connection.use Faraday::Adapter::NetHttp
end

Reply to this email directly or view it on GitHub:
#16 (comment)

from her.

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.