Skip to content

Commit

Permalink
add respond_to_missing?
Browse files Browse the repository at this point in the history
  • Loading branch information
360dgries committed Feb 7, 2024
1 parent f28aed8 commit 126edd2
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 20 deletions.
40 changes: 20 additions & 20 deletions lib/fhir_dstu2_models/bootstrap/model.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,34 +36,26 @@ def ==(other)
end
alias eql? ==

def method_missing(method, *_args, &_block)
if defined?(self.class::MULTIPLE_TYPES) && self.class::MULTIPLE_TYPES[method.to_s]
self.class::MULTIPLE_TYPES[method.to_s].each do |type|
def method_missing(method_name, *_args, &_block)
if defined?(self.class::MULTIPLE_TYPES) && self.class::MULTIPLE_TYPES[method_name.to_s]
self.class::MULTIPLE_TYPES[method_name.to_s].each do |type|
type[0] = type[0].upcase
value = send("#{method}#{type}".to_sym)
value = send("#{method_name}#{type}".to_sym)
return value unless value.nil?
end
return nil
elsif !@extension.nil? && !@extension.empty?
ext = @extension.select do |x|
name = x.url.tr('-', '_').split('/').last
anchor = name.split('#').last
(method.to_s == name || method.to_s == anchor)
end
unless ext.first.nil?
return ext.first.value.nil? ? ext.first : ext.first.value
desired_extension = find_extension(@extension, method_name)
unless desired_extension.first.nil?
return desired_extension.first.value.nil? ? desired_extension.first : desired_extension.first.value
end
elsif !@modifierExtension.nil? && !@modifierExtension.empty?
ext = @modifierExtension.select do |x|
name = x.url.tr('-', '_').split('/').last
anchor = name.split('#').last
(method.to_s == name || method.to_s == anchor)
end
unless ext.first.nil?
return ext.first.value.nil? ? ext.first : ext.first.value
desired_extension = find_extension(@modifierExtension, method_name)
unless desired_extension.first.nil?
return desired_extension.first.value.nil? ? desired_extension.first : desired_extension.first.value
end
end
raise NoMethodError.new("undefined method `#{method}' for #{self.class.name}", method)
raise NoMethodError.new("undefined method `#{method_name}' for #{self.class.name}", method_name)
end

def to_reference
Expand Down Expand Up @@ -336,7 +328,15 @@ def each_element(path = nil, &block)
self
end

private :validate_reference_type, :check_binding_uri, :validate_field
def find_extension(extension_source, method_name)
extension_source.select do |extension|
name = extension.url.tr('-', '_').split('/').last
anchor = name.split('#').last
(method_name.to_s == name || method_name.to_s == anchor)
end
end

private :validate_reference_type, :check_binding_uri, :validate_field, :find_extension
end
end
end
13 changes: 13 additions & 0 deletions spec/lib/fhir_models/bootstrap/model_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,17 @@
expect(range.respond_to? :value).to eq(false)
end
end

describe '#respond_to?' do
it 'returns true for :value on choice elements' do
extension = FHIR::DSTU2::Extension.new(valueInteger: 5)
expect(extension.value).to eq(5)
expect(extension.respond_to? :value).to be_truthy
end

it 'returns false for :value on nonchoice elements' do
range = FHIR::DSTU2::Range.new(low: {value: 18})
expect(range.respond_to? :value).to eq(false)
end
end
end

0 comments on commit 126edd2

Please sign in to comment.