picky 4.0.0pre1 → 4.0.0pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. data/aux/picky/cli.rb +6 -2
  2. data/lib/picky.rb +10 -8
  3. data/lib/picky/backends/backend.rb +37 -0
  4. data/lib/picky/backends/file.rb +0 -20
  5. data/lib/picky/backends/memory.rb +0 -29
  6. data/lib/picky/backends/redis.rb +74 -15
  7. data/lib/picky/backends/redis/list.rb +1 -1
  8. data/lib/picky/backends/sqlite.rb +0 -27
  9. data/lib/picky/bundle.rb +2 -2
  10. data/lib/picky/bundle_indexed.rb +1 -1
  11. data/lib/picky/bundle_indexing.rb +1 -1
  12. data/lib/picky/categories_indexed.rb +1 -11
  13. data/lib/picky/category.rb +4 -4
  14. data/lib/picky/category/location.rb +25 -0
  15. data/lib/picky/category_realtime.rb +4 -3
  16. data/lib/picky/console.rb +1 -1
  17. data/lib/picky/constants.rb +1 -1
  18. data/lib/picky/ext/maybe_compile.rb +2 -2
  19. data/lib/picky/extensions/object.rb +3 -2
  20. data/lib/picky/generators/aliases.rb +7 -2
  21. data/lib/picky/generators/partial/default.rb +1 -0
  22. data/lib/picky/generators/similarity/default.rb +1 -0
  23. data/lib/picky/generators/similarity/phonetic.rb +13 -2
  24. data/lib/picky/generators/strategy.rb +0 -2
  25. data/lib/picky/generators/weights/constant.rb +1 -2
  26. data/lib/picky/generators/weights/default.rb +1 -0
  27. data/lib/picky/generators/weights/dynamic.rb +1 -1
  28. data/lib/picky/generators/weights/logarithmic.rb +1 -1
  29. data/lib/picky/generators/weights/{runtime.rb → stub.rb} +1 -3
  30. data/lib/picky/index.rb +3 -3
  31. data/lib/picky/index_indexing.rb +0 -2
  32. data/lib/picky/index_realtime.rb +1 -1
  33. data/lib/picky/indexers/base.rb +7 -0
  34. data/lib/picky/indexers/parallel.rb +2 -4
  35. data/lib/picky/indexers/serial.rb +2 -0
  36. data/lib/picky/indexes_indexing.rb +1 -1
  37. data/lib/picky/interfaces/live_parameters/master_child.rb +175 -0
  38. data/lib/picky/interfaces/live_parameters/unicorn.rb +37 -0
  39. data/lib/picky/loader.rb +238 -259
  40. data/lib/picky/query/allocation.rb +19 -10
  41. data/lib/picky/query/combination.rb +7 -1
  42. data/lib/picky/query/combinations.rb +1 -6
  43. data/lib/picky/query/token.rb +26 -36
  44. data/lib/picky/results.rb +18 -17
  45. data/lib/picky/scheduler.rb +2 -1
  46. data/lib/picky/search.rb +1 -1
  47. data/lib/picky/sinatra.rb +6 -6
  48. data/lib/picky/statistics.rb +2 -0
  49. data/lib/picky/tokenizer.rb +8 -8
  50. data/lib/picky/wrappers/bundle/calculation.rb +4 -4
  51. data/lib/picky/wrappers/bundle/location.rb +1 -2
  52. data/lib/tasks/framework.rake +1 -1
  53. data/lib/tasks/statistics.rake +1 -1
  54. data/lib/tasks/try.rake +1 -1
  55. data/lib/tasks/try.rb +1 -1
  56. data/spec/aux/picky/cli_spec.rb +12 -12
  57. data/spec/ext/performant_spec.rb +16 -16
  58. data/spec/functional/backends/file_spec.rb +78 -7
  59. data/spec/functional/backends/memory_spec.rb +78 -7
  60. data/spec/functional/backends/redis_spec.rb +73 -13
  61. data/spec/functional/dynamic_weights_spec.rb +3 -4
  62. data/spec/functional/realtime_spec.rb +2 -2
  63. data/spec/functional/speed_spec.rb +2 -2
  64. data/spec/functional/terminate_early_spec.rb +3 -3
  65. data/spec/lib/analytics_spec.rb +1 -1
  66. data/spec/lib/analyzer_spec.rb +5 -3
  67. data/spec/lib/categories_indexed_spec.rb +38 -20
  68. data/spec/lib/category/location_spec.rb +30 -0
  69. data/spec/lib/character_substituters/west_european_spec.rb +1 -0
  70. data/spec/lib/extensions/hash_spec.rb +6 -5
  71. data/spec/lib/extensions/module_spec.rb +6 -6
  72. data/spec/lib/extensions/object_spec.rb +9 -8
  73. data/spec/lib/extensions/string_spec.rb +1 -1
  74. data/spec/lib/generators/similarity/phonetic_spec.rb +11 -0
  75. data/spec/lib/index_realtime_spec.rb +5 -5
  76. data/spec/lib/interfaces/{live_parameters_spec.rb → live_parameters/master_child_spec.rb} +26 -26
  77. data/spec/lib/interfaces/live_parameters/unicorn_spec.rb +160 -0
  78. data/spec/lib/loader_spec.rb +65 -25
  79. data/spec/lib/query/allocation_spec.rb +25 -22
  80. data/spec/lib/query/combinations_spec.rb +13 -36
  81. data/spec/lib/query/token_spec.rb +144 -131
  82. data/spec/lib/query/tokens_spec.rb +14 -0
  83. data/spec/lib/results_spec.rb +14 -8
  84. data/spec/lib/search_spec.rb +1 -1
  85. data/spec/lib/sinatra_spec.rb +8 -8
  86. metadata +28 -91
  87. data/lib/picky/adapters/rack.rb +0 -34
  88. data/lib/picky/adapters/rack/base.rb +0 -27
  89. data/lib/picky/adapters/rack/live_parameters.rb +0 -37
  90. data/lib/picky/adapters/rack/search.rb +0 -67
  91. data/lib/picky/application.rb +0 -268
  92. data/lib/picky/frontend_adapters/rack.rb +0 -161
  93. data/lib/picky/interfaces/live_parameters.rb +0 -187
  94. data/lib/picky/sources/base.rb +0 -92
  95. data/lib/picky/sources/couch.rb +0 -76
  96. data/lib/picky/sources/csv.rb +0 -83
  97. data/lib/picky/sources/db.rb +0 -189
  98. data/lib/picky/sources/delicious.rb +0 -63
  99. data/lib/picky/sources/mongo.rb +0 -80
  100. data/lib/picky/wrappers/category/location.rb +0 -38
  101. data/lib/tasks/routes.rake +0 -8
  102. data/spec/lib/adapters/rack/base_spec.rb +0 -24
  103. data/spec/lib/adapters/rack/live_parameters_spec.rb +0 -26
  104. data/spec/lib/adapters/rack/query_spec.rb +0 -39
  105. data/spec/lib/application_spec.rb +0 -155
  106. data/spec/lib/frontend_adapters/rack_spec.rb +0 -294
  107. data/spec/lib/sources/base_spec.rb +0 -53
  108. data/spec/lib/sources/couch_spec.rb +0 -114
  109. data/spec/lib/sources/csv_spec.rb +0 -89
  110. data/spec/lib/sources/db_spec.rb +0 -125
  111. data/spec/lib/sources/delicious_spec.rb +0 -94
  112. data/spec/lib/sources/mongo_spec.rb +0 -50
@@ -0,0 +1,37 @@
1
+ module Picky
2
+
3
+ # This is very optional.
4
+ # Only load if the user wants it.
5
+ #
6
+ module Interfaces
7
+
8
+ module LiveParameters
9
+
10
+ # This is an interface that provides the user of
11
+ # Picky with the possibility to change parameters
12
+ # while the Application is running.
13
+ #
14
+ class Unicorn < MasterChild
15
+
16
+ def worker_pids
17
+ Unicorn::HttpServer::WORKERS.keys
18
+ end
19
+
20
+ def remove_worker wpid
21
+ worker = Unicorn::HttpServer::WORKERS.delete(wpid) and worker.tmp.close rescue nil
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+ # Aka.
29
+ #
30
+ # TODO
31
+ #
32
+ # remove_const :Unicorn if defined? Unicorn
33
+ # Unicorn = LiveParameters::Unicorn
34
+
35
+ end
36
+
37
+ end
data/lib/picky/loader.rb CHANGED
@@ -1,280 +1,259 @@
1
1
  module Picky
2
2
 
3
- # Loads the search engine and itself.
3
+ # Loads the search engine and it
4
4
  #
5
5
  module Loader # :nodoc:all
6
6
 
7
- # Reloads the whole app.
8
- # First itself, then the app.
9
- #
10
- def self.reload
11
- Dir.chdir PICKY_ROOT
12
- exclaim 'Reloading loader.'
13
- load_self
14
- exclaim 'Reloading framework.'
15
- load_framework
16
- exclaim 'Reloading application.'
17
- load_application
18
- end
19
-
20
- # Loads this file anew.
21
- #
22
- def self.load_self
23
- exclaim 'Loader loading itself.'
24
- load __FILE__
25
- end
26
-
27
- # Load a file relative to this.
28
- #
29
- def self.load_relative filename_without_rb
30
- load File.join(File.dirname(__FILE__), "#{filename_without_rb}.rb")
31
- end
32
-
33
- # Load a user file.
34
- #
35
- def self.load_user filename
36
- file_name = File.join PICKY_ROOT, "#{filename}.rb"
37
- load file_name if File.exists? file_name
38
- end
39
-
40
- # Load the user's application.
41
- #
42
- def self.load_application
43
- Application.reload
44
- end
45
-
46
- # Loads the internal parts of the framework.
47
- # (Not for the user)
48
- #
49
- def self.load_framework_internals
50
- # Load compiled C code.
51
- #
52
- load_relative 'ext/maybe_compile'
53
-
54
- # Load extensions.
55
- #
56
- load_relative 'extensions/object'
57
- load_relative 'extensions/array'
58
- load_relative 'extensions/symbol'
59
- load_relative 'extensions/string'
60
- load_relative 'extensions/module'
61
- load_relative 'extensions/class'
62
- load_relative 'extensions/hash'
63
-
64
- # Requiring Helpers
65
- #
66
- load_relative 'helpers/measuring'
67
- load_relative 'helpers/indexing'
68
-
69
- # Calculations.
70
- #
71
- load_relative 'calculations/location'
72
-
73
- # Index generation strategies.
74
- #
75
- load_relative 'indexers/base'
76
- load_relative 'indexers/serial'
77
- load_relative 'indexers/parallel'
78
-
79
- # Generators.
80
- #
81
- load_relative 'generators/strategy'
82
-
83
- # Partial index generation strategies.
84
- #
85
- load_relative 'generators/partial/strategy'
86
- load_relative 'generators/partial/none'
87
- load_relative 'generators/partial/substring'
88
- load_relative 'generators/partial/postfix'
89
- load_relative 'generators/partial/infix'
90
- load_relative 'generators/partial/default'
91
-
92
- # Weight index generation strategies.
93
- #
94
- load_relative 'generators/weights/strategy'
95
- load_relative 'generators/weights/runtime'
96
- load_relative 'generators/weights/dynamic'
97
- load_relative 'generators/weights/constant'
98
- load_relative 'generators/weights/logarithmic'
99
- load_relative 'generators/weights/default'
100
-
101
- # Similarity index generation strategies.
102
- #
103
- load_relative 'generators/similarity/strategy'
104
- load_relative 'generators/similarity/none'
105
- load_relative 'generators/similarity/phonetic'
106
- load_relative 'generators/similarity/metaphone'
107
- load_relative 'generators/similarity/double_metaphone'
108
- load_relative 'generators/similarity/soundex'
109
- load_relative 'generators/similarity/default'
110
-
111
- # Index store handling.
112
- #
113
- load_relative 'backends/helpers/file'
114
- load_relative 'backends/backend'
115
-
116
- load_relative 'backends/prepared/text'
117
-
118
- load_relative 'backends/memory'
119
- load_relative 'backends/memory/basic'
120
- load_relative 'backends/memory/marshal'
121
- load_relative 'backends/memory/json'
122
-
123
- load_relative 'backends/file'
124
- load_relative 'backends/file/basic'
125
- load_relative 'backends/file/json'
126
-
127
- load_relative 'backends/redis'
128
- load_relative 'backends/redis/directly_manipulable'
129
- load_relative 'backends/redis/basic'
130
- load_relative 'backends/redis/list'
131
- load_relative 'backends/redis/string'
132
- load_relative 'backends/redis/float'
133
-
134
- load_relative 'backends/sqlite'
135
- load_relative 'backends/sqlite/directly_manipulable'
136
- load_relative 'backends/sqlite/basic'
137
- load_relative 'backends/sqlite/array'
138
- load_relative 'backends/sqlite/value'
139
- load_relative 'backends/sqlite/string_key_array'
140
- load_relative 'backends/sqlite/integer_key_array'
141
-
142
- # Indexing and Indexed things.
143
- #
144
- load_relative 'bundle'
145
- load_relative 'bundle_indexing'
146
- load_relative 'bundle_indexed'
147
- load_relative 'bundle_realtime'
148
-
149
- # Wrappers.
150
- #
151
- load_relative 'wrappers/category/location'
152
-
153
- load_relative 'wrappers/bundle/delegators'
154
- load_relative 'wrappers/bundle/wrapper'
155
- load_relative 'wrappers/bundle/calculation'
156
- load_relative 'wrappers/bundle/location'
157
- load_relative 'wrappers/bundle/exact_partial'
7
+ class << self
158
8
 
159
- # Tokens.
9
+ # Reloads the whole app.
10
+ # First itself, then the app.
160
11
  #
161
- load_relative 'query/token'
162
- load_relative 'query/tokens'
163
-
164
- # Tokenizer.
12
+ def reload app_file = 'app'
13
+ Dir.chdir PICKY_ROOT
14
+ exclaim 'Reloading loader.'
15
+ load_self
16
+ exclaim 'Reloading framework.'
17
+ load_framework
18
+ exclaim "Reloading application in #{File.expand_path(app_file)}."
19
+ load_application app_file
20
+ end
21
+ alias load reload
22
+
23
+ # Loads this file anew.
165
24
  #
166
- load_relative 'tokenizer'
167
-
168
- # Query combinations, qualifiers, weigher.
169
- #
170
- load_relative 'query/combination'
171
- load_relative 'query/combinations'
172
-
173
- load_relative 'query/allocation'
174
- load_relative 'query/allocations'
175
-
176
- load_relative 'query/qualifier_category_mapper'
25
+ def load_self
26
+ Kernel.load __FILE__
27
+ end
177
28
 
178
- load_relative 'query/weights'
179
-
180
- load_relative 'query/indexes'
181
- load_relative 'query/indexes_check'
182
-
183
- # Adapters.
29
+ # Load a file relative to this.
184
30
  #
