primer_view_components 0.0.60 → 0.0.61

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +71 -1
  3. data/app/components/primer/alpha/layout.html.erb +5 -0
  4. data/app/components/primer/alpha/layout.rb +276 -0
  5. data/app/components/primer/base_button.rb +1 -5
  6. data/app/components/primer/base_component.rb +7 -2
  7. data/app/components/primer/beta/blankslate.html.erb +15 -0
  8. data/app/components/primer/beta/blankslate.rb +240 -0
  9. data/app/components/primer/blankslate_component.rb +1 -1
  10. data/app/components/primer/component.rb +2 -2
  11. data/app/components/primer/hellip_button.rb +39 -0
  12. data/app/components/primer/hidden_text_expander.rb +18 -6
  13. data/app/components/primer/subhead_component.rb +1 -1
  14. data/lib/primer/classify.rb +3 -3
  15. data/lib/primer/view_components/engine.rb +1 -1
  16. data/lib/primer/view_components/linters/base_linter.rb +3 -52
  17. data/lib/primer/view_components/linters/blankslate_api_migration.rb +146 -0
  18. data/lib/primer/view_components/linters/blankslate_component_migration_counter.rb +1 -1
  19. data/lib/primer/view_components/linters/close_button_component_migration_counter.rb +2 -4
  20. data/lib/primer/view_components/linters/helpers/rubocop_helpers.rb +14 -0
  21. data/lib/primer/view_components/linters/tag_tree_helpers.rb +61 -0
  22. data/lib/primer/view_components/linters/two_column_layout_migration_counter.rb +158 -0
  23. data/lib/primer/view_components/version.rb +1 -1
  24. data/lib/tasks/docs.rake +50 -1
  25. data/static/arguments.yml +52 -67
  26. data/static/audited_at.json +5 -0
  27. data/static/classes.yml +20 -2
  28. data/static/constants.json +103 -0
  29. data/static/statuses.json +6 -1
  30. metadata +11 -2
data/lib/tasks/docs.rake CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "active_support/inflector"
4
+
3
5
  namespace :docs do
4
6
  task :livereload do
5
7
  require "listen"
@@ -27,6 +29,8 @@ namespace :docs do
27
29
  # Rails controller for rendering arbitrary ERB
28
30
  view_context = ApplicationController.new.tap { |c| c.request = ActionDispatch::TestRequest.create }.view_context
