Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java .properties file equivalent for Ruby?

Tags:

file-io

ruby

I need to store some simple properties in a file and access them from Ruby.

I absolutely love the .properties file format that is the standard for such things in Java (using the java.util.Properties class)... it is simple, easy to use and easy to read.

So, is there a Ruby class somewhere that will let me load up some key value pairs from a file like that without a lot of effort?

I don't want to use XML, so please don't suggest REXML (my purpose does not warrant the "angle bracket tax").

I have considered rolling my own solution... it would probably be about 5-10 lines of code tops, but I would still rather use an existing library (if it is essentially a hash built from a file)... as that would bring it down to 1 line....


UPDATE: It's actually a straight Ruby app, not rails, but I think YAML will do nicely (it was in the back of my mind, but I had forgotten about it... have seen but never used as of yet), thanks everyone!

like image 951
Mike Stone Avatar asked Sep 19 '08 00:09

Mike Stone


People also ask

What language is a .properties file?

properties is a file extension for files mainly used in Java-related technologies to store the configurable parameters of an application. They can also be used for storing strings for Internationalization and localization; these are known as Property Resource Bundles.

Can we write to properties file in Java?

In Plain Java A properties file consists of key-value pairs of string type. We can write values to a properties file in plain Java using the Properties class.


3 Answers

Is this for a Rails application or a Ruby one?

Really with either you may be able to stick your properties in a yaml file and then YAML::Load(File.open("file")) it.


NOTE from Mike Stone: It would actually be better to do:

File.open("file") { |yf| YAML::load(yf) } 

or

YAML.load_file("file") 

as the ruby docs suggest, otherwise the file won't be closed till garbage collection, but good suggestion regardless :-)

like image 198
Ryan Bigg Avatar answered Sep 23 '22 06:09

Ryan Bigg


Another option is to simply use another Ruby file as your configuration file.

Example, create a file called 'options'

{
    :blah   => 'blee',
    :foo    => 'bar',
    :items  => ['item1', 'item2'],
    :stuff  => true
}

And then in your Ruby code do something like:

ops = eval(File.open('options') {|f| f.read })
puts ops[:foo]
like image 35
Aaron Hinni Avatar answered Sep 24 '22 06:09

Aaron Hinni


YAML will do it perfectly as described above. For an example, in one of my Ruby scripts I have a YAML file like:

migration:
  customer: Example Customer
  test:     false
sources:
- name:     Use the Source
  engine:   Foo
- name:     Sourcey
  engine:   Bar

which I then use within Ruby as:

config = YAML.load_file(File.join(File.dirname(__FILE__), ARGV[0]))
puts config['migration']['customer']

config['sources'].each do |source|
  puts source['name']
end
like image 28
Dan Harper Avatar answered Sep 23 '22 06:09

Dan Harper