class_exec выполнит блок для класса, class_eval строчку кода
%q{attr_reader(*attrs)}
subclass.class_eval str

instance_exec тоже для экземпляра класса принимает блок который может содержать аргумент,  instance_eval  содержит строку или блок но без аргумента. 

в консольке пишем ruby demo.rb где:

demo.rb 

require_relative 'base'
require_relative 'class1'
require_relative 'class2'

class1=MyClassOne.new
class2=MyClassTwo.new

puts class1.public_methods false
puts '='*20
puts class2.public_methods false

base.rb

class Base
  require 'json'
  class << self
     def inherited(subclass)
       attrs = attributes_for subclass
        subclass.class_exec do
         attr_reader(*attrs)
       end
     end
     #super

     private
     def attributes_for(klass)
        @methods = JSON(File.read('./data.json'))
        @methods[klass.to_s.downcase]
     end
  end
end

class1.rb

class MyClassOne < Base
end

class2.rb

class MyClassTwo < Base
end

data.json

{
  "myclassone": [
    "method1",
    "method2",
    "method3",
    "method4",
    "method5",
    "method6",
    "method7",
    "method8"
  ],
  "myclasstwo": [
    "method11",
    "method12",
    "method13",
    "method14",
    "method15",
    "method16",
    "method17",
    "method18"
  ]
}