29
31
  components = [
32
+ Primer::Alpha::Layout,
33
+ Primer::HellipButton,
30
34
  Primer::Alpha::BorderBox::Header,
31
35
  Primer::Image,
32
36
  Primer::LocalTime,
@@ -38,7 +42,7 @@ namespace :docs do
38
42
  Primer::Beta::Avatar,
39
43
  Primer::Beta::AvatarStack,
40
44
  Primer::BaseButton,
41
- Primer::BlankslateComponent,
45
+ Primer::Beta::Blankslate,
42
46
  Primer::BorderBoxComponent,
43
47
  Primer::BoxComponent,
44
48
  Primer::Beta::Breadcrumbs,
@@ -290,6 +294,10 @@ namespace :docs do
290
294
  f.puts(view_context.render(inline: initialize_method.base_docstring))
291
295
  end
292
296
 
297
+ # Copy over ADR docs and insert them into the nav
298
+ puts "Copying ADRs..."
299
+ Rake::Task["docs:build_adrs"].invoke
300
+
293
301
  puts "Markdown compiled."
294
302
 
295
303
  if components_needing_docs.any?
@@ -298,6 +306,47 @@ namespace :docs do
298
306
  end
299
307
  end
300
308
 
309
+ task :build_adrs do
310
+ adr_content_dir = File.join(*%w[docs content adr])
311
+
312
+ FileUtils.rm_rf(File.join(adr_content_dir))
313
+ FileUtils.mkdir(adr_content_dir)
314
+
315
+ nav_entries = Dir[File.join(*%w[adr *.md])].map do |orig_path|
316
+ orig_file_name = File.basename(orig_path)
317
+ url_name = orig_file_name.chomp(".md")
318
+ title = ActiveSupport::Inflector.titleize(url_name.sub(/\A\d+-/, ""))
319
+
320
+ file_contents = File.read(orig_path)
321
+ file_contents = <<~CONTENTS.sub(/\n+\z/, "\n")
322
+ <!-- Warning: AUTO-GENERATED file, do not edit. Make changes to the files in the adr/ directory instead. -->
323
+ #{file_contents}
324
+ CONTENTS
325
+
326
+ File.write(File.join(adr_content_dir, orig_file_name), file_contents)
327
+ puts "Copied #{orig_path}"
328
+
329
+ { "title" => title, "url" => "/adr/#{url_name}" }
330
+ end
331
+
332
+ nav_yaml_file = File.join(*%w[docs src @primer gatsby-theme-doctocat nav.yml])
333
+ nav_yaml = YAML.load_file(nav_yaml_file)
334
+ adr_entry = {
335
+ "title" => "Architecture Decisions",
336
+ "url" => "/adr",
337
+ "children" => nav_entries
338
+ }
339
+
340
+ existing_index = nav_yaml.index { |entry| entry["url"] == "/adr" }
341
+ if existing_index
342
+ nav_yaml[existing_index] = adr_entry
343
+ else
344
+ nav_yaml << adr_entry
345
+ end
346
+
347
+ File.write(nav_yaml_file, YAML.dump(nav_yaml))
348
+ end
349
+
301
350
  task :preview do
302
351
  registry = generate_yard_registry
303
352
 
data/static/arguments.yml CHANGED
@@ -29,6 +29,28 @@
29
29
  type: Hash
30
30
  default: N/A
31
31
  description: "[System arguments](/system-arguments)"
32
+ - component: Layout
33
+ source: https://github.com/primer/view_components/tree/main/app/components/primer/alpha/layout.rb
34
+ parameters:
35
+ - name: stacking_breakpoint
36
+ type: Symbol
37
+ default: "`:md`"
38
+ description: When the `Layout` should change from rows into columns. One of `:lg`,
39
+ `:md`, or `:sm`.
40
+ - name: first_in_source
41
+ type: Symbol
42
+ default: "`:sidebar`"
43
+ description: Which element to render first in the HTML. This will change the keyboard
44
+ navigation order. One of `:main` and `:sidebar`.
45
+ - name: gutter
46
+ type: Symbol
47
+ default: "`:default`"
48
+ description: The amount of space between the main section and the sidebar. One
49
+ of `:condensed`, `:default`, `:none`, or `:spacious`.
50
+ - name: system_arguments
51
+ type: Hash
52
+ default: N/A
53
+ description: "[System arguments](/system-arguments)"
32
54
  - component: TabNav
33
55
  source: https://github.com/primer/view_components/tree/main/app/components/primer/alpha/tab_nav.rb
34
56
  parameters:
@@ -231,6 +253,25 @@
231
253
  type: Hash
232
254
  default: N/A
233
255
  description: "[System arguments](/system-arguments)"
256
+ - component: Blankslate
257
+ source: https://github.com/primer/view_components/tree/main/app/components/primer/beta/blankslate.rb
258
+ parameters:
259
+ - name: narrow
260
+ type: Boolean
261
+ default: "`false`"
262
+ description: Adds a maximum width of `485px` to the Blankslate.
263
+ - name: spacious
264
+ type: Boolean
265
+ default: "`false`"
266
+ description: Increases the padding from `32px` to `80px 40px`.
267
+ - name: border
268
+ type: Boolean
269
+ default: "`false`"
270
+ description: Adds a border around the Blankslate.
271
+ - name: system_arguments
272
+ type: Hash
273
+ default: N/A
274
+ description: "[System arguments](/system-arguments)"
234
275
  - component: Breadcrumbs
235
276
  source: https://github.com/primer/view_components/tree/main/app/components/primer/beta/breadcrumbs.rb
236
277
  parameters:
@@ -256,73 +297,6 @@
256
297
  type: Hash
257
298
  default: N/A
258
299
  description: "[System arguments](/system-arguments)"
259
- - component: Blankslate
260
- source: https://github.com/primer/view_components/tree/main/app/components/primer/blankslate_component.rb
261
- parameters:
262
- - name: title
263
- type: String
264
- default: '`""`'
265
- description: Text that appears in a larger bold font.
266
- - name: title_tag
267
- type: Symbol
268
- default: "`:h3`"
269
- description: HTML tag to use for title.
270
- - name: icon
271
- type: Symbol
272
- default: '`""`'
273
- description: Octicon icon to use at top of component.
274
- - name: icon_size
275
- type: Symbol
276
- default: "`:medium`"
277
- description: One of `:small` (`16`) and `:medium` (`24`).
278
- - name: image_src
279
- type: String
280
- default: '`""`'
281
- description: Image to display.
282
- - name: image_alt
283
- type: String
284
- default: '`" "`'
285
- description: Alt text for image.
286
- - name: description
287
- type: String
288
- default: '`""`'
289
- description: Text that appears below the title. Typically a whole sentence.
290
- - name: button_text
291
- type: String
292
- default: '`""`'
293
- description: The text of the button.
294
- - name: button_url
295
- type: String
296
- default: '`""`'
297
- description: The URL where the user will be taken after clicking the button.
298
- - name: button_classes
299
- type: String
300
- default: '`"btn-primary my-3"`'
301
- description: Classes to apply to action button
302
- - name: link_text
303
- type: String
304
- default: '`""`'
305
- description: The text of the link.
306
- - name: link_url
307
- type: String
308
- default: '`""`'
309
- description: The URL where the user will be taken after clicking the link.
310
- - name: narrow
311
- type: Boolean
312
- default: "`false`"
313
- description: Adds a maximum width.
314
- - name: large
315
- type: Boolean
316
- default: "`false`"
317
- description: Increases the font size.
318
- - name: spacious
319
- type: Boolean
320
- default: "`false`"
321
- description: Adds extra padding.
322
- - name: system_arguments
323
- type: Hash
324
- default: N/A
325
- description: "[System arguments](/system-arguments)"
326
300
  - component: BorderBox
327
301
  source: https://github.com/primer/view_components/tree/main/app/components/primer/border_box_component.rb
328
302
  parameters:
@@ -584,6 +558,17 @@
584
558
  type: Hash
585
559
  default: N/A
586
560
  description: "[System arguments](/system-arguments)"
561
+ - component: HellipButton
562
+ source: https://github.com/primer/view_components/tree/main/app/components/primer/hellip_button.rb
563
+ parameters:
564
+ - name: inline
565
+ type: Boolean
566
+ default: "`false`"
567
+ description: Whether or not the button is inline.
568
+ - name: system_arguments
569
+ type: Hash
570
+ default: N/A
571
+ description: "[System arguments](/system-arguments)"
587
572
  - component: HiddenTextExpander
588
573
  source: https://github.com/primer/view_components/tree/main/app/components/primer/hidden_text_expander.rb
589
574
  parameters:
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "Primer::Alpha::BorderBox::Header": "",
3
3
  "Primer::Alpha::ButtonMarketing": "",
4
+ "Primer::Alpha::Layout": "",
5
+ "Primer::Alpha::Layout::Main": "",
6
+ "Primer::Alpha::Layout::Sidebar": "",
4
7
  "Primer::Alpha::TabNav": "",
5
8
  "Primer::Alpha::TabPanels": "",
6
9
  "Primer::Alpha::UnderlineNav": "",
@@ -12,6 +15,7 @@
12
15
  "Primer::Beta::AutoComplete::Item": "",
13
16
  "Primer::Beta::Avatar": "",
14
17
  "Primer::Beta::AvatarStack": "",
18
+ "Primer::Beta::Blankslate": "",
15
19
  "Primer::Beta::Breadcrumbs": "",
16
20
  "Primer::Beta::Breadcrumbs::Item": "",
17
21
  "Primer::Beta::Text": "",
@@ -34,6 +38,7 @@
34
38
  "Primer::FlexComponent": "",
35
39
  "Primer::FlexItemComponent": "",
36
40
  "Primer::HeadingComponent": "",
41
+ "Primer::HellipButton": "",
37
42
  "Primer::HiddenTextExpander": "",
38
43
  "Primer::IconButton": "",
39
44
  "Primer::Image": "",
data/static/classes.yml CHANGED
@@ -27,6 +27,21 @@
27
27
  - ".Label--secondary"
28
28
  - ".Label--success"
29
29
  - ".Label--warning"
30
+ - ".Layout"
31
+ - ".Layout--flowRow-until-lg"
32
+ - ".Layout--flowRow-until-md"
33
+ - ".Layout--sidebar-narrow"
34
+ - ".Layout--sidebar-wide"
35
+ - ".Layout--sidebarPosition-end"
36
+ - ".Layout--sidebarPosition-flowRow-end"
37
+ - ".Layout--sidebarPosition-flowRow-none"
38
+ - ".Layout--sidebarPosition-flowRow-start"
39
+ - ".Layout--sidebarPosition-start"
40
+ - ".Layout-main"
41
+ - ".Layout-main-centered-lg"
42
+ - ".Layout-main-centered-md"
43
+ - ".Layout-main-centered-xl"
44
+ - ".Layout-sidebar"
30
45
  - ".Link"
31
46
  - ".Link--muted"
32
47
  - ".Link--primary"
@@ -71,7 +86,6 @@
71
86
  - ".avatar-small"
72
87
  - ".blankslate"
73
88
  - ".blankslate-icon"
74
- - ".blankslate-large"
75
89
  - ".blankslate-narrow"
76
90
  - ".blankslate-spacious"
77
91
  - ".border"
@@ -111,6 +125,9 @@
111
125
  - ".color-shadow-large"
112
126
  - ".color-text-danger"
113
127
  - ".color-text-white"
128
+ - ".container-lg"
129
+ - ".container-md"
130
+ - ".container-xl"
114
131
  - ".css-truncate"
115
132
  - ".css-truncate-overflow"
116
133
  - ".css-truncate-target"
@@ -147,8 +164,8 @@
147
164
  - ".form-control"
148
165
  - ".gutter-condensed"
149
166
  - ".gutter-lg"
167
+ - ".h2"
150
168
  - ".hidden-text-expander"
151
- - ".hx_Subhead--responsive"
152
169
  - ".inline"
153
170
  - ".left-0"
154
171
  - ".lh-0"
@@ -163,6 +180,7 @@
163
180
  - ".menu-item"
164
181
  - ".mr-2"
165
182
  - ".mt-2"
183
+ - ".mt-5"
166
184
  - ".mx-auto"
167
185
  - ".no-underline"
168
186
  - ".no-wrap"
@@ -44,6 +44,84 @@
44
44
  "large"
45
45
  ]
