http_help 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 82311d2856d7a90f24e6646474c44f8ca8c6e766
4
+ data.tar.gz: 550b3329dd574829b0b2efe47e084d83d1cde4e9
5
+ SHA512:
6
+ metadata.gz: ad5cc67693e4307828bfa7a5c5f66f92de36bec795b74ece276f11ff49f11ba2ceb36aaaa41c032e5fd880d8e2d42c283f6b9e47590e0e92d0de02a287751f72
7
+ data.tar.gz: 9c4232ccd7ffb46969141ea57f87d37bc0f163ac36c465fc33e5501249c1e1ac3ab938cf91bb7ecab3d681937886386b28fd5e6c3dce097f7116a8a11fcef6eb
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in http_help.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Błażej Pankowiak
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,23 @@
1
+ # HttpHelp
2
+
3
+ Find HTTP status codes from the command line.
4
+
5
+ ## Installation
6
+
7
+ ```ruby
8
+ gem install http_help
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```http [number]``` finds the description of a given code
14
+ ```http [description]``` finds the number of a given description
15
+ ```http all``` lists all status codes
16
+
17
+ ## Contributing
18
+
19
+ 1. Fork it ( https://github.com/blase/http_help/fork )
20
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
21
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
22
+ 4. Push to the branch (`git push origin my-new-feature`)
23
+ 5. Create a new Pull Request
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'test'
6
+ end
7
+
8
+ desc 'Run tests'
9
+ task default: :test
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'http_help'
4
+
5
+ begin
6
+ puts HttpHelp.find ARGV.join(" ")
7
+ rescue HttpHelp::StatusCodeNotFoundException, HttpHelp::StatusNotFoundException => e
8
+ puts e.message
9
+ puts "You can list all statuses by running: http all"
10
+ end
@@ -0,0 +1,22 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'http_help/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "http_help"
8
+ spec.version = HttpHelp::VERSION
9
+ spec.authors = ["Błażej Pankowiak"]
10
+ spec.email = ["blasecodes@gmail.com"]
11
+ spec.summary = %q{Find HTTP status codes from the command line}
12
+ spec.homepage = "http://github.com/blase/http_help"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.7"
21
+ spec.add_development_dependency "rake", "~> 10.0"
22
+ end
@@ -0,0 +1,52 @@
1
+ require "http_help/version"
2
+ require 'yaml'
3
+ require 'string'
4
+
5
+ module HttpHelp
6
+ class StatusCodeNotFoundException < Exception; end
7
+ class StatusNotFoundException < Exception; end
8
+
9
+ def self.find status
10
+ if status == "all"
11
+ list_all_statuses
12
+ elsif status.to_i > 0
13
+ find_by_code status.to_i
14
+ else
15
+ find_by_description status
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def self.find_by_code status_code
22
+ status_codes.each do |category|
23
+ category.each do |code|
24
+ return code[status_code] unless code[status_code].nil?
25
+ end
26
+ end
27
+
28
+ raise StatusCodeNotFoundException, "Status code not found."
29
+ end
30
+
31
+ def self.find_by_description status_description
32
+ status_codes.keys.each do |category|
33
+ status_codes[category].each_pair do |code, description|
34
+ return "#{code}: #{description}" if description.downcase.levenshtein(status_description.downcase) < 3
35
+ end
36
+ end
37
+
38
+ raise StatusNotFoundException, "Status not found."
39
+ end
40
+
41
+ def self.list_all_statuses
42
+ File.open(File.join(__dir__, 'status_codes.yml')) do |file|
43
+ while line = file.gets
44
+ puts line
45
+ end
46
+ end
47
+ end
48
+
49
+ def self.status_codes
50
+ YAML::load_file(File.join(__dir__, 'status_codes.yml'))
51
+ end
52
+ end
@@ -0,0 +1,3 @@
1
+ module HttpHelp
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,46 @@
1
+ informational:
2
+ 100: Continue
3
+ 101: Switching Protocols
4
+ successful:
5
+ 200: OK
6
+ 201: Created
7
+ 202: Accepted
8
+ 203: Non-Authoritative Information
9
+ 204: No Content
10
+ 205: Reset Content
11
+ 206: Partial Content
12
+ redirection:
13
+ 300: Multiple Choices
14
+ 301: Moved Permanently
15
+ 302: Found
16
+ 303: See Other
17
+ 304: Not Modified
18
+ 305: Use Proxy
19
+ 306: (Unused)
20
+ 307: Temporary Redirect
21
+ client error:
22
+ 400: Bad Request
23
+ 401: Unauthorized
24
+ 402: Payment Required
25
+ 403: Forbidden
26
+ 404: Not Found
27
+ 405: Method Not Allowed
28
+ 406: Not Acceptable
29
+ 407: Proxy Authentication Required
30
+ 408: Request Timeout
31
+ 409: Conflict
32
+ 410: Gone
33
+ 411: Length Required
34
+ 412: Precondition Failed
35
+ 413: Request Entity Too Large
36
+ 414: Request-URI Too Long
37
+ 415: Unsupported Media Type
38
+ 416: Requested Range Not Satisfiable
39
+ 417: Expectation Failed
40
+ server error:
41
+ 500: Internal Server Error
42
+ 501: Not Implemented
43
+ 502: Bad Gateway
44
+ 503: Service Unavailable
45
+ 504: Gateway Timeout
46
+ 505: HTTP Version Not Supported
@@ -0,0 +1,25 @@
1
+ class String
2
+ # Stolen from:
3
+ # http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#Ruby
4
+ def levenshtein(string)
5
+ matrix = [(0..self.length).to_a]
6
+ (1..string.length).each do |j|
7
+ matrix << [j] + [0] * (self.length)
8
+ end
9
+
10
+ (1..string.length).each do |i|
11
+ (1..self.length).each do |j|
12
+ if self[j-1] == string[i-1]
13
+ matrix[i][j] = matrix[i-1][j-1]
14
+ else
15
+ matrix[i][j] = [
16
+ matrix[i-1][j],
17
+ matrix[i][j-1],
18
+ matrix[i-1][j-1],
19
+ ].min + 1
20
+ end
21
+ end
22
+ end
23
+ return matrix.last.last
24
+ end
25
+ end
@@ -0,0 +1,32 @@
1
+ require 'http_help'
2
+ require 'test/unit'
3
+
4
+ class TestHttpHelp < Test::Unit::TestCase
5
+ def test_that_it_can_find_response_description
6
+ assert_equal "Not Found", HttpHelp.find(404)
7
+ end
8
+
9
+ def test_that_it_can_find_response_code
10
+ assert_equal "404: Not Found", HttpHelp.find("Not Found")
11
+ end
12
+
13
+ def test_that_it_can_find_response_code_given_different_letter_case
14
+ assert_equal "404: Not Found", HttpHelp.find("nOT fOUND")
15
+ end
16
+
17
+ def test_that_it_can_find_response_code_given_similar_description
18
+ assert_equal "404: Not Found", HttpHelp.find("got fund")
19
+ end
20
+
21
+ def test_that_it_raises_an_exception_when_code_is_not_found
22
+ assert_raise_with_message HttpHelp::StatusCodeNotFoundException, "Status code not found." do
23
+ HttpHelp.find("999")
24
+ end
25
+ end
26
+
27
+ def test_that_it_raises_an_exception_when_status_is_not_found
28
+ assert_raise_with_message HttpHelp::StatusNotFoundException, "Status not found." do
29
+ HttpHelp.find("Some weird status")
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,8 @@
1
+ require 'string'
2
+ require 'test/unit'
3
+
4
+ class TestString < Test::Unit::TestCase
5
+ def test_that_it_calculates_levenshtein_distance_correctly
6
+ assert_equal 3, "kitten".levenshtein("sitting")
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: http_help
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Błażej Pankowiak
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description:
42
+ email:
43
+ - blasecodes@gmail.com
44
+ executables:
45
+ - http
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - ".gitignore"
50
+ - Gemfile
51
+ - LICENSE.txt
52
+ - README.md
53
+ - Rakefile
54
+ - bin/http
55
+ - http_help.gemspec
56
+ - lib/http_help.rb
57
+ - lib/http_help/version.rb
58
+ - lib/status_codes.yml
59
+ - lib/string.rb
60
+ - test/test_http_help.rb
61
+ - test/test_string.rb
62
+ homepage: http://github.com/blase/http_help
63
+ licenses:
64
+ - MIT
65
+ metadata: {}
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 2.2.2
83
+ signing_key:
84
+ specification_version: 4
85
+ summary: Find HTTP status codes from the command line
86
+ test_files:
87
+ - test/test_http_help.rb
88
+ - test/test_string.rb