name_parse 0.0.5

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,6 @@
1
+ [user]
2
+ name = TJ Vanderpoel
3
+ email = bougy.man@gmail.com
4
+ [github]
5
+ user = bougyman
6
+ token = 8d313e9404c9de9b04d546a76412783d
data/AUTHORS ADDED
@@ -0,0 +1,6 @@
1
+ Following persons have contributed to name_parse.
2
+ (Sorted by number of submitted patches, then alphabetically)
3
+
4
+ 10 TJ Vanderpoel <bougy.man@gmail.com>
5
+ 2 Jayson Vaughn (thedonvaughn) <jayson.vaughn@gmail.com>
6
+ 2 TJ Vanderpoel <bougyman@zero.(none)>
@@ -0,0 +1,56 @@
1
+ [736bf3d | Thu May 07 16:54:52 UTC 2009] TJ Vanderpoel <bougyman@zero.(none)>
2
+
3
+ * completed refactoring to methodized matchers in #parse
4
+
5
+ [e58f6e4 | Thu May 07 16:29:25 UTC 2009] TJ Vanderpoel <bougyman@zero.(none)>
6
+
7
+ * continued to refacor into a methodized pattern for matching in #parse
8
+
9
+ [835e508 | Thu May 07 03:29:00 UTC 2009] TJ Vanderpoel <bougy.man@gmail.com>
10
+
11
+ * ignore csv files
12
+
13
+ [fcb13a0 | Thu May 07 03:28:14 UTC 2009] TJ Vanderpoel <bougy.man@gmail.com>
14
+
15
+ * added README as description
16
+
17
+ [016010c | Thu May 07 03:18:51 UTC 2009] TJ Vanderpoel <bougy.man@gmail.com>
18
+
19
+ * Version 0.0.4
20
+
21
+ [5d85b44 | Thu May 07 03:14:31 UTC 2009] TJ Vanderpoel <bougy.man@gmail.com>
22
+
23
+ * methodized when match target for first_name. TODO: make the other when matchers follow the same format
24
+
25
+ [09dee2a | Wed May 06 21:05:00 UTC 2009] TJ Vanderpoel <bougy.man@gmail.com>
26
+
27
+ * Version 0.0.3
28
+
29
+ [9481b20 | Wed May 06 21:04:11 UTC 2009] Jayson Vaughn (thedonvaughn) <jayson.vaughn@gmail.com>
30
+
31
+ * added bacon task back from FSR, added Bacon.summary_on_exit to spec/helper.rb
32
+
33
+ [5c65ac6 | Wed May 06 20:25:18 UTC 2009] TJ Vanderpoel <bougy.man@gmail.com>
34
+
35
+ * Version 0.0.2
36
+
37
+ [f34e13b | Wed May 06 20:09:19 UTC 2009] Jayson Vaughn (thedonvaughn) <jayson.vaughn@gmail.com>
38
+
39
+ * added handling of multiple last names
40
+
41
+ [fe9fbac | Wed May 06 18:41:19 UTC 2009] TJ Vanderpoel <bougy.man@gmail.com>
42
+
43
+ * added more name types and yard task, docs at doc.rubyists.com/name_parse
44
+
45
+ [d901070 | Wed May 06 18:18:24 UTC 2009] TJ Vanderpoel <bougy.man@gmail.com>
46
+
47
+ * added more name types, changed exception class to UnknownFormat for more descriptive error when we cannot parse a name
48
+
49
+ [a57d649 | Wed May 06 16:56:52 UTC 2009] TJ Vanderpoel <bougy.man@gmail.com>
50
+
51
+ * added first 3 parse conditions
52
+
53
+ [d276663 | Wed May 06 15:55:33 UTC 2009] TJ Vanderpoel <bougy.man@gmail.com>
54
+
55
+ * bare tree, ready to spec
56
+
@@ -0,0 +1,25 @@
1
+ AUTHORS
2
+ CHANGELOG
3
+ MANIFEST
4
+ README
5
+ Rakefile
6
+ lib/name_parse.rb
7
+ lib/name_parse/error.rb
8
+ lib/name_parse/parser.rb
9
+ lib/name_parse/version.rb
10
+ name_parse.gemspec
11
+ spec/helper.rb
12
+ spec/name_parse/parser.rb
13
+ tasks/authors.rake
14
+ tasks/bacon.rake
15
+ tasks/changelog.rake
16
+ tasks/copyright.rake
17
+ tasks/gem.rake
18
+ tasks/gem_installer.rake
19
+ tasks/install_dependencies.rake
20
+ tasks/manifest.rake
21
+ tasks/rcov.rake
22
+ tasks/release.rake
23
+ tasks/reversion.rake
24
+ tasks/setup.rake
25
+ tasks/yard.rake
data/README ADDED
@@ -0,0 +1,34 @@
1
+ =========================================================
2
+ Name Parse
3
+ Copyright (c) 2009 The Rubyists (Jayson Vaughn, Tj Vanderpoel, Michael Fellinger, Kevin Berry)
4
+ Distributed under the terms of the MIT License.
5
+ ==========================================================
6
+
7
+ About
8
+ -----
9
+ A ruby library for turning arbitrary name strings such as "Dr Helen Hunt", "Mr James T. Kirk" into a
10
+ standardized object usable as
11
+ parsed = NameParse::Parser.new("Dr Helen Hunt")
12
+ puts "%s %s" % [parsed.first, parsed.last]
13
+
14
+
15
+ Requirements
16
+ ------------
17
+ - ruby (>= 1.8)
18
+
19
+ Usage
20
+ -----
21
+
22
+ Example of using on a list:
23
+
24
+ bougyman@zero:~/git_checkouts/name_parse$ irb -r lib/name_parse
25
+ irb(main):001:0> list = ["Jayson Vaughn", "Dr Helen Hunt", "Mr James T. Kirk"]
26
+ => ["Jayson Vaughn", "Dr Helen Hunt", "Mr James T. Kirk"]
27
+ irb(main):002:0> list.map { |n| p = NameParse[n]; [p.first, p.last] }
28
+ => [["Jayson", "Vaughn"], ["Helen", "Hunt"], ["James", "Kirk"]]
29
+
30
+
31
+ Support
32
+ -------
33
+ Home page at http://github.com/bougyman/name_parse
34
+ #rubyists on FreeNode
@@ -0,0 +1,69 @@
1
+ begin; require 'rubygems'; rescue LoadError; end
2
+
3
+ require 'rake'
4
+ require 'rake/clean'
5
+ require 'rake/gempackagetask'
6
+ require 'time'
7
+ require 'date'
8
+ require "lib/name_parse"
9
+
10
+ PROJECT_SPECS = FileList[
11
+ 'spec/**/*.rb'
12
+ ].reject { |h| h.match(/helper.rb/) }
13
+
14
+ PROJECT_MODULE = 'NameParse'
15
+ PROJECT_README = 'README'
16
+ #PROJECT_RUBYFORGE_GROUP_ID = 3034
17
+ PROJECT_COPYRIGHT = [
18
+ "# Copyright (c) #{Time.now.year} The Rubyists rubyists@rubyists.com",
19
+ "# Distributed under the terms of the MIT license."
20
+ ]
21
+
22
+ # To release the monthly version do:
23
+ # $ PROJECT_VERSION=2009.03 rake release
24
+ IGNORE_FILES = [/\.gitignore/]
25
+
26
+ GEMSPEC = Gem::Specification.new{|s|
27
+ s.name = 'name_parse'
28
+ s.author = "TJ Vanderpoel"
29
+ s.summary = "Parse name strings into their constituent parts"
30
+ s.description = File.read("README")
31
+ s.email = 'bougy.man@gmail.com'
32
+ s.homepage = 'http://github.com/bougyman/name_parse'
33
+ s.platform = Gem::Platform::RUBY
34
+ s.version = (ENV['PROJECT_VERSION'] || Object.const_get(PROJECT_MODULE)::VERSION)
35
+ s.files = `git ls-files`.split("\n").sort.reject { |f| IGNORE_FILES.detect { |exp| f.match(exp) } }
36
+ s.has_rdoc = true
37
+ s.require_path = 'lib'
38
+ #s.bindir = "bin"
39
+ #s.executables = ["name_parse"]
40
+ s.rubyforge_project = "pastr"
41
+
42
+ s.post_install_message = <<MESSAGE.strip
43
+ ============================================================
44
+
45
+ Thank you for installing Name Parse!
46
+
47
+ ============================================================
48
+ MESSAGE
49
+
50
+ "Verify your install with"
51
+ '# name-parse "Dr. Phil Seuss, Jr."'
52
+ }
53
+
54
+ Dir['tasks/*.rake'].each{|f| import(f) }
55
+
56
+ task :default => [:bacon]
57
+
58
+ CLEAN.include %w[
59
+ **/.*.sw?
60
+ *.gem
61
+ .config
62
+ **/*~
63
+ **/{data.db,cache.yaml}
64
+ *.yaml
65
+ pkg
66
+ rdoc
67
+ ydoc
68
+ *coverage*
69
+ ]
@@ -0,0 +1,11 @@
1
+ require "pathname"
2
+ $LOAD_PATH.unshift(Pathname.new(__FILE__).dirname.expand_path.to_s)
3
+ require "name_parse/parser"
4
+ module NameParse
5
+ def self.[](string)
6
+ Parser.new(string)
7
+ end
8
+ end
9
+ require "name_parse/version"
10
+ require "name_parse/error"
11
+
@@ -0,0 +1,4 @@
1
+ module NameParse
2
+ class UnknownFormat < StandardError
3
+ end
4
+ end
@@ -0,0 +1,91 @@
1
+ module NameParse
2
+ class Parser
3
+ attr_reader :first, :last, :suffix, :prefix, :middle, :raw, :matched
4
+ attr_accessor :first_name_re, :last_name_re, :middle_name_re, :prefix_re
5
+
6
+ def initialize(name_string = nil, options = {})
7
+ @options = options
8
+ @last_name_re = @options[:last_name_re] || /(?:(?:v[ao]n(?:\s+der?)?|de\s+la)\s+)?\w[-.'\w]+/i
9
+ @middle_name_re = @options[:middle_name_re] || /\w(?:\.|[-.'\w]+)?/
10
+ @prefix_re = @options[:prefix_re] || /(?:c\/o|dr|mrs?|ms|miss|mister|sgt|cpt|cpl)\.?/i
11
+ @first_name_re = @options[:first_name_re] || /\w[-.'\w]+/
12
+ parse(name_string) if name_string
13
+ end
14
+
15
+ def parse(name)
16
+ @raw = name
17
+ case name
18
+ # just "Firstname Lastname"
19
+ when first_last
20
+ first_last($~)
21
+ # Catch names with prefixes, no comma
22
+ when pre_first_last
23
+ pre_first_last($~)
24
+ # Catch names with prefixes and middle names, no comma
25
+ when pre_first_mid_last
26
+ pre_first_mid_last($~)
27
+ # just "Firstname Middle Lastname"
28
+ when first_mid_last
29
+ first_mid_last($~)
30
+ # just "Lastname, Firstname (Middle)" middle is optional
31
+ when last_comma_first_mid
32
+ last_comma_first_mid($~)
33
+ # Comma with lots of lastnames, a first name, optional middle name
34
+ when multi_last_comma
35
+ multi_last_comma($~)
36
+ else
37
+ if @options[:raise_on_unknown]
38
+ raise UnknownFormat, "Could not parse #{@raw}"
39
+ else
40
+ @matched = :unknown
41
+ false
42
+ end
43
+ end
44
+ end
45
+
46
+ alias :first_name :first
47
+
48
+ def middle_i
49
+ return nil if middle.nil?
50
+ middle[0,1]
51
+ end
52
+
53
+ private
54
+ def first_last(match = nil)
55
+ return %r{^(#{first_name_re})\s+(#{last_name_re})$} if match.nil?
56
+ @first, @last = match[1 .. 2]
57
+ @matched = :first_last
58
+ end
59
+
60
+ def pre_first_last(match = nil)
61
+ return %r{^(#{prefix_re})\s+(#{first_name_re})\s+(#{last_name_re})$} if match.nil?
62
+ @prefix, @first, @last = match[1 .. 3]
63
+ @matched = :pre_first_last
64
+ end
65
+
66
+ def pre_first_mid_last(match = nil)
67
+ return %r{^(#{prefix_re})\s+(#{first_name_re})\s+(#{middle_name_re})\s+(#{last_name_re})$} if match.nil?
68
+ @prefix, @first, @middle, @last = match[1 .. 4]
69
+ @matched = :pre_first_mid_last
70
+ end
71
+
72
+ def first_mid_last(match = nil)
73
+ return %r{^(#{first_name_re})\s+(#{middle_name_re})\s+(#{last_name_re})$} if match.nil?
74
+ @first, @middle, @last = match[1 .. 3]
75
+ @matched = :first_mid_last
76
+ end
77
+
78
+ def last_comma_first_mid(match = nil)
79
+ return %r{^(#{last_name_re}),(?:\s+)?(#{first_name_re})(?:\s+(#{middle_name_re}))?$} if match.nil?
80
+ @first, @last, @middle = match[2], match[1], match[3]
81
+ @matched = :last_comma_first_mid
82
+ end
83
+
84
+ def multi_last_comma(match = nil)
85
+ return %r{^((?:#{last_name_re}(?:\s+)?)+),(?:\s+)(#{first_name_re})(?:\s+(#{middle_name_re}))?$} if match.nil?
86
+ @first, @last, @middle = match[2], match[1], match[3]
87
+ @matched = :multi_last_comma
88
+ end
89
+
90
+ end
91
+ end
@@ -0,0 +1,3 @@
1
+ module NameParse
2
+ VERSION = "0.0.5"
3
+ end
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{name_parse}
5
+ s.version = "0.0.5"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["TJ Vanderpoel"]
9
+ s.date = %q{2009-05-07}
10
+ s.description = %q{========================================================= Name Parse Copyright (c) 2009 The Rubyists (Jayson Vaughn, Tj Vanderpoel, Michael Fellinger, Kevin Berry) Distributed under the terms of the MIT License. ========================================================== About ----- A ruby library for turning arbitrary name strings such as "Dr Helen Hunt", "Mr James T. Kirk" into a standardized object usable as parsed = NameParse::Parser.new("Dr Helen Hunt") puts "%s %s" % [parsed.first, parsed.last] Requirements ------------ - ruby (>= 1.8) Usage ----- Example of using on a list: bougyman@zero:~/git_checkouts/name_parse$ irb -r lib/name_parse irb(main):001:0> list = ["Jayson Vaughn", "Dr Helen Hunt", "Mr James T. Kirk"] => ["Jayson Vaughn", "Dr Helen Hunt", "Mr James T. Kirk"] irb(main):002:0> list.map { |n| p = NameParse[n]; [p.first, p.last] } => [["Jayson", "Vaughn"], ["Helen", "Hunt"], ["James", "Kirk"]] Support ------- Home page at http://github.com/bougyman/name_parse #rubyists on FreeNode}
11
+ s.email = %q{bougy.man@gmail.com}
12
+ s.files = ["AUTHORS", "CHANGELOG", "MANIFEST", "README", "Rakefile", "lib/name_parse.rb", "lib/name_parse/error.rb", "lib/name_parse/parser.rb", "lib/name_parse/version.rb", "name_parse.gemspec", "spec/helper.rb", "spec/name_parse/parser.rb", "tasks/authors.rake", "tasks/bacon.rake", "tasks/changelog.rake", "tasks/copyright.rake", "tasks/gem.rake", "tasks/gem_installer.rake", "tasks/install_dependencies.rake", "tasks/manifest.rake", "tasks/rcov.rake", "tasks/release.rake", "tasks/reversion.rake", "tasks/setup.rake", "tasks/yard.rake"]
13
+ s.has_rdoc = true
14
+ s.homepage = %q{http://github.com/bougyman/name_parse}
15
+ s.post_install_message = %q{============================================================
16
+
17
+ Thank you for installing Name Parse!
18
+
19
+ ============================================================}
20
+ s.require_paths = ["lib"]
21
+ s.rubyforge_project = %q{pastr}
22
+ s.rubygems_version = %q{1.3.1}
23
+ s.summary = %q{Parse name strings into their constituent parts}
24
+
25
+ if s.respond_to? :specification_version then
26
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
27
+ s.specification_version = 2
28
+
29
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
30
+ else
31
+ end
32
+ else
33
+ end
34
+ end
@@ -0,0 +1,20 @@
1
+ require "pathname"
2
+ begin
3
+ require "bacon"
4
+ rescue LoadError
5
+ require "rubygems"
6
+ require "bacon"
7
+ end
8
+
9
+ begin
10
+ if (local_path = Pathname.new(__FILE__).dirname.join("..", "lib", "name_parse.rb")).file?
11
+ require local_path
12
+ else
13
+ require "name_parse"
14
+ end
15
+ rescue LoadError
16
+ require "rubygems"
17
+ require "name_parse"
18
+ end
19
+
20
+ Bacon.summary_on_exit
@@ -0,0 +1,120 @@
1
+ # Copyright (c) 2009 The Rubyists rubyists@rubyists.com
2
+ # All files in this distribution are subject to the terms of the MIT license.
3
+
4
+ require 'spec/helper'
5
+
6
+ describe "Name Parser" do
7
+
8
+
9
+ it "Should Parse A First and Last Name Without Commas" do
10
+ name = NameParse["TJ Vanderpoel"]
11
+ name.first.should == "TJ"
12
+ name.last.should == "Vanderpoel"
13
+ name.matched.should == :first_last
14
+ end
15
+
16
+ it "Should Parse A Standard Name With Commas" do
17
+ name = NameParse["Vanderpoel, T.J."]
18
+ name.first.should == "T.J."
19
+ name.last.should == "Vanderpoel"
20
+ name.matched.should == :last_comma_first_mid
21
+ end
22
+
23
+ it "Should Parse A First, Middle Initial, and Last Without Commas" do
24
+ name = NameParse["Tom J Rogers"]
25
+ name.first.should == "Tom"
26
+ name.middle.should == "J"
27
+ name.middle_i.should == "J"
28
+ name.last.should == "Rogers"
29
+ end
30
+
31
+ it "Should Parse A Prefix, First, Middle Initial (with period), and Last Without Commas" do
32
+ name = NameParse["Mr James T. Kirk"]
33
+ name.prefix.should == "Mr"
34
+ name.first.should == "James"
35
+ name.middle.should == "T."
36
+ name.middle_i.should == "T"
37
+ name.last.should == "Kirk"
38
+ end
39
+
40
+ it "Should Parse A First, Middle Initial, and Last With Commas" do
41
+ name = NameParse["Rogers, Tom J"]
42
+ name.first.should == "Tom"
43
+ name.middle.should == "J"
44
+ name.middle_i.should == "J"
45
+ name.last.should == "Rogers"
46
+ end
47
+
48
+ it "Should Parse A First, Middle Name, and Last Without Commas" do
49
+ name = NameParse["Tom James Rogers"]
50
+ name.first.should == "Tom"
51
+ name.middle.should == "James"
52
+ name.middle_i.should == "J"
53
+ name.last.should == "Rogers"
54
+ end
55
+
56
+ it "Should Parse A First, Middle Name, and Last With Commas" do
57
+ name = NameParse["Rogers, Tom James"]
58
+ name.first.should == "Tom"
59
+ name.middle.should == "James"
60
+ name.middle_i.should == "J"
61
+ name.last.should == "Rogers"
62
+ end
63
+
64
+ it "Should Parse A 'Von Something' Name Without Commas" do
65
+ name = NameParse["TJ Von Trapp"]
66
+ name.first.should == "TJ"
67
+ name.last.should == "Von Trapp"
68
+ end
69
+
70
+ it "Should Parse A 'Von Something' Name With Commas" do
71
+ name = NameParse["Von Trapp, T.J."]
72
+ name.first.should == "T.J."
73
+ name.last.should == "Von Trapp"
74
+ end
75
+
76
+ it "Should Parse A 'Van Something' Name Without Commas" do
77
+ name = NameParse["TJ Van Poel"]
78
+ name.first.should == "TJ"
79
+ name.last.should == "Van Poel"
80
+ end
81
+
82
+ it "Should Parse A 'Van de Something' Name Without Commas" do
83
+ name = NameParse["TJ Van de Poel"]
84
+ name.first.should == "TJ"
85
+ name.last.should == "Van de Poel"
86
+ end
87
+
88
+ it "Should Parse A 'Van der Something' Name Without Commas" do
89
+ name = NameParse["TJ Van der Poel"]
90
+ name.first.should == "TJ"
91
+ name.last.should == "Van der Poel"
92
+ end
93
+
94
+ it "Should Parse A 'De la Something' Name Without Commas" do
95
+ name = NameParse["Oscar De la Hoya"]
96
+ name.first.should == "Oscar"
97
+ name.last.should == "De la Hoya"
98
+ end
99
+
100
+ it "Should Parse A Doctor's Name" do
101
+ name = NameParse["Dr Phil Seuss"]
102
+ name.first.should == "Phil"
103
+ name.last.should == "Seuss"
104
+ name.prefix.should == "Dr"
105
+ end
106
+
107
+ it "Should Parse a Name with C/O as Prefix" do
108
+ name = NameParse["C/O Chris Elrod"]
109
+ name.first.should == "Chris"
110
+ name.last.should == "Elrod"
111
+ name.prefix.should == "C/O"
112
+ end
113
+
114
+ it "Should parse a 2 lastname name with a comma" do
115
+ name = NameParse["Alfredo Lorenzo, Frank"]
116
+ name.first.should == "Frank"
117
+ name.last.should == "Alfredo Lorenzo"
118
+ end
119
+
120
+ end
@@ -0,0 +1,30 @@
1
+ # Once git has a fix for the glibc in handling .mailmap and another fix for
2
+ # allowing empty mail address to be mapped in .mailmap we won't have to handle
3
+ # them manually.
4
+
5
+ desc 'Update AUTHORS'
6
+ task :authors do
7
+ authors = Hash.new(0)
8
+
9
+ `git shortlog -nse`.scan(/(\d+)\s(.+)\s<(.*)>$/) do |count, name, email|
10
+ case name
11
+ when "bougyman"
12
+ name, email = "TJ Vanderpoel", "bougy.man@gmail.com"
13
+ when /riscfuture/i
14
+ name, email = "Tim Morgan", "riscfuture@gmail.com"
15
+ when "Michael Fellinger m.fellinger@gmail.com"
16
+ name, email = "Michael Fellinger", "m.fellinger@gmail.com"
17
+ end
18
+
19
+ authors[[name, email]] += count.to_i
20
+ end
21
+
22
+ File.open('AUTHORS', 'w+') do |io|
23
+ io.puts "Following persons have contributed to #{GEMSPEC.name}."
24
+ io.puts '(Sorted by number of submitted patches, then alphabetically)'
25
+ io.puts ''
26
+ authors.sort_by{|(n,e),c| [-c, n.downcase] }.each do |(name, email), count|
27
+ io.puts("%6d %s <%s>" % [count, name, email])
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,66 @@
1
+ desc 'Run all bacon specs with pretty output'
2
+ task :bacon => :install_dependencies do
3
+ require 'open3'
4
+ require 'scanf'
5
+ require 'matrix'
6
+
7
+ specs = PROJECT_SPECS
8
+
9
+ some_failed = false
10
+ specs_size = specs.size
11
+ len = specs.map{|s| s.size }.sort.last
12
+ total_tests = total_assertions = total_failures = total_errors = 0
13
+ totals = Vector[0, 0, 0, 0]
14
+
15
+ red, yellow, green = "\e[31m%s\e[0m", "\e[33m%s\e[0m", "\e[32m%s\e[0m"
16
+ left_format = "%4d/%d: %-#{len + 11}s"
17
+ spec_format = "%d specifications (%d requirements), %d failures, %d errors"
18
+
19
+ specs.each_with_index do |spec, idx|
20
+ print(left_format % [idx + 1, specs_size, spec])
21
+
22
+ Open3.popen3(RUBY, spec) do |sin, sout, serr|
23
+ out = sout.read.strip
24
+ err = serr.read.strip
25
+
26
+ # this is conventional, see spec/innate/state/fiber.rb for usage
27
+ if out =~ /^Bacon::Error: (needed .*)/
28
+ puts(yellow % ("%6s %s" % ['', $1]))
29
+ else
30
+ total = nil
31
+
32
+ out.each_line do |line|
33
+ scanned = line.scanf(spec_format)
34
+
35
+ next unless scanned.size == 4
36
+
37
+ total = Vector[*scanned]
38
+ break
39
+ end
40
+
41
+ if total
42
+ totals += total
43
+ tests, assertions, failures, errors = total_array = total.to_a
44
+
45
+ if tests > 0 && failures + errors == 0
46
+ puts((green % "%6d passed") % tests)
47
+ else
48
+ some_failed = true
49
+ puts(red % " failed")
50
+ puts out unless out.empty?
51
+ puts err unless err.empty?
52
+ end
53
+ else
54
+ some_failed = true
55
+ puts(red % " failed")
56
+ puts out unless out.empty?
57
+ puts err unless err.empty?
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ total_color = some_failed ? red : green
64
+ puts(total_color % (spec_format % totals.to_a))
65
+ exit 1 if some_failed
66
+ end
@@ -0,0 +1,18 @@
1
+ desc 'update changelog'
2
+ task :changelog do
3
+ File.open('CHANGELOG', 'w+') do |changelog|
4
+ `git log -z --abbrev-commit`.split("\0").each do |commit|
5
+ next if commit =~ /^Merge: \d*/
6
+ ref, author, time, _, title, _, message = commit.split("\n", 7)
7
+ ref = ref[/commit ([0-9a-f]+)/, 1]
8
+ author = author[/Author: (.*)/, 1].strip
9
+ time = Time.parse(time[/Date: (.*)/, 1]).utc
10
+ title.strip!
11
+
12
+ changelog.puts "[#{ref} | #{time}] #{author}"
13
+ changelog.puts '', " * #{title}"
14
+ changelog.puts '', message.rstrip if message
15
+ changelog.puts
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ desc "add copyright to all .rb files in the distribution"
2
+ task :copyright do
3
+ ignore = File.readlines('doc/LEGAL').
4
+ select{|line| line.strip!; File.exist?(line)}.
5
+ map{|file| File.expand_path(file)}
6
+
7
+ puts "adding copyright to files that don't have it currently"
8
+ puts PROJECT_COPYRIGHT
9
+ puts
10
+
11
+ Dir['{lib,test}/**/*{.rb}'].each do |file|
12
+ file = File.expand_path(file)
13
+ next if ignore.include? file
14
+ lines = File.readlines(file).map{|l| l.chomp}
15
+ unless lines.first(PROJECT_COPYRIGHT.size) == PROJECT_COPYRIGHT
16
+ puts "#{file} seems to need attention, first 4 lines:"
17
+ puts lines[0..3]
18
+ puts
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ require 'rake/gempackagetask'
2
+
3
+ desc "make a gemspec"
4
+ task :gemspec => [:manifest, :changelog, :authors] do
5
+ gemspec_file = "#{GEMSPEC.name}.gemspec"
6
+ File.open(gemspec_file, 'w+'){|gs| gs.puts(GEMSPEC.to_ruby) }
7
+ end
8
+
9
+ desc "package and install from gemspec"
10
+ task :install => [:gemspec] do
11
+ sh "gem build #{GEMSPEC.name}.gemspec"
12
+ sh "gem install #{GEMSPEC.name}-#{GEMSPEC.version}.gem"
13
+ end
14
+
15
+ desc "uninstall the gem"
16
+ task :uninstall => [:clean] do
17
+ sh %{gem uninstall -x #{GEMSPEC.name}}
18
+ end
19
+
20
+ Rake::GemPackageTask.new(GEMSPEC) do |p|
21
+ p.need_tar = true
22
+ p.need_zip = true
23
+ end
@@ -0,0 +1,76 @@
1
+ task :gem_installer do
2
+ class GemInstaller
3
+ def initialize(options = {}, &block)
4
+ @gems = []
5
+ @options = options
6
+
7
+ run(&block)
8
+ end
9
+
10
+ def run(&block)
11
+ instance_eval(&block) if block_given?
12
+ end
13
+
14
+ def gem(name, version = nil, options = {})
15
+ if version.respond_to?(:merge!)
16
+ options = version
17
+ else
18
+ options[:version] = version
19
+ end
20
+
21
+ @gems << [name, options]
22
+ end
23
+
24
+ def setup_gemspec(gemspec)
25
+ gemspec.dependencies.each do |dependency|
26
+ dependency.version_requirements.as_list.each do |version|
27
+ gem(dependency.name, version)
28
+ end
29
+ end
30
+
31
+ setup
32
+ end
33
+
34
+ def setup
35
+ require 'rubygems'
36
+ require 'rubygems/dependency_installer'
37
+
38
+ @gems.each do |name, options|
39
+ setup_gem(name, options)
40
+ end
41
+ end
42
+
43
+ def setup_gem(name, options, try_install = true)
44
+ print "activating #{name} ... "
45
+ Gem.activate(name, *[options[:version]].compact)
46
+ require(options[:lib] || name)
47
+ puts "success."
48
+ rescue LoadError => error
49
+ puts error
50
+ install_gem(name, options) if try_install
51
+ setup_gem(name, options, try_install = false)
52
+ end
53
+
54
+ def install_gem(name, options)
55
+ installer = Gem::DependencyInstaller.new(options)
56
+
57
+ temp_argv(options[:extconf]) do
58
+ print "Installing #{name} ... "
59
+ installer.install(name, options[:version])
60
+ puts "done."
61
+ end
62
+ end
63
+
64
+ def temp_argv(extconf)
65
+ if extconf ||= @options[:extconf]
66
+ old_argv = ARGV.clone
67
+ ARGV.replace(extconf.split(' '))
68
+ end
69
+
70
+ yield
71
+
72
+ ensure
73
+ ARGV.replace(old_argv) if extconf
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,6 @@
1
+ desc 'install dependencies'
2
+ task :install_dependencies => [:gem_installer] do
3
+ GemInstaller.new do
4
+ setup_gemspec(GEMSPEC)
5
+ end
6
+ end
@@ -0,0 +1,4 @@
1
+ desc 'update manifest'
2
+ task :manifest do
3
+ File.open('MANIFEST', 'w+'){|io| io.puts(*GEMSPEC.files) }
4
+ end
@@ -0,0 +1,23 @@
1
+ desc 'code coverage'
2
+ task :rcov => :clean do
3
+ specs = PROJECT_SPECS
4
+
5
+ ignore = %w[ gem rack bacon innate hpricot nagoro/lib/nagoro ]
6
+
7
+ if RUBY_VERSION >= '1.8.7'
8
+ ignore << 'begin_with' << 'end_with'
9
+ end
10
+ if RUBY_VERSION < '1.9'
11
+ ignore << 'fiber'
12
+ end
13
+
14
+ ignored = ignore.join(',')
15
+
16
+ cmd = "rcov --aggregate coverage.data --sort coverage -t --%s -x '#{ignored}' %s"
17
+
18
+ while spec = specs.shift
19
+ puts '', "Gather coverage for #{spec} ..."
20
+ html = specs.empty? ? 'html' : 'no-html'
21
+ sh(cmd % [html, spec])
22
+ end
23
+ end
@@ -0,0 +1,52 @@
1
+ namespace :release do
2
+ task :all => [:release_github, :release_rubyforge]
3
+
4
+ desc 'Display instructions to release on github'
5
+ task :github => [:reversion, :gemspec] do
6
+ name, version = GEMSPEC.name, GEMSPEC.version
7
+
8
+ puts <<INSTRUCTIONS
9
+ First add the relevant files:
10
+
11
+ git add AUTHORS MANIFEST CHANGELOG #{name}.gemspec lib/#{name}/version.rb
12
+
13
+ Then commit them, tag the commit, and push:
14
+
15
+ git commit -m 'Version #{version}'
16
+ git tag -a -m '#{version}' '#{version}'
17
+ git push
18
+
19
+ INSTRUCTIONS
20
+
21
+ end
22
+
23
+ # TODO: Not tested
24
+ desc 'Display instructions to release on rubyforge'
25
+ task :rubyforge => [:reversion, :gemspec, :package] do
26
+ name, version = GEMSPEC.name, GEMSPEC.version
27
+
28
+ puts <<INSTRUCTIONS
29
+ To publish to rubyforge do following:
30
+
31
+ rubyforge login
32
+ rubyforge add_release #{name} #{name} '#{version}' pkg/#{name}-#{version}.gem
33
+
34
+ After you have done these steps, see:
35
+
36
+ rake release:rubyforge_archives
37
+
38
+ INSTRUCTIONS
39
+ end
40
+
41
+ desc 'Display instructions to add archives after release:rubyforge'
42
+ task :rubyforge_archives do
43
+ name, version = GEMSPEC.name, GEMSPEC.version
44
+ puts "Adding archives for distro packagers is:", ""
45
+
46
+ Dir["pkg/#{name}-#{version}.{tgz,zip}"].each do |file|
47
+ puts "rubyforge add_file #{name} #{name} '#{version}' '#{file}'"
48
+ end
49
+
50
+ puts
51
+ end
52
+ end
@@ -0,0 +1,8 @@
1
+ desc "update version.rb"
2
+ task :reversion do
3
+ File.open("lib/#{GEMSPEC.name}/version.rb", 'w+') do |file|
4
+ file.puts("module #{PROJECT_MODULE}")
5
+ file.puts(' VERSION = %p' % GEMSPEC.version.to_s)
6
+ file.puts('end')
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ desc 'install all possible dependencies'
2
+ task :setup => :gem_installer do
3
+ GemInstaller.new do
4
+ # core
5
+ # spec
6
+ gem 'bacon'
7
+ gem 'rcov'
8
+
9
+ # doc
10
+ gem 'yard'
11
+
12
+ setup
13
+ end
14
+ end
@@ -0,0 +1,4 @@
1
+ desc 'Generate YARD documentation'
2
+ task :yard => :clean do
3
+ sh("yardoc -o ydoc --protected -r #{PROJECT_README}")
4
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: name_parse
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - TJ Vanderpoel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-03-01 00:00:00 -06:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: |
17
+ =========================================================
18
+ Name Parse
19
+ Copyright (c) 2009 The Rubyists (Jayson Vaughn, Tj Vanderpoel, Michael Fellinger, Kevin Berry)
20
+ Distributed under the terms of the MIT License.
21
+ ==========================================================
22
+
23
+ About
24
+ -----
25
+ A ruby library for turning arbitrary name strings such as "Dr Helen Hunt", "Mr James T. Kirk" into a
26
+ standardized object usable as
27
+ parsed = NameParse::Parser.new("Dr Helen Hunt")
28
+ puts "%s %s" % [parsed.first, parsed.last]
29
+
30
+
31
+ Requirements
32
+ ------------
33
+ - ruby (>= 1.8)
34
+
35
+ Usage
36
+ -----
37
+
38
+ Example of using on a list:
39
+
40
+ bougyman@zero:~/git_checkouts/name_parse$ irb -r lib/name_parse
41
+ irb(main):001:0> list = ["Jayson Vaughn", "Dr Helen Hunt", "Mr James T. Kirk"]
42
+ => ["Jayson Vaughn", "Dr Helen Hunt", "Mr James T. Kirk"]
43
+ irb(main):002:0> list.map { |n| p = NameParse[n]; [p.first, p.last] }
44
+ => [["Jayson", "Vaughn"], ["Helen", "Hunt"], ["James", "Kirk"]]
45
+
46
+
47
+ Support
48
+ -------
49
+ Home page at http://github.com/bougyman/name_parse
50
+ #rubyists on FreeNode
51
+
52
+ email: bougy.man@gmail.com
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files: []
58
+
59
+ files:
60
+ - .gitconfig
61
+ - AUTHORS
62
+ - CHANGELOG
63
+ - MANIFEST
64
+ - README
65
+ - Rakefile
66
+ - lib/name_parse.rb
67
+ - lib/name_parse/error.rb
68
+ - lib/name_parse/parser.rb
69
+ - lib/name_parse/version.rb
70
+ - name_parse.gemspec
71
+ - spec/helper.rb
72
+ - spec/name_parse/parser.rb
73
+ - tasks/authors.rake
74
+ - tasks/bacon.rake
75
+ - tasks/changelog.rake
76
+ - tasks/copyright.rake
77
+ - tasks/gem.rake
78
+ - tasks/gem_installer.rake
79
+ - tasks/install_dependencies.rake
80
+ - tasks/manifest.rake
81
+ - tasks/rcov.rake
82
+ - tasks/release.rake
83
+ - tasks/reversion.rake
84
+ - tasks/setup.rake
85
+ - tasks/yard.rake
86
+ has_rdoc: true
87
+ homepage: http://github.com/bougyman/name_parse
88
+ licenses: []
89
+
90
+ post_install_message: |-
91
+ ============================================================
92
+
93
+ Thank you for installing Name Parse!
94
+
95
+ ============================================================
96
+ rdoc_options: []
97
+
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: "0"
105
+ version:
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: "0"
111
+ version:
112
+ requirements: []
113
+
114
+ rubyforge_project: pastr
115
+ rubygems_version: 1.3.5
116
+ signing_key:
117
+ specification_version: 3
118
+ summary: Parse name strings into their constituent parts
119
+ test_files: []
120
+