Class: Dao::Status
- Inherits:
-
String
- Object
- String
- Dao::Status
- Defined in:
- lib/dao/status.rb
Constant Summary collapse
- Code2Message =
( { 100 => "Continue", 101 => "Switching Protocols", 102 => "Processing", 200 => "OK", 201 => "Created", 202 => "Accepted", 203 => "Non-Authoritative Information", 204 => "No Content", 205 => "Reset Content", 206 => "Partial Content", 207 => "Multi-Status", 226 => "IM Used", 300 => "Multiple Choices", 301 => "Moved Permanently", 302 => "Found", 303 => "See Other", 304 => "Not Modified", 305 => "Use Proxy", 307 => "Temporary Redirect", 400 => "Bad Request", 401 => "Unauthorized", 402 => "Payment Required", 403 => "Forbidden", 404 => "Not Found", 405 => "Method Not Allowed", 406 => "Not Acceptable", 407 => "Proxy Authentication Required", 408 => "Request Timeout", 409 => "Conflict", 410 => "Gone", 411 => "Length Required", 412 => "Precondition Failed", 413 => "Request Entity Too Large", 414 => "Request-URI Too Long", 415 => "Unsupported Media Type", 416 => "Requested Range Not Satisfiable", 417 => "Expectation Failed", 420 => "Enhance Your Calm", 422 => "Unprocessable Entity", 423 => "Locked", 424 => "Failed Dependency", 426 => "Upgrade Required", 500 => "Internal Server Error", 501 => "Not Implemented", 502 => "Bad Gateway", 503 => "Service Unavailable", 504 => "Gateway Timeout", 505 => "HTTP Version Not Supported", 507 => "Insufficient Storage", 510 => "Not Extended", ### ref: https://github.com/joho/7XX-rfc #70X => "Inexcusable", 701 => "Meh", 702 => "Emacs", #71X => "Novelty Implementations", 710 => "PHP", 711 => "Convenience Store", 719 => "I am not a teapot", #72X => "Edge Cases", 720 => "Unpossible", 721 => "Known Unknowns", 722 => "Unknown Unknowns", 723 => "Tricky", 724 => "This line should be unreachable", 725 => "It works on my machine", 726 => "It's a feature, not a bug", #73X => "Fucking", 731 => "Fucking Rubygems", 732 => "Fucking Unicode", 733 => "Fucking Deadlocks", 734 => "Fucking Deferreds", 735 => "Fucking IE", 736 => "Fucking Race Conditions", 737 => "FuckThreadsing", 738 => "Fucking Bundler", 739 => "Fucking Windows", #74X => "Meme Driven", 741 => "Compiling", 742 => "A kitten dies", 743 => "I thought I knew regular expressions", 744 => "Y U NO write integration tests?", 745 => "I don't always test my code, but when I do I do it in production", 746 => "Missed Ballmer Peak", 747 => "Motherfucking Snakes on the Motherfucking Plane", 748 => "Confounded by Ponies", 749 => "Reserved for Chuck Norris", #75X => "Syntax Errors", 750 => "Didn't bother to compile it", 753 => "Syntax Error", #76X => "Substance-Affected Developer", 761 => "Hungover", 762 => "Stoned", 763 => "Under-Caffeinated", 764 => "Over-Caffeinated", 765 => "Railscamp", 766 => "Sober", 767 => "Drunk", #77X => "Predictable Problems", 771 => "Cached for too long", 772 => "Not cached long enough", 773 => "Not cached at all", 774 => "Why was this cached?", 776 => "Error on the Exception", 777 => "Coincidence", 778 => "Off By One Error", 779 => "Off By Too Many To Count Error", #78X => "Somebody Else's Problem", 781 => "Operations", 782 => "QA", 783 => "It was a customer request, honestly", 784 => "Management, obviously", 785 => "TPS Cover Sheet not attached", #79X => "Internet crashed", 797 => "This is the last page of the Internet. Go back", 799 => "End of the world" } )
- Symbol2Code =
(code, message)| sym = Status.underscore(message.gsub(/\s+/, "_")).to_sym hash.update(sym => code) end )
Instance Attribute Summary collapse
-
#code ⇒ Object
instance methods.
-
#group ⇒ Object
Returns the value of attribute group.
-
#message ⇒ Object
Returns the value of attribute message.
-
#source ⇒ Object
Returns the value of attribute source.
Class Method Summary collapse
- .default ⇒ Object
- .for(*args) ⇒ Object
- .list ⇒ Object
- .parse(string) ⇒ Object
- .underscore(camel_cased_word) ⇒ Object
Instance Method Summary collapse
- #==(other) ⇒ Object
- #=~(other) ⇒ Object
- #bad? ⇒ Boolean (also: #error?)
- #clone ⇒ Object
- #good? ⇒ Boolean (also: #ok?)
-
#initialize(*args) ⇒ Status
constructor
A new instance of Status.
- #ok! ⇒ Object
- #to_json(*args, &block) ⇒ Object
- #update(*args) ⇒ Object (also: #set)
Constructor Details
#initialize(*args) ⇒ Status
Returns a new instance of Status.
255 256 257 |
# File 'lib/dao/status.rb', line 255 def initialize(*args) update(*args) end |
Instance Attribute Details
#code ⇒ Object
instance methods
250 251 252 |
# File 'lib/dao/status.rb', line 250 def code @code end |
#group ⇒ Object
Returns the value of attribute group.
252 253 254 |
# File 'lib/dao/status.rb', line 252 def group @group end |
#message ⇒ Object
Returns the value of attribute message.
251 252 253 |
# File 'lib/dao/status.rb', line 251 def @message end |
#source ⇒ Object
Returns the value of attribute source.
253 254 255 |
# File 'lib/dao/status.rb', line 253 def source @source end |
Class Method Details
.for(*args) ⇒ Object
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 |
# File 'lib/dao/status.rb', line 175 def for(*args) if args.size >= 2 code = args.shift = args.join(' ') new(code, ) else arg = args.shift case arg when Result if arg.errors.nil? or arg.errors.empty? or arg.valid? new(200) else new(500) end when Status arg when Integer code = arg = Code2Message[code] new(code, ) when Symbol, String if arg.to_s =~ %r/^\d+$/ code = arg.to_i else sym = Status.underscore(arg).to_sym code = Symbol2Code[sym] end if code = Code2Message[code] else code = 500 = "Unknown Status #{ arg }" end new(code, ) else if arg.respond_to?(:code) and arg.respond_to?(:message) code, = arg.code, arg. new(code, ) else parse(arg) end end end end |
.list ⇒ Object
154 155 156 |
# File 'lib/dao/status.rb', line 154 def list @list ||= Symbol2Code.sort_by{|sym, code| code}.map{|sym, code| send(sym)} end |
.parse(string) ⇒ Object
220 221 222 223 224 225 226 227 228 229 230 |
# File 'lib/dao/status.rb', line 220 def parse(string) first, last = string.to_s.strip.split(%r/\s+/, 2) if first =~ %r/^\d+$/ code = Integer(first) = last else code = 500 = "Unknown Status #{ string.inspect }" end new(code, ) end |
.underscore(camel_cased_word) ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/dao/status.rb', line 158 def underscore(camel_cased_word) camel_cased_word.to_s.gsub(/::/, '/'). gsub(/\s+/, '_'). gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). gsub(/([a-z\d])([A-Z])/,'\1_\2'). gsub(/[^A-Za-z0-9_]/, '_'). tr("-", "_"). squeeze('_'). gsub(/^_+/, ''). gsub(/_+$/, ''). downcase end |
Instance Method Details
#==(other) ⇒ Object
308 309 310 311 312 313 314 315 |
# File 'lib/dao/status.rb', line 308 def ==(other) begin other = Status.for(other) self.code == other.code and self. == other. rescue false end end |
#=~(other) ⇒ Object
299 300 301 302 303 304 305 306 |
# File 'lib/dao/status.rb', line 299 def =~(other) begin other = Status.for(other) self.group == other.group rescue false end end |
#bad? ⇒ Boolean Also known as: error?
294 295 296 |
# File 'lib/dao/status.rb', line 294 def bad? @group >= 400 end |
#good? ⇒ Boolean Also known as: ok?
289 290 291 |
# File 'lib/dao/status.rb', line 289 def good? @group < 400 end |
#ok! ⇒ Object
273 274 275 |
# File 'lib/dao/status.rb', line 273 def ok! update(200) end |
#to_json(*args, &block) ⇒ Object
321 322 323 |
# File 'lib/dao/status.rb', line 321 def to_json(*args, &block) Map[:code, code, :message, ].to_json(*args, &block) end |
#update(*args) ⇒ Object Also known as: set
259 260 261 262 263 264 265 266 267 268 269 270 |
# File 'lib/dao/status.rb', line 259 def update(*args) code, = if args.size == 2 [args.first, args.last] else status = Status.for(args.first || 200) [status.code, status.] end @code, @message = Integer(code), String() @group = (@code / 100) * 100 replace("#{ @code } #{ @message }".strip) end |