Skip to content

Commit bd2cbde

Browse files
authored
Autoload resource classes (#1356)
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 bd2cbde

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_resource/validations'
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)