Class: Praxis::Plugins::PraxisMapperPlugin::Plugin

Inherits:
Praxis::Plugin show all
Includes:
Singleton
Defined in:
lib/praxis/plugins/praxis_mapper_plugin.rb

Instance Attribute Summary

Attributes inherited from Praxis::Plugin

#application, #block, #config, #config_attribute

Instance Method Summary collapse

Methods inherited from Praxis::Plugin

#after, #before, #options, #register_doc_browser_plugin

Constructor Details

#initializePlugin

Returns a new instance of Plugin.



63
64
65
66
67
68
69
70
# File 'lib/praxis/plugins/praxis_mapper_plugin.rb', line 63

def initialize
  @options = {
    config_file: 'config/praxis_mapper.yml',
    config_data: {
      repositories: {}
    }
  }
end

Instance Method Details

#config_keyObject



72
73
74
# File 'lib/praxis/plugins/praxis_mapper_plugin.rb', line 72

def config_key
  :praxis_mapper
end

#load_config!Object

Make our own custom load_config! method



85
86
87
88
89
# File 'lib/praxis/plugins/praxis_mapper_plugin.rb', line 85

def load_config!
  config_file_path = application.root + options[:config_file]
  result = config_file_path.exist? ? YAML.load_file(config_file_path) : {}
  result.merge(@options[:config_data])
end

#prepare_config!(node) ⇒ Object



76
77
78
79
80
81
82
# File 'lib/praxis/plugins/praxis_mapper_plugin.rb', line 76

def prepare_config!(node)
  node.attributes do
    attribute :log_stats, String, values: ['detailed', 'short', 'skip'], default: 'detailed'
    attribute :stats_log_level, Symbol, values: [:fatal,:error,:warn,:info,:debug], default: :info
    attribute :repositories, Attributor::Hash.of(key: String, value: RepositoryConfig)
  end
end

#setup!Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/praxis/plugins/praxis_mapper_plugin.rb', line 91

def setup!
  self.config.repositories.each do |repository_name, repository_config|
    type = repository_config['type']
    connection_settings = repository_config['connection_settings']

    case type
    when 'sequel'
      self.setup_sequel_repository(repository_name, connection_settings)
    else
      raise "unsupported repository type: #{type}"
    end
  end

  log_stats = PraxisMapperPlugin::Plugin.instance.config.log_stats
  unless log_stats == 'skip'
    Praxis::Notifications.subscribe 'praxis.request.all' do |name, *junk, payload|
      if (payload[:request].identity_map?)
        identity_map = payload[:request].identity_map
        PraxisMapperPlugin::Statistics.log(payload[:request], identity_map, log_stats)
      end
    end
  end
end

#setup_sequel_repository(name, settings) ⇒ Object



115
116
117
118
119
120
121
# File 'lib/praxis/plugins/praxis_mapper_plugin.rb', line 115

def setup_sequel_repository(name, settings)
  db = Sequel.connect(settings.dump.symbolize_keys)

  Praxis::Mapper::ConnectionManager.setup do
    repository(name.to_sym) { db }
  end
end