Class: Jekyll::Archimate::ArchimateCache

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/jekyll/archimate/archimate_cache.rb

Instance Method Summary collapse

Constructor Details

#initializeArchimateCache

Returns a new instance of ArchimateCache.



10
11
12
13
# File 'lib/jekyll/archimate/archimate_cache.rb', line 10

def initialize
  @cache = {}
  @default_archimate_file = nil
end

Instance Method Details

#cache_valid?(archimate_file) ⇒ Boolean

Returns:

  • (Boolean)


15
16
17
18
19
# File 'lib/jekyll/archimate/archimate_cache.rb', line 15

def cache_valid?(archimate_file)
  path = archimate_file.path
  @cache.key?(path) &&
    @cache[path].archimate_file.modified_time.to_i == archimate_file.modified_time.to_i
end

#default_archimate_fileObject



28
29
30
# File 'lib/jekyll/archimate/archimate_cache.rb', line 28

def default_archimate_file
  @default_archimate_file || @cache.keys.first
end

#default_archimate_file=(archimate_file) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/jekyll/archimate/archimate_cache.rb', line 32

def default_archimate_file=(archimate_file)
  unless @cache.key?(archimate_file.path)
    raise(
      "Default ArchiMate file does not exist in cache: #{archimate_file.relative_path}"
    )
  end
  @default_archimate_file = archimate_file
end

#model(archimate_file = nil) ⇒ Object



21
22
23
24
25
26
# File 'lib/jekyll/archimate/archimate_cache.rb', line 21

def model(archimate_file = nil)
  archimate_file ||= default_archimate_file
  raise "No ArchiMate file has been detected." unless archimate_file
  update_cache(archimate_file) unless cache_valid?(archimate_file)
  @cache[archimate_file.path].model
end

#update_cache(archimate_file) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/jekyll/archimate/archimate_cache.rb', line 41

def update_cache(archimate_file)
  # update the cache
  Jekyll.logger.info "  loading ArchiMate #{archimate_file.relative_path}"
  load_start_time = Time.new
  model = ::Archimate.read(archimate_file.path)
  load_finish_time = Time.new
  Jekyll.logger.info format("       %.1f seconds", (load_finish_time - load_start_time))
  @cache[archimate_file.path] = ArchimateFileCacheInfo.new(archimate_file, model)
end