primer_view_components 0.0.49 → 0.0.53

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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +158 -0
  3. data/app/components/primer/base_component.rb +2 -2
  4. data/app/components/primer/beta/avatar_stack.rb +9 -9
  5. data/app/components/primer/beta/truncate.html.erb +5 -0
  6. data/app/components/primer/beta/truncate.rb +110 -0
  7. data/app/components/primer/border_box_component.rb +27 -1
  8. data/app/components/primer/clipboard_copy.html.erb +2 -2
  9. data/app/components/primer/clipboard_copy.rb +1 -1
  10. data/app/components/primer/dropdown.rb +7 -7
  11. data/app/components/primer/icon_button.rb +1 -1
  12. data/app/components/primer/label_component.rb +13 -12
  13. data/app/components/primer/navigation/tab_component.rb +1 -1
  14. data/app/components/primer/progress_bar_component.rb +0 -3
  15. data/app/components/primer/tab_nav_component.rb +1 -1
  16. data/app/lib/primer/fetch_or_fallback_helper.rb +2 -0
  17. data/app/lib/primer/octicon/cache.rb +1 -1
  18. data/app/lib/primer/tabbed_component_helper.rb +1 -1
  19. data/app/lib/primer/view_helper.rb +1 -0
  20. data/lib/primer/classify/cache.rb +0 -5
  21. data/lib/primer/classify/flex.rb +1 -1
  22. data/lib/primer/classify/functional_colors.rb +1 -1
  23. data/lib/primer/classify/utilities.rb +19 -2
  24. data/lib/primer/classify/utilities.yml +16 -0
  25. data/lib/primer/classify/validation.rb +18 -0
  26. data/lib/primer/classify.rb +4 -18
  27. data/lib/primer/view_components/constants.rb +1 -1
  28. data/lib/primer/view_components/linters/argument_mappers/base.rb +63 -2
  29. data/lib/primer/view_components/linters/argument_mappers/button.rb +7 -11
  30. data/lib/primer/view_components/linters/argument_mappers/clipboard_copy.rb +2 -6
  31. data/lib/primer/view_components/linters/argument_mappers/close_button.rb +43 -0
  32. data/lib/primer/view_components/linters/argument_mappers/flash.rb +32 -0
  33. data/lib/primer/view_components/linters/argument_mappers/helpers/erb_block.rb +67 -0
  34. data/lib/primer/view_components/linters/argument_mappers/label.rb +5 -12
  35. data/lib/primer/view_components/linters/argument_mappers/system_arguments.rb +6 -5
  36. data/lib/primer/view_components/linters/autocorrectable.rb +6 -4
  37. data/lib/primer/view_components/linters/{helpers.rb → base_linter.rb} +69 -29
  38. data/lib/primer/view_components/linters/button_component_migration_counter.rb +4 -3
  39. data/lib/primer/view_components/linters/clipboard_copy_component_migration_counter.rb +3 -4
  40. data/lib/primer/view_components/linters/close_button_component_migration_counter.rb +123 -0
  41. data/lib/primer/view_components/linters/flash_component_migration_counter.rb +18 -3
  42. data/lib/primer/view_components/linters/label_component_migration_counter.rb +2 -3
  43. data/lib/primer/view_components/version.rb +1 -1
  44. data/lib/rubocop/config/default.yml +5 -0
  45. data/lib/rubocop/cop/primer/deprecated_arguments.rb +173 -0
  46. data/lib/rubocop/cop/primer/no_tag_memoize.rb +1 -0
  47. data/lib/rubocop/cop/primer/primer_octicon.rb +178 -0
  48. data/lib/rubocop/cop/primer/system_argument_instead_of_class.rb +12 -16
  49. data/lib/rubocop/cop/primer.rb +1 -2
  50. data/lib/tasks/coverage.rake +4 -0
  51. data/lib/tasks/docs.rake +3 -2
  52. data/lib/tasks/utilities.rake +7 -3
  53. data/lib/yard/docs_helper.rb +6 -3
  54. data/static/arguments.yml +7 -4
  55. data/static/classes.yml +8 -0
  56. data/static/constants.json +13 -1
  57. data/static/statuses.json +3 -1
  58. metadata +32 -9
@@ -3,7 +3,9 @@
3
3
  require "rubocop"
4
4
  require "primer/classify/utilities"
