source: ruby/branches/0.5/lib/open_ehr/rm/data_types/encapsulated.rb @ 216

Last change on this file since 216 was 216, checked in by KOBAYASHI, Shinji, 11 years ago

move from Test:Unit to RSpec

File size: 3.6 KB
Line 
1# OpenEHR::RM::Data_Types::Encapsulated
2# http://www.openehr.org/svn/specification/TAGS/Release-1.0.2/publishing/architecture/computable/UML/uml_start_view.html
3# refs #51
4require 'rubygems'
5require 'locale/info'
6
7module OpenEHR
8  module RM
9    module DataTypes
10      module Encapsulated
11        class DvEncapsulated  < OpenEHR::RM::DataTypes::Basic::DataValue
12          attr_reader :language, :charset, :size
13          def initialize(charset, language, size)
14            self.charset = charset
15            self.language = language
16            self.size = size
17          end
18
19          def size=(size)
20            if size < 0
21              raise ArgumentError, "negative size"
22            end
23            @size = size
24          end
25
26          def language=(language)
27            if language.nil? ||
28                !Locale::Info.language_code?(language.code_string)
29              raise ArgumentError, 'invalid language code'
30            end
31            @language = language
32          end
33
34          def charset=(charset)
35            if charset.nil? || !charset_valid?(charset.code_string)
36              raise ArgumentError, 'invalid charset'
37            end
38            @charset = charset
39          end
40
41          private
42          def size_positive
43            raise ArgumentError, "size must be positive" if size < 0
44          end
45
46          def charset_valid?(charset)
47            result = false
48            open('lib/open_ehr/rm/data_types/charset.lst') do |file|
49              while line = file.gets
50                if charset == line.chomp
51                  result = true
52                  break
53                end
54              end
55            end
56            return result
57          end
58        end
59
60# media type http://www.iana.org/assignments/media-types/text/
61        class DvMultimedia < DvEncapsulated
62          attr_reader :media_type
63          attr_accessor :uri, :data, :compression_algorithm,
64          :integrity_check, :integrity_check_algorithm, :alternate_text
65          def initialize(charset, language, size, media_type, uri=nil,
66                         data=nil, compression_algorithm=nil,
67                         integrity_check=nil, integrity_check_algorithm=nil,
68                         alternate_text=nil)
69            super(charset, language, size)
70            self.media_type = media_type
71            @uri = uri
72            @data = data
73            @compression_algorithm = compression_algorithm
74            @integrity_check = integrity_check
75            @integrity_check_algorithm = integrity_check_algorithm
76            @alternate_text = alternate_text
77          end
78          def media_type=(media_type)
79            if media_type.code_string.nil?
80              raise ArgumentError, 'media_type should not be nil'
81            end
82            @media_type = media_type
83          end
84        end
85
86        class DvParsable < DvEncapsulated
87          attr_reader :value, :formalism
88          def initialize(charset, language, size, formalism, value)
89            super(charset, language, size)
90            self.formalism = formalism
91            self.value = value
92          end
93
94          def value=(value)
95            raise ArgumentError, 'value must not be nil' if value.nil?
96            @value = value
97          end
98
99          def formalism=(formalism)
100            if formalism.nil?
101              raise ArgumentError, "formalism must not be nil"
102            elsif formalism.empty?
103              raise ArgumentError, "formalism must nto be empty"
104            end
105            @formalism = formalism
106          end
107        end
108      end # of Encapsulated
109    end # of DataTypes
110  end # of RM
111end # of OpenEHR
Note: See TracBrowser for help on using the repository browser.