Class: Mxrb::Model::DesignSystem
- Inherits:
-
Object
- Object
- Mxrb::Model::DesignSystem
- Defined in:
- lib/mxrb/model/design_system.rb
Overview
Read-only inventory and quality metrics for Mendix theme assets.
Constant Summary collapse
- ASSET_DIRECTORIES =
%w[ theme theme-cache themesource resources widgets javasource javascriptsource userlib vendorlib ].freeze
- CSS_TOKEN =
/(?<name>--[A-Za-z0-9_-]+)\s*:\s*(?<value>[^;{}]+);/- SCSS_TOKEN =
/(?<name>\$[A-Za-z0-9_-]+)\s*:\s*(?<value>[^;{}]+);/
Instance Attribute Summary collapse
-
#root ⇒ Object
readonly
Returns the value of attribute root.
Instance Method Summary collapse
- #catalogs ⇒ Object
- #contrast_ratio(foreground, background) ⇒ Object
-
#initialize(root) ⇒ DesignSystem
constructor
A new instance of DesignSystem.
- #literal_colors ⇒ Object
- #plan_literal_migration(replacements) ⇒ Object
- #themes ⇒ Object
- #tokens ⇒ Object
- #unresolved_references ⇒ Object
Constructor Details
#initialize(root) ⇒ DesignSystem
Returns a new instance of DesignSystem.
20 21 22 |
# File 'lib/mxrb/model/design_system.rb', line 20 def initialize(root) @root = File.(root) end |
Instance Attribute Details
#root ⇒ Object (readonly)
Returns the value of attribute root.
18 19 20 |
# File 'lib/mxrb/model/design_system.rb', line 18 def root @root end |
Instance Method Details
#catalogs ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/mxrb/model/design_system.rb', line 32 def catalogs Dir.glob(File.join(@root, 'themesource', '**', 'design-properties.json')).sort.to_h do |path| [relative(path), JSON.parse(File.read(path))] rescue JSON::ParserError [relative(path), nil] end.freeze end |
#contrast_ratio(foreground, background) ⇒ Object
56 57 58 59 |
# File 'lib/mxrb/model/design_system.rb', line 56 def contrast_ratio(foreground, background) light, dark = [relative_luminance(foreground), relative_luminance(background)].sort.reverse ((light + 0.05) / (dark + 0.05)).round(2) end |
#literal_colors ⇒ Object
52 53 54 |
# File 'lib/mxrb/model/design_system.rb', line 52 def literal_colors tokens.select { _1.value.match?(/#[0-9a-f]{3,8}\b/i) }.freeze end |
#plan_literal_migration(replacements) ⇒ Object
61 62 63 |
# File 'lib/mxrb/model/design_system.rb', line 61 def plan_literal_migration(replacements) DesignMigrationPlan.build(@root, replacements) end |
#themes ⇒ Object
28 29 30 |
# File 'lib/mxrb/model/design_system.rb', line 28 def themes tokens.map(&:theme).compact.uniq.sort.freeze end |
#tokens ⇒ Object
24 25 26 |
# File 'lib/mxrb/model/design_system.rb', line 24 def tokens @tokens ||= stylesheet_paths.flat_map { scan_stylesheet(_1) }.freeze end |
#unresolved_references ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/mxrb/model/design_system.rb', line 40 def unresolved_references names = tokens.map(&:name).to_h { [_1, true] } tokens.flat_map do |token| token.value.scan(/var\((--[A-Za-z0-9_-]+)/).flatten.reject { names.key?(_1) } .map do { token:, reference: _1 }.freeze end end.freeze end |