5
5
  require "primer/view_components/statuses"
6
+ require_relative "../../../../app/lib/primer/view_helper"
6
7
 
8
+ # :nocov:
7
9
  module RuboCop
8
10
  module Cop
9
11
  module Primer
@@ -20,8 +22,7 @@ module RuboCop
20
22
  STR
21
23
 
22
24
  def on_send(node)
23
- return unless node.method_name == :new
24
- return unless ::Primer::ViewComponents::STATUSES.key?(node.receiver.const_name)
25
+ return unless valid_node?(node)
25
26
  return unless node.arguments?
26
27
 
27
28
  # we are looking for hash arguments and they are always last
@@ -48,26 +49,21 @@ module RuboCop
48
49
 
49
50
  def autocorrect(node)
50
51
  lambda do |corrector|
51
- system_arguments = ::Primer::Classify::Utilities.classes_to_hash(node.value.value)
52
- corrector.replace(node.loc.expression, arguments_as_string(system_arguments))
52
+ args = ::Primer::Classify::Utilities.classes_to_args(node.value.value)
53
+ corrector.replace(node.loc.expression, args)
53
54
  end
54
55
  end
55
56
 
56
57
  private
57
58
 
58
- def arguments_as_string(system_arguments)
59
- system_arguments.map do |key, value|
60
- val = case value
61
- when Symbol
62
- ":#{value}"
63
- when String
64
- value.to_json
65
- else
66
- value
67
- end
59
+ # We only verify SystemArguments if it's a `.new` call on a component or
60
+ # a ViewHleper call.
61
+ def valid_node?(node)
62
+ view_helpers.include?(node.method_name) || (node.method_name == :new && ::Primer::ViewComponents::STATUSES.key?(node.receiver.const_name))
63
+ end
68
64
 
69
- "#{key}: #{val}"
70
- end.join(", ")
65
+ def view_helpers
66
+ ::Primer::ViewHelper::HELPERS.keys.map { |key| "primer_#{key}".to_sym }
71
67
  end
72
68
  end
73
69
  end
@@ -1,4 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rubocop/cop/primer/no_tag_memoize"
4
- require "rubocop/cop/primer/system_argument_instead_of_class"
3
+ Dir[File.join(__dir__, "primer", "*.rb")].sort.each { |file| require file }
@@ -9,6 +9,10 @@ namespace :coverage do
9
9
 
10
10
  SimpleCov.collate Dir["simplecov-resultset-*/.resultset.json"], "rails" do
11
11
  formatter SimpleCov::Formatter::Console
12
+
13
+ add_group "Ignored Code" do |src_file|
14
+ File.readlines(src_file.filename).grep(/:nocov:/).any?
15
+ end
12
16
  end
13
17
  end
14
18
  end
data/lib/tasks/docs.rake CHANGED
@@ -74,6 +74,7 @@ namespace :docs do
74
74
  Primer::TimelineItemComponent,
75
75
  Primer::Tooltip,
76
76
  Primer::Truncate,
77
+ Primer::Beta::Truncate,
77
78
  Primer::UnderlineNavComponent
78
79
  ]
79
80
 
@@ -238,7 +239,7 @@ namespace :docs do
238
239
  f.puts
239
240
  html = view_context.render(inline: code)
240
241
  html.scan(/class="([^"]*)"/) do |classnames|
241
- classes_found_in_examples.concat(classnames[0].split(" ").reject { |c| c.starts_with?("octicon", "js", "my-") }.map { ".#{_1}"})
242
+ classes_found_in_examples.concat(classnames[0].split.reject { |c| c.starts_with?("octicon", "js", "my-") }.map { ".#{_1}" })
242
243
  end
