Question

I'm creating a thor script that shows the current project I am on based on a yml file that stores Ruby structures. I'm getting an error when I tried to load this yml file.

from /Users/cpara/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/syck.rb:135:in `node_import'
from /Users/cpara/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/syck.rb:135:in `load'
from /Users/cpara/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/syck.rb:135:in `load'
from /Users/cpara/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/syck.rb:146:in `block in load_file'
from /Users/cpara/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/syck.rb:145:in `open'
from /Users/cpara/.rvm/rubies/ruby-1.9.2-p318/lib/ruby/1.9.1/syck.rb:145:in `load_file'
from ./project:84:in `current'
from /Users/cpara/.rvm/gems/ruby-1.9.2-p318@rails/gems/thor-0.14.6/lib/thor/task.rb:22:in `run'
from /Users/cpara/.rvm/gems/ruby-1.9.2-p318@rails/gems/thor-0.14.6/lib/thor/invocation.rb:118:in `invoke_task'
from /Users/cpara/.rvm/gems/ruby-1.9.2-p318@rails/gems/thor-0.14.6/lib/thor.rb:263:in `dispatch'
from /Users/cpara/.rvm/gems/ruby-1.9.2-p318@rails/gems/thor-0.14.6/lib/thor/base.rb:389:in `start'
from ./project:213:in `<main>'

Here is the piece of the script I'm trying to run:

#!/usr/bin/env ruby
require 'yaml'
class Project < Thor
  include Thor::Actions

  # Task: return current project
  desc 'current', 'Shows current project.'
  def current
    projects = YAML.load_file "#{ENV['HOME']}/.hana/data/projects.yml" #error
    abort "There are no projects.  Try creating one first." if not @projects.is_a? Array
    projects.each do |project|
      if project.current == true
        say_status :current, "Current project: #{project.name} // #{project.type} // #{project.version}", :green
        return project
      end
    end
    say_status :error, "There is no current project.", :red
  end
end

I've triple checked the path in irb and it does exist. I thought it was the way my YAML was storing my Ruby structure but even the console, I get the error. Here is my YAML file

--- 
- !ruby/struct:Proj 
  name: test
  type: testing
  version: 4.0.2
  deploy_dir: deploy
  source_dir: source
  current: true

Any ideas? I'm running Ruby 1.9.2p318.

Was it helpful?

Solution

YAML is trying to instanciate a Struct named Proj from the file as indicated by the line:

!ruby/struct:Proj

You should require the file where you haved defined Proj before loading the yaml. Or, just to test if it works, in your code, after the require 'yaml' line define Proj:

Proj = Struct.new(:name, :type, :version, :deploy_dir, :source_dir, :current)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top