ynab 5.2.0 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. checksums.yaml +4 -4
  2. data/DEVELOPMENT.md +6 -3
  3. data/Gemfile.lock +21 -19
  4. data/Rakefile +9 -8
  5. data/docs/ExistingCategory.md +4 -3
  6. data/docs/ExistingTransaction.md +1 -1
  7. data/docs/NewCategory.md +4 -3
  8. data/docs/NewTransaction.md +1 -1
  9. data/docs/SaveCategory.md +4 -3
  10. data/docs/SaveTransactionWithIdOrImportId.md +1 -1
  11. data/docs/SaveTransactionWithOptionalFields.md +1 -1
  12. data/docs/TransactionsApi.md +1 -1
  13. data/lib/ynab/api/accounts_api.rb +1 -1
  14. data/lib/ynab/api/categories_api.rb +1 -1
  15. data/lib/ynab/api/money_movements_api.rb +1 -1
  16. data/lib/ynab/api/months_api.rb +1 -1
  17. data/lib/ynab/api/payee_locations_api.rb +1 -1
  18. data/lib/ynab/api/payees_api.rb +1 -1
  19. data/lib/ynab/api/plans_api.rb +1 -1
  20. data/lib/ynab/api/scheduled_transactions_api.rb +1 -1
  21. data/lib/ynab/api/transactions_api.rb +3 -3
  22. data/lib/ynab/api/user_api.rb +1 -1
  23. data/lib/ynab/api_client.rb +1 -1
  24. data/lib/ynab/api_model_base.rb +1 -1
  25. data/lib/ynab/configuration.rb +1 -1
  26. data/lib/ynab/models/account.rb +38 -13
  27. data/lib/ynab/models/account_base.rb +34 -12
  28. data/lib/ynab/models/account_response.rb +31 -12
  29. data/lib/ynab/models/account_response_data.rb +31 -12
  30. data/lib/ynab/models/account_type.rb +1 -1
  31. data/lib/ynab/models/accounts_response.rb +31 -12
  32. data/lib/ynab/models/accounts_response_data.rb +31 -12
  33. data/lib/ynab/models/bulk_response.rb +31 -12
  34. data/lib/ynab/models/bulk_response_data.rb +31 -12
  35. data/lib/ynab/models/bulk_response_data_bulk.rb +31 -12
  36. data/lib/ynab/models/bulk_transactions.rb +31 -12
  37. data/lib/ynab/models/categories_response.rb +31 -12
  38. data/lib/ynab/models/categories_response_data.rb +31 -12
  39. data/lib/ynab/models/category.rb +47 -12
  40. data/lib/ynab/models/category_base.rb +31 -12
  41. data/lib/ynab/models/category_group.rb +31 -12
  42. data/lib/ynab/models/category_group_with_categories.rb +31 -12
  43. data/lib/ynab/models/category_response.rb +31 -12
  44. data/lib/ynab/models/category_response_data.rb +31 -12
  45. data/lib/ynab/models/currency_format.rb +31 -12
  46. data/lib/ynab/models/date_format.rb +31 -12
  47. data/lib/ynab/models/error_detail.rb +31 -12
  48. data/lib/ynab/models/error_response.rb +31 -12
  49. data/lib/ynab/models/existing_category.rb +83 -19
  50. data/lib/ynab/models/existing_transaction.rb +36 -13
  51. data/lib/ynab/models/hybrid_transaction.rb +41 -12
  52. data/lib/ynab/models/hybrid_transactions_response.rb +31 -12
  53. data/lib/ynab/models/hybrid_transactions_response_data.rb +31 -12
  54. data/lib/ynab/models/money_movement.rb +38 -12
  55. data/lib/ynab/models/money_movement_base.rb +31 -12
  56. data/lib/ynab/models/money_movement_group.rb +31 -12
  57. data/lib/ynab/models/money_movement_groups_response.rb +31 -12
  58. data/lib/ynab/models/money_movement_groups_response_data.rb +31 -12
  59. data/lib/ynab/models/money_movements_response.rb +31 -12
  60. data/lib/ynab/models/money_movements_response_data.rb +31 -12
  61. data/lib/ynab/models/month_detail.rb +33 -12
  62. data/lib/ynab/models/month_detail_base.rb +33 -12
  63. data/lib/ynab/models/month_detail_response.rb +31 -12
  64. data/lib/ynab/models/month_detail_response_data.rb +31 -12
  65. data/lib/ynab/models/month_summaries_response.rb +31 -12
  66. data/lib/ynab/models/month_summaries_response_data.rb +31 -12
  67. data/lib/ynab/models/month_summary.rb +33 -12
  68. data/lib/ynab/models/month_summary_base.rb +31 -12
  69. data/lib/ynab/models/new_category.rb +83 -19
  70. data/lib/ynab/models/new_transaction.rb +36 -13
  71. data/lib/ynab/models/patch_category_group_wrapper.rb +31 -12
  72. data/lib/ynab/models/patch_category_wrapper.rb +31 -12
  73. data/lib/ynab/models/patch_month_category_wrapper.rb +31 -12
  74. data/lib/ynab/models/patch_payee_wrapper.rb +31 -12
  75. data/lib/ynab/models/patch_transactions_wrapper.rb +31 -12
  76. data/lib/ynab/models/payee.rb +31 -12
  77. data/lib/ynab/models/payee_location.rb +31 -12
  78. data/lib/ynab/models/payee_location_response.rb +31 -12
  79. data/lib/ynab/models/payee_location_response_data.rb +31 -12
  80. data/lib/ynab/models/payee_locations_response.rb +31 -12
  81. data/lib/ynab/models/payee_locations_response_data.rb +31 -12
  82. data/lib/ynab/models/payee_response.rb +31 -12
  83. data/lib/ynab/models/payee_response_data.rb +31 -12
  84. data/lib/ynab/models/payees_response.rb +31 -12
  85. data/lib/ynab/models/payees_response_data.rb +31 -12
  86. data/lib/ynab/models/plan_detail.rb +33 -12
  87. data/lib/ynab/models/plan_detail_response.rb +31 -12
  88. data/lib/ynab/models/plan_detail_response_data.rb +31 -12
  89. data/lib/ynab/models/plan_settings.rb +33 -14
  90. data/lib/ynab/models/plan_settings_response.rb +31 -12
  91. data/lib/ynab/models/plan_settings_response_data.rb +31 -12
  92. data/lib/ynab/models/plan_summary.rb +33 -12
  93. data/lib/ynab/models/plan_summary_response.rb +31 -12
  94. data/lib/ynab/models/plan_summary_response_data.rb +31 -12
  95. data/lib/ynab/models/post_account_wrapper.rb +31 -12
  96. data/lib/ynab/models/post_category_group_wrapper.rb +31 -12
  97. data/lib/ynab/models/post_category_wrapper.rb +31 -12
  98. data/lib/ynab/models/post_payee.rb +31 -12
  99. data/lib/ynab/models/post_payee_wrapper.rb +31 -12
  100. data/lib/ynab/models/post_scheduled_transaction_wrapper.rb +31 -12
  101. data/lib/ynab/models/post_transactions_wrapper.rb +31 -12
  102. data/lib/ynab/models/put_scheduled_transaction_wrapper.rb +31 -12
  103. data/lib/ynab/models/put_transaction_wrapper.rb +31 -12
  104. data/lib/ynab/models/save_account.rb +31 -12
  105. data/lib/ynab/models/save_account_type.rb +1 -1
  106. data/lib/ynab/models/save_category.rb +79 -20
  107. data/lib/ynab/models/save_category_group.rb +31 -12
  108. data/lib/ynab/models/save_category_group_response.rb +31 -12
  109. data/lib/ynab/models/save_category_group_response_data.rb +31 -12
  110. data/lib/ynab/models/save_category_response.rb +31 -12
  111. data/lib/ynab/models/save_category_response_data.rb +31 -12
  112. data/lib/ynab/models/save_month_category.rb +31 -12
  113. data/lib/ynab/models/save_payee.rb +31 -12
  114. data/lib/ynab/models/save_payee_response.rb +31 -12
  115. data/lib/ynab/models/save_payee_response_data.rb +31 -12
  116. data/lib/ynab/models/save_scheduled_transaction.rb +31 -12
  117. data/lib/ynab/models/save_sub_transaction.rb +31 -12
  118. data/lib/ynab/models/save_transaction_with_id_or_import_id.rb +36 -13
  119. data/lib/ynab/models/save_transaction_with_optional_fields.rb +32 -13
  120. data/lib/ynab/models/save_transactions_response.rb +31 -12
  121. data/lib/ynab/models/save_transactions_response_data.rb +31 -12
  122. data/lib/ynab/models/scheduled_sub_transaction.rb +37 -12
  123. data/lib/ynab/models/scheduled_sub_transaction_base.rb +31 -12
  124. data/lib/ynab/models/scheduled_transaction_detail.rb +36 -12
  125. data/lib/ynab/models/scheduled_transaction_frequency.rb +1 -1
  126. data/lib/ynab/models/scheduled_transaction_response.rb +31 -12
  127. data/lib/ynab/models/scheduled_transaction_response_data.rb +31 -12
  128. data/lib/ynab/models/scheduled_transaction_summary.rb +36 -12
  129. data/lib/ynab/models/scheduled_transaction_summary_base.rb +31 -12
  130. data/lib/ynab/models/scheduled_transactions_response.rb +31 -12
  131. data/lib/ynab/models/scheduled_transactions_response_data.rb +31 -12
  132. data/lib/ynab/models/sub_transaction.rb +38 -12
  133. data/lib/ynab/models/sub_transaction_base.rb +31 -12
  134. data/lib/ynab/models/transaction_cleared_status.rb +1 -1
  135. data/lib/ynab/models/transaction_detail.rb +41 -12
  136. data/lib/ynab/models/transaction_flag_color.rb +1 -1
  137. data/lib/ynab/models/transaction_response.rb +31 -12
  138. data/lib/ynab/models/transaction_response_data.rb +31 -12
  139. data/lib/ynab/models/transaction_summary.rb +41 -12
  140. data/lib/ynab/models/transaction_summary_base.rb +31 -12
  141. data/lib/ynab/models/transactions_import_response.rb +31 -12
  142. data/lib/ynab/models/transactions_import_response_data.rb +31 -12
  143. data/lib/ynab/models/transactions_response.rb +31 -12
  144. data/lib/ynab/models/transactions_response_data.rb +31 -12
  145. data/lib/ynab/models/user.rb +31 -12
  146. data/lib/ynab/models/user_response.rb +31 -12
  147. data/lib/ynab/models/user_response_data.rb +31 -12
  148. data/lib/ynab/version.rb +1 -1
  149. data/lib/ynab.rb +1 -1
  150. data/open_api_spec.yaml +61 -30
  151. data/templates/partial_model_generic.mustache +37 -11
  152. data/ynab.gemspec +2 -2
  153. metadata +3 -3
