add projectByName function
This commit is contained in:
build.gradle
core
exposed/commons
ktor
client
common
src
commonMain
kotlin
com
insanusmokrassar
postssystem
markups
commons
build.gradlemaven.publish.gradlepublish.gradlepublish_config.kpsb
src
commonMain
kotlin
com
insanusmokrassar
postssystem
html
publishing
settings.gradleutils/repos/exposed
85
markups/commons/build.gradle
Normal file
85
markups/commons/build.gradle
Normal file
@ -0,0 +1,85 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
|
||||
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:$gradle_bintray_plugin_version"
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id "org.jetbrains.kotlin.multiplatform" version "$kotlin_version"
|
||||
id "org.jetbrains.kotlin.plugin.serialization" version "$kotlin_version"
|
||||
}
|
||||
|
||||
project.version = "$core_version"
|
||||
project.group = "com.insanusmokrassar"
|
||||
|
||||
apply from: "publish.gradle"
|
||||
|
||||
repositories {
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
maven { url "https://kotlin.bintray.com/kotlinx" }
|
||||
}
|
||||
|
||||
kotlin {
|
||||
jvm()
|
||||
js()
|
||||
|
||||
sourceSets {
|
||||
commonMain {
|
||||
dependencies {
|
||||
implementation kotlin('stdlib')
|
||||
api "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$kotlin_coroutines_version"
|
||||
api "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$kotlin_serialisation_runtime_version"
|
||||
|
||||
if ((project.hasProperty('RELEASE_MODE') && project.property('RELEASE_MODE') == "true") || System.getenv('RELEASE_MODE') == "true") {
|
||||
api "com.insanusmokrassar:postssystem.core.api:$core_version"
|
||||
} else {
|
||||
api projectByName("postssystem.core.api")
|
||||
}
|
||||
|
||||
api "com.soywiz.korlibs.klock:klock:$klockVersion"
|
||||
api "com.benasher44:uuid:$uuidVersion"
|
||||
}
|
||||
}
|
||||
commonTest {
|
||||
dependencies {
|
||||
implementation kotlin('test-common')
|
||||
implementation kotlin('test-annotations-common')
|
||||
}
|
||||
}
|
||||
jvmMain {
|
||||
dependencies {
|
||||
implementation kotlin('stdlib-jdk8')
|
||||
api "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version"
|
||||
api "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$kotlin_serialisation_runtime_version"
|
||||
}
|
||||
}
|
||||
jvmTest {
|
||||
dependencies {
|
||||
implementation kotlin('test-junit')
|
||||
}
|
||||
}
|
||||
jsMain {
|
||||
dependencies {
|
||||
implementation kotlin('stdlib-js')
|
||||
api "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:$kotlin_coroutines_version"
|
||||
api "org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:$kotlin_serialisation_runtime_version"
|
||||
}
|
||||
}
|
||||
jsTest {
|
||||
dependencies {
|
||||
implementation kotlin('test-js')
|
||||
implementation kotlin('test-junit')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
60
markups/commons/maven.publish.gradle
Normal file
60
markups/commons/maven.publish.gradle
Normal file
@ -0,0 +1,60 @@
|
||||
apply plugin: 'maven-publish'
|
||||
|
||||
task javadocsJar(type: Jar) {
|
||||
classifier = 'javadoc'
|
||||
}
|
||||
|
||||
afterEvaluate {
|
||||
project.publishing.publications.all {
|
||||
// rename artifacts
|
||||
groupId "${project.group}"
|
||||
if (it.name.contains('kotlinMultiplatform')) {
|
||||
artifactId = "${project.name}"
|
||||
} else {
|
||||
artifactId = "${project.name}-$name"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
publishing {
|
||||
publications.all {
|
||||
artifact javadocsJar
|
||||
|
||||
pom {
|
||||
description = "PostsSystem Core Repos utility subproject"
|
||||
name = "PostsSystem Core Repos"
|
||||
url = "https://git.insanusmokrassar.com/PostsSystem/PostsSystemCore"
|
||||
|
||||
scm {
|
||||
developerConnection = "scm:git:[fetch=]https://git.insanusmokrassar.com/PostsSystem/PostsSystemCore.git[push=]https://git.insanusmokrassar.com/PostsSystem/PostsSystemCore.git"
|
||||
url = "https://git.insanusmokrassar.com/PostsSystem/PostsSystemCore.git"
|
||||
}
|
||||
|
||||
developers {
|
||||
|
||||
developer {
|
||||
id = "InsanusMokrassar"
|
||||
name = "Ovsiannikov Aleksei"
|
||||
email = "ovsyannikov.alexey95@gmail.com"
|
||||
}
|
||||
|
||||
|
||||
developer {
|
||||
id = "mi-ast"
|
||||
name = "Michail Astafiev"
|
||||
email = "astaf65@gmail.com"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
licenses {
|
||||
|
||||
license {
|
||||
name = "Apache Software License 2.0"
|
||||
url = "https://git.insanusmokrassar.com/PostsSystem/PostsSystemCore/src/master/LICENSE"
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
55
markups/commons/publish.gradle
Normal file
55
markups/commons/publish.gradle
Normal file
@ -0,0 +1,55 @@
|
||||
apply plugin: 'com.jfrog.bintray'
|
||||
|
||||
apply from: "maven.publish.gradle"
|
||||
|
||||
bintray {
|
||||
user = project.hasProperty('BINTRAY_USER') ? project.property('BINTRAY_USER') : System.getenv('BINTRAY_USER')
|
||||
key = project.hasProperty('BINTRAY_KEY') ? project.property('BINTRAY_KEY') : System.getenv('BINTRAY_KEY')
|
||||
filesSpec {
|
||||
from "${buildDir}/publications/"
|
||||
eachFile {
|
||||
String directorySubname = it.getFile().parentFile.name
|
||||
if (it.getName() == "module.json") {
|
||||
if (directorySubname == "kotlinMultiplatform") {
|
||||
it.setPath("${project.name}/${project.version}/${project.name}-${project.version}.module")
|
||||
} else {
|
||||
it.setPath("${project.name}-${directorySubname}/${project.version}/${project.name}-${directorySubname}-${project.version}.module")
|
||||
}
|
||||
} else {
|
||||
if (directorySubname == "kotlinMultiplatform" && it.getName() == "pom-default.xml") {
|
||||
it.setPath("${project.name}/${project.version}/${project.name}-${project.version}.pom")
|
||||
} else {
|
||||
it.exclude()
|
||||
}
|
||||
}
|
||||
}
|
||||
into "${project.group}".replace(".", "/")
|
||||
}
|
||||
pkg {
|
||||
repo = "InsanusMokrassar"
|
||||
name = "${project.name}"
|
||||
vcsUrl = "https://github.com/PostsSystem/PostsSystemCore"
|
||||
licenses = ["Apache-2.0"]
|
||||
version {
|
||||
name = "${project.version}"
|
||||
released = new Date()
|
||||
vcsTag = "${project.version}"
|
||||
gpg {
|
||||
sign = true
|
||||
passphrase = project.hasProperty('signing.gnupg.passphrase') ? project.property('signing.gnupg.passphrase') : System.getenv('signing.gnupg.passphrase')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bintrayUpload.doFirst {
|
||||
publications = publishing.publications.collect {
|
||||
if (it.name.contains('kotlinMultiplatform')) {
|
||||
null
|
||||
} else {
|
||||
it.name
|
||||
}
|
||||
} - null
|
||||
}
|
||||
|
||||
bintrayUpload.dependsOn publishToMavenLocal
|
1
markups/commons/publish_config.kpsb
Normal file
1
markups/commons/publish_config.kpsb
Normal file
@ -0,0 +1 @@
|
||||
{"bintrayConfig":{"repo":"InsanusMokrassar","packageName":"${project.name}","packageVcs":"https://github.com/PostsSystem/PostsSystemCore"},"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://git.insanusmokrassar.com/PostsSystem/PostsSystemCore/src/master/LICENSE"}],"mavenConfig":{"name":"PostsSystem Markups Core subsystem","description":"PostsSystem Markups Core subsystem with base things for future markups modules","url":"https://git.insanusmokrassar.com/PostsSystem/PostsSystemCore","vcsUrl":"https://git.insanusmokrassar.com/PostsSystem/PostsSystemCore.git","developers":[{"id":"InsanusMokrassar","name":"Ovsiannikov Aleksei","eMail":"ovsyannikov.alexey95@gmail.com"}]},"type":"Multiplatform"}
|
24
markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/AbstractMarkupPlugin.kt
Normal file
24
markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/AbstractMarkupPlugin.kt
Normal file
@ -0,0 +1,24 @@
|
||||
package com.insanusmokrassar.postssystem.markups.core
|
||||
|
||||
import com.insanusmokrassar.postssystem.core.content.RegisteredContent
|
||||
import com.insanusmokrassar.postssystem.core.content.api.ReadContentRepo
|
||||
import com.insanusmokrassar.postssystem.core.post.PostId
|
||||
import com.insanusmokrassar.postssystem.core.post.RegisteredPost
|
||||
import com.insanusmokrassar.postssystem.core.post.repo.ReadPostsRepo
|
||||
|
||||
//abstract class AbstractMarkupPlugin<MarkupTarget>(
|
||||
// @Suppress("MemberVisibilityCanBePrivate")
|
||||
// protected val postsRepo: ReadPostsRepo,
|
||||
// @Suppress("MemberVisibilityCanBePrivate")
|
||||
// protected val postsContentRepo: ReadContentRepo
|
||||
//) : MarkupPlugin<MarkupTarget> {
|
||||
// override suspend fun drawMarkupBuilder(on: MarkupTarget, postId: PostId) {
|
||||
// val post = postsRepo.getPostById(postId) ?: return
|
||||
// val contents = post.content.mapNotNull {
|
||||
// postsContentRepo.getContentById(it)
|
||||
// }
|
||||
// drawMarkupBuilder(on, post, contents)
|
||||
// }
|
||||
//
|
||||
// abstract suspend fun drawMarkupBuilder(target: MarkupTarget, forPost: RegisteredPost, content: List<RegisteredContent>)
|
||||
//}
|
27
markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupPlugin.kt
Normal file
27
markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupPlugin.kt
Normal file
@ -0,0 +1,27 @@
|
||||
package com.insanusmokrassar.postssystem.markups.core
|
||||
|
||||
import com.insanusmokrassar.postssystem.core.post.PostId
|
||||
|
||||
typealias MarkupPluginName = String
|
||||
typealias MarkupPluginIdentifier = String
|
||||
|
||||
/**
|
||||
* That is the plugin for platform, which is able to be drawn on the [MarkupTarget].
|
||||
*
|
||||
* * Plugin could be some Telegram plugin
|
||||
* * [MarkupTarget] could be web.
|
||||
*/
|
||||
interface MarkupPlugin {
|
||||
/**
|
||||
* This name will be used in `select`-questions on site
|
||||
*/
|
||||
val pluginName: MarkupPluginName
|
||||
|
||||
val pluginId: MarkupPluginIdentifier
|
||||
get() = pluginName
|
||||
|
||||
/**
|
||||
* Link to icon which will be used for links onto this plugin
|
||||
*/
|
||||
val iconLink: String?
|
||||
}
|
47
markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupsSystem.kt
Normal file
47
markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/MarkupsSystem.kt
Normal file
@ -0,0 +1,47 @@
|
||||
package com.insanusmokrassar.postssystem.markups.core
|
||||
|
||||
import com.insanusmokrassar.postssystem.markups.core.utils.*
|
||||
import com.insanusmokrassar.postssystem.utils.repos.ReadStandardCRUDRepo
|
||||
import com.insanusmokrassar.postssystem.utils.repos.pagination.*
|
||||
import kotlin.math.min
|
||||
|
||||
abstract class MarkupsSystem(
|
||||
protected val plugins: List<MarkupPlugin>
|
||||
) : ReadStandardCRUDRepo<MarkupPlugin, MarkupPluginIdentifier> {
|
||||
private val pluginsMap: Map<MarkupPluginIdentifier, MarkupPlugin> = plugins.associateBy { it.pluginId }
|
||||
|
||||
override suspend fun contains(id: MarkupPluginIdentifier): Boolean = pluginsMap.keys.contains(id)
|
||||
override suspend fun getById(id: MarkupPluginIdentifier): MarkupPlugin? = pluginsMap[id]
|
||||
override suspend fun getByPagination(pagination: Pagination): PaginationResult<MarkupPlugin> {
|
||||
if (pagination.firstIndex > plugins.lastIndex) {
|
||||
return emptyList<MarkupPlugin>().createPaginationResult(
|
||||
pagination,
|
||||
plugins.size.toLong()
|
||||
)
|
||||
}
|
||||
val lastExclusiveIndex = min(pagination.lastExclusiveIndex, plugins.size)
|
||||
return plugins.subList(pagination.firstIndex, lastExclusiveIndex).createPaginationResult(
|
||||
pagination,
|
||||
plugins.size.toLong()
|
||||
)
|
||||
}
|
||||
|
||||
fun drawPluginsNamedList(
|
||||
listBuilder: ListBuilder
|
||||
) {
|
||||
listBuilder.createLinkedItems(
|
||||
plugins.map {
|
||||
it.pluginName to it.pluginId
|
||||
}
|
||||
)
|
||||
}
|
||||
fun drawPluginsIconsList(
|
||||
listBuilder: ListBuilder
|
||||
) {
|
||||
listBuilder.createLinkedIconItems(
|
||||
plugins.mapNotNull {
|
||||
(it.iconLink ?: return@mapNotNull null) to it.pluginId
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
18
markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/utils/ListBuilder.kt
Normal file
18
markups/commons/src/commonMain/kotlin/com/insanusmokrassar/postssystem/markups/core/utils/ListBuilder.kt
Normal file
@ -0,0 +1,18 @@
|
||||
package com.insanusmokrassar.postssystem.markups.core.utils
|
||||
|
||||
import com.insanusmokrassar.postssystem.markups.core.MarkupPluginIdentifier
|
||||
import com.insanusmokrassar.postssystem.markups.core.MarkupPluginName
|
||||
|
||||
typealias TitledListItem = Pair<MarkupPluginName, MarkupPluginIdentifier>
|
||||
typealias IconLinkListItem = Pair<String, MarkupPluginIdentifier>
|
||||
|
||||
interface ListBuilder {
|
||||
/**
|
||||
* Accept the list of titled items with their ids
|
||||
*/
|
||||
fun createLinkedItems(data: List<TitledListItem>)
|
||||
/**
|
||||
* Accept the list of items with their icons links and ids
|
||||
*/
|
||||
fun createLinkedIconItems(data: List<IconLinkListItem>)
|
||||
}
|
Reference in New Issue
Block a user