typecollection 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
@@ -0,0 +1,23 @@
1
+ module TypeCollection
2
+ module Base
3
+
4
+ module BaseClassMethods
5
+ # Returns all of the known subclass names for this collection
6
+ def all_type_names(); return __tc_members().keys(); end
7
+ # Returns all of the known subclasses for this collection
8
+ def all_types(); return __tc_members().values(); end
9
+ # Gets the type associated with the provided value (Class or Otherwise)
10
+ def get_type(type)
11
+ type = type.inferred_type() if (type.kind_of?(Class))
12
+ mems = __tc_members()
13
+ raise TypeCollection::UnknownChildType.new() unless (mems.has_key?(type))
14
+ return mems[type]
15
+ end
16
+ end
17
+
18
+ def self.included(base)
19
+ base.extend(TypeCollection::ClassMethods)
20
+ base.extend(TypeCollection::Base::BaseClassMethods)
21
+ end
22
+ end
23
+ end
@@ -1,14 +1,18 @@
1
1
  class Class
2
2
  def inferred_type()
3
- klass_name = self.name.split("::").last
4
- parent_klass = self.superclass
5
- while(parent_klass != nil)
6
- check = parent_klass.name.split("::").last
7
- if (klass_name.end_with?(check))
8
- return klass_name.gsub(/#{check}\z/, "")
3
+ if (!defined?(@__tc_inferred_type))
4
+ klass_name = self.name.split("::").last
5
+ parent_klass = self.superclass
6
+ while(parent_klass != nil)
7
+ check = parent_klass.name.split("::").last
8
+ if (klass_name.end_with?(check))
9
+ @__tc_inferred_type = klass_name.gsub(/#{check}\z/, "")
10
+ break
11
+ end
12
+ parent_klass = parent_klass.superclass
9
13
  end
10
- parent_klass = parent_klass.superclass
14
+ @__tc_inferred_type = nil
11
15
  end
12
- return nil
16
+ return @__tc_inferred_type
13
17
  end
14
18
  end
@@ -14,17 +14,16 @@ module TypeCollection
14
14
  # Contains the Members mapped by type
15
15
  def __tc_members(); @_members ||= { }; end
16
16
 
17
- # Returns all of the known subclasses for this collection
18
- def all_types()
19
- return __tc_members().values()
20
- end
21
-
22
- # Gets the type associated with the provided value (Class or Otherwise)
23
- def get_type(type)
24
- type = type.inferred_type() if (type.kind_of?(Class))
25
- mems = __tc_members()
26
- raise TypeCollection::UnknownChildType.new() unless (mems.has_key?(type))
27
- return mems[type]
17
+ # Get similar type based on the object passed in which can be a String,
18
+ # Object (using the inferred type), or Class
19
+ def get_associated_type(associate)
20
+ if (!associate.kind_of?(String))
21
+ if (!associate.kind_of?(Class))
22
+ associate = associate.class
23
+ end
24
+ associate = associate.inferred_type()
25
+ end
26
+ return self.get_type(associate)
28
27
  end
29
28
 
30
29
  # Overrides the default behavior when being extended by a child class.
@@ -34,7 +33,9 @@ module TypeCollection
34
33
  super if (defined?(super))
35
34
  type = child.inferred_type()
36
35
  if (type.nil?)
37
- error = "Invalid Name: #{child.name}! Child class names must end with \"#{self.name}\"."
36
+ cname = child.name.split("::").last
37
+ pname = self.name.split("::").last
38
+ error = "Invalid Name: #{ cname }! Child class names must end with \"#{ pname }\"."
38
39
  raise TypeCollection::InvalidChildType.new(error)
39
40
  end
40
41
  __tc_members()[type] = child
@@ -1,11 +1,8 @@
1
1
  require 'typecollection'
2
2
  require 'typecollection/class+inferred_type'
3
3
  require 'typecollection/class_methods'
4
+ require 'typecollection/base'
4
5
 
5
6
  module TypeCollection
6
- # The intended means to use a TypeCollection is to include TypeCollection
7
- # in your class definition.
8
- def self.included(base)
9
- base.extend(TypeCollection::ClassMethods)
10
- end
7
+
11
8
  end
@@ -1,19 +1,36 @@
1
1
  require 'helper'
2
2
 
3
+ # => Define a Type Collection
4
+ class SomeType
5
+ include TypeCollection
6
+ end
7
+ # => Extend that Type Collection
8
+ class ExtendedSomeType < SomeType
9
+
10
+ end
11
+
3
12
  class TestTypecollection < Test::Unit::TestCase
4
- should "Actually Function" do
5
- require 'typecollection'
13
+ should "Function inside packages" do
6
14
  # => Define a Type Collection
7
15
  class SomeType
8
16
  include TypeCollection
9
17
  end
10
18
  # => Extend that Type Collection
11
- class ExtendedSomeType < SomeType
19
+ class ExtendedSomeType < TestTypecollection::SomeType
12
20
 
13
21
  end
14
22
  # => Ensure it can be retrieved
15
- unless (SomeType.all_types().length == 1 and SomeType.get_type("Extended") == ExtendedSomeType)
16
- flunk "Failed to Register Extended with SomeType!"
23
+
24
+ unless (TestTypecollection::SomeType.all_types().length == 1 and
25
+ TestTypecollection::SomeType.get_type("Extended") == TestTypecollection::ExtendedSomeType)
26
+ flunk "Failed to Register TestTypecollection::Extended with TestTypecollection::SomeType!"
27
+ end
28
+ end
29
+
30
+ should "Function outside packages" do
31
+ unless(SomeType.all_types().length == 1 and
32
+ SomeType.get_type(ExtendedSomeType) == ExtendedSomeType)
33
+ raise "Failed to register ExtendedSomeType with SomeType!"
17
34
  end
18
35
  end
19
36
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "typecollection"
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["James Petty"]
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  "Rakefile",
25
25
  "VERSION",
26
26
  "lib/typecollection.rb",
27
+ "lib/typecollection/base.rb",
27
28
  "lib/typecollection/class+inferred_type.rb",
28
29
  "lib/typecollection/class_methods.rb",
29
30
  "test/helper.rb",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typecollection
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-01-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: shoulda
16
- requirement: &70319050220100 !ruby/object:Gem::Requirement
16
+ requirement: &70345819384440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70319050220100
24
+ version_requirements: *70345819384440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &70319050215500 !ruby/object:Gem::Requirement
27
+ requirement: &70345819382800 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70319050215500
35
+ version_requirements: *70345819382800
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jeweler
38
- requirement: &70319050210820 !ruby/object:Gem::Requirement
38
+ requirement: &70345819374820 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.6.4
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70319050210820
46
+ version_requirements: *70345819374820
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rcov
49
- requirement: &70319050200520 !ruby/object:Gem::Requirement
49
+ requirement: &70345819373620 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70319050200520
57
+ version_requirements: *70345819373620
58
58
  description: Easily map subtypes into their parent type for later retrieval
59
59
  email: jp@jibe.com
60
60
  executables: []
@@ -70,6 +70,7 @@ files:
70
70
  - Rakefile
71
71
  - VERSION
72
72
  - lib/typecollection.rb
73
+ - lib/typecollection/base.rb
73
74
  - lib/typecollection/class+inferred_type.rb
74
75
  - lib/typecollection/class_methods.rb
75
76
  - test/helper.rb
@@ -90,7 +91,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
90
91
  version: '0'
91
92
  segments:
92
93
  - 0
93
- hash: -698932350453145529
94
+ hash: -1935067382157549222
94
95
  required_rubygems_version: !ruby/object:Gem::Requirement
95
96
  none: false
96
97
  requirements: