mongoid 2.1.9 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. data/CHANGELOG.md +281 -0
  2. data/{README.rdoc → README.md} +24 -14
  3. data/Rakefile +1 -1
  4. data/lib/config/locales/bg.yml +5 -0
  5. data/lib/config/locales/de.yml +5 -0
  6. data/lib/config/locales/en-GB.yml +5 -0
  7. data/lib/config/locales/en.yml +5 -0
  8. data/lib/config/locales/es.yml +3 -0
  9. data/lib/config/locales/fr.yml +5 -0
  10. data/lib/config/locales/hi.yml +5 -0
  11. data/lib/config/locales/hu.yml +5 -0
  12. data/lib/config/locales/id.yml +5 -0
  13. data/lib/config/locales/it.yml +5 -0
  14. data/lib/config/locales/ja.yml +5 -0
  15. data/lib/config/locales/kr.yml +5 -0
  16. data/lib/config/locales/nl.yml +5 -0
  17. data/lib/config/locales/pl.yml +5 -0
  18. data/lib/config/locales/pt-BR.yml +5 -0
  19. data/lib/config/locales/pt.yml +5 -0
  20. data/lib/config/locales/ro.yml +5 -0
  21. data/lib/config/locales/ru.yml +5 -0
  22. data/lib/config/locales/sv.yml +5 -0
  23. data/lib/config/locales/vi.yml +5 -0
  24. data/lib/config/locales/zh-CN.yml +5 -0
  25. data/lib/mongoid/atomic.rb +61 -10
  26. data/lib/mongoid/atomic/modifiers.rb +156 -24
  27. data/lib/mongoid/attributes.rb +38 -10
  28. data/lib/mongoid/collection.rb +21 -3
  29. data/lib/mongoid/collections.rb +52 -6
  30. data/lib/mongoid/collections/master.rb +8 -2
  31. data/lib/mongoid/collections/operations.rb +1 -0
  32. data/lib/mongoid/config.rb +5 -2
  33. data/lib/mongoid/config/database.rb +15 -2
  34. data/lib/mongoid/contexts/mongo.rb +3 -0
  35. data/lib/mongoid/criteria.rb +27 -3
  36. data/lib/mongoid/criterion/inclusion.rb +58 -0
  37. data/lib/mongoid/dirty.rb +2 -0
  38. data/lib/mongoid/document.rb +23 -0
  39. data/lib/mongoid/errors.rb +3 -0
  40. data/lib/mongoid/errors/callback.rb +26 -0
  41. data/lib/mongoid/errors/eager_load.rb +25 -0
  42. data/lib/mongoid/errors/invalid_find.rb +19 -0
  43. data/lib/mongoid/extensions.rb +3 -1
  44. data/lib/mongoid/extensions/object_id/conversions.rb +1 -1
  45. data/lib/mongoid/extras.rb +12 -2
  46. data/lib/mongoid/fields.rb +41 -2
  47. data/lib/mongoid/fields/serializable.rb +36 -0
  48. data/lib/mongoid/fields/serializable/foreign_keys/array.rb +13 -14
  49. data/lib/mongoid/fields/serializable/foreign_keys/object.rb +13 -14
  50. data/lib/mongoid/finders.rb +4 -4
  51. data/lib/mongoid/identity_map.rb +33 -20
  52. data/lib/mongoid/keys.rb +24 -1
  53. data/lib/mongoid/nested_attributes.rb +16 -4
  54. data/lib/mongoid/persistence.rb +50 -6
  55. data/lib/mongoid/persistence/operations.rb +1 -4
  56. data/lib/mongoid/persistence/operations/update.rb +3 -1
  57. data/lib/mongoid/relations/builders/nested_attributes/many.rb +27 -44
  58. data/lib/mongoid/relations/builders/referenced/many.rb +2 -1
  59. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  60. data/lib/mongoid/relations/cascading.rb +12 -1
  61. data/lib/mongoid/relations/embedded/many.rb +11 -4
  62. data/lib/mongoid/relations/embedded/one.rb +6 -2
  63. data/lib/mongoid/relations/macros.rb +19 -12
  64. data/lib/mongoid/relations/metadata.rb +17 -0
  65. data/lib/mongoid/relations/polymorphic.rb +12 -1
  66. data/lib/mongoid/relations/proxy.rb +24 -0
  67. data/lib/mongoid/relations/referenced/in.rb +20 -0
  68. data/lib/mongoid/relations/referenced/many.rb +30 -6
  69. data/lib/mongoid/relations/referenced/many_to_many.rb +18 -2
  70. data/lib/mongoid/relations/referenced/one.rb +19 -0
  71. data/lib/mongoid/relations/reflections.rb +23 -3
  72. data/lib/mongoid/relations/targets/enumerable.rb +29 -1
  73. data/lib/mongoid/serialization.rb +1 -1
  74. data/lib/mongoid/sharding.rb +12 -2
  75. data/lib/mongoid/threaded.rb +98 -0
  76. data/lib/mongoid/version.rb +1 -1
  77. data/lib/mongoid/versioning.rb +12 -2
  78. metadata +25 -21
