Class: ActiveFedora::FileConfigurator

Inherits:
Object
  • Object
show all
Includes:
Solrizer::FieldNameMapper
Defined in:
lib/active_fedora/file_configurator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeFileConfigurator

The configuration hash that gets used by RSolr.connect



54
55
56
# File 'lib/active_fedora/file_configurator.rb', line 54

def initialize
  reset!
end

Instance Attribute Details

#config_envObject

Returns the value of attribute config_env.



50
51
52
# File 'lib/active_fedora/file_configurator.rb', line 50

def config_env
  @config_env
end

#config_optionsObject (readonly)

Returns the value of attribute config_options.



51
52
53
# File 'lib/active_fedora/file_configurator.rb', line 51

def config_options
  @config_options
end

#fedora_config_pathObject (readonly)

Returns the value of attribute fedora_config_path.



51
52
53
# File 'lib/active_fedora/file_configurator.rb', line 51

def fedora_config_path
  @fedora_config_path
end

#solr_config_pathObject (readonly)

Returns the value of attribute solr_config_path.



51
52
53
# File 'lib/active_fedora/file_configurator.rb', line 51

def solr_config_path
  @solr_config_path
end

Instance Method Details

#check_fedora_path_for_solrObject

Checks the existing fedora_config.path to see if there is a solr.yml there



222
223
224
225
226
227
228
229
# File 'lib/active_fedora/file_configurator.rb', line 222

def check_fedora_path_for_solr
  path = File.dirname(self.path) + "/solr.yml"
  if File.file? path
    return path
  else
    return nil
  end
end

#config_loaded?Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/active_fedora/file_configurator.rb', line 94

def config_loaded?
  @config_loaded || false
end

#config_reload!Object



76
77
78
79
80
# File 'lib/active_fedora/file_configurator.rb', line 76

def config_reload!
  ActiveSupport::Deprecation.warn("config_reload! is not supported")
  reset!
  load_configs
end

#fedora_configObject



67
68
69
70
# File 'lib/active_fedora/file_configurator.rb', line 67

def fedora_config
  load_configs
  @fedora_config
end

#get_config_path(config_type) ⇒ String

Determine the fedora config file to use. Order of preference is:

  1. Use the config_options if it exists

  2. Look in Rails.root/config/fedora.yml

  3. Look in current working directory/config/fedora.yml

  4. Load the default config that ships with this gem

Parameters:

  • config_type (String)

    Either ‘fedora’ or ‘solr’

Returns:

  • (String)


190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
# File 'lib/active_fedora/file_configurator.rb', line 190

def get_config_path(config_type)
  config_type = config_type.to_s
  if (config_path = config_options.fetch("#{config_type}_config_path".to_sym,nil) )
    raise ConfigurationError, "file does not exist #{config_path}" unless File.file? config_path
    return File.expand_path(config_path)
  end

  # if solr, attempt to use path where fedora.yml is first
  if config_type == "solr" && (config_path = check_fedora_path_for_solr)
    return config_path
  end

  if defined?(Rails.root)
    config_path = "#{Rails.root}/config/#{config_type}.yml"
    return config_path if File.file? config_path
  end

  if File.file? "#{Dir.getwd}/config/#{config_type}.yml"  
    return "#{Dir.getwd}/config/#{config_type}.yml"
  end

  # Last choice, check for the default config file
  config_path = File.join(ActiveFedora.root, "config", "#{config_type}.yml")
  if File.file? config_path
    logger.warn "Using the default #{config_type}.yml that comes with active-fedora.  If you want to override this, pass the path to #{config_type}.yml to ActiveFedora - ie. ActiveFedora.init(:#{config_type}_config_path => '/path/to/#{config_type}.yml') - or set Rails.root and put #{config_type}.yml into \#{Rails.root}/config."
    return config_path
  else
    raise ConfigurationError, "Couldn't load #{config_type} config file!"
  end
end

#get_solr_url(solr_config) ⇒ Object

Given the solr_config that’s been loaded for this environment, determine which solr url to use



169
170
171
172
173
174
175
176
177
178
179
180
181
# File 'lib/active_fedora/file_configurator.rb', line 169

def get_solr_url(solr_config)
  if @index_full_text == true && solr_config.has_key?(:fulltext) && solr_config[:fulltext].has_key?('url')
    return solr_config[:fulltext]['url']
  elsif solr_config.has_key?(:default) && solr_config[:default].has_key?('url')
    return solr_config[:default]['url']
  elsif solr_config.has_key?('url')
    return solr_config['url']
  elsif solr_config.has_key?(:url)
    return solr_config[:url]
  else
    raise URI::InvalidURIError
  end
