Class: OrigenAppGenerators::Base

Inherits:
Origen::CodeGenerators::Base
  • Object
show all
Includes:
Origen::Utility::InputCapture
Defined in:
lib/origen_app_generators/base.rb

Overview

This is the base generator used by all generators in this application

Direct Known Subclasses

Application, New

Instance Method Summary collapse

Instance Method Details

#get_common_user_inputObject



42
43
44
# File 'lib/origen_app_generators/base.rb', line 42

def get_common_user_input
  get_name_and_namespace
end

#get_lastest_origen_versionObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/origen_app_generators/base.rb', line 46

def get_lastest_origen_version
  @latest_origen_version ||= begin
    (Gems.info 'origen')['version']
  rescue
    # If the above fails, e.g. due to an SSL error in the runtime environment, try to fetch the
    # latest Origen version from the Origen website, before finally falling back to the version
    # we are currently running if all else fails
    begin
      require 'httparty'
      response = HTTParty.get('http://origen-sdk.org/origen/release_notes/')
      version = Origen::VersionString.new(response.body.match(/Tag: v(\d+\.\d+.\d+)</).to_a.last)
      if version.valid?
        version
      else
        fail "Can't get the latest version!"
      end
    rescue
      Origen.version
    end
  end
end

#set_source_pathsObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/origen_app_generators/base.rb', line 8

def set_source_paths
  # The base Origen generator puts the Origen core directory on the source path, in retrospect this
  # was a bad idea and makes for hard to debug errors if an app generator resolves a template from
  # outside of this app.
  # So to keep things sane remove any inherited source paths.
  self.class.source_paths.pop until self.class.source_paths.empty?
  klass = self.class

  until klass == OrigenAppGenerators::Base
    if template_dir = OrigenAppGenerators.template_dirs[klass]
      dir = []
      last_class = nil
      until klass.to_s =~ /^OrigenAppGenerators/
        dir << "#{template_dir}/#{class_dir(klass)}"
        last_class = klass
        klass = klass.superclass
      end
      dir << "#{template_dir}/base"
      klass = last_class
    else
      dir = "#{Origen.root!}/templates/app_generators/#{class_dir(klass)}"
    end
    Array(dir).each do |dir|
      self.class.source_paths << dir if File.exist?(dir) && !self.class.source_paths.include?(dir)
    end
    klass = klass.superclass
  end
end

#set_typeObject

Just makes the type (:plugin or :application) available to all templates



38
39
40
# File 'lib/origen_app_generators/base.rb', line 38

def set_type
  @type = type
end