in buildSrc/src/main/groovy/org/grails/guides/GuidesFetcher.groovy [16:100]
static List<Guide> fetchGuides(boolean skipFuture = true) {
URL url = new URL(GUIDES_JSON)
def jsonArr = new JsonSlurper().parseText(url.text)
DateFormat dateFormat = new SimpleDateFormat('dd MMM yyyy',
Locale.US)
Map<String, Set<String>> githubSlugsAndBranches = [:]
jsonArr.each { it ->
if (githubSlugsAndBranches.containsKey(it.githubSlug)) {
Set<String> arr = githubSlugsAndBranches[it.githubSlug]
arr << it.githubBranch ?: 'master'
githubSlugsAndBranches[it.githubSlug] = arr
} else {
githubSlugsAndBranches[it.githubSlug] = [it.githubBranch ?: 'master'] as HashSet<String>
}
}
List<Guide> guides = []
for (String githubSlug : githubSlugsAndBranches.keySet()) {
if (githubSlugsAndBranches[githubSlug].size() == 1) {
def guideArr = jsonArr.find {
it.githubSlug == githubSlug &&
(!it.githubBranch || githubSlugsAndBranches[githubSlug].any { branch -> branch == it.githubBranch})
}
if (guideArr) {
Guide guide = new SingleGuide(
versionNumber: guideArr.grailsVersion,
authors: guideArr.authors as List,
category: guideArr.category,
githubSlug: guideArr.githubSlug,
githubBranch: guideArr.githubBranch,
name: guideArr.name,
title: guideArr.title,
subtitle: guideArr.subtitle,
tags: guideArr.tags as List
)
if (guideArr.publicationDate) {
guide.publicationDate = dateFormat.parse(guideArr.publicationDate as String)
}
guides << guide
}
} else if (githubSlugsAndBranches[githubSlug].size() > 1) {
GrailsVersionedGuide guide
for (String githubBranch : githubSlugsAndBranches[githubSlug]) {
def guideArr = jsonArr.find {
it.githubSlug == githubSlug &&
it.githubBranch == githubBranch
}
if (guideArr) {
if (!guide) {
guide = new GrailsVersionedGuide()
}
guide.versionNumber = guideArr.grailsVersion
guide.authors = guideArr.authors as List
guide.category = guideArr.category
guide.githubSlug = guideArr.githubSlug
guide.githubBranch = guideArr.githubBranch
guide.name = guideArr.name
guide.title = guideArr.title
guide.subtitle = guideArr.subtitle
if (githubBranch == 'grails3') {
guide.grailsMayorVersionTags[GrailsMajorVersion.GRAILS_3] = guideArr.tags
} else if (githubBranch == 'grails4' || githubBranch == 'master') {
guide.grailsMayorVersionTags[GrailsMajorVersion.GRAILS_4] = guideArr.tags
} else if (githubBranch == 'grails5') {
guide.grailsMayorVersionTags[GrailsMajorVersion.GRAILS_5] = guideArr.tags
} else if (githubBranch == 'grails6') {
guide.grailsMayorVersionTags[GrailsMajorVersion.GRAILS_6] = guideArr.tags
}
if (guideArr.publicationDate) {
guide.publicationDate = dateFormat.parse(guideArr.publicationDate as String)
}
}
}
if (guide) {
guides << guide
}
}
}
if(skipFuture) {
guides = guides.findAll { it.publicationDate.before(tomorrow()) }
}
guides.sort { Guide a, Guide b ->
b.publicationDate <=> a.publicationDate
}
}