diff --git a/.travis.yml b/.travis.yml index fad41d9..db37ec3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,9 +4,9 @@ android: components: - tools - platform-tools - - build-tools-24.0.3 + - build-tools-24.0.2 - extra-android-m2repository - - android-25 + - android-24 jdk: - oraclejdk8 diff --git a/README.md b/README.md index a5a0e89..1689ca2 100644 --- a/README.md +++ b/README.md @@ -1,72 +1,61 @@ + +# kotlin-pluralizer [![Build Status](https://travis-ci.org/cesarferreira/kotlin-pluralizer.svg?branch=master)](https://travis-ci.org/cesarferreira/kotlin-pluralizer) [![Release](https://jitpack.io/v/cesarferreira/kotlin-pluralizer.svg)](https://jitpack.io/#cesarferreira/kkotlin-pluralizer) -# kotlin-pluralizer -**kotlin extension** to **pluralize** and **singularize** strings -[![Build Status](https://travis-ci.org/cesarferreira/kotlin-pluralizer.svg?branch=master)](https://travis-ci.org/cesarferreira/kotlin-pluralizer) [![Release](https://jitpack.io/v/cesarferreira/kotlin-pluralizer.svg)](https://jitpack.io/#cesarferreira/kotlin-pluralizer) +**kotlin extension** to **pluralize** and **singularize** strings! -### Show some love -[![GitHub followers](https://img.shields.io/github/followers/cesarferreira.svg?style=social&label=Follow)](https://github.com/cesarferreira/kotlin-pluralizer) [![Twitter Follow](https://img.shields.io/twitter/follow/cesarmcferreira.svg?style=social)](https://twitter.com/cesarmcferreira) ## Usage - **Pluralization:** ```kotlin -"person".pluralize() # => "people" -"post".pluralize() # => "posts" -"sheep".pluralize() # => "sheep" -"foot".pluralize() # => "feet" +"person".pluralize() # => "people" +"post".pluralize() # => "posts" +"sheep".pluralize() # => "sheep" ``` **Singuralization:** ```kotlin -"words".singularize() # => "word" -"octopi".singularize() # => "octopus" -"people".singularize() # => "person" -"feet".singularize() # => "foot" -``` +"words".singularize() # => "word" +"octopi".pluralize() # => "octopus" -**Quantities:** -```kotlin -"person".pluralize(1) # => "person" -"person".pluralize(2) # => "people" ``` ## Install ```groovy repositories { - jcenter() - maven { url "https://jitpack.io" } + jcenter() + maven { url "https://jitpack.io" } } dependencies { - compile 'com.github.cesarferreira:kotlin-pluralizer:0.2.9' + compile 'com.github.cesarferreira:kotlin-pluralizer:0.1.0' } ``` -## Contributing +### Show some :heart: +[![GitHub followers](https://img.shields.io/github/followers/cesarferreira.svg?style=social&label=Follow)](https://github.com/cesarferreira/kotlin-pluralizer) [![Twitter Follow](https://img.shields.io/twitter/follow/cesarmcferreira.svg?style=social)](https://twitter.com/cesarmcferreira) +## Contributing I welcome and encourage all pull requests. It usually will take me within 24-48 hours to respond to any issue or request. Here are some basic rules to follow to ensure timely addition of your request: 1. Match coding style (braces, spacing, etc.) This is best achieved using `CMD`+`Option`+`L` (Reformat code) on Mac (not sure for Windows) with Android Studio defaults. 2. If its a feature, bugfix, or anything please only change code to what you specify. 3. Please keep PR titles easy to read and descriptive of changes, this will make them easier to merge :) 4. Pull requests _must_ be made against `develop` branch. Any other branch (unless specified by the maintainers) will get rejected. - 5. Check for existing [issues](https://github.com/cesarferreira/kotlin-pluralizer/issues) first, before filing an issue. + 5. Check for existing [issues](https://github.com/cesarferreira/kotkotlin-pluralizer/issues) first, before filing an issue. 6. Have fun! -## Credits + ## Credits The pluralize and singularize methods are based on the code found in the following places. - - https://github.com/rails/rails/blob/26698fb91d88dca0f860adcb80528d8d3f0f6285/activesupport/lib/active_support/inflector/inflections.rb - - https://github.com/atteo/evo-inflector/blob/master/src/main/java/org/atteo/evo/inflector/English.java - http://www.java2s.com/Tutorial/Java/0040__Data-Type/Transformswordstosingularpluralhumanizedhumanreadableunderscorecamelcaseorordinalform.htm - - https://github.com/MehdiK/Humanizer.jvm + - https://github.com/rails/rails/blob/26698fb91d88dca0f860adcb80528d8d3f0f6285/activesupport/lib/active_support/inflector/inflections.rb ### Created & Maintained By diff --git a/build.gradle b/build.gradle index dc8c0f7..d987dad 100644 --- a/build.gradle +++ b/build.gradle @@ -1,12 +1,12 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.0.6' + ext.kotlin_version = '1.0.3' ext { ext_groupId = 'com.cesarferreira' ext_artifactId = 'kotlin-pluralizer' - ext_version = '0.2.9' + ext_version = '0.1.0' ext_url = 'https://github.com/cesarferreira/kotlin-pluralizer' ext_vcsUrl = 'https://github.com/cesarferreira/kotlin-pluralizer.git' ext_description = 'Kotlin extension to pluralize and singularize strings' @@ -16,7 +16,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0-rc1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3fb1e18..b5fa945 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-all.zip diff --git a/library/build.gradle b/library/build.gradle index 79f89cf..02fde15 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -1,19 +1,47 @@ buildscript { repositories { - jcenter() - mavenLocal() + mavenCentral() + } + + dependencies { + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' } } -plugins { - id 'com.jfrog.bintray' version '1.6' +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'com.github.dcendents.android-maven' + +android { + compileSdkVersion 24 + buildToolsVersion "24.0.2" + + defaultConfig { + minSdkVersion 16 + targetSdkVersion 24 + versionCode 1 + versionName "1.0" + + } + + lintOptions { + abortOnError false + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } } -apply plugin: 'java' -apply plugin: 'kotlin' -apply plugin: 'maven-publish' - dependencies { + compile gradleApi() + compile 'com.android.support:appcompat-v7:24.2.0' compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } repositories { diff --git a/library/publish.gradle b/library/publish.gradle index e6b8b08..a294eae 100644 --- a/library/publish.gradle +++ b/library/publish.gradle @@ -1,59 +1,52 @@ - -group "$ext_groupId" -version "$ext_version" - -publishing { - publications { - MyPublication(MavenPublication) { - from components.java - artifact sourcesJar - groupId "$ext_groupId" - artifactId "$ext_artifactId" - version "$ext_version" - } - } -} - +// build a jar with source files task sourcesJar(type: Jar) { - from sourceSets.main.java.srcDirs + from android.sourceSets.main.java.srcDirs classifier = 'sources' } +task javadoc(type: Javadoc) { + failOnError false + source = android.sourceSets.main.java.sourceFiles + classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + classpath += configurations.compile +} + +// build a jar with javadoc task javadocJar(type: Jar, dependsOn: javadoc) { classifier = 'javadoc' from javadoc.destinationDir } - artifacts { - archives javadocJar archives sourcesJar + archives javadocJar } -bintray { - user = System.getenv('BINTRAY_USER') - key = System.getenv('BINTRAY_API_KEY') - - dryRun = false - publish = true - - publications = ['MyPublication'] - pkg { - repo = 'maven' - name = "$ext_artifactId" - licenses = ['Apache-2.0'] - labels = ['android', 'gradle-plugin'] - - publicDownloadNumbers = true - vcsUrl = "$ext_vcsUrl" - - version { - name = "$ext_version" - desc = "$ext_description" - released = new Date() - gpg { - sign = true // Determines whether to GPG sign the files. - } - } - } -} +// +//bintray { +// user = System.getenv('BINTRAY_USER') +// key = System.getenv('BINTRAY_API_KEY') +// +// dryRun = false +// publish = true +// +// publications = ['MyPublication'] +// pkg { +// repo = 'maven' +// name = "$ext_artifactId" +// licenses = ['Apache-2.0'] +// labels = ['android', 'gradle-plugin'] +// +// publicDownloadNumbers = true +// vcsUrl = "$ext_vcsUrl" +// +// version { +// name = "$ext_version" +// desc = "$ext_description" +// released = new Date() +// gpg { +// sign = true // Determines whether to GPG sign the files. +// } +// } +// } +//} diff --git a/library/src/main/kotlin/com/cesarferreira/pluralize/Pluralize.kt b/library/src/main/java/com/cesarferreira/pluralize/Pluralize.kt similarity index 86% rename from library/src/main/kotlin/com/cesarferreira/pluralize/Pluralize.kt rename to library/src/main/java/com/cesarferreira/pluralize/Pluralize.kt index 159c823..db1d4cc 100644 --- a/library/src/main/kotlin/com/cesarferreira/pluralize/Pluralize.kt +++ b/library/src/main/java/com/cesarferreira/pluralize/Pluralize.kt @@ -25,48 +25,34 @@ fun String.singularize(plurality: Plurality = Plurality.Plural): String { if (this.pluralizer() != this && this + "s" != this.pluralizer() && this.pluralizer().singularize() == this && this.singularizer() != this) - return this + return this; return this.singularize() } -fun String.pluralize(count: Int): String { - if (count > 1) - return this.pluralize(Plurality.Plural) - else - return this.pluralize(Plurality.Singular) -} - -fun String.singularize(count: Int): String { - if (count > 1) - return this.singularize(Plurality.Plural) - else - return this.singularize(Plurality.Singular) -} - private fun String.pluralizer(): String { - if (unCountable().contains(this.toLowerCase())) return this + if (unCountable().contains(this)) return this val rule = pluralizeRules().last { Pattern.compile(it.component1(), Pattern.CASE_INSENSITIVE).matcher(this).find() } var found = Pattern.compile(rule.component1(), Pattern.CASE_INSENSITIVE).matcher(this).replaceAll(rule.component2()) - val endsWith = exceptions().firstOrNull { this.endsWith(it.component1()) } - if (endsWith != null) found = this.replace(endsWith.component1(), endsWith.component2()) - val exception = exceptions().firstOrNull() { this.equals(it.component1()) } - if (exception != null) found = exception.component2() + val endswith = exceptions().firstOrNull { this.endsWith(it.component1()) } + if (endswith != null) found = this.replace(endswith.component1(), endswith.component2()) + val excep = exceptions().firstOrNull() { this.equals(it.component1()) } + if (excep != null) found = excep.component2() return found } private fun String.singularizer(): String { - if (unCountable().contains(this.toLowerCase())) { + if (unCountable().contains(this)) { return this } - val exceptions = exceptions().firstOrNull() { this.equals(it.component2()) } + val excepions = exceptions().firstOrNull() { this.equals(it.component2()) } - if (exceptions != null) { - return exceptions.component1() + if (excepions != null) { + return excepions.component1() } - val endsWith = exceptions().firstOrNull { this.endsWith(it.component2()) } + val endswith = exceptions().firstOrNull { this.endsWith(it.component2()) } - if (endsWith != null) return this.replace(endsWith.component2(), endsWith.component1()) + if (endswith != null) return this.replace(endswith.component2(), endswith.component1()) try { if (singularizeRules().count { @@ -214,3 +200,5 @@ fun singularizeRules(): List> { "i$" to "us", "ae$" to "a") } + + diff --git a/library/src/main/kotlin/com/cesarferreira/pluralize/utils/Plurality.kt b/library/src/main/java/com/cesarferreira/pluralize/utils/Plurality.kt similarity index 100% rename from library/src/main/kotlin/com/cesarferreira/pluralize/utils/Plurality.kt rename to library/src/main/java/com/cesarferreira/pluralize/utils/Plurality.kt diff --git a/android-sample/.gitignore b/sample/.gitignore similarity index 100% rename from android-sample/.gitignore rename to sample/.gitignore diff --git a/android-sample/build.gradle b/sample/build.gradle similarity index 61% rename from android-sample/build.gradle rename to sample/build.gradle index c3e679e..b81014f 100644 --- a/android-sample/build.gradle +++ b/sample/build.gradle @@ -1,29 +1,20 @@ -buildscript { - repositories { - jcenter() - } - dependencies { - classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" - } -} - apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' android { - compileSdkVersion 25 - buildToolsVersion "24.0.3" + compileSdkVersion 24 + buildToolsVersion "24.0.2" defaultConfig { + applicationId "com.cesarferreira.supposedlibrary" minSdkVersion 16 - targetSdkVersion 25 + targetSdkVersion 24 versionCode 1 versionName "1.0" } lintOptions { abortOnError false } - + buildTypes { release { minifyEnabled false @@ -38,8 +29,8 @@ android { dependencies { compile project(':library') compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - compile 'com.android.support:appcompat-v7:25.1.0' - compile 'com.android.support:design:25.1.0' + compile 'com.android.support:appcompat-v7:24.2.0' + compile 'com.android.support:design:24.2.0' } repositories { mavenCentral() diff --git a/android-sample/proguard-rules.pro b/sample/proguard-rules.pro similarity index 100% rename from android-sample/proguard-rules.pro rename to sample/proguard-rules.pro diff --git a/android-sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml similarity index 100% rename from android-sample/src/main/AndroidManifest.xml rename to sample/src/main/AndroidManifest.xml diff --git a/android-sample/src/main/java/com/cesarferreira/pluralize/sample/HelloActivity.kt b/sample/src/main/java/com/cesarferreira/pluralize/sample/HelloActivity.kt similarity index 52% rename from android-sample/src/main/java/com/cesarferreira/pluralize/sample/HelloActivity.kt rename to sample/src/main/java/com/cesarferreira/pluralize/sample/HelloActivity.kt index 525867a..8f1e7d8 100644 --- a/android-sample/src/main/java/com/cesarferreira/pluralize/sample/HelloActivity.kt +++ b/sample/src/main/java/com/cesarferreira/pluralize/sample/HelloActivity.kt @@ -1,11 +1,12 @@ package com.cesarferreira.pluralize.sample import android.os.Bundle +import android.support.design.widget.FloatingActionButton import android.support.v7.app.AppCompatActivity import android.support.v7.widget.Toolbar +import android.util.Log import com.cesarferreira.pluralize.pluralize import com.cesarferreira.pluralize.singularize -import kotlinx.android.synthetic.main.content_hello.* class HelloActivity : AppCompatActivity() { @@ -15,24 +16,16 @@ class HelloActivity : AppCompatActivity() { val toolbar = findViewById(R.id.toolbar) as Toolbar setSupportActionBar(toolbar) - val singulars = arrayOf("person", "banana", "woman") + val fab = findViewById(R.id.fab) as FloatingActionButton + fab.setOnClickListener({ + view -> + Log.d("TAG", "person".pluralize()) + Log.d("TAG", "banana".pluralize()) + Log.d("TAG", "woman".pluralize()) - for (item in singulars) { - concat("$item -> pluralize -> ${item.pluralize()}") - } + Log.d("TAG", "women".singularize()) - concat("") - concat("") - - val plurals = arrayOf("words", "octopi", "sheep") - - for (item in plurals) { - concat("$item -> singularize -> ${item.singularize()}") - } - } - - fun concat(str: String) { - centerTextView.append(str + "\n") + }) } } diff --git a/android-sample/src/main/res/layout/activity_hello.xml b/sample/src/main/res/layout/activity_hello.xml similarity index 67% rename from android-sample/src/main/res/layout/activity_hello.xml rename to sample/src/main/res/layout/activity_hello.xml index 2b31fab..48bfd3d 100644 --- a/android-sample/src/main/res/layout/activity_hello.xml +++ b/sample/src/main/res/layout/activity_hello.xml @@ -5,7 +5,8 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:fitsSystemWindows="true"> + android:fitsSystemWindows="true" + tools:context="com.cesarferreira.supposedlibrary.com.cesarferreira.pluralize.sample.HelloActivity"> + + diff --git a/android-sample/src/main/res/layout/content_hello.xml b/sample/src/main/res/layout/content_hello.xml similarity index 75% rename from android-sample/src/main/res/layout/content_hello.xml rename to sample/src/main/res/layout/content_hello.xml index 104dfc2..9ab9f39 100644 --- a/android-sample/src/main/res/layout/content_hello.xml +++ b/sample/src/main/res/layout/content_hello.xml @@ -11,11 +11,7 @@ android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" - tools:showIn="@layout/activity_hello"> + tools:showIn="@layout/activity_hello" + tools:context="com.cesarferreira.supposedlibrary.com.cesarferreira.pluralize.sample.HelloActivity"> - diff --git a/android-sample/src/main/res/mipmap-hdpi/ic_launcher.png b/sample/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from android-sample/src/main/res/mipmap-hdpi/ic_launcher.png rename to sample/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/android-sample/src/main/res/mipmap-mdpi/ic_launcher.png b/sample/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from android-sample/src/main/res/mipmap-mdpi/ic_launcher.png rename to sample/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/android-sample/src/main/res/mipmap-xhdpi/ic_launcher.png b/sample/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from android-sample/src/main/res/mipmap-xhdpi/ic_launcher.png rename to sample/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/android-sample/src/main/res/mipmap-xxhdpi/ic_launcher.png b/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from android-sample/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to sample/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/android-sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from android-sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/android-sample/src/main/res/values-v21/styles.xml b/sample/src/main/res/values-v21/styles.xml similarity index 100% rename from android-sample/src/main/res/values-v21/styles.xml rename to sample/src/main/res/values-v21/styles.xml diff --git a/android-sample/src/main/res/values-w820dp/dimens.xml b/sample/src/main/res/values-w820dp/dimens.xml similarity index 100% rename from android-sample/src/main/res/values-w820dp/dimens.xml rename to sample/src/main/res/values-w820dp/dimens.xml diff --git a/android-sample/src/main/res/values/colors.xml b/sample/src/main/res/values/colors.xml similarity index 100% rename from android-sample/src/main/res/values/colors.xml rename to sample/src/main/res/values/colors.xml diff --git a/android-sample/src/main/res/values/dimens.xml b/sample/src/main/res/values/dimens.xml similarity index 100% rename from android-sample/src/main/res/values/dimens.xml rename to sample/src/main/res/values/dimens.xml diff --git a/android-sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml similarity index 53% rename from android-sample/src/main/res/values/strings.xml rename to sample/src/main/res/values/strings.xml index 38e7cf4..58e23dd 100644 --- a/android-sample/src/main/res/values/strings.xml +++ b/sample/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ Pluralize - Pluralize + HelloActivity diff --git a/android-sample/src/main/res/values/styles.xml b/sample/src/main/res/values/styles.xml similarity index 100% rename from android-sample/src/main/res/values/styles.xml rename to sample/src/main/res/values/styles.xml diff --git a/settings.gradle b/settings.gradle index b46971c..52baf7e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':android-sample', ':library' +include ':sample', ':library'