Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert autoloads to requires #65

Merged
merged 7 commits into from
Aug 5, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 19 additions & 16 deletions lib/mobility.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,47 +32,50 @@ class MyClass

=end
module Mobility
autoload :Attributes, "mobility/attributes"
autoload :Backend, "mobility/backend"
autoload :Backends, "mobility/backends"
autoload :BackendResetter, "mobility/backend_resetter"
autoload :Configuration, "mobility/configuration"
autoload :Plugins, "mobility/plugins"
autoload :Translates, "mobility/translates"
autoload :Wrapper, "mobility/wrapper"

require "mobility/orm"
require "mobility/attributes"
require "mobility/backend"
require "mobility/backends"
require "mobility/backend_resetter"
require "mobility/configuration"
require "mobility/loaded"
require "mobility/plugins"
require "mobility/translates"
require "mobility/wrapper"

# General error for version compatibility conflicts
class VersionNotSupportedError < ArgumentError; end

begin
require "active_record"
raise VersionNotSupportedError, "Mobility is only compatible with ActiveRecord 4.2 and greater" if ::ActiveRecord::VERSION::STRING < "4.2"
autoload :ActiveModel, "mobility/active_model"
autoload :ActiveRecord, "mobility/active_record"
require "mobility/active_model"
require "mobility/active_record"
Loaded::ActiveRecord = true
rescue LoadError
rescue LoadError => e
raise unless e.message =~ /active_record/
Loaded::ActiveRecord = false
end

begin
require "rails"
Loaded::Rails = true
require "rails/generators/mobility/generators"
rescue LoadError
rescue LoadError => e
raise unless e.message =~ /rails/
Loaded::Rails = false
end

begin
require "sequel"
raise VersionNotSupportedError, "Mobility is only compatible with Sequel 4.0 and greater" if ::Sequel::MAJOR < 4
require "sequel/plugins/mobility"
#TODO avoid automatically including the inflector extension
require "sequel/extensions/inflector"
require "sequel/plugins/dirty"
autoload :Sequel, "mobility/sequel"
require "mobility/sequel"
Loaded::Sequel = true
rescue LoadError
rescue LoadError => e
raise unless e.message =~ /sequel/
Loaded::Sequel = false
end

Expand Down
1 change: 0 additions & 1 deletion lib/mobility/active_model.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
module Mobility
module ActiveModel
autoload :BackendResetter, "mobility/active_model/backend_resetter"
end
end
23 changes: 8 additions & 15 deletions lib/mobility/active_record.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,18 @@ module Mobility

=end
module ActiveRecord
autoload :AttributeMethods, "mobility/active_record/attribute_methods"
autoload :BackendResetter, "mobility/active_record/backend_resetter"
autoload :ModelTranslation, "mobility/active_record/model_translation"
autoload :StringTranslation, "mobility/active_record/string_translation"
autoload :TextTranslation, "mobility/active_record/text_translation"
autoload :Translation, "mobility/active_record/translation"
autoload :UniquenessValidator, "mobility/active_record/uniqueness_validator"
require "mobility/active_record/attribute_methods"
require "mobility/active_record/uniqueness_validator"

def self.included(model_class)
model_class.extend(ClassMethods)
query_method = Module.new do
define_method Mobility.query_method do
all
end
end
model_class.extend query_method
model_class.const_set(:UniquenessValidator,
Class.new(::Mobility::ActiveRecord::UniquenessValidator))
end

module ClassMethods
# @return [ActiveRecord::Relation] relation extended with Mobility query methods.
define_method ::Mobility.query_method do
all
end
end
end
end
2 changes: 2 additions & 0 deletions lib/mobility/active_record/backend_resetter.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require "mobility/active_model/backend_resetter"

module Mobility
module ActiveRecord
=begin
Expand Down
2 changes: 2 additions & 0 deletions lib/mobility/active_record/string_translation.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require "mobility/active_record/translation"

module Mobility
module ActiveRecord
class StringTranslation < Translation
Expand Down
2 changes: 2 additions & 0 deletions lib/mobility/active_record/text_translation.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require "mobility/active_record/translation"

module Mobility
module ActiveRecord
class TextTranslation < Translation
Expand Down
9 changes: 6 additions & 3 deletions lib/mobility/attributes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -198,11 +198,14 @@ def define_writer(attribute)
end

def get_backend_class(backend)
Module === backend ? backend : get_class_from_key(Mobility::Backends, backend)
return backend if Module === backend
require "mobility/backends/#{backend}"
get_class_from_key(Mobility::Backends, backend)
end

def get_plugin_class(name)
get_class_from_key(Mobility::Plugins, name)
def get_plugin_class(plugin)
require "mobility/plugins/#{plugin}"
get_class_from_key(Mobility::Plugins, plugin)
end

def get_class_from_key(parent_class, key)
Expand Down
7 changes: 4 additions & 3 deletions lib/mobility/backend.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# frozen-string-literal: true
require "mobility/backend/orm_delegator"