data/open_api_spec.yaml CHANGED
@@ -1,24 +1,38 @@
1
1
  openapi: 3.1.1
2
2
  info:
3
3
  title: YNAB API Endpoints
4
- description: Our API uses a REST based design, leverages the JSON data format,
5
- and relies upon HTTPS for transport. We respond with meaningful HTTP
6
- response codes and if an error occurs, we include error details in the
7
- response body. API Documentation is at https://api.ynab.com
8
- version: 1.85.0
4
+ description: |-
5
+ Our API uses a REST based design, leverages the JSON data format, and relies upon HTTPS for transport. We respond with meaningful HTTP response codes and if an error occurs, we include error details in the response body.
6
+
7
+ Read the [API Documentation](https://api.ynab.com) for more information about the API, including how to obtain an access token and how to use it to make requests.
8
+ version: 1.88.0
9
9
  servers:
10
10
  - url: https://api.ynab.com/v1
11
11
  security:
12
12
  - bearer: []
13
13
  tags:
14
14
  - name: User
15
+ description: The currently authenticated user
15
16
  - name: Plans
17
+ description: Plans are the top-level container for your YNAB data; accounts,
18
+ categories, payees, and transactions all belong to a plan. Most endpoints
19
+ require a plan_id, which can be obtained from "Get all plans".
20
+ Alternatively, "last-used" can be used in place of a plan_id to specify
21
+ the most recently used plan, and "default" can be used if [default plan
22
+ selection](https://api.ynab.com/#oauth-default-plan) is enabled.
16
23
  - name: Accounts
17
- description: The accounts for a plan
24
+ description: The accounts for a plan. Every transaction belongs to an account,
25
+ and an account is either "on budget", where its activity is categorized
26
+ and planned, or a tracking account, where only its balance is tracked
27
+ (see the on_budget flag).
18
28
  - name: Categories
19
- description: The categories for a plan
29
+ description: The categories for a plan, organized into category groups.
30
+ Category amounts (assigned, activity, available) are specific to a month,
31
+ and can be read and updated through the month-scoped category endpoints.
20
32
  - name: Payees
21
- description: The payees for a plan
33
+ description: The payees for a plan. Transfers between accounts are represented
34
+ with special transfer payees; a payee with transfer_account_id set is the
35
+ transfer payee for that account.
22
36
  - name: Payee Locations
23
37
  description: When you enter a transaction and specify a payee on the YNAB mobile
24
38
  apps, the GPS coordinates for that location are stored, with your
@@ -31,11 +45,20 @@ tags:
31
45
  Assign, Age of Money and category (assigned / activity / available)
32
46
  amounts are available.
33
47
  - name: Money Movements
34
- description: The money movements for a plan
48
+ description: Money movements record money moved between two categories, or
49
+ between a category and Ready to Assign, within a plan month. Movements
50
+ performed together as a single action are linked by a money movement
51
+ group.
35
52
  - name: Transactions
36
- description: The transactions for a plan
53
+ description: The transactions for a plan. Transaction amounts are specified in
54
+ [milliunits format](https://api.ynab.com/#formats). Split transactions
55
+ are represented with subtransactions, and transfers between accounts are
56
+ represented with transfer payees.
37
57
  - name: Scheduled Transactions
38
- description: The scheduled transactions for a plan
58
+ description: The scheduled transactions for a plan; upcoming and recurring
59
+ transactions that have not yet been entered into an account. Each has a
60
+ frequency along with the first and next dates it will occur (date_first
61
+ and date_next).
39
62
  paths:
40
63
  /user:
41
64
  get:
@@ -1189,7 +1212,7 @@ paths:
1189
1212
  $ref: "#/components/schemas/PatchTransactionsWrapper"
1190
1213
  required: true
1191
1214
  responses:
1192
- "209":
1215
+ "200":
1193
1216
  description: The transactions were successfully updated
1194
1217
  content:
1195
1218
  application/json:
@@ -1208,14 +1231,12 @@ paths:
1208
1231
  tags:
1209
1232
  - Transactions
1210
1233
  summary: Import transactions
1211
- description: Imports available transactions on all linked accounts for the given
1212
- plan. Linked accounts allow transactions to be imported directly from a
1213
- specified financial institution and this endpoint initiates that
1214
- import. Sending a request to this endpoint is the equivalent of
1215
- clicking "Import" on each account in the web application or tapping the
1216
- "New Transactions" banner in the mobile applications. The response for
1217
- this endpoint contains the transaction ids that have been imported.
1234
+ description: "DEPRECATED: This endpoint is no longer needed because YNAB now
1235
+ automatically imports transactions on linked accounts. Requests are
1236
+ still accepted for backwards compatibility but no import is performed
1237
+ and the response will always contain an empty list of transaction ids."
1218
1238
  operationId: importTransactions
1239
+ deprecated: true
1219
1240
  parameters:
1220
1241
  - name: plan_id
1221
1242
  in: path
@@ -1227,13 +1248,7 @@ paths:
1227
1248
  type: string
1228
1249
  responses:
1229
1250
  "200":
1230
- description: The request was successful but there were no transactions to import
1231
- content:
1232
- application/json:
1233
- schema:
1234
- $ref: "#/components/schemas/TransactionsImportResponse"
1235
- "201":
1236
- description: One or more transactions were imported successfully
1251
+ description: The request was successful. No transactions are imported.
1237
1252
  content:
1238
1253
  application/json:
1239
1254
  schema:
@@ -2882,7 +2897,9 @@ components:
2882
2897
  type: array
2883
2898
  description: An array of subtransactions to configure a transaction as a split.
2884
2899
  Updating `subtransactions` on an existing split transaction is not
2885
- supported.
2900
+ supported and will return an error. Splits are not allowed on
2901
+ tracking accounts or on transfers between on-budget accounts; a
2902
+ transfer to a tracking account can be a split.
2886
2903
  items:
2887
2904
  $ref: "#/components/schemas/SaveSubTransaction"
2888
2905
  SaveSubTransaction:
@@ -3246,21 +3263,35 @@ components:
3246
3263
  description: The goal target amount in milliunits format. If value is specified
3247
3264
  and goal has not already been configured for category, a monthly goal
3248
3265
  will be created for the category with this target amount. If goal_type is
3249
- not specified, it will default to 'NEED' or 'MF' for Credit Card Payment categories.
3266
+ not specified, it will default to 'NEED', or to 'MF' for Credit Card Payment categories and
3267
+ 'DEBT' for categories paired to a loan account.
3268
+ When updating a category, passing null removes any existing target.
3250
3269
  format: int64
3251
3270
  goal_target_date:
3252
3271
  type:
3253
3272
  - string
3254
3273
  - "null"
3255
- description: The goal target date in ISO format (e.g. 2016-12-01).
3274
+ description: The goal target date in ISO format (e.g. 2016-12-01). Not supported for categories
3275
+ paired to a loan account.
3256
3276
  format: date
3257
3277
  goal_needs_whole_amount:
3258
3278
  type:
3259
3279
  - boolean
3260
3280
  - "null"
3261
- description: Whether the goal requires the full target amount each period. Only supported for 'NEED' goals.
3281
+ description: Whether the goal requires the full target amount each period. Only supported for 'NEED' goals,
3282
+ and not supported for Credit Card Payment categories or categories paired to a loan account.
3262
3283
  When true, the goal is configured as 'Set aside another...'.
3263
3284
  When false, the goal is configured as 'Refill up to...'.
3285
+ goal_frequency:
3286
+ type: string
3287
+ enum:
3288
+ - monthly
3289
+ - weekly
3290
+ - yearly
3291
+ description: When specified, configures a recurring 'NEED' target of goal_target that repeats at this
3292
+ frequency, replacing any existing target. Requires goal_target. Cannot be combined with goal_target_date
3293
+ and is not supported for Credit Card Payment categories or categories paired to a loan account.
3294
+ Omit to leave an existing target's cadence unchanged.
3264
3295
  ExistingCategory:
3265
3296
  allOf:
3266
3297
  - $ref: "#/components/schemas/SaveCategory"
@@ -42,14 +42,19 @@
42
42
  }
43
43
  end
44
44
 
45
- # Returns all the JSON keys this model knows about{{#parent}}, including the ones defined in its parent(s){{/parent}}
45
+ # Returns attribute mapping this model knows about{{#parentModel}}, including the ones defined in its parent(s){{/parentModel}}
46
+ def self.acceptable_attribute_map
47
+ {{^parentModel}}
48
+ attribute_map
49
+ {{/parentModel}}
50
+ {{#parentModel}}
51
+ superclass.acceptable_attribute_map.merge(attribute_map)
52
+ {{/parentModel}}
53
+ end
54
+
55
+ # Returns all the JSON keys this model knows about{{#parentModel}}, including the ones defined in its parent(s){{/parentModel}}
46
56
  def self.acceptable_attributes
47
- {{^parent}}
48
- attribute_map.values
49
- {{/parent}}
50
- {{#parent}}
51
- attribute_map.values.concat(superclass.acceptable_attributes)
52
- {{/parent}}
57
+ acceptable_attribute_map.values
53
58
  end
54
59
 
55
60
  # Attribute type mapping.
@@ -72,6 +77,26 @@
72
77
  ])
73
78
  end
74
79
 
80
+ # Returns attribute type mapping{{#parentModel}}, including the ones defined in its parent(s){{/parentModel}}
81
+ def self.acceptable_openapi_types
82
+ {{^parentModel}}
83
+ openapi_types
84
+ {{/parentModel}}
85
+ {{#parentModel}}
86
+ superclass.acceptable_openapi_types.merge(openapi_types)
87
+ {{/parentModel}}
88
+ end
89
+
90
+ # Returns the nullable attributes{{#parentModel}}, including the ones defined in its parent(s) that it does not redeclare{{/parentModel}}
91
+ def self.acceptable_openapi_nullable
92
+ {{^parentModel}}
93
+ openapi_nullable
94
+ {{/parentModel}}
95
+ {{#parentModel}}
96
+ (superclass.acceptable_openapi_nullable - attribute_map.keys) | openapi_nullable
97
+ {{/parentModel}}
98
+ end
99
+
75
100
  {{#anyOf}}
76
101
  {{#-first}}
77
102
  # List of class defined in anyOf (OpenAPI v3)
@@ -115,17 +140,18 @@
115
140
  end
116
141
 
117
142
  # check to see if the attribute exists and convert string to symbol for hash key
143
+ acceptable_attribute_map = self.class.acceptable_attribute_map
118
144
  attributes = attributes.each_with_object({}) { |(k, v), h|
119
- if (!self.class.attribute_map.key?(k.to_sym))
120
- fail ArgumentError, "`#{k}` is not a valid attribute in `{{{moduleName}}}::{{{classname}}}`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
145
+ if (!acceptable_attribute_map.key?(k.to_sym))
146
+ fail ArgumentError, "`#{k}` is not a valid attribute in `{{{moduleName}}}::{{{classname}}}`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
121
147
  end
122
148
  h[k.to_sym] = v
123
149
  }
124
- {{#parent}}
150
+ {{#parentModel}}
125
151
 
126
152
  # call parent's initialize
127
153
  super(attributes)
128
- {{/parent}}
154
+ {{/parentModel}}
129
155
  {{#vars}}
130
156
 
131
157
  if attributes.key?(:'{{{name}}}')
data/ynab.gemspec CHANGED
@@ -3,7 +3,7 @@
3
3
  =begin
4
4
  #YNAB API Endpoints
5
5
 
6
- #Our API uses a REST based design, leverages the JSON data format, and relies upon HTTPS for transport. We respond with meaningful HTTP response codes and if an error occurs, we include error details in the response body. API Documentation is at https://api.ynab.com
6
+ #Our API uses a REST based design, leverages the JSON data format, and relies upon HTTPS for transport. We respond with meaningful HTTP response codes and if an error occurs, we include error details in the response body. Read the [API Documentation](https://api.ynab.com) for more information about the API, including how to obtain an access token and how to use it to make requests.
7
7
 
8
8
  Generated by: OpenAPI Generator (https://openapi-generator.tech)
9
9
  =end
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.email = ["api@ynab.com"]
20
20
  s.homepage = "https://github.com/ynab/ynab-sdk-ruby"
21
21
  s.summary = "Official Ruby client for the YNAB API"
22
- s.description = "Official Ruby client for the YNAB API. API documentation available at https://api.ynab.com. Generated from server specification version 1.85.0."
22
+ s.description = "Official Ruby client for the YNAB API. API documentation available at https://api.ynab.com. Generated from server specification version 1.88.0."
23
23
  s.license = "Apache-2.0"
24
24
  s.required_ruby_version = ">= 3.3"
25
25
  s.metadata = {}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ynab
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.0
4
+ version: 5.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - YNAB
@@ -50,7 +50,7 @@ dependencies:
50
50
  - !ruby/object:Gem::Version
51
51
  version: 3.6.0
52
52
  description: Official Ruby client for the YNAB API. API documentation available at
53
- https://api.ynab.com. Generated from server specification version 1.85.0.
53
+ https://api.ynab.com. Generated from server specification version 1.88.0.
54
54
  email:
55
55
  - api@ynab.com
56
56
  executables: []
@@ -422,7 +422,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
422
422
  - !ruby/object:Gem::Version
423
423
  version: '0'
424
424
  requirements: []
425
- rubygems_version: 4.0.15
425
+ rubygems_version: 4.0.23
426
426
  specification_version: 4
427
427
  summary: Official Ruby client for the YNAB API
428
428
  test_files: