Class: Origen::Application::Plugins

Inherits:
Array show all
Defined in:
lib/origen/application/plugins.rb

Overview

Provides an API for working with the application’s plugins

An instance of this class is instantiated as Origen.app.plugins

Instance Method Summary collapse

Methods inherited from Array

#dups, #dups?, #dups_with_index, #ids, #include_hash?, #include_hash_with_key?

Constructor Details

#initializePlugins

Returns a new instance of Plugins.



7
8
9
10
11
12
# File 'lib/origen/application/plugins.rb', line 7

def initialize
  top = Origen.app
  Origen._applications_lookup[:name].each do |_name, app|
    self << app unless app == top
  end
end

Instance Method Details

#currentObject

Returns the current plugin’s application instance



38
39
40
41
42
43
# File 'lib/origen/application/plugins.rb', line 38

def current
  return nil if @temporary == :none
  return nil if @disabled
  name = @temporary || @current ||= Origen.app.session.origen_core[:default_plugin]
  find { |p| p.name.to_sym == name } if name
end

#current=(name) ⇒ Object



45
46
47
48
49
50
51
52
53
# File 'lib/origen/application/plugins.rb', line 45

def current=(name)
  name = name.to_sym if name
  Origen.app.session.origen_core[:default_plugin] = name
  if name == :none
    @current = nil
  else
    @current = name
  end
end

#defaultObject

Deprecated.


93
94
95
96
# File 'lib/origen/application/plugins.rb', line 93

def default
  Origen.deprecated 'Origen.current_plugin.default is deprecated, use Origen.app.plugins.current instead'
  current
end

#default=(name) ⇒ Object

Deprecated.


75
76
77
78
# File 'lib/origen/application/plugins.rb', line 75

def default=(name)
  Origen.deprecated 'Origen.current_plugin.default= is deprecated, use Origen.app.plugins.current= instead'
  self.current = name
end

#disable_currentObject

Temporarily set the current plugin to nil



61
62
63
64
65
66
67
# File 'lib/origen/application/plugins.rb', line 61

def disable_current
  @disabled = true
  if block_given?
    yield
    @disabled = false
  end
end

#enable_currentObject

Restore the current plugin after an earlier disable



70
71
72
# File 'lib/origen/application/plugins.rb', line 70

def enable_current
  @disabled = false
end

#instanceObject

Deprecated.


87
88
89
90
# File 'lib/origen/application/plugins.rb', line 87

def instance
  Origen.deprecated 'Origen.current_plugin.instance is deprecated, use Origen.app.plugins.current instead'
  current
end

#nameObject

Deprecated.


81
82
83
84
# File 'lib/origen/application/plugins.rb', line 81

def name
  Origen.deprecated 'Origen.current_plugin.name is deprecated, use Origen.app.plugins.current.name instead'
  current.name if current
end

#namesObject

Returns an array of symbols that represent the names of all plugins



33
34
35
# File 'lib/origen/application/plugins.rb', line 33

def names
  map(&:name)
end

#plugin_name_from_path(path) ⇒ Object Also known as: path_within_a_plugin

Return the plugin name if the path specified is from that plugin



108
109
110
111
112
113
114
115
116
# File 'lib/origen/application/plugins.rb', line 108

def plugin_name_from_path(path)
  path = Pathname.new(path).expand_path.cleanpath
  each do |plugin|
    if path.to_s =~ /^#{plugin.root}/
      return plugin.name
    end
  end
  nil
end

#shared_commandsObject



98
99
100
101
102
103
104
105
# File 'lib/origen/application/plugins.rb', line 98

def shared_commands
  [Origen.app, self].flatten.map do |plugin|
    shared = plugin.config.shared || {}
    if shared[:command_launcher]
      "#{plugin.root}/#{shared[:command_launcher]}"
    end
  end.compact
end

#temporary=(name) ⇒ Object



55
56
57
58
# File 'lib/origen/application/plugins.rb', line 55

def temporary=(name)
  name = name.to_sym if name
  @temporary = name
end

#validate_production_status(force = false) ⇒ Object

Will raise an error if any plugins are currently imported from a path reference in the Gemfile



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/origen/application/plugins.rb', line 16

def validate_production_status(force = false)
  if Origen.mode.production? || force
    if File.exist?("#{Origen.root}/Gemfile")
      File.readlines("#{Origen.root}/Gemfile").each do |line|
        # http://rubular.com/r/yNGDGB6M2r
        if line =~ /^\s*gem\s+(("|')\w+("|')),.*(:path\s*=>|path:)/
          fail "The following gem is defined as a path in your Gemfile, but that is not allowed in production: #{Regexp.last_match[1]}"
        end
        if line =~ /ORIGEN PLUGIN AUTO-GENERATED/
          fail 'Fetched gems are currently being used in your Gemfile, but that is not allowed in production!'
        end
      end
    end
  end
end