# HACK to mimic the setup for rails test so we can inherit that functionality
# for rails workarea:test
#
if defined?(Rake.application) &&
    Rake.application.top_level_tasks.grep(/workarea:test/).any?
  ENV['RAILS_ENV'] ||= 'test'
  require 'rails/test_unit/railtie'
end

# HACK so the services tasks do not try to connect while loading workarea
if defined?(Rake.application) &&
    Rake.application.top_level_tasks.grep(/workarea:services/).any?
  ENV['WORKAREA_SKIP_SERVICES'] ||= 'true'
end

# HACK so the workarea:install generator does not require services to run
if ARGV.present? && ARGV.first == 'workarea:install'
  ENV['WORKAREA_SKIP_SERVICES'] ||= 'true'
end

 # HACK to allow vendoring active_shipping
 $:.unshift File.expand_path('../../../vendor/active_shipping/lib', __FILE__)

#
# Vendor Libraries
#
#
require 'mongoid'
require 'sidekiq'
require 'sidekiq/web'
require 'sidekiq/cron'
require 'sidekiq/cron/web'
require 'sidekiq-unique-jobs'
require 'sidekiq_unique_jobs/web'
require 'sidekiq/throttled'
require 'sidekiq/throttled/web'
require 'money-rails'
require 'kaminari'
require 'kaminari/mongoid'
require 'mongoid/audit_log'
require 'mongoid/document_path'
require 'mongoid/sample'
require 'elasticsearch'
require 'active_record/secure_token'
require 'active_merchant'
require 'mongoid/tree'
require 'dragonfly'
require 'net/ftp'
require 'net/sftp'
require 'geocoder'
require 'rack/timeout'
require 'easymon'
require 'mail'
require 'exifr/jpeg'
require 'image_optim'
require 'fastimage'
require 'action_view/template/resolver'
require 'sassc'
require 'sassc/rails'
require 'lingua/stemmer'
require 'autoprefixer-rails'
require 'predictor'
require 'js_routes'
require 'mongoid/active_merchant'
require 'normalize-rails'
require 'featurejs_rails'
require 'webcomponentsjs/rails'
require 'strftime/rails'
require 'i18n/js'
require 'local_time'
require 'lodash/rails'
require 'jquery/rails'
require 'jquery/ui/rails'
require 'tooltipster-rails'
require 'chart-js-rails'
require 'chart-horizontalbar-rails'
require 'select2-rails'
require 'wysihtml/rails'
require 'rack/attack'
require 'jquery-livetype-rails'
require 'active_shipping'
require 'jquery-unique-clone-rails'
require 'avalanche-rails'
require 'inline_svg'
require 'globalid'
require 'jquery-validation-rails'
require 'countries/global'
require 'countries/mongoid'
require 'waypoints_rails'
require 'rails/decorators'
require 'haml'
require 'ejs'
require 'jbuilder'
require 'redcarpet'
require 'tribute'
require 'turbolinks'
require 'csv'
require 'icalendar'
require 'icalendar/tzinfo'
require 'premailer/rails'
require 'rack/cache'
require 'rack/cache/key'
require 'json/streamer'
require 'spectrum-rails'
require 'referer-parser'
require 'dragonfly/s3_data_store'
require 'serviceworker-rails'
require 'chartkick'
require 'mongoid/encrypted'
require 'browser'

