jekyll-uj-powertools 1.5.0 → 1.5.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9562a7bc595d4bedfbbe896e5caf0aec58a081c8032eb740098b9c6af2c1b7b9
4
- data.tar.gz: 7f22baa79ad7d872926f49dd43562999987b16c5c68f80c73b1ca38d223291f1
3
+ metadata.gz: 4c546d3b5f77c67bf33fdcdbecfeb0c741760a89fdcf508f05caf7943b19b197
4
+ data.tar.gz: 2612f6dae15afb265e3193bccdaf038421eb1ad51e3bdd955c0ce610b324e441
5
5
  SHA512:
6
- metadata.gz: f6bfdfa4f3547e69dbd2931ba3edee14f4c25d37d5a7ffc8f2f824bd14c8d6b914f16b6954c89ae1e3d10cdfc9b6703c992517b66a08ffe7104acc7c1b5e3b19
7
- data.tar.gz: edec6938165e18dbbe55290f7a0933347d0e66374392ae81d3b1eb60eb872981100b3d39810cedce99df6a50d284e3c21fffff17a007287d2f6c2382b1464ae4
6
+ metadata.gz: e95b14dd432df58e934bb9cab3c77eb8bb577cc6e917475692753ec95b9d78ed8759e4310c6560fa6bb5da350519eb3e3fe97fc3278c78c2b345e021a53fc256
7
+ data.tar.gz: 54646abcd5832dabb835cdfff9dfb71d80aebe28df1727381497beb7af057ef594a05231cc9327ddf87f74484c1c6035d440a394b5fd97568943e641999f9af8
data/README.md CHANGED
@@ -133,16 +133,23 @@ After checking out the repo, run `bin/setup` to install dependencies. You can al
133
133
 
134
134
  To install this gem onto your local machine, run `bundle exec rake install`.
135
135
 
136
- To release a new version, update the version number in the `.gemspec` and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
136
+
137
+
137
138
 
138
139
  ## ⚠️ Testing
139
140
  Run the tests