end

#init(options = {}) ⇒ Object



58
59
60
61
62
63
64
65
# File 'lib/active_fedora/file_configurator.rb', line 58

def init options = {}
  if options.is_a?(String) 
    raise ArgumentError, "Calling ActiveFedora.init with a path as an argument has been removed.  Use ActiveFedora.init(:fedora_config_path=>#{options})"
  end
  reset!
  @config_options = options
  load_configs
end

#load_configsObject



98
99
100
101
102
103
104
105
106
# File 'lib/active_fedora/file_configurator.rb', line 98

def load_configs
  return if config_loaded?
  @config_env = ActiveFedora.environment
  
  load_fedora_config
  load_solr_config
  load_solrizer_config
  @config_loaded = true
end

#load_fedora_configObject



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/active_fedora/file_configurator.rb', line 108

def load_fedora_config
  return @fedora_config unless @fedora_config.empty?
  @fedora_config_path = get_config_path(:fedora)
  logger.info("ActiveFedora: loading fedora config from #{File.expand_path(@fedora_config_path)}")

  begin
    config_erb = ERB.new(IO.read(@fedora_config_path)).result(binding)
  rescue Exception => e
    raise("fedora.yml was found, but could not be parsed with ERB. \n#{$!.inspect}")
  end

  begin
    fedora_yml = YAML::load(config_erb)
  rescue StandardError => e
    raise("fedora.yml was found, but could not be parsed.\n")
  end

  config = fedora_yml.symbolize_keys

  cfg = config[ActiveFedora.environment.to_sym] || {}
  @fedora_config = cfg.kind_of?(Array) ? cfg.map(&:symbolize_keys) : cfg.symbolize_keys
end

#load_solr_configObject



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/active_fedora/file_configurator.rb', line 131

def load_solr_config
  return @solr_config unless @solr_config.empty?
  @solr_config_path = get_config_path(:solr)

  logger.info("ActiveFedora: loading solr config from #{File.expand_path(@solr_config_path)}")
  begin
    config_erb = ERB.new(IO.read(@solr_config_path)).result(binding)
  rescue Exception => e
    raise("solr.yml was found, but could not be parsed with ERB. \n#{$!.inspect}")
  end

  begin
    solr_yml = YAML::load(config_erb)
  rescue StandardError => e
    raise("solr.yml was found, but could not be parsed.\n")
  end

  config = solr_yml.symbolize_keys
  raise "The #{ActiveFedora.environment.to_sym} environment settings were not found in the solr.yml config.  If you already have a solr.yml file defined, make sure it defines settings for the #{ActiveFedora.environment.to_sym} environment" unless config[ActiveFedora.environment.to_sym]
  @solr_config = {:url=> get_solr_url(config[ActiveFedora.environment.to_sym].symbolize_keys)}
end

#load_solrizer_configObject



153
154
155
156
157
158
# File 'lib/active_fedora/file_configurator.rb', line 153

def load_solrizer_config
  if solrizer_config_path
    logger.warn "loading_solrizer_config at #{solrizer_config_path}, this overwrites the default field mapper class."
    ActiveFedora::SolrService.load_mappings 
  end
end

#pathObject



82
83
84
# File 'lib/active_fedora/file_configurator.rb', line 82

def path
  get_config_path(:fedora)
end

#predicate_configObject



231
232
233
234
# File 'lib/active_fedora/file_configurator.rb', line 231

def predicate_config
  @predicate_config_path ||= build_predicate_config_path(File.dirname(self.path))
  YAML::load(File.open(@predicate_config_path)) if File.exist?(@predicate_config_path)
end

#reset!Object



86
87
88
89
90
91
92
# File 'lib/active_fedora/file_configurator.rb', line 86

def reset!
  @config_loaded = false  #Force reload of configs
  @fedora_config = {}
  @solr_config = {}
  @config_options = {}
  @predicate_config_path = nil
end

#solr_configObject



71
72
73
74
# File 'lib/active_fedora/file_configurator.rb', line 71

def solr_config
  load_configs
  @solr_config
end

#solrizer_config_pathObject



160
161
162
163
164
165
# File 'lib/active_fedora/file_configurator.rb', line 160

def solrizer_config_path
  begin
    get_config_path('solr_mappings')
  rescue ActiveFedora::ConfigurationError
  end
end