185
- load_relative 'adapters/rack/base'
186
- load_relative 'adapters/rack/search'
187
- load_relative 'adapters/rack/live_parameters'
188
- load_relative 'adapters/rack'
31
+ def load_relative filename_without_rb
32
+ Kernel.load File.join(File.dirname(__FILE__), "#{filename_without_rb}.rb")
33
+ end
189
34
 
190
- # Routing.
191
- #
192
- load_relative 'frontend_adapters/rack'
193
- end
194
- # Loads the user interface parts.
195
- #
196
- def self.load_user_interface
197
- # Load harakiri.
35
+ # Load a user file.
198
36
  #
199
- load_relative 'rack/harakiri'
37
+ def load_user filename
38
+ Kernel.load File.join(PICKY_ROOT, "#{filename}.rb")
39
+ end
200
40
 
201
- # Load analyzer.
41
+ # Load the user's application.
202
42
  #
203
- load_relative 'analyzer'
204
-
205
- # Character Substituters
43
+ def load_application file = 'app'
44
+ load_user file
45
+ rescue LoadError => e
46
+ exclaim "\nBy default, Picky needs/loads the PICKY_ROOT/app.rb file as the app.\n\n"
47
+ raise e
48
+ end
49
+
50
+ # Loads the internal parts of the framework.
51
+ # (Not for the user)
206
52
  #