140
141
  ```shell
141
- bundle install
142
- bundle exec rspec
142
+ bundle install && bundle exec rspec
143
+ ```
144
+
145
+ Test in your [Ultimate Jekyll Site](http://github.com/itw-creative-works/ultimate-jekyll)
146
+ ```shell
147
+ npm start -- --ujPluginDevMode=true
143
148
  ```
144
149
 
145
150
  ## 💎 Build + Publish the Gem
151
+ To release a new version, update the version number in the `.gemspec` and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
152
+
146
153
  ```shell
147
154
  # Release
148
155
  bundle exec rake release
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  Gem::Specification.new do |spec|
6
6
  # Gem info
7
7
  spec.name = "jekyll-uj-powertools"
8
- spec.version = "1.5.0"
8
+ spec.version = "1.5.2"
9
9
 
10
10
  # Author info
11
11
  spec.authors = ["ITW Creative Works"]
@@ -37,6 +37,74 @@ module Jekyll
37
37
  hash1.merge(hash2, &merger)
38
38
  end
39
39
 
40
+ def filter_site_config(config)
41
+ # Get exclusion list from config or use defaults
42
+ exclusions = config['powertools_resolved_exclude'] || default_exclusions
43
+
44
+ # Always exclude the config key itself
45
+ exclusions_with_config_key = exclusions + ['powertools_resolved_exclude']
46
+
47
+ # Create filtered copy
48
+ filtered = {}
49
+ config.each do |key, value|
50
+ next if exclusions_with_config_key.include?(key)
51
+ filtered[key] = value
52
+ end
53
+
54
+ filtered
55
+ end
56
+
57
+ def default_exclusions
58
+ # Exclude Jekyll internal keys and potentially large data
59
+ [
60
+ # Unnecessary Jekyll keys
61
+ 'plugins', 'gems', 'whitelist', 'plugins_dir',
62
+ 'layouts_dir', 'data_dir', 'includes_dir',
63
+ 'collections', 'jekyll-archives', 'scholar',
64
+ 'assets', 'webpack', 'sass', 'keep_files',
65
+ 'include', 'exclude', 'markdown_ext',
66
+
67
+ # Custom exclusions
68
+ 'escapes', 'icons',
69
+
70
+ # Use this to customize exclusions in the Jekyll site
71
+ 'powertools_resolved_exclude',
72
+ ]
73
+ end
74
+
75
+ def get_layout_chain(layout_name, site)
76
+ chain = []
77
+ current_layout_name = layout_name
78
+
79
+ # Traverse up the layout hierarchy
80
+ while current_layout_name
81
+ layout = site.layouts[current_layout_name]
82
+ break unless layout
83
+
84
+ chain.unshift(layout) # Add to beginning to maintain parent->child order
85
+ current_layout_name = layout.data['layout']
86
+ end
87
+
88
+ chain
89
+ end
90
+
91
+ def filter_front_matter(data)
92
+ # Jekyll internal properties that shouldn't be in resolved data
93
+ jekyll_internals = [
94
+ 'layout', 'permalink', 'published', 'date', 'categories', 'tags',
95
+ 'path', 'relative_path', 'collection', 'type', 'id', 'url',
96
+ 'next', 'previous', 'draft', 'ext', 'excerpt', 'output'
97
+ ]
98
+
99
+ filtered = {}
100
+ data.each do |key, value|
101
+ next if jekyll_internals.include?(key)
102
+ filtered[key] = value
103
+ end
104
+
105
+ filtered
106
+ end
107
+
40
108
  def inject_data(item, site)
41
109
  # Inject a random number into the item's data
42
110
  item.data['random_id'] = rand(100) # Random number between 0 and 99
@@ -47,28 +115,42 @@ module Jekyll
47
115
  end
48
116
 
49
117
  # Set resolved data for site, layout, and page
50
- # Create a deep merge of site -> layout -> page data
51
- # Priority: page (highest) -> layout -> site (lowest)
118
+ # Create a deep merge of site -> child layouts -> parent layouts -> page data
119
+ # Priority: page (highest) -> parent layouts -> child layouts -> site (lowest)
52
120
  resolved = {}
53
121
 
54
122
  # Start with site data
55
123
  if site.config
56
- resolved = deep_merge(resolved, site.config)
124
+ # Filter site config to exclude large/unnecessary keys
125
+ filtered_config = filter_site_config(site.config)
126
+ resolved = deep_merge(resolved, filtered_config)
57
127
  end
58
128
 
59
- # Merge layout data if available
129
+ # Merge layout data if available (traverse the entire layout chain)
60
130
  if item.data['layout']
61
- layout_name = item.data['layout']
62
- layout = site.layouts[layout_name]
63
- if layout && layout.data
64
- resolved = deep_merge(resolved, layout.data)
65
- # Also add layout_data for backward compatibility
66
- item.data['layout_data'] = layout.data
131
+ layout_chain = get_layout_chain(item.data['layout'], site)
132
+
133
+ # Merge each layout in reverse order (child to parent)
134
+ # This gives parent layouts (base layouts) higher priority
135
+ layout_chain.reverse.each do |layout|
136
+ if layout && layout.data
137
+ # Filter out Jekyll internal layout properties
138
+ layout_data = filter_front_matter(layout.data)
139
+ resolved = deep_merge(resolved, layout_data)
140
+ end
141
+ end
142
+
143
+ # Also add layout_data for backward compatibility (immediate layout only)
144
+ immediate_layout = site.layouts[item.data['layout']]
145
+ if immediate_layout && immediate_layout.data
146
+ item.data['layout_data'] = immediate_layout.data
67
147
  end
68
148
  end
69
149
 
70
150
  # Finally merge page data (highest priority)
71
- resolved = deep_merge(resolved, item.data)
151
+ # Filter out Jekyll internal properties
152
+ page_data = filter_front_matter(item.data)
153
+ resolved = deep_merge(resolved, page_data)
72
154
 
73
155
  # Add the resolved data to the item
74
156
  item.data['resolved'] = resolved
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-uj-powertools
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - ITW Creative Works