Skip to content

Commit 56b883e

Browse files
committed
Autoload resource classes
Implements autoloading on Active Resources classes so they don't load early unnecessarily. This improves load times for Rails applications, especially in instances where they are not used.
1 parent 97eec35 commit 56b883e

File tree

7 files changed

+132
-29
lines changed

7 files changed

+132
-29
lines changed

lib/active_resource/json_errors.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# frozen_string_literal: true
2-
require 'active_resource/base'
2+
require 'active_model/errors'
33

44
module ActiveResource
55
class Errors < ActiveModel::Errors

lib/shopify_api.rb

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,40 +5,40 @@
55
require 'digest/md5'
66
require 'base64'
77
require 'active_resource/detailed_log_subscriber'
8-
require 'shopify_api/limits'
9-
require 'shopify_api/api_version'
10-
require 'shopify_api/meta'
118
require 'active_resource/json_errors'
12-
require 'shopify_api/paginated_collection'
13-
require 'shopify_api/disable_prefix_check'
149

1510
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.6")
1611
puts("\nshopify_api: NOTE: Support for Ruby #{RUBY_VERSION} will be dropped in the next major release. Please update to Ruby 2.6 or newer before updating this gem.\n\n")
1712
end
1813

1914
module ShopifyAPI
15+
extend ActiveSupport::Autoload
16+
17+
require 'shopify_api/limits'
18+
require 'shopify_api/api_version'
19+
require 'shopify_api/paginated_collection'
20+
require 'shopify_api/disable_prefix_check'
21+
require 'shopify_api/events'
22+
require 'shopify_api/metafields'
23+
require 'shopify_api/countable'
24+
require 'shopify_api/resources'
25+
require 'shopify_api/session'
26+
require 'shopify_api/hmac_params'
27+
require 'shopify_api/api_access'
28+
require 'shopify_api/message_enricher'
29+
require 'shopify_api/connection'
30+
require 'shopify_api/pagination_link_headers'
31+
require 'shopify_api/graphql'
32+
33+
eager_autoload do
34+
autoload(:Meta)
35+
end
36+
2037
include Limits
2138
end
2239

23-
require 'shopify_api/events'
24-
require 'shopify_api/metafields'
25-
require 'shopify_api/countable'
26-
require 'shopify_api/resources'
27-
require 'shopify_api/session'
28-
require 'shopify_api/hmac_params'
29-
require 'shopify_api/api_access'
30-
require 'shopify_api/message_enricher'
31-
require 'shopify_api/connection'
32-
require 'shopify_api/pagination_link_headers'
33-
require 'shopify_api/graphql'
3440
require 'shopify_api/graphql/railtie' if defined?(Rails)
3541

36-
if ShopifyAPI::Base.respond_to?(:connection_class)
37-
ShopifyAPI::Base.connection_class = ShopifyAPI::Connection
38-
else
39-
require 'active_resource/connection_ext'
40-
end
41-
4242
if ENV["SHOPIFY_LOG_PATH"]
4343
ActiveResource::Base.logger = Logger.new(ENV["SHOPIFY_LOG_PATH"])
4444
ActiveResource::DetailedLogSubscriber.attach_to(:active_resource_detailed)

lib/shopify_api/api_version.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
# frozen_string_literal: true
2+
3+
require "active_support/core_ext/hash"
4+
25
module ShopifyAPI
36
class ApiVersion
47
class UnknownVersion < StandardError; end

lib/shopify_api/graphql/railtie.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
module ShopifyAPI
55
module GraphQL
66
class Railtie < Rails::Railtie
7+
config.eager_load_namespaces << ShopifyAPI
8+
79
initializer 'shopify_api.initialize_graphql_clients' do |app|
810
ShopifyAPI::GraphQL.schema_location = app.root.join('db', ShopifyAPI::GraphQL.schema_location)
911
ShopifyAPI::GraphQL.initialize_clients

lib/shopify_api/resources.rb

