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

Constructor Details

#initializePlugin

Returns a new instance of Plugin.



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

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

Instance Method Details

#config_keyObject



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

def config_key
  :praxis_mapper
end

#load_config!Object

Make our own custom load_config! method



83
84
85
86
87
# File 'lib/praxis/plugins/praxis_mapper_plugin.rb', line 83

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



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

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

#setup!Object



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

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 (identity_map = payload[:request].identity_map)
        PraxisMapperPlugin::Statistics.log(identity_map, log_stats)
      end
    end
  end
end

#setup_sequel_repository(name, settings) ⇒ Object



112
113
114
115
116
117
118
# File 'lib/praxis/plugins/praxis_mapper_plugin.rb', line 112

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