#
# Extensions
#
#
require 'workarea/ext/freedom_patches/float'
require 'workarea/ext/freedom_patches/money'
require 'workarea/ext/freedom_patches/string'
require 'workarea/ext/freedom_patches/bson'
require 'workarea/ext/freedom_patches/uri'
require 'workarea/ext/freedom_patches/action_view_cache_helper'
require 'workarea/ext/freedom_patches/action_view_conditional_url_helper'
require 'workarea/ext/freedom_patches/action_view_number_helper'
require 'workarea/ext/freedom_patches/dragonfly_attachment'
require 'workarea/ext/freedom_patches/mongoid_simple_tags'
require 'workarea/ext/freedom_patches/global_id'
require 'workarea/ext/freedom_patches/country'
require 'workarea/ext/freedom_patches/net_http_ssl_connection'
require 'workarea/ext/freedom_patches/dragonfly_job_fetch_url'
require 'workarea/ext/freedom_patches/dragonfly_callable_url_host'
require 'workarea/ext/freedom_patches/active_support_duration'
require 'workarea/ext/freedom_patches/premailer'
require 'workarea/ext/freedom_patches/referer_parser'
require 'workarea/ext/freedom_patches/mongoid_localized_defaults'
require 'workarea/ext/freedom_patches/i18n_js'
require 'workarea/ext/mongoid/list_field'
require 'workarea/ext/mongoid/each_by'
require 'workarea/ext/mongoid/except'
require 'workarea/ext/mongoid/moped_bson'
require 'workarea/ext/mongoid/timestamps_timeless'
require 'workarea/ext/mongoid/error'
require 'workarea/ext/mongoid/lookup_hash'
require 'workarea/ext/active_shipping/workarea'
require 'workarea/ext/mongoid/audit_log_entry.decorator'
require 'workarea/ext/mongoid/find_ordered'
require 'workarea/ext/mongoid/embedded_children'
require 'workarea/ext/sprockets/ruby_processor'
require 'workarea/ext/jbuilder/jbuilder_append_partials'

if Rails.env.development?
  require 'workarea/ext/freedom_patches/routes_reloader'
  require 'workarea/ext/freedom_patches/action_view_path_resolver'
end

module Workarea
  module Core
  end
end

#
# Application Libraries
#

require 'workarea/configuration'
require 'workarea/configuration/administrable/field'
require 'workarea/configuration/administrable/fieldset'
require 'workarea/configuration/administrable/definition'
require 'workarea/configuration/administrable_options'
require 'workarea/configuration/mongoid_client'
require 'workarea/configuration/mongoid'
require 'workarea/configuration/elasticsearch'
require 'workarea/configuration/redis'
require 'workarea/configuration/dragonfly'
require 'workarea/configuration/localized_active_fields'
require 'workarea/configuration/sidekiq'
require 'workarea/configuration/asset_host'
require 'workarea/configuration/s3'
require 'workarea/configuration/cache_store'
require 'workarea/configuration/action_mailer'
require 'workarea/configuration/error_handling'
require 'workarea/configuration/i18n'
require 'workarea/configuration/session'
require 'workarea/configuration/content_blocks'
require 'workarea/elasticsearch/index'
require 'workarea/elasticsearch/document'
require 'workarea/elasticsearch/query_cache'
require 'workarea/elasticsearch/serializer'
require 'workarea/constants'
require 'workarea/scheduler'
require 'workarea/i18n'
require 'workarea/validators/email_validator'
require 'workarea/validators/ip_address_validator'
require 'workarea/validators/password_validator'
require 'workarea/validators/parameter_validator'
require 'workarea/validators/url_validator'
require 'workarea/mount_point'
require 'workarea/plugin'
require 'workarea/plugin/asset_appends_helper'
require 'workarea/image_optim_processor'
require 'workarea/url_token'
require 'workarea/paged_array'
require 'workarea/geolocation'
require 'workarea/autoexpire_cache_redis'
require 'workarea/swappable_list'
require 'workarea/asset_endpoints/base'
require 'workarea/asset_endpoints/product_images'
require 'workarea/asset_endpoints/product_placeholder_images'
require 'workarea/asset_endpoints/favicons'
require 'workarea/ping_home_base'
require 'workarea/monitoring/elasticsearch_check'
require 'workarea/monitoring/mongoid_check'
require 'workarea/monitoring/sidekiq_queue_size_check'
require 'workarea/monitoring/load_balancing_check'
require 'workarea/routes_constraints/super_admin'
require 'workarea/routes_constraints/redirect'
require 'workarea/svg_asset_finder'
require 'workarea/cache'
require 'workarea/scheduled_jobs'
require 'workarea/string_id'
require 'workarea/mail_interceptor'
require 'workarea/visit'
require 'workarea/warnings'
require 'workarea/latest_version'
require 'workarea/queues_pauser'

#
# Engines
#
#
require 'workarea/version'
require 'workarea/core/engine'
require 'workarea/admin/engine'
require 'workarea/storefront/engine'
require 'workarea/testing/engine' if Rails.env.test?

#
# Testing
#
#
require 'workarea/testing/engine' if Rails.env.test?