Skip to content

Commit caa084b

Browse files
committed
Add eager loading
1 parent bb4d19b commit caa084b

File tree

2 files changed

+86
-64
lines changed

2 files changed

+86
-64
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#### Features
55

6+
* [#980](https://github.com/intridea/grape/issues/980): Grape is now eager-loaded - [@u2](https://github.com/u2).
67
* [#956](https://github.com/intridea/grape/issues/956): Support `present` with `Grape::Presenters::Presenter` - [@u2](https://github.com/u2).
78

89
#### Fixes

lib/grape.rb

Lines changed: 85 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
require 'active_support/core_ext/object/conversions'
2121
require 'active_support/core_ext/array/extract_options'
2222
require 'active_support/core_ext/hash/deep_merge'
23+
require 'active_support/dependencies/autoload'
2324
require 'grape/util/content_types'
2425
require 'multi_json'
2526
require 'multi_xml'
@@ -30,110 +31,130 @@
3031
I18n.load_path << File.expand_path('../grape/locale/en.yml', __FILE__)
3132

3233
module Grape
33-
autoload :API, 'grape/api'
34-
autoload :Endpoint, 'grape/endpoint'
34+
extend ActiveSupport::Autoload
3535

36-
autoload :Route, 'grape/route'
37-
autoload :Namespace, 'grape/namespace'
36+
eager_autoload do
37+
autoload :API
38+
autoload :Endpoint
3839

39-
autoload :Path, 'grape/path'
40+
autoload :Route
41+
autoload :Namespace
4042

41-
autoload :Cookies, 'grape/cookies'
42-
autoload :Validations, 'grape/validations'
43-
autoload :Request, 'grape/http/request'
43+
autoload :Path
44+
45+
autoload :Cookies
46+
autoload :Validations
47+
autoload :Request, 'grape/http/request'
48+
end
4449

4550
module Http
46-
autoload :Headers, 'grape/http/headers'
51+
extend ActiveSupport::Autoload
52+
eager_autoload do
53+
autoload :Headers
54+
end
4755
end
4856

4957
module Exceptions
50-
autoload :Base, 'grape/exceptions/base'
51-
autoload :Validation, 'grape/exceptions/validation'
52-
autoload :ValidationErrors, 'grape/exceptions/validation_errors'
53-
autoload :MissingVendorOption, 'grape/exceptions/missing_vendor_option'
54-
autoload :MissingMimeType, 'grape/exceptions/missing_mime_type'
55-
autoload :MissingOption, 'grape/exceptions/missing_option'
56-
autoload :InvalidFormatter, 'grape/exceptions/invalid_formatter'
57-
autoload :InvalidVersionerOption, 'grape/exceptions/invalid_versioner_option'
58-
autoload :UnknownValidator, 'grape/exceptions/unknown_validator'
59-
autoload :UnknownOptions, 'grape/exceptions/unknown_options'
60-
autoload :InvalidWithOptionForRepresent, 'grape/exceptions/invalid_with_option_for_represent'
61-
autoload :IncompatibleOptionValues, 'grape/exceptions/incompatible_option_values'
58+
extend ActiveSupport::Autoload
59+
autoload :Base
60+
autoload :Validation
61+
autoload :ValidationErrors
62+
autoload :MissingVendorOption
63+
autoload :MissingMimeType
64+
autoload :MissingOption
65+
autoload :InvalidFormatter
66+
autoload :InvalidVersionerOption
67+
autoload :UnknownValidator
68+
autoload :UnknownOptions
69+
autoload :InvalidWithOptionForRepresent
70+
autoload :IncompatibleOptionValues
6271
autoload :MissingGroupTypeError, 'grape/exceptions/missing_group_type'
6372
autoload :UnsupportedGroupTypeError, 'grape/exceptions/unsupported_group_type'
64-
autoload :InvalidMessageBody, 'grape/exceptions/invalid_message_body'
65-
autoload :InvalidAcceptHeader, 'grape/exceptions/invalid_accept_header'
73+
autoload :InvalidMessageBody
74+
autoload :InvalidAcceptHeader
6675
end
6776

6877
module ErrorFormatter
69-
autoload :Base, 'grape/error_formatter/base'
70-
autoload :Json, 'grape/error_formatter/json'
71-
autoload :Txt, 'grape/error_formatter/txt'
72-
autoload :Xml, 'grape/error_formatter/xml'
78+
extend ActiveSupport::Autoload
79+
autoload :Base
80+
autoload :Json
81+
autoload :Txt
82+
autoload :Xml
7383
end
7484

7585
module Formatter
76-
autoload :Base, 'grape/formatter/base'
77-
autoload :Json, 'grape/formatter/json'
78-
autoload :SerializableHash, 'grape/formatter/serializable_hash'
79-
autoload :Txt, 'grape/formatter/txt'
80-
autoload :Xml, 'grape/formatter/xml'
86+
extend ActiveSupport::Autoload
87+
autoload :Base
88+
autoload :Json
89+
autoload :SerializableHash
90+
autoload :Txt
91+
autoload :Xml
8192
end
8293

8394
module Parser
84-
autoload :Base, 'grape/parser/base'
85-
autoload :Json, 'grape/parser/json'
86-
autoload :Xml, 'grape/parser/xml'
95+
extend ActiveSupport::Autoload
96+
autoload :Base
97+
autoload :Json
98+
autoload :Xml
8799
end
88100

89101
module Middleware
90-
autoload :Base, 'grape/middleware/base'
91-
autoload :Versioner, 'grape/middleware/versioner'
92-
autoload :Formatter, 'grape/middleware/formatter'
93-
autoload :Error, 'grape/middleware/error'
102+
extend ActiveSupport::Autoload
103+
autoload :Base
104+
autoload :Versioner
105+
autoload :Formatter
106+
autoload :Error
94107

95108
module Auth
96-
autoload :Base, 'grape/middleware/auth/base'
97-
autoload :DSL, 'grape/middleware/auth/dsl'
98-
autoload :StrategyInfo, 'grape/middleware/auth/strategy_info'
99-
autoload :Strategies, 'grape/middleware/auth/strategies'
109+
extend ActiveSupport::Autoload
110+
autoload :Base
111+
autoload :DSL
112+
autoload :StrategyInfo
113+
autoload :Strategies
100114
end
101115

102116
module Versioner
103-
autoload :Path, 'grape/middleware/versioner/path'
104-
autoload :Header, 'grape/middleware/versioner/header'
105-
autoload :Param, 'grape/middleware/versioner/param'
106-
autoload :AcceptVersionHeader, 'grape/middleware/versioner/accept_version_header'
117+
extend ActiveSupport::Autoload
118+
autoload :Path
119+
autoload :Header
120+
autoload :Param
121+
autoload :AcceptVersionHeader
107122
end
108123
end
109124

110125
module Util
111-
autoload :InheritableValues, 'grape/util/inheritable_values'
112-
autoload :StackableValues, 'grape/util/stackable_values'
113-
autoload :InheritableSetting, 'grape/util/inheritable_setting'
114-
autoload :StrictHashConfiguration, 'grape/util/strict_hash_configuration'
126+
extend ActiveSupport::Autoload
127+
autoload :InheritableValues
128+
autoload :StackableValues
129+
autoload :InheritableSetting
130+
autoload :StrictHashConfiguration
115131
end
116132

117133
module DSL
118-
autoload :API, 'grape/dsl/api'
119-
autoload :Callbacks, 'grape/dsl/callbacks'
120-
autoload :Settings, 'grape/dsl/settings'
121-
autoload :Configuration, 'grape/dsl/configuration'
122-
autoload :InsideRoute, 'grape/dsl/inside_route'
123-
autoload :Helpers, 'grape/dsl/helpers'
124-
autoload :Middleware, 'grape/dsl/middleware'
125-
autoload :Parameters, 'grape/dsl/parameters'
126-
autoload :RequestResponse, 'grape/dsl/request_response'
127-
autoload :Routing, 'grape/dsl/routing'
128-
autoload :Validations, 'grape/dsl/validations'
134+
extend ActiveSupport::Autoload
135+
eager_autoload do
136+
autoload :API
137+
autoload :Callbacks
138+
autoload :Settings
139+
autoload :Configuration
140+
autoload :InsideRoute
141+
autoload :Helpers
142+
autoload :Middleware
143+
autoload :Parameters
144+
autoload :RequestResponse
145+
autoload :Routing
146+
autoload :Validations
147+
end
129148
end
130149

131150
class API
132-
autoload :Helpers, 'grape/api/helpers'
151+
extend ActiveSupport::Autoload
152+
autoload :Helpers
133153
end
134154

135155
module Presenters
136-
autoload :Presenter, 'grape/presenters/presenter'
156+
extend ActiveSupport::Autoload
157+
autoload :Presenter
137158
end
138159
end
139160

0 commit comments

Comments
 (0)