Lines changed: 97 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,98 @@
11
# frozen_string_literal: true
2-
require 'shopify_api/resources/base'
3-
require 'shopify_api/resources/array_base'
4-
Dir.glob("#{File.dirname(__FILE__)}/resources/*").each { |file| require(file) }
2+
3+
module ShopifyAPI
4+
eager_autoload do
5+
autoload_under('resources') do
6+
autoload(:Base)
7+
autoload(:ArrayBase)
8+
autoload(:AbandonedCheckout)
9+
autoload(:AccessScope)
10+
autoload(:AccessToken)
11+
autoload(:Address)
12+
autoload(:Announcement)
13+
autoload(:ApiPermission)
14+
autoload(:ApplicationCharge)
15+
autoload(:ApplicationCredit)
16+
autoload(:ArrayBase)
17+
autoload(:Article)
18+
autoload(:Asset)
19+
autoload(:AssignedFulfillmentOrder)
20+
autoload(:Base)
21+
autoload(:BillingAddress)
22+
autoload(:Blog)
23+
autoload(:CarrierService)
24+
autoload(:Cart)
25+
autoload(:Checkout)
26+
autoload(:Collect)
27+
autoload(:Collection)
28+
autoload(:CollectionListing)
29+
autoload(:CollectionPublication)
30+
autoload(:Comment)
31+
autoload(:Country)
32+
autoload(:Currency)
33+
autoload(:CustomCollection)
34+
autoload(:Customer)
35+
autoload(:CustomerGroup)
36+
autoload(:CustomerInvite)
37+
autoload(:CustomerSavedSearch)
38+
autoload(:DiscountCode)
39+
autoload(:DiscountCodeBatch)
40+
autoload(:DraftOrder)
41+
autoload(:DraftOrderInvoice)
42+
autoload(:Event)
43+
autoload(:Fulfillment)
44+
autoload(:FulfillmentEvent)
45+
autoload(:FulfillmentOrder)
46+
autoload(:FulfillmentOrderLocationsForMove)
47+
autoload(:FulfillmentRequest)
48+
autoload(:FulfillmentService)
49+
autoload(:FulfillmentV2)
50+
autoload(:GiftCard)
51+
autoload(:Image)
52+
autoload(:InventoryItem)
53+
autoload(:InventoryLevel)
54+
autoload(:LineItem)
55+
autoload(:Location)
56+
autoload(:MarketingEvent)
57+
autoload(:Metafield)
58+
autoload(:NoteAttribute)
59+
autoload(:Option)
60+
autoload(:Order)
61+
autoload(:OrderRisk)
62+
autoload(:Page)
63+
autoload(:Payment)
64+
autoload(:PaymentDetails)
65+
autoload(:Policy)
66+
autoload(:PriceRule)
67+
autoload(:Product)
68+
autoload(:ProductListing)
69+
autoload(:ProductPublication)
70+
autoload(:Province)
71+
autoload(:Publication)
72+
autoload(:Receipt)
73+
autoload(:RecurringApplicationCharge)
74+
autoload(:Redirect)
75+
autoload(:Refund)
76+
autoload(:Report)
77+
autoload(:ResourceFeedback)
78+
autoload(:Rule)
79+
autoload(:ScriptTag)
80+
autoload(:ShippingAddress)
81+
autoload(:ShippingLine)
82+
autoload(:ShippingRate)
83+
autoload(:ShippingZone)
84+
autoload(:Shop)
85+
autoload(:SmartCollection)
86+
autoload(:StorefrontAccessToken)
87+
autoload(:TaxLine)
88+
autoload(:TaxService)
89+
autoload(:TenderTransaction)
90+
autoload(:Theme)
91+
autoload(:Transaction)
92+
autoload(:UsageCharge)
93+
autoload(:User)
94+
autoload(:Variant)
95+
autoload(:Webhook)
96+
end
97+
end
98+
end

lib/shopify_api/resources/base.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,3 +164,10 @@ def only_id
164164
end
165165
end
166166
end
167+
168+
169+
if ShopifyAPI::Base.respond_to?(:connection_class)
170+
ShopifyAPI::Base.connection_class = ShopifyAPI::Connection
171+
else
172+
require 'active_resource/connection_ext'
173+
end

lib/shopify_api/resources/ping.rb

Lines changed: 0 additions & 3 deletions
This file was deleted.

0 commit comments

Comments
 (0)