[#57574] [ruby-trunk - Feature #8976][Open] file-scope freeze_string directive — "akr (Akira Tanaka)" <akr@...>
70 messages
2013/10/02
[#57579] [ruby-trunk - Feature #8977][Open] String#frozen that takes advantage of the deduping — "sam.saffron (Sam Saffron)" <sam.saffron@...>
25 messages
2013/10/02
[#57633] [ruby-trunk - Bug #8983][Open] [PATCH] GC.stat[:heap_free_num] returns number of unused slots on heap — "tmm1 (Aman Gupta)" <ruby@...1.net>
8 messages
2013/10/03
[#57667] [ruby-trunk - Feature #8985][Open] xwillfree - promise to free memory — "funny_falcon (Yura Sokolov)" <funny.falcon@...>
5 messages
2013/10/04
[#57679] [ruby-trunk - Feature #8987][Open] map/collect extension which handles arguments — "sowieso (So Wieso)" <sowieso@...>
16 messages
2013/10/05
[#57680] [ruby-trunk - Feature #8987] map/collect extension which handles arguments
— "sawa (Tsuyoshi Sawada)" <sawadatsuyoshi@...>
2013/10/05
[#57693] [PATCH 0/2] Fix strptime '%s' — Felipe Contreras <felipe.contreras@...>
Hi,
7 messages
2013/10/07
[#57694] [PATCH 1/2] time: fix strptime '%s'
— Felipe Contreras <felipe.contreras@...>
2013/10/07
'%s' is meant to imply UTC, however:
[#57703] Re: [PATCH 1/2] time: fix strptime '%s'
— Tanaka Akira <akr@...>
2013/10/07
2013/10/7 Felipe Contreras <felipe.contreras@gmail.com>:
[#57711] Re: [PATCH 1/2] time: fix strptime '%s'
— Felipe Contreras <felipe.contreras@...>
2013/10/07
On Mon, Oct 7, 2013 at 10:17 AM, Tanaka Akira <akr@fsij.org> wrote:
[#57705] [ruby-trunk - Feature #8992][Open] Use String#freeze and compiler tricks to replace "str"f suffix — "headius (Charles Nutter)" <headius@...>
43 messages
2013/10/07
[#57840] [ruby-trunk - Feature #8992] Use String#freeze and compiler tricks to replace "str"f suffix
— "sam.saffron (Sam Saffron)" <sam.saffron@...>
2013/10/13
[#57727] [ruby-trunk - Feature #8998][Open] string keys for hash literals should use fstrings — "normalperson (Eric Wong)" <normalperson@...>
17 messages
2013/10/08
[#57743] [ruby-trunk - Feature #8998] string keys for hash literals should use fstrings
— "normalperson (Eric Wong)" <normalperson@...>
2013/10/08
[#57756] Re: [ruby-trunk - Feature #8998] string keys for hash literals should use fstrings
— Eric Wong <normalperson@...>
2013/10/09
I think my failed patch exposes a bug with lazy sweep + rb_fstring.
[#57771] [ruby-trunk - Bug #9008][Open] TestProcess#test_clock_getres_constants and TestProcess#test_clock_gettime_constants fails on ARM — "vo.x (Vit Ondruch)" <v.ondruch@...>
15 messages
2013/10/09
[#57852] [ruby-trunk - Bug #9008] TestProcess#test_clock_getres_constants and TestProcess#test_clock_gettime_constants fails on ARM
— "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>
2013/10/14
[#57884] [ruby-trunk - Bug #9008] TestProcess#test_clock_getres_constants and TestProcess#test_clock_gettime_constants fails on ARM
— "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>
2013/10/15
[#57794] [ruby-trunk - Bug #9011][Open] rb_fstring unsafe to use in general case — "normalperson (Eric Wong)" <normalperson@...>
4 messages
2013/10/10
[#57812] [ruby-trunk - Bug #9013][Open] Crash on start — "lemonez (Dmitry Popov)" <lemon@...>
6 messages
2013/10/10
[#57849] [ruby-trunk - Feature #9020][Open] Net::HTTPResponse predicate/query methods — "timcraft (Tim Craft)" <redmine@...>
7 messages
2013/10/14
[#57862] [CommonRuby - Feature #9023][Open] Array#tail — "fuadksd (Fuad Saud)" <fuadksd@...>
9 messages
2013/10/15
[#57888] [ruby-trunk - Feature #9025][Open] Clarify the error message when calling a method with the wrong number of arguments — Nerian (Gonzalo Rodríguez) <siotopo@...>
11 messages
2013/10/15
[#57913] cxxflags for C++ library bindings not working for Ruby 1.9.x and 2.0? — Stefan Salewski <mail@...>
Dear Sirs,
4 messages
2013/10/17
[#57916] Re: cxxflags for C++ library bindings not working for Ruby 1.9.x and 2.0?
— Nobuyoshi Nakada <nobu@...>
2013/10/17
(13/10/17 22:03), Stefan Salewski wrote:
[#57950] [ruby-trunk - Bug #9039][Open] [PATCH] socket: avoid unnecessary ppoll/select on Linux (part 3) — "normalperson (Eric Wong)" <normalperson@...>
8 messages
2013/10/21
[#57951] [ruby-trunk - Bug #9040][Open] Readline duplicate file descriptors but doesn't close them — "eweb (Eamonn Webster)" <eamonn.webster@...>
8 messages
2013/10/21
[#57986] [ruby-trunk - Bug #9040] Readline duplicate file descriptors but doesn't close them
— "akr (Akira Tanaka)" <akr@...>
2013/10/23
[#57967] [ruby-trunk - Feature #9043][Open] Add String#f method as shortcut for #freeze — "headius (Charles Nutter)" <headius@...>
8 messages
2013/10/22
[#58007] [ruby-trunk - Feature #9049][Open] Shorthands (a:b, *) for inclusive indexing — "mohawkjohn (John Woods)" <john.o.woods@...>
25 messages
2013/10/24
[#58011] [ruby-trunk - Feature #9049] Shorthands (a:b, *) for inclusive indexing
— "boris_stitnicky (Boris Stitnicky)" <boris@...>
2013/10/24
[#58012] Re: [ruby-trunk - Feature #9049] Shorthands (a:b, *) for inclusive indexing
— David MacMahon <davidm@...>
2013/10/24
[#58013] Re: [ruby-trunk - Feature #9049] Shorthands (a:b, *) for inclusive indexing
— Fuad Saud <fuadksd@...>
2013/10/24
How is a:b better than a..b? two dots are straightforward, unambiguous, well known.
[#58080] [ruby-trunk - Feature #9064][Open] Add support for packages, like in Java — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>
23 messages
2013/10/30
[#58083] [ruby-trunk - Feature #9064] Add support for packages, like in Java
— "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>
2013/10/30
[#58114] [ruby-trunk - Feature #9068][Open] [PATCH (trivial)] thread.c: reduce rb_mutex_t size by 8 bytes on x86_64 — "normalperson (Eric Wong)" <normalperson@...>
5 messages
2013/10/31
[#58115] Re: [ruby-trunk - Feature #9068][Open] [PATCH (trivial)] thread.c: reduce rb_mutex_t size by 8 bytes on x86_64
— KOSAKI Motohiro <kosaki.motohiro@...>
2013/10/31
(10/31/13 3:42 PM), normalperson (Eric Wong) wrote:
[#58116] Re: [ruby-trunk - Feature #9068][Open] [PATCH (trivial)] thread.c: reduce rb_mutex_t size by 8 bytes on x86_64
— Eric Wong <normalperson@...>
2013/10/31
KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
[ruby-core:57891] [ruby-trunk - Feature #9020] Net::HTTPResponse predicate/query methods
From:
"timcraft (Tim Craft)" <redmine@...>
Date:
2013-10-15 23:01:17 UTC
List:
ruby-core #57891
Issue #9020 has been updated by timcraft (Tim Craft).
I'm not aware of any libraries that implement this interface currently. If Net::HTTP implemented these methods and other libraries implemented them, then it would be possible to switch between libraries without changing those particular lines of code (obviously some other lines of code would still need to be changed). A hypothetical/potential benefit at this point.
I haven't written a patch yet, and "adding significant number of lines of code to Net::HTTP source" could be considered as an argument against, but I think this is where this functionality belongs. I can think of various ways to define/implement the methods, so would welcome any feedback on that (I've not written a Ruby patch before), but there doesn't seem to be much point in having that discussion unless there is support for adding the feature.
----------------------------------------
Feature #9020: Net::HTTPResponse predicate/query methods
https://bugs.ruby-lang.org/issues/9020#change-42485
Author: timcraft (Tim Craft)
Status: Assigned
Priority: Normal
Assignee: naruse (Yui NARUSE)
Category: lib
Target version: next minor
# SUMMARY
I would like to propose adding predicate/query methods to Net::HTTPResponse for testing the status/type of response. For example:
response.ok?
response.not_found?
response.client_error?
response.server_error?
# BACKGROUND
The approach I've most commonly used/encountered for testing the status of a response is to compare with an integer, for example:
response.code.to_i == 200
Subjectively I could say this kind of code is awkward/tedious to type, and not very "intention revealing". More practically/objectively it's a potential source of error. By mistyping the "magic number" it's possible for this expression to "silently fail" and test the wrong status. That would be an easy thing to spot in these examples, but much more difficult to track down within a typical codebase.
Another approach would be to test the type/class of the response object, for example:
Net::HTTPOK === response
Subjectively I would say this doesn't feel very Ruby-ish. More practically/objectively it tightly couples the caller to the implementation details of Net::HTTP, making it difficult to stub or swap in a different library.
# PROPOSAL
I would like to propose adding predicate/query methods to Net::HTTPResponse in order to encapsulate the implementation details of testing for different statuses and to provide a more abstract interface to the caller. For example:
response.ok?
response.not_found?
This is more concise/readable. In most cases it would be easier and "less fiddly" to type out than the existing approaches presented above.
Compared to testing with integers it is one method call instead of three (I'm considering that as better from a readability perspective, not a performance perspective), and it eliminates the "failing silently" issue.
Compared to testing the type/class of the response object it doesn't couple the caller to implementation details of Net::HTTP, so it would be easier to stub or swap-in another library that provides the same interface.
Overall it feels much simpler and much more Ruby-ish.
In addition I would propose adding a few extra methods to test for ranges of statuses, for example:
response.client_error?
response.server_error?
Similar benefits/rationale.
# IMPLEMENTATION
I have already been using methods like this in some gems, and I have created a "proof of concept" implementation which monkey-patches Net::HTTP to test the idea out. Available here:
http://rubygems.org/gems/net-http-predicates
https://github.com/timcraft/net-http-predicates
I can think of various different ways to implement a patch, so if this feature would be accepted into ruby-trunk I would welcome suggestions/guidance on a preferred implementation.
These changes would be backwards compatible and straightforward to provide as a backport, either in the backports library/gem or as a standalone gem.
# DISCUSSION
Before discussing how to implement this patch I would like to get people's thoughts on the idea/proposal, and some indication of whether this could be accepted into ruby-trunk (or not). If it would be accepted I'm happy to write/submit the patch itself.
--
http://bugs.ruby-lang.org/