http_codes 0.1.0

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: 7c9a94a9b12b36c9d6b1dc4d74de65eacffc5e63
4
+ data.tar.gz: 45019a28a0f498200df9e3cbd20af7973916e85f
5
+ SHA512:
6
+ metadata.gz: 9a2ab41bfec7aa34e408f08a13e8a890029fbfdf54c6ea65a1c448442a9252d4febff3427705476dc6970f4299558e21bc1e06d98bb1944decd06a1d60fe74a4
7
+ data.tar.gz: 817c2dedcf46016d18fd75df8cdc60675479c75dab806b82aa87728b94f1135a4a17f71718f4940962d19cd98578a776d114da39a9ee6eb5a6682a412e5cda81
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ Gemfile.lock
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+ rvm:
3
+ - ruby-head
4
+ - 2.1.0
5
+ - 1.9.3
6
+ - jruby-head
7
+ - jruby-19mode
8
+ matrix:
9
+ allow_failures:
10
+ - jruby-head
11
+ - jruby-19mode
12
+ branches:
13
+ only:
14
+ - master
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'minitest'
4
+ gem 'webmock'
5
+ gem 'vcr'
6
+
7
+ group :setup do
8
+ gem 'rake'
9
+ end
@@ -0,0 +1,36 @@
1
+ # Http_Codes [![Build Status](https://travis-ci.org/csrordzhn/httpcodes.svg?branch=master)](https://travis-ci.org/csrordzhn/httpcodes)
2
+ ## Description
3
+ The idea behind this project is to have HTTP codes as a searchable list in your code or usable in pry
4
+ instead of going to Wikipedia and search for codes. In the end, its all about saving you some clicks.
5
+
6
+ The source for the codes is [Internet Assigned Numbers Authority.](http://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv)
7
+
8
+ ## Usage
9
+ Install at the command line,
10
+ ```sh
11
+ $ gem install http_codes
12
+ ```
13
+ include in your project gemfile,
14
+ ```ruby
15
+ gem 'http_codes'
16
+ ```
17
+ or require in directly in pry
18
+ ```ruby
19
+ require 'http_codes'
20
+ ```
21
+ Once installed, you can run from the command line.
22
+ ```sh
23
+ $ http_codes desc/code val
24
+ ```
25
+ Search by description 'BAD' will return a list of the codes that contain the value 'BAD':
26
+ ```sh
27
+ $ http_codes desc BAD
28
+ 400 - BAD REQUEST
29
+ 502 - BAD GATEWAY
30
+ ```
31
+ Search by code number 100 will return the description that matches that code:
32
+ ```sh
33
+ $ http_codes code 100
34
+ 100 - CONTINUE
35
+ ```
36
+ For usage inside a Ruby project, refer to the file ```usage_example.rb```
@@ -0,0 +1,8 @@
1
+ require 'rake/testtask'
2
+
3
+ task :default => [:spec]
4
+
5
+ desc 'Run specs'
6
+ Rake::TestTask.new(name=:spec) do |t|
7
+ t.pattern = 'spec/*_spec.rb'
8
+ end
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+ # Local
3
+ # require '../lib/http_codes/http_codes_fetcher.rb'
4
+ # Production
5
+ require 'http_codes'
6
+
7
+ begin
8
+ fail ArgumentError, "Usage: http_codes [desc/code] [val]\n" if ARGV.count != 2
9
+
10
+ mode = ARGV[0]
11
+ val = ARGV[1]
12
+ code_list = HttpCodesFetcher::Httpcodes.new
13
+
14
+ if mode == 'desc'
15
+ code_list.find_by_desc(val).map do |c|
16
+ puts c
17
+ end
18
+ elsif mode == 'code'
19
+ puts code_list.find_by_code(val.to_i)
20
+ end
21
+
22
+ rescue => e
23
+ puts "Something went wrong: #{e}"
24
+ end
@@ -0,0 +1,21 @@
1
+ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
2
+ require 'http_codes/version'
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'http_codes'
6
+ s.version = HttpCodesFetcher::VERSION
7
+ s.date = HttpCodesFetcher::DATE
8
+ s.executables << 'http_codes'
9
+ s.summary = 'Get http codes'
10
+ s.description = 'Provides a easy and fast way to find http codes by number or description.'
11
+ s.authors = ['Cesar Ordonez']
12
+ s.email = ['c_man182@yahoo.com']
13
+ s.files = `git ls-files`.split("\n")
14
+ s.test_files = `git ls-files spec/*`.split("\n")
15
+ s.homepage = 'https://github.com/csrordzhn/httpcodes'
16
+ s.license = 'MIT'
17
+
18
+ s.add_development_dependency 'minitest'
19
+ s.add_development_dependency 'vcr'
20
+ s.add_development_dependency 'webmock'
21
+ end
@@ -0,0 +1,2 @@
1
+ require 'http_codes/http_codes_fetcher.rb'
2
+ require 'http_codes/version.rb'
@@ -0,0 +1,43 @@
1
+ require 'csv'
2
+ require 'open-uri'
3
+
4
+ # Creates a hash of http codes from iana.org for developer reference inside pry
5
+ module HttpCodesFetcher
6
+ class Httpcodes
7
+ def initialize
8
+ @list = code_list
9
+ end
10
+
11
+ def code_list
12
+ url = 'http://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv'
13
+ codes = {}
14
+ CSV.new(open(url), headers: :first_row).each do |line|
15
+ codes[line['Description'].upcase] = line['Value'].to_i
16
+ end
17
+ codes
18
+ end
19
+
20
+ def find_by_code(code)
21
+ desc = @list.key(code)
22
+ fail 'Code not found' unless @list.key?(desc)
23
+ @list[desc].to_s + ' - ' + desc
24
+ rescue => e
25
+ e.message
26
+ end
27
+
28
+ def find_by_desc(desc)
29
+ search_val = Regexp.new desc.upcase
30
+ matches = @list.keys.grep search_val
31
+ fail 'Description not found' unless matches.size > 0
32
+ matches.map do |k|
33
+ @list[k].to_s + ' - ' + k.to_s
34
+ end
35
+ rescue => e
36
+ e.message
37
+ end
38
+
39
+ def size
40
+ @list.size
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,6 @@
1
+ # Versioning
2
+
3
+ module HttpCodesFetcher
4
+ VERSION = '0.1.0'
5
+ DATE = '2015-11-05'
6
+ end
@@ -0,0 +1,80 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Last-Modified:
22
+ - Thu, 05 Nov 2015 01:13:26 GMT
23
+ Vary:
24
+ - Accept-Encoding
25
+ Content-Type:
26
+ - text/csv; charset=UTF-8; header=present
27
+ Cache-Control:
28
+ - public, max-age=3600
29
+ Content-Length:
30
+ - '1031'
31
+ Accept-Ranges:
32
+ - bytes
33
+ Date:
34
+ - Thu, 05 Nov 2015 15:35:11 GMT
35
+ Connection:
36
+ - keep-alive
37
+ Server:
38
+ - Apache
39
+ X-Cache-Hits:
40
+ - '0'
41
+ body:
42
+ encoding: ASCII-8BIT
43
+ string: "Value,Description,Reference\r\n100,Continue,\"[RFC7231, Section 6.2.1]\"\r\n101,Switching
44
+ Protocols,\"[RFC7231, Section 6.2.2]\"\r\n102,Processing,[RFC2518]\r\n103-199,Unassigned,\r\n200,OK,\"[RFC7231,
45
+ Section 6.3.1]\"\r\n201,Created,\"[RFC7231, Section 6.3.2]\"\r\n202,Accepted,\"[RFC7231,
46
+ Section 6.3.3]\"\r\n203,Non-Authoritative Information,\"[RFC7231, Section
47
+ 6.3.4]\"\r\n204,No Content,\"[RFC7231, Section 6.3.5]\"\r\n205,Reset Content,\"[RFC7231,
48
+ Section 6.3.6]\"\r\n206,Partial Content,\"[RFC7233, Section 4.1]\"\r\n207,Multi-Status,[RFC4918]\r\n208,Already
49
+ Reported,[RFC5842]\r\n209-225,Unassigned,\r\n226,IM Used,[RFC3229]\r\n227-299,Unassigned,\r\n300,Multiple
50
+ Choices,\"[RFC7231, Section 6.4.1]\"\r\n301,Moved Permanently,\"[RFC7231,
51
+ Section 6.4.2]\"\r\n302,Found,\"[RFC7231, Section 6.4.3]\"\r\n303,See Other,\"[RFC7231,
52
+ Section 6.4.4]\"\r\n304,Not Modified,\"[RFC7232, Section 4.1]\"\r\n305,Use
53
+ Proxy,\"[RFC7231, Section 6.4.5]\"\r\n306,(Unused),\"[RFC7231, Section 6.4.6]\"\r\n307,Temporary
54
+ Redirect,\"[RFC7231, Section 6.4.7]\"\r\n308,Permanent Redirect,[RFC7538]\r\n309-399,Unassigned,\r\n400,Bad
55
+ Request,\"[RFC7231, Section 6.5.1]\"\r\n401,Unauthorized,\"[RFC7235, Section
56
+ 3.1]\"\r\n402,Payment Required,\"[RFC7231, Section 6.5.2]\"\r\n403,Forbidden,\"[RFC7231,
57
+ Section 6.5.3]\"\r\n404,Not Found,\"[RFC7231, Section 6.5.4]\"\r\n405,Method
58
+ Not Allowed,\"[RFC7231, Section 6.5.5]\"\r\n406,Not Acceptable,\"[RFC7231,
59
+ Section 6.5.6]\"\r\n407,Proxy Authentication Required,\"[RFC7235, Section
60
+ 3.2]\"\r\n408,Request Timeout,\"[RFC7231, Section 6.5.7]\"\r\n409,Conflict,\"[RFC7231,
61
+ Section 6.5.8]\"\r\n410,Gone,\"[RFC7231, Section 6.5.9]\"\r\n411,Length Required,\"[RFC7231,
62
+ Section 6.5.10]\"\r\n412,Precondition Failed,\"[RFC7232, Section 4.2]\"\r\n413,Payload
63
+ Too Large,\"[RFC7231, Section 6.5.11]\"\r\n414,URI Too Long,\"[RFC7231, Section
64
+ 6.5.12]\"\r\n415,Unsupported Media Type,\"[RFC7231, Section 6.5.13][RFC7694,
65
+ Section 3]\"\r\n416,Range Not Satisfiable,\"[RFC7233, Section 4.4]\"\r\n417,Expectation
66
+ Failed,\"[RFC7231, Section 6.5.14]\"\r\n418-420,Unassigned,\r\n421,Misdirected
67
+ Request,\"[RFC7540, Section 9.1.2]\"\r\n422,Unprocessable Entity,[RFC4918]\r\n423,Locked,[RFC4918]\r\n424,Failed
68
+ Dependency,[RFC4918]\r\n425,Unassigned,\r\n426,Upgrade Required,\"[RFC7231,
69
+ Section 6.5.15]\"\r\n427,Unassigned,\r\n428,Precondition Required,[RFC6585]\r\n429,Too
70
+ Many Requests,[RFC6585]\r\n430,Unassigned,\r\n431,Request Header Fields Too
71
+ Large,[RFC6585]\r\n432-499,Unassigned,\r\n500,Internal Server Error,\"[RFC7231,
72
+ Section 6.6.1]\"\r\n501,Not Implemented,\"[RFC7231, Section 6.6.2]\"\r\n502,Bad
73
+ Gateway,\"[RFC7231, Section 6.6.3]\"\r\n503,Service Unavailable,\"[RFC7231,
74
+ Section 6.6.4]\"\r\n504,Gateway Timeout,\"[RFC7231, Section 6.6.5]\"\r\n505,HTTP
75
+ Version Not Supported,\"[RFC7231, Section 6.6.6]\"\r\n506,Variant Also Negotiates,[RFC2295]\r\n507,Insufficient
76
+ Storage,[RFC4918]\r\n508,Loop Detected,[RFC5842]\r\n509,Unassigned,\r\n510,Not
77
+ Extended,[RFC2774]\r\n511,Network Authentication Required,[RFC6585]\r\n512-599,Unassigned,\r\n"
78
+ http_version:
79
+ recorded_at: Thu, 05 Nov 2015 15:35:11 GMT
80
+ recorded_with: VCR 3.0.0
@@ -0,0 +1,44 @@
1
+ require 'minitest/autorun'
2
+ require './lib/http_codes'
3
+ require 'vcr'
4
+ require 'webmock/minitest'
5
+
6
+ def random_str(n)
7
+ srand(n)
8
+ (0..n).map { ('a'..'z').to_a[rand(26)]}.join
9
+ end
10
+ random_code = Random.rand(1000...9999)
11
+
12
+ VCR.configure do |config|
13
+ config.cassette_library_dir = './spec/fixtures/vcr_cassettes'
14
+ config.hook_into :webmock
15
+ end
16
+
17
+ VCR.use_cassette('http_csv') do
18
+ httpcodes_list = HttpCodesFetcher::Httpcodes.new
19
+
20
+ describe 'httpcodes' do
21
+
22
+ it 'should load the code list' do
23
+ httpcodes_list.size.must_be :>=, 1
24
+ end
25
+ it 'should return a string with code and desc' do
26
+ code_desc = httpcodes_list.find_by_code(100)
27
+ code_desc.wont_be_empty
28
+ end
29
+ it 'should return err when code not found' do
30
+ code_desc = httpcodes_list.find_by_code(random_code)
31
+ code_desc.must_match "Code not found"
32
+ end
33
+ it 'should return an string array with code and description' do
34
+ code_list = httpcodes_list.find_by_desc('Continue')
35
+ code_list.must_be_instance_of Array
36
+ code_list.wont_be_empty
37
+ end
38
+ it 'should return err when code not found' do
39
+ code_list = httpcodes_list.find_by_desc(random_str(15))
40
+ code_list.must_match "Description not found"
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,10 @@
1
+
2
+ require 'http_codes'
3
+ # create a new httpcodes
4
+ http_codes = HttpCodesFetcher::Httpcodes.new
5
+
6
+ #puts http_codes.size
7
+ puts http_codes.find_by_code(100)
8
+ # => string '100 - CONTINUE'
9
+ puts http_codes.find_by_desc('BAD')
10
+ # => array ['400 - BAD REQUEST','502 - BAD GATEWAY']
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: http_codes
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Cesar Ordonez
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: vcr
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: webmock
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Provides a easy and fast way to find http codes by number or description.
56
+ email:
57
+ - c_man182@yahoo.com
58
+ executables:
59
+ - http_codes
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".gitignore"
64
+ - ".travis.yml"
65
+ - Gemfile
66
+ - README.md
67
+ - Rakefile
68
+ - bin/http_codes
69
+ - http_codes.gemspec
70
+ - lib/http_codes.rb
71
+ - lib/http_codes/http_codes_fetcher.rb
72
+ - lib/http_codes/version.rb
73
+ - spec/fixtures/vcr_cassettes/http_csv.yml
74
+ - spec/http_codes_spec.rb
75
+ - usage_example.rb
76
+ homepage: https://github.com/csrordzhn/httpcodes
77
+ licenses:
78
+ - MIT
79
+ metadata: {}
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubyforge_project:
96
+ rubygems_version: 2.4.6
97
+ signing_key:
98
+ specification_version: 4
99
+ summary: Get http codes
100
+ test_files:
101
+ - spec/fixtures/vcr_cassettes/http_csv.yml
102
+ - spec/http_codes_spec.rb