Sha256: 71c472db54341404679927c59fce7d7cec09d91792b59c6a970dfbfa15d6a7e6

Contents?: true

Size: 1.21 KB

Versions: 8

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

require 'active_support/callbacks'

module EacRubyUtils
  class CommonConstructor
    attr_reader :args, :options

    def initialize(*args)
      @args = args
    end

    def setup_class(klass)
      setup_class_attr_readers(klass)
      setup_class_attr_writers(klass)
      setup_class_initialize(klass)
    end

    def setup_class_attr_readers(klass)
      klass.send(:attr_reader, *args)
      klass.send(:public, *args)
    end

    def setup_class_attr_writers(klass)
      klass.send(:attr_writer, *args)
      klass.send(:private, *args.map { |a| "#{a}=" })
    end

    def setup_class_initialize(klass)
      klass.include(::ActiveSupport::Callbacks)
      klass.define_callbacks :initialize
      klass.class_eval initialize_method_code, __FILE__, __LINE__
    end

    def initialize_method_code
      b = "def initialize(#{initialize_method_args_code})\n"
      b += "  run_callbacks :initialize do\n"
      initialize_method_args.each do |arg|
        b += "  self.#{arg} = #{arg}\n"
      end
      b += "  end\n"
      b += "end\n"
      b
    end

    def initialize_method_args_code
      initialize_method_args.join(', ')
    end

    def initialize_method_args
      args
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
eac_ruby_utils-0.22.0 lib/eac_ruby_utils/common_constructor.rb
eac_ruby_utils-0.21.0 lib/eac_ruby_utils/common_constructor.rb
eac_ruby_utils-0.20.0 lib/eac_ruby_utils/common_constructor.rb
eac_ruby_utils-0.19.0 lib/eac_ruby_utils/common_constructor.rb
eac_ruby_utils-0.18.1 lib/eac_ruby_utils/common_constructor.rb
eac_ruby_utils-0.18.0 lib/eac_ruby_utils/common_constructor.rb
eac_ruby_utils-0.17.0 lib/eac_ruby_utils/common_constructor.rb
eac_ruby_utils-0.16.0 lib/eac_ruby_utils/common_constructor.rb