Class: ActiveFedora::FileConfigurator

Inherits:
Object
  • Object
show all
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



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

def initialize
  reset!
end

Instance Attribute Details

#config_envObject

Options allowed in fedora.yml first level is the environment (e.g. development, test, production and any custom environments you may have) the second level has these keys:

  1. url: url including protocol, host, port and path (e.g. 127.0.0.1:8983/fedora)

  2. user: username

  3. password: password

  4. validateChecksum: indicates to the fedora server whether you want to validate checksums when the datastreams are queried.

Examples:

If you want to shard the fedora instance, you can specify an array of credentials.

production:
- user: user1
  password: password1
  url: http://127.0.0.1:8983/fedora1
- user: user2
  password: password2
  url: http://127.0.0.1:8983/fedora2


48
49
50
# File 'lib/active_fedora/file_configurator.rb', line 48

def config_env
  @config_env
end

#config_optionsObject (readonly)

Returns the value of attribute config_options.



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

def config_options
  @config_options
end

#fedora_config_pathObject (readonly)

Returns the value of attribute fedora_config_path.



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

def fedora_config_path
  @fedora_config_path
end

#solr_config_pathObject (readonly)

Returns the value of attribute solr_config_path.



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

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



199
200
201
202
203
# File 'lib/active_fedora/file_configurator.rb', line 199

def check_fedora_path_for_solr
  path = ::File.dirname(self.path) + "/solr.yml"
  return unless ::File.file? path
  path
end

#config_loaded?Boolean



86
87
88
# File 'lib/active_fedora/file_configurator.rb', line 86

def config_loaded?
  @config_loaded || false
end

#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



167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# File 'lib/active_fedora/file_configurator.rb', line 167

def 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
    ActiveFedora::Base.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

#fedora_configObject



65
66
67
68
# File 'lib/active_fedora/file_configurator.rb', line 65

def fedora_config
  load_configs
  @fedora_config
end

#init(options = {}) ⇒ Object



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

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



90
91
92
93
94
95
96
97
# File 'lib/active_fedora/file_configurator.rb', line 90

def load_configs
  return if config_loaded?
  @config_env = ActiveFedora.environment

  load_fedora_config
  load_solr_config
  @config_loaded = true
end

#load_fedora_configObject



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/active_fedora/file_configurator.rb', line 99

def load_fedora_config
  return @fedora_config unless @fedora_config.empty?
  @fedora_config_path = config_path(:fedora)
  ActiveFedora::Base.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 StandardError
    raise("fedora.yml was found, but could not be parsed with ERB. \n#{$ERROR_INFO.inspect}")
  end

  begin
    fedora_yml = YAML.safe_load(config_erb, [], [], true) # allow YAML aliases
  rescue Psych::SyntaxError => e
    raise "fedora.yml was found, but could not be parsed. " \
          "Error #{e.message}"
  end

  config = fedora_yml.symbolize_keys

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

#load_solr_configObject



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/active_fedora/file_configurator.rb', line 123

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

  ActiveFedora::Base.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 StandardError
    raise("solr.yml was found, but could not be parsed with ERB. \n#{$ERROR_INFO.inspect}")
  end

  begin
    solr_yml = YAML.safe_load(config_erb, [], [], true) # allow YAML aliases
  rescue StandardError
    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]
  config = config[ActiveFedora.environment.to_sym].symbolize_keys
  @solr_config = { url: solr_url(config) }.merge(config.slice(:update_path, :select_path))
end

#pathObject



75
76
77
# File 'lib/active_fedora/file_configurator.rb', line 75

def path
  config_path(:fedora)
end

#reset!Object



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

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

#solr_configObject



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

def solr_config
  load_configs
  @solr_config
end

#solr_url(solr_config) ⇒ Object

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



148
149
150
151
152
153
154
155
156
157
158
# File 'lib/active_fedora/file_configurator.rb', line 148

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