module Mobility
=begin
Expand Down Expand Up @@ -49,9 +50,6 @@ def self.configure(options)
=end

module Backend
autoload :OrmDelegator, 'mobility/backend/orm_delegator'
autoload :StringifyLocale, 'mobility/backend/stringify_locale'

# @return [String] Backend attribute
attr_reader :attribute

Expand All @@ -78,6 +76,7 @@ def initialize(model, attribute, **_)
# Extend included class with +setup+ method
def self.included(base)
base.extend(Setup)
base.extend(ClassMethods)
end

# @param [String] attribute
Expand Down Expand Up @@ -117,7 +116,9 @@ def setup_model(model_class, attribute_names, **options)
return unless setup_block = @setup_block
model_class.class_exec(attribute_names, options, &setup_block)
end
end

module ClassMethods
# {Attributes} uses this method to get a backend class specific to the
# model using the backend. Backend classes can override this method to
# return a class specific to the model class using the backend (e.g.
Expand Down
20 changes: 17 additions & 3 deletions lib/mobility/backend/orm_delegator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,26 @@ module OrmDelegator
# @param [Class] model_class Class of model
# @return [Class] Class of backend to use for model
def for(model_class)
namespace = name.split('::'.freeze)
if Loaded::ActiveRecord && model_class < ::ActiveRecord::Base
const_get(name.split("::".freeze).insert(-2, "ActiveRecord".freeze).join("::".freeze))
require_backend("active_record", namespace.last.underscore)
const_get(namespace.insert(-2, "ActiveRecord".freeze).join("::".freeze))
elsif Loaded::Sequel && model_class < ::Sequel::Model
const_get(name.split("::".freeze).insert(-2, "Sequel".freeze).join("::".freeze))
require_backend("sequel", namespace.last.underscore)
const_get(namespace.insert(-2, "Sequel".freeze).join("::".freeze))
else
raise ArgumentError, "#{name.split('::'.freeze).last} backend can only be used by ActiveRecord or Sequel models".freeze
raise ArgumentError, "#{namespace.last} backend can only be used by ActiveRecord or Sequel models".freeze
end
end

private

def require_backend(orm, backend)
begin
orm_backend = "mobility/backends/#{orm}/#{backend}"
require orm_backend
rescue LoadError => e
raise unless e.message =~ /#{orm_backend}/
end
end
end
Expand Down
3 changes: 3 additions & 0 deletions lib/mobility/backend_resetter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,13 @@ def initialize(attribute_names, &block)
# @param [Class] model_class Class of model to which backend resetter will be applied
def self.for(model_class)
if Loaded::ActiveRecord && model_class < ::ActiveRecord::Base
require "mobility/active_record/backend_resetter"
ActiveRecord::BackendResetter
elsif Loaded::ActiveRecord && model_class.ancestors.include?(::ActiveModel::Dirty)
require "mobility/active_model/backend_resetter"
ActiveModel::BackendResetter
elsif Loaded::Sequel && model_class < ::Sequel::Model
require "mobility/sequel/backend_resetter"
Sequel::BackendResetter
else
self
Expand Down
10 changes: 0 additions & 10 deletions lib/mobility/backends.rb
Original file line number Diff line number Diff line change
@@ -1,14 +1,4 @@
module Mobility
module Backends
autoload :ActiveRecord, 'mobility/backends/active_record'
autoload :Column, 'mobility/backends/column'
autoload :HashValued, 'mobility/backends/hash_valued'
autoload :Hstore, 'mobility/backends/hstore'
autoload :Jsonb, 'mobility/backends/jsonb'
autoload :KeyValue, 'mobility/backends/key_value'
autoload :Null, 'mobility/backends/null'
autoload :Sequel, 'mobility/backends/sequel'
autoload :Serialized, 'mobility/backends/serialized'
autoload :Table, 'mobility/backends/table'
end
end
8 changes: 0 additions & 8 deletions lib/mobility/backends/active_record.rb
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
module Mobility
module Backends
module ActiveRecord
autoload :Column, 'mobility/backends/active_record/column'
autoload :Hstore, 'mobility/backends/active_record/hstore'
autoload :Jsonb, 'mobility/backends/active_record/jsonb'
autoload :KeyValue, 'mobility/backends/active_record/key_value'
autoload :Serialized, 'mobility/backends/active_record/serialized'
autoload :QueryMethods, 'mobility/backends/active_record/query_methods'
autoload :Table, 'mobility/backends/active_record/table'

