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


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

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

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

#predicate_mappings_config_pathObject (readonly)

Returns the value of attribute predicate_mappings_config_path


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

def predicate_mappings_config_path
  @predicate_mappings_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


202
203
204
205
206
207
208
209
# File 'lib/active_fedora/file_configurator.rb', line 202

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


88
89
90
# File 'lib/active_fedora/file_configurator.rb', line 88

def config_loaded?
  @config_loaded || false
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


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
197
198
199
# File 'lib/active_fedora/file_configurator.rb', line 170

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
    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." if ActiveFedora::Base.logger
    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


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

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


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

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

  load_fedora_config
  load_solr_config
  @config_loaded = true
end

#load_fedora_configObject


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

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

  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 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.kind_of?(Array) ? cfg.map(&:symbolize_keys) : cfg.symbolize_keys
end

#load_solr_configObject


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

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

  ActiveFedora::Base.logger.info "ActiveFedora: loading solr config from #{::File.expand_path(@solr_config_path)}" if ActiveFedora::Base.logger
  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

#pathObject


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

def path
  get_config_path(:fedora)
end

#predicate_configObject


211
212
213
214
# File 'lib/active_fedora/file_configurator.rb', line 211

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

#reset!Object


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

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