207
- load_relative 'character_substituters/west_european'
208
-
209
- # Convenience accessors for generators.
53
+ def load_framework_internals
54
+ # Load compiled C code.
55
+ #
56
+ load_relative 'ext/maybe_compile'
57
+
58
+ # Load extensions.
59
+ #
60
+ load_relative 'extensions/object'
61
+ load_relative 'extensions/array'
62
+ load_relative 'extensions/symbol'
63
+ load_relative 'extensions/string'
64
+ load_relative 'extensions/module'
65
+ load_relative 'extensions/class'
66
+ load_relative 'extensions/hash'
67
+
68
+ # Requiring Helpers
69
+ #
70
+ load_relative 'helpers/measuring'
71
+ load_relative 'helpers/indexing'
72
+
73
+ # Calculations.
74
+ #
75
+ load_relative 'calculations/location'
76
+
77
+ # Index generation strategies.
78
+ #
79
+ load_relative 'indexers/base'
80
+ load_relative 'indexers/serial'
81
+ load_relative 'indexers/parallel'
82
+
83
+ # Generators.
84
+ #
85
+ load_relative 'generators/strategy'
86
+
87
+ # Partial index generation strategies.
88
+ #
89
+ load_relative 'generators/partial/strategy'
90
+ load_relative 'generators/partial/none'
91
+ load_relative 'generators/partial/substring'
92
+ load_relative 'generators/partial/postfix'
93
+ load_relative 'generators/partial/infix'
94
+ load_relative 'generators/partial/default'
95
+
96
+ # Weight index generation strategies.
97
+ #
98
+ load_relative 'generators/weights/strategy'
99
+ load_relative 'generators/weights/stub'
100
+ load_relative 'generators/weights/dynamic'
101
+ load_relative 'generators/weights/constant'
102
+ load_relative 'generators/weights/logarithmic'
103
+ load_relative 'generators/weights/default'
104
+
105
+ # Similarity index generation strategies.
106
+ #
107
+ load_relative 'generators/similarity/strategy'
108
+ load_relative 'generators/similarity/none'
109
+ load_relative 'generators/similarity/phonetic'
110
+ load_relative 'generators/similarity/metaphone'
111
+ load_relative 'generators/similarity/double_metaphone'
112
+ load_relative 'generators/similarity/soundex'
113
+ load_relative 'generators/similarity/default'
114
+
115
+ # Index store handling.
116
+ #
117
+ load_relative 'backends/helpers/file'
118
+ load_relative 'backends/backend'
119
+
120
+ load_relative 'backends/prepared/text'
121
+
122
+ load_relative 'backends/memory'
123
+ load_relative 'backends/memory/basic'
124
+ load_relative 'backends/memory/marshal'
125
+ load_relative 'backends/memory/json'
126
+
127
+ load_relative 'backends/file'
128
+ load_relative 'backends/file/basic'
129
+ load_relative 'backends/file/json'
130
+
131
+ load_relative 'backends/redis'
132
+ load_relative 'backends/redis/directly_manipulable'
133
+ load_relative 'backends/redis/basic'
134
+ load_relative 'backends/redis/list'
135
+ load_relative 'backends/redis/string'
136
+ load_relative 'backends/redis/float'
137
+
138
+ load_relative 'backends/sqlite'
139
+ load_relative 'backends/sqlite/directly_manipulable'
140
+ load_relative 'backends/sqlite/basic'
141
+ load_relative 'backends/sqlite/array'
142
+ load_relative 'backends/sqlite/value'
143
+ load_relative 'backends/sqlite/string_key_array'
144
+ load_relative 'backends/sqlite/integer_key_array'
145
+
146
+ # Indexing and Indexed things.
147
+ #
148
+ load_relative 'bundle'
149
+ load_relative 'bundle_indexing'
150
+ load_relative 'bundle_indexed'
151
+ load_relative 'bundle_realtime'
152
+
153
+ # Wrappers.
154
+ #
155
+ load_relative 'category/location'
156
+
157
+ load_relative 'wrappers/bundle/delegators'
158
+ load_relative 'wrappers/bundle/wrapper'
159
+ load_relative 'wrappers/bundle/calculation'
160
+ load_relative 'wrappers/bundle/location'
161
+ load_relative 'wrappers/bundle/exact_partial'
162
+
163
+ # Tokens.
164
+ #
165
+ load_relative 'query/token'
166
+ load_relative 'query/tokens'
167
+
168
+ # Tokenizer.
169
+ #
170
+ load_relative 'tokenizer'
171
+
172
+ # Query combinations, qualifiers, weigher.
173
+ #
174
+ load_relative 'query/combination'
175
+ load_relative 'query/combinations'
176
+
177
+ load_relative 'query/allocation'
178
+ load_relative 'query/allocations'
179
+
180
+ load_relative 'query/qualifier_category_mapper'
181
+
182
+ load_relative 'query/weights'
183
+
184
+ load_relative 'query/indexes'
185
+ load_relative 'query/indexes_check'
186
+ end
187
+ # Loads the user interface parts.
210
188
  #
