Class: CarinForBlueButtonTestKit::Generator::IGLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/carin_for_blue_button_test_kit/generator/ig_loader.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ig_file_name) ⇒ IGLoader

Returns a new instance of IGLoader.



13
14
15
# File 'lib/carin_for_blue_button_test_kit/generator/ig_loader.rb', line 13

def initialize(ig_file_name)
  self.ig_file_name = ig_file_name
end

Instance Attribute Details

#ig_file_nameObject

Returns the value of attribute ig_file_name.



11
12
13
# File 'lib/carin_for_blue_button_test_kit/generator/ig_loader.rb', line 11

def ig_file_name
  @ig_file_name
end

Instance Method Details

#ig_resourcesObject



17
18
19
# File 'lib/carin_for_blue_button_test_kit/generator/ig_loader.rb', line 17

def ig_resources
  @ig_resources ||= IGResources.new
end

#loadObject



21
22
23
24
# File 'lib/carin_for_blue_button_test_kit/generator/ig_loader.rb', line 21

def load
  load_ig
  load_standalone_resources
end

#load_igObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/carin_for_blue_button_test_kit/generator/ig_loader.rb', line 26

def load_ig
  tar = Gem::Package::TarReader.new(
    Zlib::GzipReader.open(ig_file_name)
  )

  tar.each do |entry|
    next if entry.directory?

    file_name = entry.full_name.split('/').last

    next unless file_name.end_with? '.json'

    next unless entry.full_name.start_with? 'package/'

    begin
      resource = FHIR.from_contents(entry.read)
      next if resource.nil?
    rescue StandardError
      puts "#{file_name} does not appear to be a FHIR resource."
      next
    end

    ig_resources.add(resource)
  end

  ig_resources
end

#load_standalone_resourcesObject



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/carin_for_blue_button_test_kit/generator/ig_loader.rb', line 54

def load_standalone_resources
  ig_directory = ig_file_name.chomp('.tgz')

  return ig_resources unless File.exist? ig_directory

  Dir.glob(File.join(ig_directory, '*.json')).each do |file_path|
    begin
      resource = FHIR.from_contents(File.read(file_path))
      next if resource.nil?
    rescue StandardError
      file_name = file_path.split('/').last
      puts "#{file_name} does not appear to be a FHIR resource."
      next
    end

    ig_resources.add(resource)
  end

  ig_resources
end