active-hash / active_hash

A readonly ActiveRecord-esque base class that lets you use a hash, a Yaml file or a custom file as the datasource
MIT License
1.2k stars 179 forks source link

GOTCHA - Cannot use the field name 'display' in ActiveHash as Rails adds it to Object class #184

Open hunterae opened 4 years ago

hunterae commented 4 years ago

I was attempting to use a field with name "display"; example:

class TestHash < ActiveHash::Base
  field :display, default: true
  add
  add display: false
end

However, ActiveHash defines method only if an existing instance method does not already exist, and Rails adds this method to either Object or Kernel. Ex:

TestHash.first.display
#<TestHash:0x00007f870c24a780> => nil
TestHash.last.display
#<TestHash:0x00007f870c249f38> => nil

While I totally understand the rationale here, I think it would be really helpful if you could spit out a warning or error if we attempt to define a method that is already defined. The result of the above issue was that most of my test suite failed and I had countless lines outputting the class information for individual ActiveHash records.