Comments (7)
Hi @andyw8, yes, converting to a String
would be one way to work around this. At the core of this issue is the fact that ActiveSupport::Cache::Store
doesn't support serializing StringIO
objects. Off the top of my head, I think the only way we would solve this in Garner would be to detect cache objects of type StringIO
, and then:
- Call
read
on the object before storing. - Annotate the cache object to indicate that it was originally of type
StringIO
(something we don't do currently). - Re-wrap the cached string in a
StringIO
object on fetching.
I couldn't find much on the topic, but the fact that ActiveSupport::Cache::Store
doesn't do this by default leads me to believe it might not be prudent.
An alternative is to only cache the product = Product.find params[:id]
, and to present the product
outside the cache block. But this would incur the cost of re-presenting on each request.
from garner.
We could also build support for StringIO when defined in Garner proper within the Grape extension. So this issue can be renamed to "support Grape Entity presenters". I think it would be as simple as checking that the type is StringIO and calling to_s
on it.
from garner.
Going to close and mark this one wontfix
, since Garner v0.4.0+ defers this sort of decision to the underlying cache/marshaling implementation.
from garner.
So what is the work around this?
from garner.
@andoriyu It depends on your scenario. If you have a StringIO
in the garner block, add a to_s
to it, for example.
from garner.
I figured it out. Maybe makes sense to add this to documentation:
garner.bind(@song) do
song = present @song, with: ::AdminSongPresenter
song.as_json
end
from garner.
I'd welcome any README change that makes sense :)
from garner.
Related Issues (20)
- Inconsistency between Mongoid find and Garner::Mixins::Mongoid::Document.garnered_find HOT 3
- Can't get it to work with Grape HOT 5
- support for Sequel HOT 2
- Garner/Grape Entity issue HOT 1
- Using non-ORM bindings HOT 1
- Fix Mongoid4 dependency HOT 1
- Support ActiveRecord 4 HOT 1
- Run tests on JRuby HOT 1
- Release Next HOT 2
- Stale record retrieved via garnered_find HOT 9
- Garner.cache loses namespace options when deleting a record as block yields nil HOT 2
- SafeCacheKey + Touch doesn't pass spec/integration/mongoid_spec.rb HOT 1
- Does Garner support binding ActiveRecord models? HOT 7
- Add cache logging support
- Mongoid document proxy binding doesn't work with aliased updated_at field HOT 2
- How to cache only anonymous(non-login) request? HOT 4
- garnered_find slower than find? HOT 4
- Mongo garnered_find not respecting chained criteria
- Default expires_in override global_cache_options HOT 1
- Caching the Index method HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from garner.