1 # $Id: sum.rb,v 1.4 2012/04/17 02:49:40 machan Exp $
2
3 require 'tmdoc/tmstd/lsm/abstraction'
4
5
6 module TmStd
7
8 module Lsm
9
10 module Sum
11
12 class KindOf < TmStd::Lsm::Sum::Abstract
13 attr_reader :lsm_member
14
15
16 def initialize(member)
17 unless lsm_member_classes.any? { |klass| member.kind_of?(klass) }
18 Assertion.abort(
19 "Not a kind of sum <%s>: %s", self.class.to_s, member.to_s
20 )
21 end
22
23 @lsm_member = member
24 end
25
26
27 private
28
29 def lsm_member_classes
30 begin
31 classes = self.class.const_get('LSM_MEMBER_CLASSES')
32 rescue NameError
33 raise TmStd::Exception::SubclassResponsibility
34 end
35
36 Assertion.kind_of classes, Array
37 end
38 end
39
40 end
41
42 end # TmStd::Lsm
43
44 end # TmStd