namelogic 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.
data/Gemfile ADDED
@@ -0,0 +1,17 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "rspec", "~> 2.8.0"
10
+ gem "rdoc", "~> 3.12"
11
+ gem "bundler", "~> 1.1.0"
12
+ gem "jeweler", "~> 1.8.3"
13
+ #gem "rcov", ">= 0"
14
+ end
15
+
16
+ gem 'htmlentities', '~>4.3.0'
17
+ gem 'active_support'
data/Gemfile.lock ADDED
@@ -0,0 +1,37 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ active_support (3.0.0)
5
+ activesupport (= 3.0.0)
6
+ activesupport (3.0.0)
7
+ diff-lcs (1.1.3)
8
+ git (1.2.5)
9
+ htmlentities (4.3.1)
10
+ jeweler (1.8.3)
11
+ bundler (~> 1.0)
12
+ git (>= 1.2.5)
13
+ rake
14
+ rdoc
15
+ json (1.6.5)
16
+ rake (0.9.2.2)
17
+ rdoc (3.12)
18
+ json (~> 1.4)
19
+ rspec (2.8.0)
20
+ rspec-core (~> 2.8.0)
21
+ rspec-expectations (~> 2.8.0)
22
+ rspec-mocks (~> 2.8.0)
23
+ rspec-core (2.8.0)
24
+ rspec-expectations (2.8.0)
25
+ diff-lcs (~> 1.1.2)
26
+ rspec-mocks (2.8.0)
27
+
28
+ PLATFORMS
29
+ ruby
30
+
31
+ DEPENDENCIES
32
+ active_support
33
+ bundler (~> 1.1.0)
34
+ htmlentities (~> 4.3.0)
35
+ jeweler (~> 1.8.3)
36
+ rdoc (~> 3.12)
37
+ rspec (~> 2.8.0)
data/README.rdoc ADDED
@@ -0,0 +1,7 @@
1
+
2
+ == namelogic
3
+
4
+ Wiki Segmented Name Logic
5
+
6
+ == Abstract
7
+
data/Rakefile ADDED
@@ -0,0 +1,66 @@
1
+
2
+ # encoding: utf-8
3
+
4
+ require 'rubygems'
5
+ require 'bundler'
6
+
7
+ VERSION = File.exist?('VERSION') ? File.read('VERSION') : ""
8
+
9
+ begin
10
+ Bundler.setup(:default, :development)
11
+ rescue Bundler::BundlerError => e
12
+ $stderr.puts e.message
13
+ $stderr.puts "Run `bundle install` to install missing gems"
14
+ exit e.status_code
15
+ end
16
+
17
+ require 'rake'
18
+
19
+ begin
20
+ require 'jeweler'
21
+ Jeweler::Tasks.new do |gem|
22
+ gem.name = 'namelogic'
23
+ gem.version = VERSION
24
+ gem.license = "MIT"
25
+ gem.summary = "Wiki Segmented Name Logic"
26
+ gem.email = "gerryg@inbox.com"
27
+ gem.homepage = "http://github.com/GerryG/namelogic/"
28
+ gem.description = "Wiki Segmented Name Logic"
29
+ gem.authors = ["Gerry Gleason <gerryg@inbox.com>"]
30
+ gem.files = FileList[
31
+ '[A-Z]*',
32
+ '*.rb',
33
+ 'lib/**/*.rb',
34
+ 'spec/**/*.rb' ].to_a
35
+ gem.test_files = Dir.glob('spec/*_spec.rb')
36
+ gem.has_rdoc = true
37
+ gem.extra_rdoc_files = [ "README.rdoc", "CHANGES" ]
38
+ gem.rdoc_options = ["--main", "README.rdoc", "--inline-source", "--line-numbers"]
39
+ end
40
+ rescue LoadError
41
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
42
+ end
43
+
44
+ Jeweler::RubygemsDotOrgTasks.new
45
+
46
+ require 'rspec/core'
47
+ require 'rspec/core/rake_task'
48
+ RSpec::Core::RakeTask.new(:spec) do |spec|
49
+ spec.pattern = FileList['spec/**/*_spec.rb']
50
+ end
51
+
52
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
53
+ spec.pattern = 'spec/**/*_spec.rb'
54
+ spec.rcov = true
55
+ end
56
+
57
+ task :default => :spec
58
+
59
+ require 'rdoc/task'
60
+ Rake::RDocTask.new do |rdoc|
61
+
62
+ rdoc.rdoc_dir = 'rdoc'
63
+ rdoc.title = "namelogic #{VERSION}"
64
+ rdoc.rdoc_files.include('README*')
65
+ rdoc.rdoc_files.include('lib/**/*.rb')
66
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
data/lib/name_logic.rb ADDED
@@ -0,0 +1,193 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class NameLogic < String
3
+
4
+ # do: Object.send :include, NameLogic::ObjectMethods to enable x.to_name
5
+ module ObjectMethods
6
+ def to_name() NameLogic.new(self) end
7
+ end
8
+
9
+ require 'htmlentities'
10
+
11
+ class << self
12
+ attr_accessor :joint, :banned_array, :banned_re, :var_match,
13
+ :formal_joint, :uninflect, :name2nameobject
14
+ end
15
+
16
+ def method_missing meth, *args
17
+ if self.class.respond_to? meth
18
+ self.class.send meth, *args
19
+ else raise end
20
+ end
21
+
22
+
23
+ # Wagny defaults
24
+ JOINT = ?+
25
+ BANNED_ARRAY = [ ?/, ?~, ?| ]
26
+ BANNED_CHARACTERS = BANNED_ARRAY * ' '
27
+
28
+ VAR_MATCH = /\{([^\}]*})\}/
29
+ WORD_RE = RUBY_VERSION =~ /^1\.9/ ? '\p{Word}/' : '/\w/'
30
+ SINGULAR = :singularize
31
+
32
+ @name2nameobject = {}
33
+
34
+ # reset these class instance vars to your system's to customize name syntax
35
+ @joint = JOINT
36
+ @formal_joint = " <span class=\"wiki-joint\">#{JOINT}</span> "
37
+ @banned_array = BANNED_ARRAY
38
+ @banned_re = /#{ ([?[] + @banned_array << @joint )*?\\ }#{ ?] }/
39
+ @var_match = VAR_MATCH
40
+ @uninflect = SINGULAR
41
+
42
+ class << self
43
+ def new obj
44
+ return obj if NameLogic===obj
45
+ str = Array===obj ? obj*joint : obj.to_s
46
+ return obj if obj = name2nameobject[str]
47
+ super str.strip
48
+ end
49
+
50
+ def user() '' end # override to fetch your user string for _user subs
51
+ end
52
+
53
+ attr_reader :simple, :parts, :key
54
+ alias to_key key
55
+
56
+ def initialize str
57
+ super str
58
+ #warn "init #{str.inspect}, #{inspect}, #{self.class.joint}, #{joint}"
59
+ @key = if index joint
60
+ @parts = str.split(/\s*#{Regexp.escape(joint)}\s*/)
61
+ @parts << '' if str[-1] == joint
62
+ @simple = false
63
+ @parts.map{|p| p.to_name.key } * joint
64
+ else
65
+ @parts = [str]
66
+ @simple = true
67
+ empty? ? '' : generate_simple_key
68
+ end
69
+ name2nameobject[str] = self
70
+ end
71
+
72
+ def generate_simple_key
73
+ decode_html.underscore.gsub(/[^#{WORD_RE}\*]+/,'_').split(/_+/).reject(&:empty?).map(&uninflect)*?_
74
+ end
75
+
76
+ def decode_html
77
+ @decoded ||= (index(?&) ? HTMLEntities.new.decode(to_s) : to_s)
78
+ end
79
+
80
+ alias simple? simple
81
+
82
+ def inspect() "<Name key=#{key}[#{self}, #{parts ? parts.size : 'no size'}]>" end
83
+
84
+ def self.unescape(uri) uri.gsub(' ','+').gsub('_',' ') end
85
+
86
+ def self.substitute!( str, hash )
87
+ str.gsub!(var_match) { |x| (v=hash[var.to_sym]).nil? ? x : v }
88
+ str
89
+ end
90
+
91
+ def ==(obj)
92
+ obj.nil? ? false :
93
+ key == (obj.respond_to?(:to_key) ? obj.to_key :
94
+ obj.respond_to?(:to_name) ? obj.to_name.key : obj.to_s)
95
+ end
96
+
97
+ def size() parts.size end
98
+ def to_name() self end
99
+ def valid?() not parts.find {|pt| pt.match(banned_re)} end
100
+
101
+ def replace_part( oldpart, newpart )
102
+ oldpart = oldpart.to_name unless NameLogic===oldpart
103
+ newpart = newpart.to_name unless NameLogic===newpart
104
+ if oldpart.simple?
105
+ simple? ? (self == oldpart ? newpart : self) :
106
+ parts.map{ |p| oldpart == p ? newpart : p }.to_name
107
+ elsif simple?
108
+ self
109
+ else
110
+ oldpart == parts[0, oldpart.size] ?
111
+ ((self.size == oldpart.size) ? newpart :
112
+ (newpart.parts+(parts[oldpart.size,].lines.to_a)).to_name) : self
113
+ end
114
+ end
115
+
116
+
117
+ def tag_name() simple? ? self : parts[-1] end
118
+ def left_name() simple? ? nil : self.class.new(parts[0..-2]) end
119
+ def trunk_name() simple? ? self : self.class.new(parts[0..-2]) end
120
+ def junction?() not simple? end
121
+ alias particle_names parts
122
+
123
+ def module_name() gsub(/^\*/,'X_').gsub(/[\b\s]+/,'_').camelcase end
124
+ def css_name() @css_name ||= key.gsub('*','X').gsub('+','-') end
125
+
126
+ def to_star() star? ? self : ?*+self end
127
+ def star?() simple? and self[0] == ?* end
128
+ def tag_star?() junction? and ?* == parts[-1][0] end
129
+ alias rstar? tag_star?
130
+ def star_rule(star)
131
+ star = star.to_s
132
+ [self, star.index(?*) ? star : ?*+star].to_name
133
+ end
134
+
135
+ alias blank? empty?
136
+
137
+ def pre_cgi() parts * '~plus~' end
138
+ def escape() gsub(' ','_') end
139
+
140
+ def to_url_key()
141
+ @url_key ||= decode_html.gsub(/[^\*#{WORD_RE}\s\+]/,' ').
142
+ strip.gsub(/[\s\_]+/,'_')
143
+ end
144
+
145
+ def piece_names()
146
+ simple? ? [self] : ([self] + trunk_name.piece_names + [tag_name]).uniq
147
+ end
148
+
149
+ def to_show(context)
150
+ # FIXME this is not quite right. distinction is that is leaves blank parts blank.
151
+ (self =~/\b_(left|right|whole|self|user|main|\d+|L*R?)\b/) ?
152
+ to_absolute(context) : self
153
+ end
154
+
155
+ def escapeHTML(args)
156
+ args ? parts.map { |p| p =~ /^_/ and args[p] ? args[p] : p }*joint : self
157
+ end
158
+
159
+ def to_absolute_name(rel_name=nil)
160
+ (rel_name || self).to_name.to_absolute(self)
161
+ end
162
+
163
+ def nth_left(n)
164
+ (n >= size ? parts[0] : parts[0..-n-1]).to_name
165
+ end
166
+
167
+ def to_absolute(context, params=nil)
168
+ context = context.to_name
169
+ parts.map do |part|
170
+ new_part = case part
171
+ #when /^_user$/i; user || part
172
+ when /^_main$/i; Wagn::Conf[:main_name]
173
+ when /^(_self|_whole|_)$/i; context
174
+ when /^_left$/i; context.trunk_name
175
+ when /^_right$/i; context.tag_name
176
+ when /^_(\d+)$/i;
177
+ pos = $~[1].to_i
178
+ pos = context.size if pos > context.size
179
+ context.parts[pos-1]
180
+ when /^_(L*)(R?)$/i
181
+ l_s, r_s = $~[1].size, $~[2].empty?
182
+ trunk = context.nth_left(l_s)
183
+ r= r_s ? trunk.to_s : trunk.tag_name
184
+ when /^_/
185
+ (params && ppart = params[part]) ? CGI.escapeHTML( ppart ) : part
186
+ else part
187
+ end.strip
188
+ new_part.empty? ? context : new_part
189
+ end * joint
190
+ end
191
+
192
+ end
193
+
@@ -0,0 +1,194 @@
1
+ # encoding: utf-8
2
+ require File.expand_path('../spec_helper', File.dirname(__FILE__))
3
+
4
+ describe NameLogic do
5
+
6
+ describe "#to_key" do
7
+ it "should remove spaces" do
8
+ "This Name".to_name.to_key.should == "this_name"
9
+ end
10
+
11
+ it "should singularize" do
12
+ "ethans".to_name.to_key.should == "ethan"
13
+ end
14
+
15
+ it "should underscore" do
16
+ "ThisThing".to_name.to_key.should == "this_thing"
17
+ end
18
+
19
+ it "should handle plus cards" do
20
+ "ThisThing+Ethans".to_name.to_key.should == "this_thing+ethan"
21
+ end
22
+
23
+ it "should retain * for star cards" do
24
+ "*right".to_name.to_key.should == "*right"
25
+ end
26
+
27
+ it "should not singularize double s's" do
28
+ "grass".to_name.to_key.should == 'grass'
29
+ end
30
+
31
+ it "should not singularize letter 'S'" do
32
+ 'S'.to_name.to_key.should == 's'
33
+ end
34
+
35
+ it "should handle unicode characters" do
36
+ "Mañana".to_name.to_key.should == 'mañana'
37
+ end
38
+
39
+ it "should handle weird initial characters" do
40
+ '__you motha @#$'.to_name.to_key.should == 'you_motha'
41
+ '?!_you motha @#$'.to_name.to_key.should == 'you_motha'
42
+ end
43
+
44
+ it "should allow numbers" do
45
+ "3way".to_name.to_key.should == '3way'
46
+ end
47
+
48
+ it "internal plurals" do
49
+ "cards hooks label foos".to_name.to_key.should == 'card_hook_label_foo'
50
+ end
51
+
52
+ it "should handle html entities" do
53
+ # This no longer takes off the s, is singularize broken now?
54
+ "Jean-fran&ccedil;ois Noubel".to_name.to_key.should == 'jean_françoi_noubel'
55
+ end
56
+ end
57
+
58
+ describe "#to_absolute" do
59
+ it "handles _self, _whole, _" do
60
+ "_self".to_name.to_absolute("foo").should == "foo"
61
+ "_whole".to_name.to_absolute("foo").should == "foo"
62
+ "_".to_name.to_absolute("foo").should == "foo"
63
+ end
64
+
65
+ it "handles _left" do
66
+ "_left+Z".to_name.to_absolute("A+B+C").should == "A+B+Z"
67
+ end
68
+
69
+ it "handles white space" do
70
+ "_left + Z".to_name.to_absolute("A+B+C").should == "A+B+Z"
71
+ end
72
+
73
+ it "handles _right" do
74
+ "_right+bang".to_name.to_absolute("nutter+butter").should == "butter+bang"
75
+ "C+_right".to_name.to_absolute("B+A").should == "C+A"
76
+ end
77
+
78
+ it "handles leading +" do
79
+ "+bug".to_name.to_absolute("hum").should == "hum+bug"
80
+ end
81
+
82
+ it "handles trailing +" do
83
+ "bug+".to_name.to_absolute("tracks").should == "bug+tracks"
84
+ end
85
+
86
+ it "handles _(numbers)" do
87
+ "_1".to_name.to_absolute("A+B+C").should == "A"
88
+ "_1+_2".to_name.to_absolute("A+B+C").should == "A+B"
89
+ "_2+_3".to_name.to_absolute("A+B+C").should == "B+C"
90
+ end
91
+
92
+ it "handles _LLR etc" do
93
+ "_R".to_name.to_absolute("A+B+C+D+E").should == "E"
94
+ "_L".to_name.to_absolute("A+B+C+D+E").should == "A+B+C+D"
95
+ "_LR".to_name.to_absolute("A+B+C+D+E").should == "D"
96
+ "_LL".to_name.to_absolute("A+B+C+D+E").should == "A+B+C"
97
+ "_LLR".to_name.to_absolute("A+B+C+D+E").should == "C"
98
+ "_LLL".to_name.to_absolute("A+B+C+D+E").should == "A+B"
99
+ "_LLLR".to_name.to_absolute("A+B+C+D+E").should == "B"
100
+ "_LLLL".to_name.to_absolute("A+B+C+D+E").should == "A"
101
+ end
102
+
103
+ context "mismatched requests" do
104
+ it "returns _self for _left or _right on non-junctions" do
105
+ "_left+Z".to_name.to_absolute("A").should == "A+Z"
106
+ "_right+Z".to_name.to_absolute("A").should == "A+Z"
107
+ end
108
+
109
+ it "handles bogus numbers" do
110
+ "_1".to_name.to_absolute("A").should == "A"
111
+ "_1+_2".to_name.to_absolute("A").should == "A+A"
112
+ "_2+_3".to_name.to_absolute("A").should == "A+A"
113
+ end
114
+
115
+ it "handles bogus _llr requests" do
116
+ "_R".to_name.to_absolute("A").should == "A"
117
+ "_L".to_name.to_absolute("A").should == "A"
118
+ "_LR".to_name.to_absolute("A").should == "A"
119
+ "_LL".to_name.to_absolute("A").should == "A"
120
+ "_LLR".to_name.to_absolute("A").should == "A"
121
+ "_LLL".to_name.to_absolute("A").should == "A"
122
+ "_LLLR".to_name.to_absolute("A").should == "A"
123
+ "_LLLL".to_name.to_absolute("A").should == "A"
124
+ end
125
+ end
126
+ end
127
+
128
+
129
+
130
+ describe "#to_url_key" do
131
+ cardnames = ["GrassCommons.org", 'Oh you @##', "Alice's Restaurant!", "PB &amp; J", "Mañana"].map(&:to_name)
132
+
133
+ cardnames.each do |cardname|
134
+ it "should have the same key as the name" do
135
+ k, k2 = cardname.to_key, cardname.to_url_key
136
+ #warn "cn tok #{cardname.inspect}, #{k.inspect}, #{k2.inspect}"
137
+ k.should == k2.to_name.to_key
138
+ end
139
+ end
140
+ end
141
+
142
+ describe "#valid" do
143
+ it "accepts valid names" do
144
+ "this+THAT".to_name.should be_valid
145
+ "THE*ONE*AND$!ONLY".to_name.should be_valid
146
+ end
147
+
148
+ it "rejects invalide names" do
149
+ "Tes~sd".to_name.should_not be_valid
150
+ "TEST/DDER".to_name.should_not be_valid
151
+ end
152
+ end
153
+
154
+ describe "#left_name" do
155
+ it "returns nil for non junction" do
156
+ "a".to_name.left_name.should == nil
157
+ end
158
+
159
+ it "returns parent for parent" do
160
+ "a+b+c+d".to_name.left_name.should == "a+b+c"
161
+ end
162
+ end
163
+
164
+ describe "#tag_name" do
165
+ it "returns last part of plus card" do
166
+ "a+b+c".to_name.tag_name.should == "c"
167
+ end
168
+
169
+ it "returns name of simple card" do
170
+ "a".to_name.tag_name.should == "a"
171
+ end
172
+ end
173
+
174
+ describe "#css_name" do
175
+ it "subs pluses & stars" do
176
+ "Alpha?+*be-ta".to_name.css_name.should == "alpha-Xbe_tum"
177
+ end
178
+ end
179
+
180
+ describe "#replace_part" do
181
+ it "replaces first name part" do
182
+ 'a+b'.to_name.replace_part('a','x').to_s.should == 'x+b'
183
+ end
184
+ it "replaces second name part" do
185
+ 'a+b'.to_name.replace_part('b','x').to_s.should == 'a+x'
186
+ end
187
+ it "replaces two name parts" do
188
+ 'a+b+c'.to_name.replace_part('a+b','x').to_s.should == 'x+c'
189
+ end
190
+ it "doesn't replace two part tag" do
191
+ 'a+b+c'.to_name.replace_part('b+c','x').to_s.should == 'a+b+c'
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,15 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/name_logic")
2
+ require 'active_support/inflector'
3
+
4
+ # Add new inflection rules using the following format
5
+ ActiveSupport::Inflector.inflections do |inflect|
6
+ inflect.irregular 'grave', 'graveyard'
7
+ inflect.uncountable 'this'
8
+ # inflect.uncountable 'plus'
9
+ inflect.uncountable 'anonymous'
10
+ inflect.uncountable /^s$/
11
+ inflect.singular(/(ss)$/i, '\1')
12
+ inflect.plural(/(ss)$/i, '\1')
13
+ end
14
+
15
+ Object.send :include, NameLogic::ObjectMethods
data/test.rb ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ class MyString < String
4
+ def initialize s
5
+ super s.to_s
6
+ @simple = s.index(?+)
7
+ @s= s.to_s
8
+ end
9
+ def to_s() self end
10
+ end
11
+
12
+ x='foobar'
13
+
14
+ puts "A string #{x}, and MyString: #{MyString.new(x)}, MyString.to_s: #{MyString.new(x).to_s}"
data/test2.rb ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ class MyString < String
4
+ def initialize s
5
+ super s.to_s # this line added
6
+ @s= s.to_s
7
+ @simple = s.index(?+)
8
+ end
9
+ def to_s() @s end
10
+ end
11
+
12
+ puts "#{MyString.new("foo")}" # => produces "foo"
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: namelogic
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Gerry Gleason <gerryg@inbox.com>
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: htmlentities
16
+ requirement: &9304420 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 4.3.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *9304420
25
+ - !ruby/object:Gem::Dependency
26
+ name: active_support
27
+ requirement: &9303140 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *9303140
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ requirement: &9318660 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 2.8.0
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *9318660
47
+ - !ruby/object:Gem::Dependency
48
+ name: rdoc
49
+ requirement: &9317780 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '3.12'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *9317780
58
+ - !ruby/object:Gem::Dependency
59
+ name: bundler
60
+ requirement: &9317080 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 1.1.0
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *9317080
69
+ - !ruby/object:Gem::Dependency
70
+ name: jeweler
71
+ requirement: &9314980 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: 1.8.3
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *9314980
80
+ description: Wiki Segmented Name Logic
81
+ email: gerryg@inbox.com
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files:
85
+ - README.rdoc
86
+ files:
87
+ - Gemfile
88
+ - Gemfile.lock
89
+ - README.rdoc
90
+ - Rakefile
91
+ - VERSION
92
+ - lib/name_logic.rb
93
+ - spec/lib/name_logic_spec.rb
94
+ - spec/spec_helper.rb
95
+ - test.rb
96
+ - test2.rb
97
+ homepage: http://github.com/GerryG/namelogic/
98
+ licenses:
99
+ - MIT
100
+ post_install_message:
101
+ rdoc_options:
102
+ - --main
103
+ - README.rdoc
104
+ - --inline-source
105
+ - --line-numbers
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: 4038131039544687550
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.15
126
+ signing_key:
127
+ specification_version: 3
128
+ summary: Wiki Segmented Name Logic
129
+ test_files: []