Comments (8)
A similar topic was brought up not too long ago in #78, but it was determined it we didn't need to expose the actual #encoded_payload
. In your case, I can understand to expose the #payload_size
while keeping the actual encoded payload an implementation detail.
An alternative idea: What if we enhance the #validate_payload
to raise a PayloadTooLargeError
error which has more details about the exact size. So you could directly use that if you wanted. And we could go a step further and also have the #valid?
method shove the rescued exception's #message
into an array of errors, which we expose via a #errors
method. Thoughts?
from grocer.
I'd rather avoid using exceptions for flow control. If there's no particular reason for hiding these methods, I would simply expose them.
Not exposing encoded_payload
is fine though.
Using #errors
could also work, but it seems like too much trouble and indirect.
from grocer.
I'd rather avoid using exceptions for flow control.
I agree completely, which is why Grocer would expose a #valid?
method for you to use. Internally we'd leverage exceptions, but we're not switching behavior based on them. And internally we do consider a notification with too large a body to be the exceptional case, rather than the expected case. But again, from the consumer's (i.e., your code's) perspective, it's just a predicate method, as per usual. ;)
I was thinking the #valid?
+ #errors
would be nice b/c it would prevent consumers from having to know all of the various ways that something might be invalid. (e.g., no payload, payload too large, etc.)
from grocer.
+1 for #valid?
and #errors
, but how do you get the bytesize from #errors
?
from grocer.
@n-studio I simply made payload_size
public
from grocer.
@n-studio My thinking is: as part of the enhancement to #valid?
and exposing #errors
, we'd put the current encoded_payload.bytesize
into the error message we give to PayloadTooLargeError
. Does that make sense?
from grocer.
@mbillard I do still think going with #valid
and #errors
to be a great option for handling this, but I don't have the need for it now. However, you do need to know that information. If you're up for submitting your changes as a PR, I think we can merge them.
Thoughts?
from grocer.
@mbillard Yes, I think it's necessary to have payload_size
public.
@stevenharman If encoded_payload.bytesize is only in the error message then we need to parse the message to get the size, which would be ugly.
But if payload_size
is public, everything is great!
from grocer.
Related Issues (20)
- Push sent succesfully, the lockscreen wakes up but notification doesnt show up HOT 3
- connection drops silently when notification sent to sandbox device token no error, no broken pipe not a single clue HOT 2
- Found module delegate error HOT 3
- New HTTP/2 Push Notification Provider API from Apple HOT 10
- Alert field HOT 1
- OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server session ticket A HOT 2
- Send notifications using HTTP/2 request HOT 1
- Notification arrives in iphone5, but not in ipad HOT 4
- Rspec test case for sending ios push notification with Grocer is not working HOT 2
- Not getting notifications when badge value changed HOT 6
- Errno::EPIPE: Broken pipe HOT 2
- Best practice on using grocer for large scale push notifications HOT 2
- Best practice on using grocer for large scale push notifications
- Success method undefined on notification HOT 3
- SSL_connect returned=1 errno=0 state=unknown state: tlsv1 alert internal error HOT 2
- APNS p8 certificate HOT 2
- Acceptance testing server not working? HOT 1
- Fixnum deprecated in Ruby 2.4 HOT 1
- Not sending notifications in production using with heroku HOT 2
- How to set Priority? 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 grocer.