From 2b01d8ce708afd377905975e0438b45bffe126c4 Mon Sep 17 00:00:00 2001 From: Guillermo Iguaran Date: Thu, 7 Jun 2018 11:02:00 -0500 Subject: [PATCH] Use a Railtie to extend Rails --- lib/extensions/has_one.rb | 30 ++++++++++++++---------------- lib/fast_jsonapi.rb | 6 +++++- lib/fast_jsonapi/railtie.rb | 11 +++++++++++ 3 files changed, 30 insertions(+), 17 deletions(-) create mode 100644 lib/fast_jsonapi/railtie.rb diff --git a/lib/extensions/has_one.rb b/lib/extensions/has_one.rb index 930ca57..1588359 100644 --- a/lib/extensions/has_one.rb +++ b/lib/extensions/has_one.rb @@ -1,20 +1,18 @@ # frozen_string_literal: true -if defined?(::ActiveRecord) - ::ActiveRecord::Associations::Builder::HasOne.class_eval do - # Based on - # https://github.com/rails/rails/blob/master/activerecord/lib/active_record/associations/builder/collection_association.rb#L50 - # https://github.com/rails/rails/blob/master/activerecord/lib/active_record/associations/builder/singular_association.rb#L11 - def self.define_accessors(mixin, reflection) - super - name = reflection.name - mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1 - def #{name}_id - # if an attribute is already defined with this methods name we should just use it - return read_attribute(__method__) if has_attribute?(__method__) - association(:#{name}).reader.try(:id) - end - CODE - end +::ActiveRecord::Associations::Builder::HasOne.class_eval do + # Based on + # https://github.com/rails/rails/blob/master/activerecord/lib/active_record/associations/builder/collection_association.rb#L50 + # https://github.com/rails/rails/blob/master/activerecord/lib/active_record/associations/builder/singular_association.rb#L11 + def self.define_accessors(mixin, reflection) + super + name = reflection.name + mixin.class_eval <<-CODE, __FILE__, __LINE__ + 1 + def #{name}_id + # if an attribute is already defined with this methods name we should just use it + return read_attribute(__method__) if has_attribute?(__method__) + association(:#{name}).reader.try(:id) + end + CODE end end diff --git a/lib/fast_jsonapi.rb b/lib/fast_jsonapi.rb index d257b6e..cb4915b 100644 --- a/lib/fast_jsonapi.rb +++ b/lib/fast_jsonapi.rb @@ -2,5 +2,9 @@ module FastJsonapi require 'fast_jsonapi/object_serializer' - require 'extensions/has_one' + if defined?(::Rails) + require 'fast_jsonapi/railtie' + elsif defined?(::ActiveRecord) + require 'extensions/has_one' + end end diff --git a/lib/fast_jsonapi/railtie.rb b/lib/fast_jsonapi/railtie.rb new file mode 100644 index 0000000..e6a2717 --- /dev/null +++ b/lib/fast_jsonapi/railtie.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require 'rails/railtie' + +class Railtie < Rails::Railtie + initializer 'fast_jsonapi.active_record' do + ActiveSupport.on_load :active_record do + require 'extensions/has_one' + end + end +end