def setup_query_methods(query_methods)
setup do |attributes, options|
extend(Module.new do
Expand Down
3 changes: 3 additions & 0 deletions lib/mobility/backends/active_record/column.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
require "mobility/backends/active_record"
require "mobility/backends/column"

module Mobility
module Backends
=begin
Expand Down
2 changes: 2 additions & 0 deletions lib/mobility/backends/active_record/jsonb/query_methods.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require "mobility/backends/active_record/query_methods"

module Mobility
module Backends
class ActiveRecord::Jsonb::QueryMethods < ActiveRecord::QueryMethods
Expand Down
4 changes: 4 additions & 0 deletions lib/mobility/backends/active_record/key_value.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
# frozen-string-literal: true
require "mobility/backends/active_record"
require "mobility/backends/key_value"
require "mobility/active_record/string_translation"
require "mobility/active_record/text_translation"

module Mobility
module Backends
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require "mobility/backends/active_record/query_methods"

module Mobility
module Backends
class ActiveRecord::KeyValue::QueryMethods < ActiveRecord::QueryMethods
Expand Down
3 changes: 3 additions & 0 deletions lib/mobility/backends/active_record/pg_hash.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
require "mobility/backends/active_record"
require "mobility/backends/hash_valued"

module Mobility
module Backends
=begin
Expand Down
4 changes: 4 additions & 0 deletions lib/mobility/backends/active_record/serialized.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
require "mobility/backends/active_record"
require "mobility/backends/hash_valued"
require "mobility/backends/serialized"

module Mobility
module Backends
=begin
Expand Down
3 changes: 3 additions & 0 deletions lib/mobility/backends/active_record/table.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# frozen-string-literal: true
require "mobility/backends/active_record"
require "mobility/backends/table"
require "mobility/active_record/model_translation"

module Mobility
module Backends
Expand Down
2 changes: 2 additions & 0 deletions lib/mobility/backends/key_value.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require "mobility/plugins/cache"

module Mobility
module Backends
=begin
Expand Down
8 changes: 0 additions & 8 deletions lib/mobility/backends/sequel.rb
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
module Mobility
module Backends
module Sequel
autoload :Column, 'mobility/backends/sequel/column'
autoload :Hstore, 'mobility/backends/sequel/hstore'
autoload :Jsonb, 'mobility/backends/sequel/jsonb'
autoload :KeyValue, 'mobility/backends/sequel/key_value'
autoload :Serialized, 'mobility/backends/sequel/serialized'
autoload :Table, 'mobility/backends/sequel/table'
autoload :QueryMethods, 'mobility/backends/sequel/query_methods'

def setup_query_methods(query_methods)
setup do |attributes, options|
extend(Module.new do
Expand Down
3 changes: 3 additions & 0 deletions lib/mobility/backends/sequel/column.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
require "mobility/backends/sequel"
require "mobility/backends/column"

module Mobility
module Backends
=begin
Expand Down
2 changes: 2 additions & 0 deletions lib/mobility/backends/sequel/column/query_methods.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require "mobility/backends/sequel/query_methods"

module Mobility
module Backends
class Sequel::Column::QueryMethods < Sequel::QueryMethods
Expand Down
1 change: 1 addition & 0 deletions lib/mobility/backends/sequel/hstore/query_methods.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require 'mobility/backends/sequel/postgres_query_methods'
require "mobility/backends/sequel/query_methods"

Sequel.extension :pg_hstore, :pg_hstore_ops

Expand Down
1 change: 1 addition & 0 deletions lib/mobility/backends/sequel/jsonb/query_methods.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require 'mobility/backends/sequel/postgres_query_methods'
require "mobility/backends/sequel/query_methods"

Sequel.extension :pg_json, :pg_json_ops

Expand Down
5 changes: 5 additions & 0 deletions lib/mobility/backends/sequel/key_value.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# frozen-string-literal: true
require "mobility/backends/sequel"
require "mobility/backends/key_value"
require "mobility/sequel/column_changes"
require "mobility/sequel/string_translation"
require "mobility/sequel/text_translation"

module Mobility
module Backends
Expand Down
2 changes: 2 additions & 0 deletions lib/mobility/backends/sequel/key_value/query_methods.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require "mobility/backends/sequel/query_methods"

module Mobility
module Backends
class Sequel::KeyValue::QueryMethods < Sequel::QueryMethods
Expand Down
4 changes: 4 additions & 0 deletions lib/mobility/backends/sequel/pg_hash.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
require "mobility/backends/sequel"
require "mobility/backends/hash_valued"
require "mobility/backend/stringify_locale"

module Mobility
module Backends
=begin
Expand Down
1 change: 0 additions & 1 deletion lib/mobility/backends/sequel/postgres_query_methods.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

module Mobility
module Backends
module PostgresQueryMethods
Expand Down
4 changes: 4 additions & 0 deletions lib/mobility/backends/sequel/serialized.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
require "mobility/backends/sequel"
require "mobility/backends/hash_valued"
require "mobility/backends/serialized"

module Mobility
module Backends
=begin
Expand Down
2 changes: 2 additions & 0 deletions lib/mobility/backends/sequel/serialized/query_methods.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require "mobility/backends/sequel/query_methods"

module Mobility
module Backends
class Sequel::Serialized::QueryMethods < Sequel::QueryMethods
Expand Down
4 changes: 4 additions & 0 deletions lib/mobility/backends/sequel/table.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
require "mobility/backends/sequel"
require "mobility/backends/key_value"
require "mobility/sequel/model_translation"

module Mobility
module Backends
=begin
Expand Down
Loading