243
244
  f.puts("<Example src=\"#{html.tr('"', "\'").delete("\n")}\" />")
244
245
  f.puts
@@ -382,7 +383,7 @@ namespace :docs do
382
383
  end
383
384
 
384
385
  def pretty_default_value(tag, component)
385
- params = tag.object.parameters.find { |param| [tag.name.to_s, tag.name.to_s + ":"].include?(param[0]) }
386
+ params = tag.object.parameters.find { |param| [tag.name.to_s, "#{tag.name}:"].include?(param[0]) }
386
387
  default = tag.defaults&.first || params&.second
387
388
 
388
389
  return "N/A" unless default
@@ -8,19 +8,23 @@ namespace :utilities do
8
8
  require "primer/classify/utilities"
9
9
 
10
10
  # Keys that are looked for to be included in the utilities.yml file
11
+ # rubocop:disable Lint/ConstantDefinitionInBlock
11
12
  SUPPORTED_KEYS = %i[
12
13
  anim
13
14
  d
14
15
  float
16
+ height
15
17
  hide
16
18
  m mt mr mb ml mx my
17
19
  p pt pr pb pl px py
18
20
  position
19
21
  wb
22
+ width
20
23
  v
21
24
  ].freeze
22
25
 
23
26
  BREAKPOINTS = [nil, "sm", "md", "lg", "xl"].freeze
27
+ # rubocop:enable Lint/ConstantDefinitionInBlock
24
28
 
25
29
  css_data =
26
30
  JSON.parse(
@@ -36,7 +40,7 @@ namespace :utilities do
36
40
  css_data.each do |selector|
37
41
  selector.sub!(/^./, "")
38
42
  # Next if selector has ancestors or sibling selectors
39
- next if selector.match?(/[:><~\[\.]/)
43
+ next if selector.match?(/[:><~\[.]/)
40
44
  next unless SUPPORTED_KEYS.any? { |key| selector.start_with?("#{key}-") }
41
45
 
42
46
  # Dupe so we still have the selector at the end of slicing it up
@@ -48,7 +52,7 @@ namespace :utilities do
48
52
  next unless classname.match?(Regexp.new(k))
49
53
 
50
54
  key = v
51
- classname.sub!(Regexp.new(k + "-"), "")
55
+ classname.sub!(Regexp.new("#{k}-"), "")
52
56
  end
53
57
 
54
58
  # If we didn't find a replacement, grab the first text before hyphen
@@ -64,7 +68,7 @@ namespace :utilities do
64
68
  end
65
69
 
66
70
  # Change the rest from hypens to underscores
67
- classname.sub!(/\-/, "_")
71
+ classname.sub!(/-/, "_")
68
72
 
69
73
  # convert padding/margin negative values ie n7 to -7
70
74
  classname.sub!(/^n/, "-") if classname.match?(/^n[0-9]/)
@@ -1,13 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :nocov:
4
+
3
5
  module YARD
4
6
  # Helper methods to use for yard documentation
5
7
  module DocsHelper
6
8
  def one_of(enumerable, lower: false, sort: true)
7
9
  # Sort the array if requested
8
10
  if sort
9
- compare = ->(a, b) { a.class == b.class ? a <=> b : a.class.to_s <=> b.class.to_s }
10
- enumerable = enumerable.sort { |a, b| compare.call(a, b) }
11
+ enumerable = enumerable.sort do |a, b|
12
+ a.instance_of?(b.class) ? a <=> b : a.class.to_s <=> b.class.to_s
13
+ end
11
14
  end
12
15
 
13
16
  values =
@@ -58,7 +61,7 @@ module YARD
58
61
  def status_module_and_short_name(component)
59
62
  name_with_status = component.name.gsub(/Primer::|Component/, "")
60
63
 
61
- m = name_with_status.match(/(?<status>Beta|Alpha|Deprecated)?(::)?(?<name>.*)/)
64
+ m = name_with_status.match(/(?<status>Beta|Alpha|Deprecated)?(?<_colons>::)?(?<name>.*)/)
62
65
  [m[:status]&.downcase, m[:name].gsub("::", "")]
63
66
  end
64
67
 
data/static/arguments.yml CHANGED
@@ -143,6 +143,13 @@
143
143
  type: Hash
144
144
  default: N/A
145
145
  description: "[System arguments](/system-arguments)"
146
+ - component: Truncate
147
+ source: https://github.com/primer/view_components/tree/main/app/components/primer/beta/truncate.rb
148
+ parameters:
149
+ - name: system_arguments
150
+ type: Hash
151
+ default: N/A
152
+ description: "[System arguments](/system-arguments)"
146
153
  - component: Blankslate
147
154
  source: https://github.com/primer/view_components/tree/main/app/components/primer/blankslate_component.rb
148
155
  parameters:
@@ -562,10 +569,6 @@
562
569
  type: Symbol
563
570
  default: "`:span`"
564
571
  description: One of `:a`, `:div`, `:span`, or `:summary`.
565
- - name: title
566
- type: String
567
- default: N/A
568
- description: "`title` attribute for the component element."
569
572
  - name: scheme
570
573
  type: Symbol
571
574
  default: "`nil`"
data/static/classes.yml CHANGED
@@ -10,6 +10,9 @@
10
10
  - ".Box-footer"
11
11
  - ".Box-header"
12
12
  - ".Box-row"
13
+ - ".Box-row--blue"
14
+ - ".Box-row--gray"
15
+ - ".Box-row--yellow"
13
16
  - ".BtnGroup"
14
17
  - ".BtnGroup-item"
15
18
  - ".Counter"
@@ -49,6 +52,10 @@
49
52
  - ".TimelineItem-avatar"
50
53
  - ".TimelineItem-badge"
51
54
  - ".TimelineItem-body"
55
+ - ".Truncate"
56
+ - ".Truncate-text"
57
+ - ".Truncate-text--expandable"
58
+ - ".Truncate-text--primary"
52
59
  - ".UnderlineNav"
53
60
  - ".UnderlineNav--right"
54
61
  - ".UnderlineNav-actions"
@@ -168,6 +175,7 @@
168
175
  - ".tabnav-tabs"
169
176
  - ".text-bold"
170
177
  - ".text-left"
178
+ - ".text-normal"
171
179
  - ".tooltipped"
172
180
  - ".tooltipped-n"
173
181
  - ".tooltipped-no-delay"
@@ -85,16 +85,28 @@
85
85
  "Primer::Beta::Text": {
86
86
  "DEFAULT_TAG": "span"
87
87
  },
88
+ "Primer::Beta::Truncate": {
89
+ "TruncateText": "Primer::Beta::Truncate::TruncateText"
90
+ },
91
+ "Primer::Beta::Truncate::TruncateText": {
92
+ },
88
93
  "Primer::BlankslateComponent": {
89
94
  },
90
95
  "Primer::BorderBoxComponent": {
91
96
  "DEFAULT_PADDING": "default",
97
+ "DEFAULT_ROW_SCHEME": "default",
92
98
  "PADDING_MAPPINGS": {
93
99
  "default": "",
94
100
  "condensed": "Box--condensed",
95
101
  "spacious": "Box--spacious"
96
102
  },
97
- "PADDING_SUGGESTION": "Perhaps you could consider using :padding options of default, condensed, and spacious?"
103
+ "PADDING_SUGGESTION": "Perhaps you could consider using :padding options of default, condensed, and spacious?",
104
+ "ROW_SCHEME_MAPPINGS": {
105
+ "default": "",
106
+ "neutral": "Box-row--gray",
107
+ "info": "Box-row--blue",
108
+ "warning": "Box-row--yellow"
109
+ }
98
110
  },
99
111
  "Primer::BoxComponent": {
100
112
  },
data/static/statuses.json CHANGED
@@ -8,6 +8,8 @@
8
8
  "Primer::Beta::Avatar": "beta",
9
9
  "Primer::Beta::AvatarStack": "beta",
10
10
  "Primer::Beta::Text": "beta",
11
+ "Primer::Beta::Truncate": "beta",
12
+ "Primer::Beta::Truncate::TruncateText": "alpha",
11
13
  "Primer::BlankslateComponent": "beta",
12
14
  "Primer::BorderBoxComponent": "beta",
13
15
  "Primer::BoxComponent": "stable",
@@ -15,7 +17,7 @@
15
17
  "Primer::BreadcrumbComponent::ItemComponent": "alpha",
16
18
  "Primer::ButtonComponent": "beta",
17
19
  "Primer::ButtonGroup": "beta",
18
- "Primer::ClipboardCopy": "alpha",
20
+ "Primer::ClipboardCopy": "beta",
19
21
  "Primer::CloseButton": "beta",
20
22
  "Primer::CounterComponent": "beta",
21
23
  "Primer::DetailsComponent": "beta",
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.49
4
+ version: 0.0.53
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-07-27 00:00:00.000000000 Z
11
+ date: 2021-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: octicons
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 13.0.0
47
+ version: '15'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 13.0.0
54
+ version: '15'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: view_component
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -218,14 +218,14 @@ dependencies:
218
218
  requirements:
219
219
  - - '='
220
220
  - !ruby/object:Gem::Version
221
- version: '0.82'
221
+ version: 1.13.0
222
222
  type: :development
223
223
  prerelease: false
224
224
  version_requirements: !ruby/object:Gem::Requirement
225
225
  requirements:
226
226
  - - '='
227
227
  - !ruby/object:Gem::Version
228
- version: '0.82'
228
+ version: 1.13.0
229
229
  - !ruby/object:Gem::Dependency
230
230
  name: rubocop-github
231
231
  requirement: !ruby/object:Gem::Requirement
@@ -324,6 +324,20 @@ dependencies:
324
324
  - - ">="
325
325
  - !ruby/object:Gem::Version
326
326
  version: '0'
327
+ - !ruby/object:Gem::Dependency
328
+ name: timecop
329
+ requirement: !ruby/object:Gem::Requirement
330
+ requirements:
331
+ - - ">="
332
+ - !ruby/object:Gem::Version
333
+ version: '0'
334
+ type: :development
335
+ prerelease: false
336
+ version_requirements: !ruby/object:Gem::Requirement
337
+ requirements:
338
+ - - ">="
339
+ - !ruby/object:Gem::Version
340
+ version: '0'
327
341
  - !ruby/object:Gem::Dependency
328
342
  name: yard
329
343
  requirement: !ruby/object:Gem::Requirement
@@ -367,6 +381,8 @@ files:
367
381
  - app/components/primer/beta/avatar_stack.html.erb
368
382
  - app/components/primer/beta/avatar_stack.rb
369
383
  - app/components/primer/beta/text.rb
384
+ - app/components/primer/beta/truncate.html.erb
385
+ - app/components/primer/beta/truncate.rb
370
386
  - app/components/primer/blankslate_component.html.erb
371
387
  - app/components/primer/blankslate_component.rb
372
388
  - app/components/primer/border_box_component.html.erb
@@ -476,6 +492,7 @@ files:
476
492
  - lib/primer/classify/grid.rb
477
493
  - lib/primer/classify/utilities.rb
478
494
  - lib/primer/classify/utilities.yml
495
+ - lib/primer/classify/validation.rb
479
496
  - lib/primer/view_components.rb
480
497
  - lib/primer/view_components/constants.rb
481
498
  - lib/primer/view_components/engine.rb
@@ -483,20 +500,26 @@ files:
483
500
  - lib/primer/view_components/linters/argument_mappers/base.rb
484
501
  - lib/primer/view_components/linters/argument_mappers/button.rb
485
502
  - lib/primer/view_components/linters/argument_mappers/clipboard_copy.rb
503
+ - lib/primer/view_components/linters/argument_mappers/close_button.rb
486
504
  - lib/primer/view_components/linters/argument_mappers/conversion_error.rb
505
+ - lib/primer/view_components/linters/argument_mappers/flash.rb
506
+ - lib/primer/view_components/linters/argument_mappers/helpers/erb_block.rb
487
507
  - lib/primer/view_components/linters/argument_mappers/label.rb
488
508
  - lib/primer/view_components/linters/argument_mappers/system_arguments.rb
489
509
  - lib/primer/view_components/linters/autocorrectable.rb
510
+ - lib/primer/view_components/linters/base_linter.rb
490
511
  - lib/primer/view_components/linters/button_component_migration_counter.rb
491
512
  - lib/primer/view_components/linters/clipboard_copy_component_migration_counter.rb
513
+ - lib/primer/view_components/linters/close_button_component_migration_counter.rb
492
514
  - lib/primer/view_components/linters/flash_component_migration_counter.rb
493
- - lib/primer/view_components/linters/helpers.rb
494
515
  - lib/primer/view_components/linters/label_component_migration_counter.rb
495
516
  - lib/primer/view_components/statuses.rb
496
517
  - lib/primer/view_components/version.rb
497
518
  - lib/rubocop/config/default.yml
498
519
  - lib/rubocop/cop/primer.rb
520
+ - lib/rubocop/cop/primer/deprecated_arguments.rb
499
521
  - lib/rubocop/cop/primer/no_tag_memoize.rb
522
+ - lib/rubocop/cop/primer/primer_octicon.rb
500
523
  - lib/rubocop/cop/primer/system_argument_instead_of_class.rb
501
524
  - lib/tasks/constants.rake
502
525
  - lib/tasks/coverage.rake