@@ -0,0 +1,281 @@
1
+ # Overview
2
+
3
+ For instructions on upgrading to newer versions, visit [mongoid.org](http://mongoid.org/docs/upgrading.html).
4
+
5
+ ## 2.2.0
6
+
7
+ ### New Features
8
+
9
+ * Mongoid now contains eager loading in the form of `Criteria#includes(|*args)`.
10
+ This works on all relational associations and requires the identity map to
11
+ be enabled in order to function. Set `identity_map_enabled: true` in your
12
+ `mongoid.yml`.
13
+
14
+ * Relations can now take a module as a value to the `:extend` option. (Roman
15
+ Shterenzon)
16
+
17
+ * Capped collections can be created by passing the options to the `#store_in`
18
+ macro: `Person.store_in :people, capped: true, max: 1000000`
19
+
20
+ * Mongoid::Collection now supports `collection.find_and_modify`
21
+
22
+ * `Document#has_attribute?` now aliases to `Document#attribute_present?`
23
+
24
+ * \#930 You can now turn off the Mongoid logger via the mongoid.yml by
25
+ doing `logger: false`
26
+
27
+ * \#909 We now raise a `Mongoid::Errors::Callback` exception if persisting with
28
+ a bang method and a callback returns false, instead of the uninformative
29
+ validations error from before.
30
+
31
+ ### Major Changes
32
+
33
+ * \#1173 has_many relations no longer delete all documents on a set of the relation
34
+ (= [ doc_one, doc_two ]) but look to the dependent option to determine what
35
+ behaviour should occur. :delete and :destroy will behave as before, :nullify and
36
+ no option specified will both nullify the old documents without deleting.
37
+
38
+ * \#1142, \#767 Embedded relations no longer immediately persist atomically
39
+ when accessed via a parent attributes set. This includes nested attributes setting
40
+ and `attributes=` or `write_attributes`. The child changes then remain dirty and
41
+ atomically update when save is called on them or the parent document.
42
+
43
+ ### Resolved Issues
44
+
45
+ * \#1190 Fixed the gemspec errors due to changing README and CHANGELOG to markdown.
46
+
47
+ * \#1180, \#1084, \#955 Mongoid now checks the field types rather than if the name
48
+ contains `/id/` when trying to convert to object ids on criteria.
49
+
50
+ * \#1176 Enumerable targets should always return the in memory documents first,
51
+ when calling `#first`
52
+
53
+ * \#1175 Make sure both sides of many to many relations are in sync during a create.
54
+
55
+ * \#1172 Referenced enumerable relations now properly handle `#to_json`
56
+ (Daniel Doubrovkine)
57
+
58
+ * \#1040 Increased performance of class load times by removing all delegate calls
59
+ to self.class.
60
+
61
+ ## 2.1.9
62
+
63
+ ### Resolved Issues
64
+
65
+ * \#1159 Fixed build blocks not to cancel out each other when nested.
66
+
67
+ * \#1154 Don't delete many-to-many documents on empty array set.
68
+
69
+ * \#1153 Retain parent document reference in after callbacks.
70
+
71
+ * \#1151 Fix associated validation infinite loop on self referencing documents.
72
+
73
+ * \#1150 Validates associated on `belongs_to` is `false` by default.
74
+
75
+ * \#1149 Fixed metadata setting on `belongs_to` relations.
76
+
77
+ * \#1145 Metadata inverse should return `nil` if `inverse_of` was set as `nil`.
78
+
79
+ * \#1139 Enumerable targets now quack like arrays.
80
+
81
+ * \#1136 Setting `belongs_to` parent to `nil` no longer deletes the parent.
82
+
83
+ * \#1120 Don't call `in_memory` on relations if they don't respond to it.
84
+
85
+ * \#1075 Set `self` in default procs to the document instance.
86
+
87
+ * \#1072 Writing attributes for nested documents can take a hash or array of hashes.
88
+
89
+ * \#990 Embedded documents can use a single `embedded_in` with multiple parent definitions.
90
+
91
+ ## 2.1.8
92
+
93
+ ### Resolved Issues
94
+
95
+ * \#1148 Fixed `respond_to?` on all relations to return properly.
96
+
97
+ * \#1146 Added back the Mongoid destructive fields check when defining fields.
98
+
99
+ * \#1141 Fixed conversions of `nil` values in criteria.
100
+
101
+ * \#1131 Verified Mongoid/Kaminari paginating correctly.
102
+
103
+ * \#1105 Fixed atomic update consumer to be scoped to class.
104
+
105
+ * \#1075 `self` in default lambdas and procs now references the document instance.
106
+
107
+ * \#740 Removed `embedded_object_id` configuration parameter.
108
+
109
+ * \#661 Fixed metadata caching on embedded documents.
110
+
111
+ * \#595 Fixed relation reload flagging.
112
+
113
+ * \#410 Moving documents from one relation to another now works as expected.
114
+
115
+ ## 2.1.7
116
+
117
+ This was a specific release to fix MRI 1.8.7 breakages introduced by 2.1.6.
118
+
119
+ ## 2.1.6
120
+
121
+ ### Resolved Issues
122
+
123
+ * \#1126 Fix setting of relations with other relation proxies.
124
+
125
+ * \#1122 Hash and array fields now properly flag as dirty on access and change.
126
+
127
+ * \#656 Fixed reload breaking relations on unsetting of already loaded associations.
128
+
129
+ * \#647 Prefer `#unset` to `#remove_attribute` for removing values.
130
+
131
+ * \#290 Verify pushes into deeply embedded documents.
132
+
133
+ ## 2.1.5
134
+
135
+ ### Resolved Issues
136
+
137
+ * \#1116 Embedded children retain reference to parent in destroy callbacks.
138
+
139
+ * \#1110, \#1115 Don't memoize metadata related helpers on documents.
140
+
141
+ * \#1112 `db:create_indexes` no longer indexes subclasses multiple times.
142
+
143
+ * \#1111, \#1098 Don't set `_id` in `$set` operations.
144
+
145
+ * \#1007 Update attribute properly tracks array changes.
146
+
147
+ ## 2.1.4
148
+
149
+ This was a specific release to get a Psych generated gemspec so no more parse errors would occur on those rubies that were using the new YAML parser.
150
+
151
+ ## 2.1.3
152
+
153
+ ### Resolved Issues
154
+
155
+ * \#1109 Fixed validations not loading one to ones into memory.
156
+
157
+ * \#1107 Mongoid no longer wants required `mongoid/railtie` in `application.rb`.
158
+
159
+ * \#1102 Fixed nested attributes deletion.
160
+
161
+ * \#1097 Reload now runs `after_initialize` callbacks.
162
+
163
+ * \#1079 Embeds many no longer duplicates documents.
164
+
165
+ * \#1078 Fixed array criteria matching on embedded documents.
166
+
167
+ * \#1028 Implement scoped on one-to-many and many-to-many relations.
168
+
169
+ * \#988 Many-to-many clear no longer deletes the child documents.
170
+
171
+ * \#977 Autosaving relations works also through nested attributes.
172
+
173
+ * \#972 Recursive embedding now handles namespacing on generated names.
174
+
175
+ * \#943 Don't override `Document#attributes`.
176
+
177
+ * \#893 Verify count is not caching on many to many relations.
178
+
179
+ * \#815 Verify `after_initialize` is run in the correct place.
180
+
181
+ * \#793 Verify `any_of` scopes chain properly with any other scope.
182
+
183
+ * \#776 Fixed mongoid case quality when dealing with subclasses.
184
+
185
+ * \#747 Fixed complex criteria using its keys to render its string value.
186
+
187
+ * \#721 `#safely` now properly raises validation errors when they occur.
188
+
189
+ ## 2.1.2
190
+
191
+ ### Resolved Issues
192
+
193
+ * \#1082 Alias `size` and `length` to `count` on criteria. (Adam Greene)
194
+
195
+ * \#1044 When multiple relations are defined for the same class, always return the default inverse first if `inverse_of` is not defined.
196
+
197
+ * \#710 Nested attributes accept both `id` and `_id` in hashes or arrays.
198
+
199
+ * \#1047 Ignore `nil` values passed to `embeds_man` pushes and substitution. (Derick Bailey)
200
+
201
+ ## 2.1.1
202
+
203
+ ### Resolved Issues
204
+
205
+ * \#1021, \#719 Many to many relations dont trigger extra database queries when pushing new documents.
206
+
207
+ * \#607 Calling `create` on large associations does not load the entire relation.
208
+
209
+ * \#1064 `Mongoid::Paranoia` should respect `unscoped` and `scoped`.
210
+
211
+ * \#1026 `model#update_attribute` now can update booleans to `false`.
212
+
213
+ * \#618 Crack XML library breaks Mongoid by adding `#attributes` method to the `String` class. (Stephen McGinty)
214
+
215
+ ## 2.1.0
216
+
217
+ ### Major Changes
218
+
219
+ * Mongoid now requires MongoDB 1.8.x in order to properly support the `#bit` and `#rename` atomic operations.
220
+
221
+ * Traditional slave support has been removed from Mongoid. Replica sets should be used in place of traditional master and slave setups.
222
+
223
+ * Custom field serialization has changed. Please see [serializable](https://github.com/mongoid/mongoid/blob/master/lib/mongoid/fields/serializable.rb) for changes.
224
+
225
+ * The dirty attribute tracking has been switched to use ActiveModel, this brings many bug fixes and changes:
226
+
227
+ * \#756 After callbacks and observers see what was changed instead of changes just made being in previous_changes
228
+
229
+ * \#434 Documents now are flagged as dirty when brand new or the state on instantiation differs from the database state. This is consistent with ActiveRecord.
230
+
231
+ * \#323 Mongoid now supports [field]_will_change! from ActiveModel::Dirty
232
+
233
+ * Mongoid model preloading in development mode now defaults to `false`.
234
+
235
+ * `:autosave => true` on relational associations now saves on update as well as create.
236
+
237
+ * Mongoid now has an identity map for simple `find_by_id` queries. See the website for documentation.
238
+
239
+ ### New Features
240
+
241
+ * \#1067 Fields now accept a `:versioned` attribute to be able to disable what fields are versioned with `Mongoid::Versioning`. (Jim Benton)
242
+
243
+ * \#587 Added order preference to many and many to many associations. (Gregory Man)
244
+
245
+ * Added ability to chain `order_by` statements. (Gregory Man)
246
+
247
+ * \#961 Allow arbitrary `Mongo::Connection` options to pass through `Mongoid::Config::Database` object. (Morgan Nelson)
248
+
249
+ * Enable `autosave` for many to many references. (Dave Krupinski)
250
+
251
+ * The following explicit atomic operations have been added: `Model#bit`, `Model#pop`, `Model#pull`, `Model#push_all`, `Model#rename`, `Model#unset`.
252
+
253
+ * Added exception translations for Hindi. (Sukeerthi Adiga)
254
+
255
+ ### Resolved Issues
256
+
257
+ * \#974 Fix `attribute_present?` to work correctly then attribute value is `false`, thanks to @nickhoffman. (Gregory Man)
258
+
259
+ * \#960 create indexes rake task is not recognizing a lot of mongoid models because it has problems guessing their model names from filenames. (Tobias Schlottke)
260
+
261
+ * \#874 Deleting from a M-M reference is one-sided. (nickhoffman, davekrupinski)
262
+
263
+ * Replace deprecated `class_inheritable_hash` dropped in Rails 3.1+. (Konstantin Shabanov)
264
+
265
+ * Fix inconsistent state when replacing an entire many to many relation.
266
+
267
+ * Don't clobber inheritable attributes when adding subclass field inheritance. (Dave Krupinski)
268
+
269
+ * \#914 Querying embedded documents with `$or` selector. (Max Golovnia)
270
+
271
+ * \#514 Fix marshaling of documents with relation extensions. (Chris Griego)
272
+
273
+ * `Metadata#extension` now returns a `Module`, instead of a `Proc`, when an extension is defined.
274
+
275
+ * \#837 When `allow_dynamic_fields` is set to `false` and loading an embedded document with an unrecognized field, an exception is raised.
276
+
277
+ * \#963 Initializing array of embedded documents via hash regressed (Chris Griego, Morgan Nelson)
278
+
279
+ * `Mongoid::Config.reset` resets the options to their default values.
280
+
281
+ * `Mongoid::Fields.defaults` is memoized for faster instantiation of models.
@@ -1,29 +1,39 @@
1
- = Overview
1
+ Overview
2
+ ========
2
3
 
3
- == About Mongoid
4
+ About Mongoid
5
+ -------------
4
6
 
5
7
  Mongoid is an ODM (Object-Document-Mapper) framework for MongoDB in Ruby.
6
8
 
7
- == Project Tracking
9
+ Project Tracking
10
+ ----------------
8
11
 
9
- * {Mongoid Google Group}[http://groups.google.com/group/mongoid]
10
- * {Mongoid Website and Documentation}[http://mongoid.org]
12
+ * [Mongoid Google Group](http://groups.google.com/group/mongoid)
13
+ * [Mongoid Website and Documentation](http://mongoid.org)
11
14
 
12
- == Compatibility
15
+ Compatibility
16
+ -------------
13
17
 
14
18
  Mongoid is tested against Ruby 1.8.7, 1.9.2, 1.9.3, REE, Rubinius, and JRuby.
15
19
 
16
- https://secure.travis-ci.org/mongoid/mongoid.png?branch=master&.png {Build History}[http://travis-ci.org/mongoid/mongoid]
20
+ <img src="https://secure.travis-ci.org/mongoid/mongoid.png?branch=master&.png"/>
17
21
 
18
- = Documentation
22
+ [Build History](http://travis-ci.org/mongoid/mongoid)
23
+
24
+ Documentation
25
+ -------------
19
26
 
20
27
  Please see the new Mongoid website for up-to-date documentation:
21
- {mongoid.org}[http://mongoid.org]
28
+ [mongoid.org](http://mongoid.org)
29
+
30
+ Donating
31
+ --------
22
32
 
23
- = Donating
24
- * {Support Mongoid at Pledgie}[http://www.pledgie.com/campaigns/7757]
33
+ * [Support Mongoid at Pledgie](http://www.pledgie.com/campaigns/7757)
25
34
 
26
- = License
35
+ License
36
+ -------
27
37
 
28
38
  Copyright (c) 2009, 2010, 2011 Durran Jordan
29
39
 
@@ -38,7 +48,6 @@ the following conditions:
38
48
  The above copyright notice and this permission notice shall be
39
49
  included in all copies or substantial portions of the Software.
40
50
 
41
-
42
51
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
43
52
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
44
53
  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -47,6 +56,7 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
47
56
  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
48
57
  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
49
58
 
50
- = Credits
59
+ Credits
60
+ -------
51
61
 
52
62
  Durran Jordan: durran at gmail dot com
data/Rakefile CHANGED
@@ -49,4 +49,4 @@ RDoc::Task.new do |rdoc|
49
49
  rdoc.rdoc_files.include("lib/**/*.rb")
50
50
  end
51
51
 
52
- task :default => :spec
52
+ task :default => [ "spec:functional", "spec:unit" ]
@@ -4,8 +4,13 @@ bg:
4
4
  messages:
5
5
  taken:
6
6
  е вече заето
7
+ callbacks:
8
+ "Calling %{method} on %{klass} resulted in a false return from a callback."
7
9
  document_not_found:
8
10
  Не е намерен документ %{klass} с id(та) %{identifiers}.
11
+ eager_load:
12
+ "Eager loading :%{name} is not supported due to it being a many-to-many
13
+ or polymorphic belongs_to relation."
9
14
  invalid_database:
10
15
  Базата данни трябва да е от тип Mnogo:DB, а не %{name}.
11
16
  invalid_type:
@@ -4,8 +4,13 @@ de:
4
4
  messages:
5
5
  taken:
6
6
  ist bereits vergeben
7
+ callbacks:
8
+ "Calling %{method} on %{klass} resulted in a false return from a callback."
7
9
  document_not_found:
8
10
  Dokument für Klasse %{klass} mit ID(s) %{identifiers} nicht gefunden.
11
+ eager_load:
12
+ "Eager loading :%{name} is not supported due to it being a many-to-many
13
+ or polymorphic belongs_to relation."
9
14
  invalid_database:
10
15
  Datenbank sollte eine Mongo::DB sein, nicht %{name}.
11
16
  invalid_type:
@@ -4,8 +4,13 @@ en-GB:
4
4
  messages:
5
5
  taken:
6
6
  is already taken
7
+ callbacks:
8
+ "Calling %{method} on %{klass} resulted in a false return from a callback."
7
9
  document_not_found:
8
10
  Document not found for class %{klass} with id(s) %{identifiers}.
11
+ eager_load:
12
+ "Eager loading :%{name} is not supported due to it being a many-to-many
13
+ or polymorphic belongs_to relation."
9
14
  invalid_database:
10
15
  "Database should be a Mongo::DB, not %{name}."
11
16
  invalid_options:
@@ -4,8 +4,13 @@ en:
4
4
  messages:
5
5
  taken:
6
6
  is already taken
7
+ callbacks:
8
+ "Calling %{method} on %{klass} resulted in a false return from a callback."
7
9
  document_not_found:
8
10
  Document not found for class %{klass} with id(s) %{identifiers}.
11
+ eager_load:
12
+ "Eager loading :%{name} is not supported due to it being a many-to-many
13
+ or polymorphic belongs_to relation."
9
14
  invalid_database:
10
15
  "Database should be a Mongo::DB, not %{name}."
11
16
  invalid_options:
@@ -6,6 +6,9 @@ es:
6
6
  ya está en uso
7
7
  document_not_found:
8
8
  No se encontró ningún documento para la clase %{klass} con los id(s) %{identifiers}.
9
+ eager_load:
10
+ "Eager loading :%{name} is not supported due to it being a many-to-many
11
+ or polymorphic belongs_to relation."
9
12
  invalid_database:
10
13
  La base de datos debería ser una instancia de Mongo::DB, en lugar de %{name}.
11
14
  invalid_type:
@@ -4,8 +4,13 @@ fr:
4
4
  messages:
5
5
  taken:
6
6
  est déjà pris.
7
+ callbacks:
8
+ "Calling %{method} on %{klass} resulted in a false return from a callback."
7
9
  document_not_found:
8
10
  Document introuvable pour la classe %{klass} avec les ids %{identifiers}.
11
+ eager_load:
12
+ "Eager loading :%{name} is not supported due to it being a many-to-many
13
+ or polymorphic belongs_to relation."
9
14
  invalid_database:
10
15
  La base de données doit être une Mongo::DB, pas %{name}.
11
16
  invalid_type:
@@ -4,8 +4,13 @@ en:
4
4
  messages:
5
5
  taken:
6
6
  "पहले ही ले लिया है"
7
+ callbacks:
8
+ "Calling %{method} on %{klass} resulted in a false return from a callback."
7
9
  document_not_found:
8
10
  "%{identifiers} id(s) के साथ, वर्ग %{klass} के लिए दस्तावेज़ नहीं मिला."
11
+ eager_load:
12
+ "Eager loading :%{name} is not supported due to it being a many-to-many
13
+ or polymorphic belongs_to relation."
9
14
  invalid_database:
10
15
  "डेटाबेस Mongo::DB होना चाहिए, %{name} नहीं."
11
16
  invalid_options: