madison 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.2"
4
+ - "1.9.3"
5
+ script: rake
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source "http://rubygems.org"
2
+ gem "json"
3
+
4
+ group :development do
5
+ gem "rspec"
6
+ gem "rdoc", "~> 3.12"
7
+ gem "bundler", "~> 1.0.0"
8
+ gem "jeweler", "~> 1.8.4"
9
+ gem "simplecov"
10
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,38 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.3)
5
+ git (1.2.5)
6
+ jeweler (1.8.4)
7
+ bundler (~> 1.0)
8
+ git (>= 1.2.5)
9
+ rake
10
+ rdoc
11
+ json (1.7.5)
12
+ multi_json (1.3.6)
13
+ rake (0.9.2.2)
14
+ rdoc (3.12)
15
+ json (~> 1.4)
16
+ rspec (2.4.0)
17
+ rspec-core (~> 2.4.0)
18
+ rspec-expectations (~> 2.4.0)
19
+ rspec-mocks (~> 2.4.0)
20
+ rspec-core (2.4.0)
21
+ rspec-expectations (2.4.0)
22
+ diff-lcs (~> 1.1.2)
23
+ rspec-mocks (2.4.0)
24
+ simplecov (0.7.1)
25
+ multi_json (~> 1.0)
26
+ simplecov-html (~> 0.7.1)
27
+ simplecov-html (0.7.1)
28
+
29
+ PLATFORMS
30
+ ruby
31
+
32
+ DEPENDENCIES
33
+ bundler (~> 1.0.0)
34
+ jeweler (~> 1.8.4)
35
+ json
36
+ rdoc (~> 3.12)
37
+ rspec
38
+ simplecov
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Mike Ball
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ [![Build Status](https://secure.travis-ci.org/mdb/ruby-madison.png)](http://travis-ci.org/mdb/ruby-madison)
2
+
3
+ # madison
4
+
5
+ A dirt simple Ruby gem for working with US state names and abbreviations.
6
+
7
+ This is the Ruby version of Node.js [madison](http://github.com/mdb/madison) and was built as an example gem for other developers.
8
+
9
+ Note that it's currently unpublished.
10
+
11
+ ## Installation
12
+
13
+ git clone https://github.com/mdb/ruby-madison
14
+ cd ruby-madison
15
+ bundle install
16
+ rake install
17
+
18
+ ## Run Rspec tests
19
+
20
+ rake
21
+
22
+ ## View code coverage after running Rspec tests
23
+
24
+ open coverage/index.html
25
+
26
+ ## Usage
27
+
28
+ Require madison:
29
+
30
+ require 'madison'
31
+
32
+ Initialize madison:
33
+
34
+ m = Madison.new
35
+
36
+ Get a state's abbreviation:
37
+
38
+ m.get_abbrev 'virginia' // 'VA'
39
+
40
+ Get a state's name asynchronously:
41
+
42
+ m.get_name 'va' // 'Virginia'
43
+
44
+ Get a Ruby hash of US states, each containing 'name' and 'abbr' properties:
45
+
46
+ m.states
data/Rakefile ADDED
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "madison"
18
+ gem.homepage = "http://github.com/mdb/madison.rb"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{A simple Ruby gem for working with U.S. state names and abbreviations.}
21
+ gem.description = %Q{Get a U.S. state name from its abbreviation or get a U.S. state abbreviation from its name.}
22
+ gem.email = "mikedball@gmail.com"
23
+ gem.authors = ["Mike Ball"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'spec'
31
+ test.pattern = 'spec/**/*_spec.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ task :default => :test
36
+
37
+ require 'rdoc/task'
38
+ Rake::RDocTask.new do |rdoc|
39
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
40
+
41
+ rdoc.rdoc_dir = 'rdoc'
42
+ rdoc.title = "madison #{version}"
43
+ rdoc.rdoc_files.include('README*')
44
+ rdoc.rdoc_files.include('lib/**/*.rb')
45
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/lib/madison.rb ADDED
@@ -0,0 +1,35 @@
1
+ require 'json'
2
+
3
+ class Madison
4
+ attr_accessor :states
5
+
6
+ def states
7
+ @states ||= JSON.parse( File.open(File.join("lib", "states.json")).read )
8
+ end
9
+
10
+ def get_abbrev(name)
11
+ raise ArgumentError("Argument must be a string") unless name.is_a? String
12
+ state_abbrevs[name.downcase]
13
+ end
14
+
15
+ def get_name(abbrev)
16
+ raise ArgumentError("Argument must be a string") unless abbrev.is_a? String
17
+ state_names[abbrev.downcase]
18
+ end
19
+
20
+ private
21
+ def state_names
22
+ @state_names ||= build_map('abbr', 'name')
23
+ end
24
+
25
+ def state_abbrevs
26
+ @state_abbrevs ||= build_map('name', 'abbr')
27
+ end
28
+
29
+ def build_map(in_key, out_key)
30
+ states.inject({}) do |map, state|
31
+ map[state[in_key].downcase] = state[out_key]
32
+ map
33
+ end
34
+ end
35
+ end
data/lib/states.json ADDED
@@ -0,0 +1,206 @@
1
+ [
2
+ {
3
+ "name": "Alabama",
4
+ "abbr": "AL"
5
+ },
6
+ {
7
+ "name": "Alaska",
8
+ "abbr": "AK"
9
+ },
10
+ {
11
+ "name": "Arizona",
12
+ "abbr": "AZ"
13
+ },
14
+ {
15
+ "name": "Arkansas",
16
+ "abbr": "AR"
17
+ },
18
+ {
19
+ "name": "California",
20
+ "abbr": "CA"
21
+ },
22
+ {
23
+ "name": "Colorado",
24
+ "abbr": "CO"
25
+ },
26
+ {
27
+ "name": "Connecticut",
28
+ "abbr": "CT"
29
+ },
30
+ {
31
+ "name": "Delaware",
32
+ "abbr": "DE"
33
+ },
34
+ {
35
+ "name": "District Of Columbia",
36
+ "abbr": "DC"
37
+ },
38
+ {
39
+ "name": "Florida",
40
+ "abbr": "FL"
41
+ },
42
+ {
43
+ "name": "Georgia",
44
+ "abbr": "GA"
45
+ },
46
+ {
47
+ "name": "Hawaii",
48
+ "abbr": "HI"
49
+ },
50
+ {
51
+ "name": "Idaho",
52
+ "abbr": "ID"
53
+ },
54
+ {
55
+ "name": "Illinois",
56
+ "abbr": "IL"
57
+ },
58
+ {
59
+ "name": "Indiana",
60
+ "abbr": "IN"
61
+ },
62
+ {
63
+ "name": "Iowa",
64
+ "abbr": "IA"
65
+ },
66
+ {
67
+ "name": "Kansas",
68
+ "abbr": "KS"
69
+ },
70
+ {
71
+ "name": "Kentucky",
72
+ "abbr": "KY"
73
+ },
74
+ {
75
+ "name": "Louisiana",
76
+ "abbr": "LA"
77
+ },
78
+ {
79
+ "name": "Maine",
80
+ "abbr": "ME"
81
+ },
82
+ {
83
+ "name": "Maryland",
84
+ "abbr": "MD"
85
+ },
86
+ {
87
+ "name": "Massachusetts",
88
+ "abbr": "MA"
89
+ },
90
+ {
91
+ "name": "Michigan",
92
+ "abbr": "MI"
93
+ },
94
+ {
95
+ "name": "Minnesota",
96
+ "abbr": "MN"
97
+ },
98
+ {
99
+ "name": "Mississippi",
100
+ "abbr": "MS"
101
+ },
102
+ {
103
+ "name": "Missouri",
104
+ "abbr": "MO"
105
+ },
106
+ {
107
+ "name": "Montana",
108
+ "abbr": "MT"
109
+ },
110
+ {
111
+ "name": "Nebraska",
112
+ "abbr": "NE"
113
+ },
114
+ {
115
+ "name": "Nevada",
116
+ "abbr": "NV"
117
+ },
118
+ {
119
+ "name": "New Hampshire",
120
+ "abbr": "NH"
121
+ },
122
+ {
123
+ "name": "New Jersey",
124
+ "abbr": "NJ"
125
+ },
126
+ {
127
+ "name": "New Mexico",
128
+ "abbr": "NM"
129
+ },
130
+ {
131
+ "name": "New York",
132
+ "abbr": "NY"
133
+ },
134
+ {
135
+ "name": "North Carolina",
136
+ "abbr": "NC"
137
+ },
138
+ {
139
+ "name": "North Dakota",
140
+ "abbr": "ND"
141
+ },
142
+ {
143
+ "name": "Ohio",
144
+ "abbr": "OH"
145
+ },
146
+ {
147
+ "name": "Oklahoma",
148
+ "abbr": "OK"
149
+ },
150
+ {
151
+ "name": "Oregon",
152
+ "abbr": "OR"
153
+ },
154
+ {
155
+ "name": "Pennsylvania",
156
+ "abbr": "PA"
157
+ },
158
+ {
159
+ "name": "Rhode Island",
160
+ "abbr": "RI"
161
+ },
162
+ {
163
+ "name": "South Carolina",
164
+ "abbr": "SC"
165
+ },
166
+ {
167
+ "name": "South Dakota",
168
+ "abbr": "SD"
169
+ },
170
+ {
171
+ "name": "Tennessee",
172
+ "abbr": "TN"
173
+ },
174
+ {
175
+ "name": "Texas",
176
+ "abbr": "TX"
177
+ },
178
+ {
179
+ "name": "Utah",
180
+ "abbr": "UT"
181
+ },
182
+ {
183
+ "name": "Vermont",
184
+ "abbr": "VT"
185
+ },
186
+ {
187
+ "name": "Virginia",
188
+ "abbr": "VA"
189
+ },
190
+ {
191
+ "name": "Washington",
192
+ "abbr": "WA"
193
+ },
194
+ {
195
+ "name": "West Virginia",
196
+ "abbr": "WV"
197
+ },
198
+ {
199
+ "name": "Wisconsin",
200
+ "abbr": "WI"
201
+ },
202
+ {
203
+ "name": "Wyoming",
204
+ "abbr": "WY"
205
+ }
206
+ ]
data/madison.gemspec ADDED
@@ -0,0 +1,66 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "madison"
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Mike Ball"]
12
+ s.date = "2012-10-17"
13
+ s.description = "Get a U.S. state name from its abbreviation or get a U.S. state abbreviation from its name."
14
+ s.email = "mikedball@gmail.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".travis.yml",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE",
24
+ "README.md",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "lib/madison.rb",
28
+ "lib/states.json",
29
+ "madison.gemspec",
30
+ "spec/lib/madison_spec.rb",
31
+ "spec/spec_helper.rb"
32
+ ]
33
+ s.homepage = "http://github.com/mdb/madison.rb"
34
+ s.licenses = ["MIT"]
35
+ s.require_paths = ["lib"]
36
+ s.rubygems_version = "1.8.17"
37
+ s.summary = "A simple Ruby gem for working with U.S. state names and abbreviations."
38
+
39
+ if s.respond_to? :specification_version then
40
+ s.specification_version = 3
41
+
42
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
43
+ s.add_runtime_dependency(%q<json>, [">= 0"])
44
+ s.add_development_dependency(%q<rspec>, [">= 0"])
45
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
46
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
47
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
48
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
49
+ else
50
+ s.add_dependency(%q<json>, [">= 0"])
51
+ s.add_dependency(%q<rspec>, [">= 0"])
52
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
53
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
54
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
55
+ s.add_dependency(%q<simplecov>, [">= 0"])
56
+ end
57
+ else
58
+ s.add_dependency(%q<json>, [">= 0"])
59
+ s.add_dependency(%q<rspec>, [">= 0"])
60
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
61
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
62
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
63
+ s.add_dependency(%q<simplecov>, [">= 0"])
64
+ end
65
+ end
66
+
@@ -0,0 +1,64 @@
1
+ require "spec_helper"
2
+
3
+ describe Madison do
4
+ describe "#states" do
5
+ it "returns a Ruby hash of state names and abbreviations" do
6
+ m = Madison.new
7
+ m.states[0]['name'].should === "Alabama"
8
+ m.states[50]['abbr'].should === "WY"
9
+ m.states.length.should === 51
10
+ end
11
+ end
12
+
13
+ describe "#get_abbrev" do
14
+ before(:each) do
15
+ @m = Madison.new
16
+ end
17
+
18
+ it "returns a state's abbreviation when it's passed a state's name" do
19
+ @m.get_abbrev("virginia").should === "VA"
20
+ @m.get_abbrev("west virginia").should === "WV"
21
+ end
22
+
23
+ it "returns a state's abbreviation when it's passed a state's name, indpendent of the argument's case" do
24
+ @m.get_abbrev("virginiA").should === "VA"
25
+ @m.get_abbrev("AlaBama").should === "AL"
26
+ end
27
+
28
+ it "returns nil in the event that is not passed a valid state name" do
29
+ @m.get_abbrev("Fake State").should === nil
30
+ end
31
+
32
+ it "raises an ArgumentError if it is not passed a string" do
33
+ lambda { @m.get_abbrev(3) }.should raise_error
34
+ lambda { @m.get_abbrev(nil) }.should raise_error
35
+ lambda { @m.get_abbrev({}) }.should raise_error
36
+ end
37
+ end
38
+
39
+ describe "#get_name" do
40
+ before(:each) do
41
+ @m = Madison.new
42
+ end
43
+
44
+ it "returns a state's abbreviation when it's passed a state's name" do
45
+ @m.get_name("va").should === "Virginia"
46
+ @m.get_name("WV").should === "West Virginia"
47
+ end
48
+
49
+ it "returns a state's abbreviation when it's passed a state's name, indpendent of the argument's case" do
50
+ @m.get_name("vA").should === "Virginia"
51
+ @m.get_name("Al").should === "Alabama"
52
+ end
53
+
54
+ it "returns nil in the event that is not passed a valid state name" do
55
+ @m.get_name("FS").should === nil
56
+ end
57
+
58
+ it "raises an ArgumentError if it is not passed a string" do
59
+ lambda { @m.get_name(3) }.should raise_error
60
+ lambda { @m.get_name(nil) }.should raise_error
61
+ lambda { @m.get_name({}) }.should raise_error
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'simplecov'
4
+ require 'rspec'
5
+ SimpleCov.start
6
+
7
+ require_relative '../lib/madison'
8
+
9
+ RSpec.configure do |config|
10
+ # some (optional) config here
11
+ end
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: madison
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mike Ball
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-17 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: json
16
+ requirement: &2165488140 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2165488140
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &2165487440 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2165487440
36
+ - !ruby/object:Gem::Dependency
37
+ name: rdoc
38
+ requirement: &2165482580 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '3.12'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2165482580
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: &2165481580 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *2165481580
58
+ - !ruby/object:Gem::Dependency
59
+ name: jeweler
60
+ requirement: &2165480980 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 1.8.4
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *2165480980
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: &2165480320 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *2165480320
80
+ description: Get a U.S. state name from its abbreviation or get a U.S. state abbreviation
81
+ from its name.
82
+ email: mikedball@gmail.com
83
+ executables: []
84
+ extensions: []
85
+ extra_rdoc_files:
86
+ - LICENSE
87
+ - README.md
88
+ files:
89
+ - .travis.yml
90
+ - Gemfile
91
+ - Gemfile.lock
92
+ - LICENSE
93
+ - README.md
94
+ - Rakefile
95
+ - VERSION
96
+ - lib/madison.rb
97
+ - lib/states.json
98
+ - madison.gemspec
99
+ - spec/lib/madison_spec.rb
100
+ - spec/spec_helper.rb
101
+ homepage: http://github.com/mdb/madison.rb
102
+ licenses:
103
+ - MIT
104
+ post_install_message:
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ segments:
115
+ - 0
116
+ hash: 1175181656016196400
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ! '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ requirements: []
124
+ rubyforge_project:
125
+ rubygems_version: 1.8.17
126
+ signing_key:
127
+ specification_version: 3
128
+ summary: A simple Ruby gem for working with U.S. state names and abbreviations.
129
+ test_files: []