Giter Site home page Giter Site logo

Merge keys not working as expected about psych HOT 20 CLOSED

ruby avatar ruby commented on July 28, 2024
Merge keys not working as expected

from psych.

Comments (20)

tenderlove avatar tenderlove commented on July 28, 2024

Thanks for the bug report! Would you mind filing this bug on redmine:

http://redmine.ruby-lang.org/projects/ruby-19/issues?set_filter=1&tracker_id=1

I can fix this, but if it's not on redmine, I'm afraid it won't get backported to 1.9.2.

from psych.

wr0ngway avatar wr0ngway commented on July 28, 2024

Ok, done.
http://redmine.ruby-lang.org/issues/show/4300

from psych.

tenderlove avatar tenderlove commented on July 28, 2024

Awesome, thank you!

from psych.

michaelklishin avatar michaelklishin commented on July 28, 2024

Is there a way to upgrade Psych for 1.9.2-p136? p180 seems to use RubyGems 1.5 and that is not compatible with Ruby on Rails 2.3.

from psych.

michaelklishin avatar michaelklishin commented on July 28, 2024

A follow-up: his patch isn't in 1.9.2-p180. The only way to get it for Ruby on Rails 2.3 is to use HEAD and downgrade RubyGems to 1.3.7.

Lets just say that virtually every Ruby (and especially Ruby on Rails) app I have seen since 2005 that runs in multiple environments, relies on this feature of YAML :(

from psych.

tenderlove avatar tenderlove commented on July 28, 2024

For now, I suggest you downgrade to use Syck. The way to do that is add this to your environment.rb:

YAML::ENGINE.yamler = 'syck'

I am thinking of releasing psych as a gem, but it must be 1.9 only. :-(

from psych.

michaelklishin avatar michaelklishin commented on July 28, 2024

So it is possible to switch back to Syck. Great, thank you. I personally think that 1.9-only version of Psych is totally fine: on 1.8, people seem to be pretty happy with Syck.

from psych.

tenderlove avatar tenderlove commented on July 28, 2024

The annoying thing is that even if I release a gem, you would be forced to say:

gem 'psych'

in your environment.rb. Otherwise the stdlib one would be required. Either I can teach people how to downgrade to syck, or teach people to install a gem, then add a special command to require it. I'm not sure which is least annoying. :-(

from psych.

wr0ngway avatar wr0ngway commented on July 28, 2024

I vote for the gem - the reason I want to try psych is that I frequently segfault in syck when running our test cases with complex VCR yaml fixtures.

from psych.

tenderlove avatar tenderlove commented on July 28, 2024

Fixed in ruby trunk, so I'm closing. Also, I've released a gem that is 1.9 only.

from psych.

michaelklishin avatar michaelklishin commented on July 28, 2024

@tenderlove, are there any plans to backport this to the next point release of 1.9.2? I see people hitting this issue over and over, including well-known folks in the Ruby community. That's kinda sad.

from psych.

tenderlove avatar tenderlove commented on July 28, 2024

@michaelklishin there is a ticket filed to backport to 1.9.2. In the mean time (as I have mentioned in the previous comments) please use the gem or downgrade to syck.

from psych.

ifesdjeen avatar ifesdjeen commented on July 28, 2024

actually, better add to application.rb, not environment.rb
otherwise rake tasks that do not load environment won't fire O_O (e.q. drop/create DB)

from psych.

contentfree avatar contentfree commented on July 28, 2024

@tenderlove: What version of the Psych gem has this fixed? I get the problem with Psych 1.2.0 still.

from psych.

ndbroadbent avatar ndbroadbent commented on July 28, 2024

This is still an issue, and I'm having to fix every Rails app I run on 1.9.2 with this code in config/boot.rb:

if RUBY_VERSION.to_f >= 1.9
  # The psych engine for YAML doesn't handle `<<: *defaults` properly.
  # See: https://github.com/tenderlove/psych/issues/8
  require 'yaml'
  YAML::ENGINE.yamler = 'syck'
end

It would be great if this hack was no longer necessary.

from psych.

tenderlove avatar tenderlove commented on July 28, 2024

@ndbroadbent please open a new ticket. In the new ticket, post code that parses your YAML file using 1.8 and 1.9 (with psych). Post the output for 1.8 and the output for 1.9, and we can get it fixed. Thanks.

from psych.

tenderlove avatar tenderlove commented on July 28, 2024

Also make sure to include the YAML file along with your sample program. Thanks!

from psych.

ndbroadbent avatar ndbroadbent commented on July 28, 2024

Aha! I see that it has been fixed in 1.9.2-p290, but not 1.9.2-p180.
I shall bring all my Rails 3 apps up to p290.
Sorry for the false alarm.

from psych.

firedev avatar firedev commented on July 28, 2024

Sorry but it still not merging keys correctly as of Ruby 1.9.3p374 and Rails 3.2.11 rails/rails#9025

# Models
ru:
  activerecord:
    attributes:
      model:
        title: "Russian title"


  errors: &errors
      format: ! '%{attribute} %{message}'
      messages:
        accepted: нужно подтвердить

  activerecord:
    errors:
      <<: *errors

Start console:

I18n.locale=:ru
Model.human_attribute_name(:title)
=> "Title"

from psych.

psagithub avatar psagithub commented on July 28, 2024

I know it is veryyyyy old thread. But I started using/learning Ruby just now :-). As per the thread the merge issue is fixed; but I can see that the merge is working correctly only on single level. It is not working if the properties grows to multiple level. For example,

common: &common
  api_services:
    host: host1.com
    port: 8080

development:
  <<: *common
  api_services:
    host: host2.com

So when I access "development.api_services.port" should return "8080", but returning "nil". Is it expected behavior?
I can see the code changes for this merge on "to_ruby.rb" under revive_hash.

Rather than just assigning the value in the else part

hash[key] = val

how about merging it with existing values?

if hash[key] && hash[key].class == Hash
  hash[key].deep_merge(val)
else
  hash[key] = val
end

from psych.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.