Class: Spina::Plugin

Inherits:
Object
  • Object
show all
Defined in:
lib/spina/plugin.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#nameObject

Returns the value of attribute name.



3
4
5
# File 'lib/spina/plugin.rb', line 3

def name
  @name
end

#namespaceObject

Returns the value of attribute namespace.



3
4
5
# File 'lib/spina/plugin.rb', line 3

def namespace
  @namespace
end

#settingsObject

Returns the value of attribute settings.



3
4
5
# File 'lib/spina/plugin.rb', line 3

def settings
  @settings
end

Class Method Details

.allObject



46
47
48
# File 'lib/spina/plugin.rb', line 46

def all
  ::Spina::PLUGINS
end

.find_by(opts = {}) ⇒ Object



50
51
52
53
54
55
56
57
58
# File 'lib/spina/plugin.rb', line 50

def find_by(opts = {})
  all.find do |plugin|
    matches = true
    opts.each do |key, value|
      matches = false unless plugin.send(key) == value
    end
    plugin if matches
  end
end

.register {|plugin| ... } ⇒ Object

Yields:

  • (plugin)


60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/spina/plugin.rb', line 60

def register
  plugin = new
  yield plugin
  raise "Missing plugin name" if plugin.name.nil?
  raise "Missing plugin namespace" if plugin.namespace.nil?

  if plugin.settings.present?
    plugin.create_setting_class!
  end

  all << plugin
  plugin
end

Instance Method Details

#create_setting_class!Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/spina/plugin.rb', line 5

def create_setting_class!
  class_settings = data_mapped_settings_hash
  plugin_name = namespace

  klass = Class.new(::Spina::Setting) do
    include AttrJson::Record
    include Spina::AttrJsonMonkeypatch

    class_settings.each do |setting|
      attr_json(*setting, container_attribute: "preferences")
      attr_json_setter_monkeypatch setting.first
    end

    default_scope { where(plugin: plugin_name.to_s) }
  end
  "Spina::#{namespace_class}".constantize.const_set :Setting, klass
end