add projectByName function

This commit is contained in:
2020-08-10 19:09:46 +06:00
parent 8bd6ef3d5f
commit 14a40bfef0
25 changed files with 95 additions and 57 deletions
build.gradle
core
api
exposed
ktor
client
build.gradle
src
commonMain
kotlin
com
insanusmokrassar
common
build.gradle
src
commonMain
kotlin
com
insanusmokrassar
postssystem
exposed/commons
ktor
client
common
src
commonMain
kotlin
com
insanusmokrassar
markups
publishing
settings.gradle
utils/repos/exposed

@ -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')
}
}
}
}

@ -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"
}
}
}
}
}

@ -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

@ -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"}

@ -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>)
//}

@ -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?
}

@ -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
}
)
}
}

@ -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>)
}