46
46
  },
47
+ "Primer::Alpha::Layout": {
48
+ "FIRST_IN_SOURCE_DEFAULT": "sidebar",
49
+ "FIRST_IN_SOURCE_OPTIONS": [
50
+ "sidebar",
51
+ "main"
52
+ ],
53
+ "GUTTER_DEFAULT": "default",
54
+ "GUTTER_MAPPINGS": {
55
+ "none": "Layout--gutter-none",
56
+ "condensed": "Layout--gutter-condensed",
57
+ "spacious": "Layout--gutter-spacious",
58
+ "default": ""
59
+ },
60
+ "GUTTER_OPTIONS": [
61
+ "none",
62
+ "condensed",
63
+ "spacious",
64
+ "default"
65
+ ],
66
+ "Main": "Primer::Alpha::Layout::Main",
67
+ "SIDEBAR_COL_PLACEMENT_DEFAULT": "start",
68
+ "SIDEBAR_COL_PLACEMENT_OPTIONS": [
69
+ "start",
70
+ "end"
71
+ ],
72
+ "SIDEBAR_ROW_PLACEMENT_DEFAULT": "start",
73
+ "SIDEBAR_ROW_PLACEMENT_OPTIONS": [
74
+ "start",
75
+ "end",
76
+ "none"
77
+ ],
78
+ "SIDEBAR_WIDTH_DEFAULT": "default",
79
+ "SIDEBAR_WIDTH_MAPPINGS": {
80
+ "default": "",
81
+ "narrow": "Layout--sidebar-narrow",
82
+ "wide": "Layout--sidebar-wide"
83
+ },
84
+ "SIDEBAR_WIDTH_OPTIONS": [
85
+ "default",
86
+ "narrow",
87
+ "wide"
88
+ ],
89
+ "STACKING_BREAKPOINT_DEFAULT": "md",
90
+ "STACKING_BREAKPOINT_MAPPINGS": {
91
+ "sm": "",
92
+ "md": "Layout--flowRow-until-md",
93
+ "lg": "Layout--flowRow-until-lg"
94
+ },
95
+ "STACKING_BREAKPOINT_OPTIONS": [
96
+ "sm",
97
+ "md",
98
+ "lg"
99
+ ],
100
+ "Sidebar": "Primer::Alpha::Layout::Sidebar"
101
+ },
102
+ "Primer::Alpha::Layout::Main": {
103
+ "TAG_DEFAULT": "div",
104
+ "TAG_OPTIONS": [
105
+ "div",
106
+ "main"
107
+ ],
108
+ "WIDTH_DEFAULT": "full",
109
+ "WIDTH_OPTIONS": [
110
+ "full",
111
+ "md",
112
+ "lg",
113
+ "xl"
114
+ ]
115
+ },
116
+ "Primer::Alpha::Layout::Sidebar": {
117
+ "TAG_DEFAULT": "div",
118
+ "TAG_OPTIONS": [
119
+ "div",
120
+ "aside",
121
+ "nav",
122
+ "section"
123
+ ]
124
+ },
47
125
  "Primer::Alpha::TabNav": {
48
126
  "BODY_TAG_DEFAULT": "ul",
49
127
  "TAG_DEFAULT": "nav",
@@ -85,6 +163,22 @@
85
163
  ]
86
164
  },
87
165
  "Primer::BaseComponent": {
166
+ "SELF_CLOSING_TAGS": [
167
+ "area",
168
+ "base",
169
+ "br",
170
+ "col",
171
+ "embed",
172
+ "hr",
173
+ "img",
174
+ "input",
175
+ "link",
176
+ "meta",
177
+ "param",
178
+ "source",
179
+ "track",
180
+ "wbr"
181
+ ]
88
182
  },
89
183
  "Primer::Beta::AutoComplete": {
90
184
  "Input": "Primer::Beta::AutoComplete::Input",
@@ -134,6 +228,13 @@
134
228
  "span"
135
229
  ]
136
230
  },
231
+ "Primer::Beta::Blankslate": {
232
+ "VISUAL_OPTIONS": [
233
+ "icon",
234
+ "spinner",
235
+ "image"
236
+ ]
237
+ },
137
238
  "Primer::Beta::Breadcrumbs": {
138
239
  "ARGS_DENYLIST": {
139
240
  "[:p, :pt, :pb, :pr, :pl, :px, :py]": "Padding system arguments are not allowed on Breadcrumbs. Consider using margins instead.",
@@ -385,6 +486,8 @@
385
486
  "h6"
386
487
  ]
387
488
  },
489
+ "Primer::HellipButton": {
490
+ },
388
491
  "Primer::HiddenTextExpander": {
389
492
  },
390
493
  "Primer::IconButton": {
data/static/statuses.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "Primer::Alpha::BorderBox::Header": "alpha",
3
3
  "Primer::Alpha::ButtonMarketing": "alpha",
4
+ "Primer::Alpha::Layout": "alpha",
5
+ "Primer::Alpha::Layout::Main": "alpha",
6
+ "Primer::Alpha::Layout::Sidebar": "alpha",
4
7
  "Primer::Alpha::TabNav": "alpha",
5
8
  "Primer::Alpha::TabPanels": "alpha",
6
9
  "Primer::Alpha::UnderlineNav": "alpha",
@@ -12,12 +15,13 @@
12
15
  "Primer::Beta::AutoComplete::Item": "beta",
13
16
  "Primer::Beta::Avatar": "beta",
14
17
  "Primer::Beta::AvatarStack": "beta",
18
+ "Primer::Beta::Blankslate": "beta",
15
19
  "Primer::Beta::Breadcrumbs": "beta",
16
20
  "Primer::Beta::Breadcrumbs::Item": "alpha",
17
21
  "Primer::Beta::Text": "beta",
18
22
  "Primer::Beta::Truncate": "beta",
19
23
  "Primer::Beta::Truncate::TruncateText": "alpha",
20
- "Primer::BlankslateComponent": "beta",
24
+ "Primer::BlankslateComponent": "deprecated",
21
25
  "Primer::BorderBoxComponent": "beta",
22
26
  "Primer::BoxComponent": "stable",
23
27
  "Primer::ButtonComponent": "beta",
@@ -34,6 +38,7 @@
34
38
  "Primer::FlexComponent": "deprecated",
35
39
  "Primer::FlexItemComponent": "deprecated",
36
40
  "Primer::HeadingComponent": "beta",
41
+ "Primer::HellipButton": "alpha",
37
42
  "Primer::HiddenTextExpander": "alpha",
38
43
  "Primer::IconButton": "beta",
39
44
  "Primer::Image": "alpha",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: primer_view_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.60
4
+ version: 0.0.61
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub Open Source
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-26 00:00:00.000000000 Z
11
+ date: 2021-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -381,6 +381,8 @@ files:
381
381
  - app/components/primer/alpha/border_box/header.html.erb
382
382
  - app/components/primer/alpha/border_box/header.rb
383
383
  - app/components/primer/alpha/button_marketing.rb
384
+ - app/components/primer/alpha/layout.html.erb
385
+ - app/components/primer/alpha/layout.rb
384
386
  - app/components/primer/alpha/tab_nav.html.erb
385
387
  - app/components/primer/alpha/tab_nav.rb
386
388
  - app/components/primer/alpha/tab_panels.html.erb
@@ -404,6 +406,8 @@ files:
404
406
  - app/components/primer/beta/avatar.rb
405
407
  - app/components/primer/beta/avatar_stack.html.erb
406
408
  - app/components/primer/beta/avatar_stack.rb
409
+ - app/components/primer/beta/blankslate.html.erb
410
+ - app/components/primer/beta/blankslate.rb
407
411
  - app/components/primer/beta/breadcrumbs.html.erb
408
412
  - app/components/primer/beta/breadcrumbs.rb
409
413
  - app/components/primer/beta/text.rb
@@ -445,6 +449,7 @@ files:
445
449
  - app/components/primer/flex_component.rb
446
450
  - app/components/primer/flex_item_component.rb
447
451
  - app/components/primer/heading_component.rb
452
+ - app/components/primer/hellip_button.rb
448
453
  - app/components/primer/hidden_text_expander.rb
449
454
  - app/components/primer/icon_button.rb
450
455
  - app/components/primer/image.rb
@@ -526,14 +531,18 @@ files:
526
531
  - lib/primer/view_components/linters/argument_mappers/system_arguments.rb
527
532
  - lib/primer/view_components/linters/autocorrectable.rb
528
533
  - lib/primer/view_components/linters/base_linter.rb
534
+ - lib/primer/view_components/linters/blankslate_api_migration.rb
529
535
  - lib/primer/view_components/linters/blankslate_component_migration_counter.rb
530
536
  - lib/primer/view_components/linters/breadcrumbs_component_migration_counter.rb
531
537
  - lib/primer/view_components/linters/button_component_migration_counter.rb
532
538
  - lib/primer/view_components/linters/clipboard_copy_component_migration_counter.rb
533
539
  - lib/primer/view_components/linters/close_button_component_migration_counter.rb
534
540
  - lib/primer/view_components/linters/flash_component_migration_counter.rb
541
+ - lib/primer/view_components/linters/helpers/rubocop_helpers.rb
535
542
  - lib/primer/view_components/linters/label_component_migration_counter.rb
536
543
  - lib/primer/view_components/linters/subhead_component_migration_counter.rb
544
+ - lib/primer/view_components/linters/tag_tree_helpers.rb
545
+ - lib/primer/view_components/linters/two_column_layout_migration_counter.rb
537
546
  - lib/primer/view_components/statuses.rb
538
547
  - lib/primer/view_components/version.rb
539
548
  - lib/rubocop/config/default.yml