primer_view_components 0.0.49 → 0.0.53

Sign up to get free protection for your applications and to get access to all the features.
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