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.