Skip to content

Commit

Permalink
AssetProcessorService: remove dependency on LinkGenerator
Browse files Browse the repository at this point in the history
Closes gh-40
  • Loading branch information
rainboyan committed Jan 1, 2025
1 parent b82132a commit db25ff2
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 43 deletions.
Original file line number Diff line number Diff line change
@@ -1,34 +1,33 @@
package asset.pipeline.grails


import static asset.pipeline.grails.UrlBase.*


class AssetMethodTagLib {

static namespace = 'g'
static returnObjectForTags = ['assetPath']


AssetProcessorService assetProcessorService

grails.web.mapping.LinkGenerator grailsLinkGenerator

def assetPath = {final def attrs ->
final def src
final UrlBase urlBase
final String baseUrl
final boolean useManifest

if (attrs instanceof Map) {
src = attrs.src
urlBase = attrs.absolute ? SERVER_BASE_URL : CONTEXT_PATH
baseUrl = attrs.absolute ? grailsLinkGenerator.serverBaseURL : trimToEmpty(grailsLinkGenerator.contextPath)
useManifest = attrs.useManifest ?: true
}
else {
src = attrs
urlBase = CONTEXT_PATH
useManifest = true
baseUrl = trimToEmpty(grailsLinkGenerator.contextPath)
useManifest = true
}

return assetProcessorService.assetBaseUrl(request, urlBase) + assetProcessorService.getAssetPath(Objects.toString(src), useManifest)
return assetProcessorService.assetBaseUrl(request, baseUrl) + assetProcessorService.getAssetPath(Objects.toString(src), useManifest)
}

private static String trimToEmpty(String str) {
return str == null ? "" : str.trim()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@
import grails.util.Environment;
import grails.web.mapping.UrlMappingsHolder;
import org.grails.config.NavigableMap;
import org.grails.core.io.ResourceLocator;
import org.grails.plugins.BinaryGrailsPlugin;
import org.grails.web.mapping.DefaultLinkGenerator;

Expand Down Expand Up @@ -104,8 +103,8 @@ public AssetResourceLocator assetResourceLocator() throws IOException {

@Bean
@ConditionalOnMissingBean
public AssetProcessorService assetProcessorService(ObjectProvider<GrailsApplication> grailsApplication, grails.web.mapping.LinkGenerator grailsLinkGenerator) {
AssetProcessorService assetProcessorService = new AssetProcessorService(grailsApplication.getObject(), grailsLinkGenerator);
public AssetProcessorService assetProcessorService(ObjectProvider<GrailsApplication> grailsApplication) {
AssetProcessorService assetProcessorService = new AssetProcessorService(grailsApplication.getObject());
return assetProcessorService;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package asset.pipeline.grails


import asset.pipeline.AssetHelper

import grails.core.GrailsApplication
import grails.util.Environment
import org.grails.config.NavigableMap
Expand All @@ -12,23 +13,18 @@ import org.grails.web.servlet.mvc.GrailsWebRequest
import asset.pipeline.AssetPipelineConfigHolder
import static asset.pipeline.AssetPipelineConfigHolder.manifest
import asset.pipeline.AssetPipelineClassLoaderEntry
import static asset.pipeline.grails.UrlBase.*
import static asset.pipeline.grails.utils.net.HttpServletRequests.getBaseUrlWithScheme
import static asset.pipeline.grails.utils.text.StringBuilders.ensureEndsWith
import static asset.pipeline.utils.net.Urls.hasAuthority
import static org.apache.commons.lang.StringUtils.trimToEmpty
import static org.grails.web.servlet.mvc.GrailsWebRequest.lookup


class AssetProcessorService {

GrailsApplication grailsApplication

grails.web.mapping.LinkGenerator grailsLinkGenerator

AssetProcessorService(GrailsApplication grailsApplication, grails.web.mapping.LinkGenerator grailsLinkGenerator) {
AssetProcessorService(GrailsApplication grailsApplication) {
this.grailsApplication = grailsApplication
this.grailsLinkGenerator = grailsLinkGenerator
}

/**
Expand All @@ -43,8 +39,8 @@ class AssetProcessorService {
// final String mapping = grailsApplication.config?.grails?.assets?.mapping ?: 'assets'
if (mapping.contains('/')) {
throw new IllegalArgumentException(
'The property [grails.assets.mapping] can only be one level deep. ' +
"For example, 'foo' and 'bar' would be acceptable values, but 'foo/bar' is not"
'The property [grails.assets.mapping] can only be one level deep. ' +
"For example, 'foo' and 'bar' would be acceptable values, but 'foo/bar' is not"
)
}
return mapping
Expand All @@ -68,7 +64,7 @@ class AssetProcessorService {
final String relativePath = trimLeadingSlash(path)
if(manifest) {
if(relativePath)
return manifest.getProperty(relativePath)
return manifest.getProperty(relativePath)
} else {
return AssetHelper.fileForFullName(relativePath) != null ? relativePath : null
}
Expand All @@ -92,9 +88,9 @@ class AssetProcessorService {
return manifest?.getProperty(registryRelativePath) ? true : false
} else {
return (manifest ? manifest.getProperty(relativePath) : AssetHelper.fileForFullName(relativePath) != null)
}
}



}


Expand All @@ -105,7 +101,7 @@ class AssetProcessorService {
return null
}

url = assetBaseUrl(null, NONE) + url
url = assetBaseUrl(null, '') + url
if (! hasAuthority(url)) {
String absolutePath = linkGenerator.handleAbsolute(attrs)

Expand All @@ -129,7 +125,7 @@ class AssetProcessorService {
}


String assetBaseUrl(final HttpServletRequest req, final UrlBase urlBase, final NavigableMap conf = grailsApplication.config.getProperty('grails.assets',Map,[:])) {
String assetBaseUrl(final HttpServletRequest req, final String baseUrl, final NavigableMap conf = grailsApplication.config.getProperty('grails.assets',Map,[:])) {
Map map = conf.toFlatConfig()
final String url = getConfigBaseUrl(req, map)
if (url) {
Expand All @@ -138,23 +134,10 @@ class AssetProcessorService {

final String mapping = assetMapping

String baseUrl
switch (urlBase) {
case SERVER_BASE_URL:
baseUrl = grailsLinkGenerator.serverBaseURL ?: ''
break
case CONTEXT_PATH:
baseUrl = trimToEmpty(grailsLinkGenerator.contextPath)
break
case NONE:
baseUrl = ''
break
}

final String finalUrl = ensureEndsWith(new StringBuilder(baseUrl.length() + mapping.length() + 2).append(baseUrl), '/' as char)
.append(mapping)
.append('/' as char)
.toString()
.append(mapping)
.append('/' as char)
.toString()

return finalUrl
}
Expand Down

0 comments on commit db25ff2

Please sign in to comment.