What is - !ruby/object: ?

I’m trying to get this plugin to work:
https://github.com/mettadore/geoinfo

It basically gets you all the cities and states in the United States.

However, it reads: “I haven’t added a rake task to populate the database yet. But the YAML files are in vendor/plugins/geoinfo/lib/db/*.yml”

Alright, no problem, I’ll do it manually then. However, I look in the file, and I find stuff that looks like this:

  • !ruby/object:GeoinfoState

attributes:

name: STATE

abbr: ABBR

country: COUNTRY

type: TYPE

id: “ID”

  • !ruby/object:GeoinfoState

attributes:

name: ALASKA

abbr: AK

country: UNITED STATES OF AMERICA

type: STATE

id: “1”

  • !ruby/object:GeoinfoState

attributes:

name: ALABAMA

abbr: AL

country: UNITED STATES OF AMERICA

type: STATE

id: “2”

  • !ruby/object:GeoinfoState

attributes:

name: ARKANSAS

abbr: AR

country: UNITED STATES OF AMERICA

type: STATE

id: “3”

and so on

The file name is states.yml.

Now, my question is what exactly is this file? How do I use it? The syntax doesn’t exactly look like its a fixture…

I’m confused on how I can populate my db tables with that file. Does anyone know how? What is that file used for? how?

Thank you.

-David

I’m trying to get this plugin to work: https://github.com/mettadore/geoinfo

It basically gets you all the cities and states in the United States.

However, it reads: “I haven’t added a rake task to populate the database yet. But the YAML files are in vendor/plugins/geoinfo/lib/db/*.yml”

Alright, no problem, I’ll do it manually then. However, I look in the file, and I find stuff that looks like this:

  • !ruby/object:GeoinfoState

attributes:

name: STATE

abbr: ABBR

country: COUNTRY

type: TYPE

id: “ID”

  • !ruby/object:GeoinfoState

attributes:

name: ALASKA

abbr: AK

country: UNITED STATES OF AMERICA

type: STATE

id: “1”

  • !ruby/object:GeoinfoState

attributes:

name: ALABAMA

abbr: AL

country: UNITED STATES OF AMERICA

type: STATE

id: “2”

  • !ruby/object:GeoinfoState

attributes:

name: ARKANSAS

abbr: AR

country: UNITED STATES OF AMERICA

type: STATE

id: “3”

and so on

The file name is states.yml.

Now, my question is what exactly is this file? How do I use it? The syntax doesn’t exactly look like its a fixture…

It is a YAML file (which, by default, your scaffolded fixtures are as well). It looks like the YAML was used to serialize some ruby objects.
For example (irb session using 1.8.7):

require ‘yaml’
class GeoinfoState
attr_accessor :attributes
end
x = GeoinfoState.new
x.attributes = { :name => “ALASKA”, :abbr => “AK”, :country => “UNITED STATES OF AMERICA”, :type => “STATE”, :id => “1” }
puts YAML.dump(x)
— !ruby/object:GeoinfoState
attributes:
:type: STATE
:abbr: AK
:country: UNITED STATES OF AMERICA
:name: ALASKA
:id: “1”

I’m confused on how I can populate my db tables with that file. Does anyone know how? What is that file used for? how?

One way is to define a simple class (similar to what I did above) or ensure the geoinfo gem’s version is loaded. Then do something like:

states = YAML.load_file(…)
states.each do |s|
State.create!(:name => s.name, …) # where State is your model
end

If this isn’t a one-off action, you could even define a method to do something like this in your State class:

require ‘yaml’
class State < ActiveRecord::Base
def self.import_from(filename)
YAML.load_file(filename).each do |s|
create!(…)
end
end
end

Thank you for the response

So basically it doesn’t populate a database table? But instead, I retrieve it directly from the yaml file?

-David

Correct. It appears this file was just intended to store serialized objects, no database needed.