211
- load_relative 'generators/aliases'
212
-
213
- # API.
189
+ def load_user_interface
190
+ # Load harakiri.
191
+ #
192
+ load_relative 'rack/harakiri'
193
+
194
+ # Character Substituters
195
+ #
196
+ load_relative 'character_substituters/west_european'
197
+
198
+ # Convenience accessors for generators.
199
+ #
200
+ load_relative 'generators/aliases'
201
+
202
+ # API.
203
+ #
204
+ load_relative 'category'
205
+ load_relative 'category_indexed'
206
+ load_relative 'category_indexing'
207
+ load_relative 'category_realtime'
208
+ load_relative 'category_convenience'
209
+
210
+ load_relative 'categories'
211
+ load_relative 'categories_indexed'
212
+ load_relative 'categories_indexing'
213
+ load_relative 'categories_realtime'
214
+ load_relative 'categories_convenience'
215
+
216
+ load_relative 'indexes'
217
+ load_relative 'indexes_indexed'
218
+ load_relative 'indexes_indexing'
219
+ load_relative 'indexes_convenience'
220
+
221
+ load_relative 'index'
222
+ load_relative 'index_indexed'
223
+ load_relative 'index_indexing'
224
+ load_relative 'index_realtime'
225
+ load_relative 'index_convenience'
226
+
227
+ # Results.
228
+ #
229
+ load_relative 'results'
230
+ load_relative 'results/exact_first'
231
+
232
+ # Search.
233
+ #
234
+ load_relative 'search'
235
+
236
+ # Interfaces
237
+ #
238
+ load_relative 'interfaces/live_parameters/master_child'
239
+ load_relative 'interfaces/live_parameters/unicorn'
240
+
241
+ # Load tools. Load specifically?
242
+ #
243
+ load_relative 'scheduler'
244
+
245
+ # Load migration notices.
246
+ #
247
+ load_relative 'migrations/from_30_to_31'
248
+ end
249
+
250
+ # Loads the framework.
214
251
  #
215
- load_relative 'category'
216
- load_relative 'category_indexed'
217
- load_relative 'category_indexing'
218
- load_relative 'category_realtime'
219
- load_relative 'category_convenience'
220
-
221
- load_relative 'categories'
222
- load_relative 'categories_indexed'
223
- load_relative 'categories_indexing'
224
- load_relative 'categories_realtime'
225
- load_relative 'categories_convenience'
226
-
227
- load_relative 'indexes'
228
- load_relative 'indexes_indexed'
229
- load_relative 'indexes_indexing'
230
- load_relative 'indexes_convenience'
231
-
232
- load_relative 'index'
233
- load_relative 'index_indexed'
234
- load_relative 'index_indexing'
235
- load_relative 'index_realtime'
236
- load_relative 'index_convenience'
237
-
238
- # Results.
239
- #
240
- load_relative 'results'
241
- load_relative 'results/exact_first'
242
-
243
- # Search.
244
- #
245
- load_relative 'search'
246
-
247
- # Sources.
248
- #
249
- load_relative 'sources/base'
250
- load_relative 'sources/db'
251
- load_relative 'sources/csv'
252
- load_relative 'sources/delicious'
253
- load_relative 'sources/couch'
254
- load_relative 'sources/mongo'
255
-
256
- # Interfaces
257
- #
258
- load_relative 'interfaces/live_parameters'
259
-
260
- # Application.
261
- #
262
- load_relative 'application'
263
-
264
- # Load tools. Load specifically?
265
- #
266
- load_relative 'scheduler'
267
-
268
- # Load migration notices.
269
- #
270
- load_relative 'migrations/from_30_to_31'
271
- end
252
+ def load_framework
253
+ load_framework_internals
254
+ load_user_interface
255
+ end
272
256
 
273
- # Loads the framework.
274
- #
275
- def self.load_framework
276
- load_framework_internals
277
- load_user_interface
278
257
  end
279
258
 
280
259
  end