Skip to content

Commit 97a86e3

Browse files
Jonas Saabelclaude
andcommitted
chore(release): bump version to 0.2.0
Update version from 0.1.0 to 0.2.0 across all project files including documentation and Kotlin notebooks. Changes: - Update gradle.properties version to 0.2.0 - Update installation examples in README.md and QUICKSTART.md - Add comprehensive CHANGELOG entry for 0.2.0 release - Update all 7 Kotlin notebook dependencies - Add lightweight documentation mentions for new features New features in 0.2.0: - Five new query filter types (relation, people, status, unique_id, files) - Place property type support with convenience accessors - Enhanced unique_id property with convenience accessors - Graceful handling of unknown property types - Updated dependencies to latest versions 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent c8e34ff commit 97a86e3

14 files changed

+72
-107
lines changed

CHANGELOG.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,38 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.2.0] - 2025-11-04
9+
10+
### ✨ Added
11+
12+
**Query Filters** - New property type filters for advanced querying:
13+
- **Relation filter**: Filter by related pages with `relation("Property").contains(pageId)`, `doesNotContain()`, `isEmpty()`, `isNotEmpty()`
14+
- **People filter**: Filter by users/assignees with `people("Property").contains(userId)`, `doesNotContain()`, `isEmpty()`, `isNotEmpty()`
15+
- **Status filter**: Filter by workflow status with `status("Property").equals("Status")`, `doesNotEqual()`, `isEmpty()`, `isNotEmpty()`
16+
- **Unique ID filter**: Filter by auto-incrementing IDs with numeric comparisons (`equals()`, `greaterThan()`, `lessThan()`, etc.)
17+
- **Files filter**: Filter by attachment presence with `files("Property").isEmpty()`, `isNotEmpty()`
18+
19+
**Property Types**:
20+
- **Place property**: Full support for location data with `PageProperty.Place` including:
21+
- Structured access to latitude/longitude coordinates
22+
- Name and address fields
23+
- Convenience accessors: `getPlaceProperty()`, `getPlaceAsString()`, `formattedLocation`
24+
- **Unique ID property**: Enhanced with convenience accessors (`getUniqueIdProperty()`, properly integrated with `getPlainTextForProperty()`)
25+
26+
### 🐛 Fixed
27+
28+
- **Unknown property types**: Library now gracefully handles property types it doesn't recognize, returning `PageProperty.Unsupported` instead of failing deserialization
29+
30+
### 🔧 Changed
31+
32+
- **Dependencies**: Updated to latest versions of Kotlin, Ktor, and other dependencies
33+
- **Gradle**: Updated Gradle wrapper to latest version
34+
35+
### 📊 Statistics
36+
37+
- **Test coverage**: 514+ unit tests (up from 481)
38+
- **New test suites**: Integration tests for all new filter types
39+
840
## [0.1.0] - 2025-10-10
941

1042
### 🎉 Initial Release
@@ -82,4 +114,5 @@ This is the first public release of the Kotlin Notion Client library.
82114

83115
**Note**: This is an early release (0.1.0). While comprehensive testing has been performed, users should expect potential issues and are encouraged to report them via GitHub Issues.
84116

117+
[0.2.0]: https://github.com/jsaabel/kotlin-notion-client/compare/v0.1.0...v0.2.0
85118
[0.1.0]: https://github.com/jsaabel/kotlin-notion-client/releases/tag/v0.1.0

QUICKSTART.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Add the dependency to your `build.gradle.kts`:
1515

1616
```kotlin
1717
dependencies {
18-
implementation("it.saabel:kotlin-notion-client:0.1.0")
18+
implementation("it.saabel:kotlin-notion-client:0.2.0")
1919
}
2020
```
2121

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ A modern, type-safe Kotlin client for the Notion API with comprehensive DSL supp
2525
```kotlin
2626
// Gradle (Kotlin DSL)
2727
dependencies {
28-
implementation("it.saabel:kotlin-notion-client:0.1.0")
28+
implementation("it.saabel:kotlin-notion-client:0.2.0")
2929
}
3030
```
3131

@@ -34,7 +34,7 @@ dependencies {
3434
<dependency>
3535
<groupId>it.saabel</groupId>
3636
<artifactId>kotlin-notion-client</artifactId>
37-
<version>0.1.0</version>
37+
<version>0.2.0</version>
3838
</dependency>
3939
```
4040

docs/data-sources.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,8 @@ val results = notion.dataSources.query("data-source-id") {
269269
}
270270
```
271271

272+
**Additional Filter Types** (v0.2.0+): The query DSL also supports filters for `relation` (related pages), `people` (users/assignees), `status` (workflow status), `unique_id` (auto-incrementing IDs), and `files` (attachment presence). All follow the same DSL pattern as shown above.
273+
272274
### Working with Properties
273275

274276
After querying, access page properties using extension functions (recommended):

docs/notebooks.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Our integration tests provide excellent, verified examples:
4343

4444
```kotlin
4545
// Load dependencies
46-
@file:DependsOn("it.saabel:kotlin-notion-client:0.1.0")
46+
@file:DependsOn("it.saabel:kotlin-notion-client:0.2.0")
4747

4848
// Imports
4949
import it.saabel.kotlinnotionclient.NotionClient

docs/pages.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,8 @@ Common property types you can set when creating/updating pages:
352352
| Phone | `phoneNumber(name, phoneString)` | `phoneNumber("Phone", "+1-555-0123")` |
353353
| Files | `files(name, ...)` | (See file upload documentation) |
354354
| Relation | `relation(name, pageIds)` | `relation("Related", "page-1", "page-2")` |
355+
| Place (v0.2.0+) | Read location data | Access with `getPlaceProperty()` |
356+
| Unique ID | Read auto-incrementing ID | Access with `getUniqueIdProperty()` |
355357

356358
**Read-only properties** (cannot be set via create/update):
357359
- Formula
@@ -360,6 +362,8 @@ Common property types you can set when creating/updating pages:
360362
- Last edited time
361363
- Created by
362364
- Last edited by
365+
- Place (read-only in API)
366+
- Unique ID (auto-generated)
363367

364368
## Common Patterns
365369

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ org.gradle.configuration-cache=false
33
org.jetbrains.dokka.experimental.gradle.pluginMode=V2EnabledWithHelpers
44

55
# Project version
6-
version=0.1.0
6+
version=0.2.0
77
group=it.saabel
88

99
# Maven Central Publishing (Vanniktech Maven Publish Plugin)

notebooks/01-getting-started.ipynb

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -35,35 +35,9 @@
3535
"start_time": "2025-10-16T21:01:48.197016Z"
3636
}
3737
},
38-
"source": [
39-
"// Load the Kotlin Notion Client library from Maven Central\n",
40-
"@file:DependsOn(\"it.saabel:kotlin-notion-client:0.1.0\")\n",
41-
"\n",
42-
"// Import necessary classes\n",
43-
"import it.saabel.kotlinnotionclient.NotionClient\n",
44-
"import it.saabel.kotlinnotionclient.exceptions.NotionException\n",
45-
"import kotlinx.coroutines.runBlocking\n",
46-
"\n",
47-
"// Initialize the client with your API token\n",
48-
"val apiToken = System.getenv(\"NOTION_API_TOKEN\")\n",
49-
" ?: error(\"❌ NOTION_API_TOKEN environment variable not set\")\n",
50-
"\n",
51-
"val notion = NotionClient(apiToken)\n",
52-
"\n",
53-
"println(\"✅ NotionClient initialized successfully!\")\n",
54-
"println(\" Token: ${apiToken.take(10)}...\")"
55-
],
56-
"outputs": [
57-
{
58-
"name": "stdout",
59-
"output_type": "stream",
60-
"text": [
61-
"✅ NotionClient initialized successfully!\n",
62-
" Token: ntn_532171...\n"
63-
]
64-
}
65-
],
66-
"execution_count": 1
38+
"source": "// Load the Kotlin Notion Client library from Maven Central\n@file:DependsOn(\"it.saabel:kotlin-notion-client:0.2.0\")\n\n// Import necessary classes\nimport it.saabel.kotlinnotionclient.NotionClient\nimport it.saabel.kotlinnotionclient.exceptions.NotionException\nimport kotlinx.coroutines.runBlocking\n\n// Initialize the client with your API token\nval apiToken = System.getenv(\"NOTION_API_TOKEN\")\n ?: error(\"❌ NOTION_API_TOKEN environment variable not set\")\n\nval notion = NotionClient(apiToken)\n\nprintln(\"✅ NotionClient initialized successfully!\")\nprintln(\" Token: ${apiToken.take(10)}...\")",
39+
"outputs": [],
40+
"execution_count": null
6741
},
6842
{
6943
"cell_type": "markdown",
@@ -381,4 +355,4 @@
381355
},
382356
"nbformat": 4,
383357
"nbformat_minor": 4
384-
}
358+
}

notebooks/02-reading-databases.ipynb

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,9 @@
2020
"start_time": "2025-10-23T08:11:40.748488Z"
2121
}
2222
},
23-
"source": "// Load the Kotlin Notion Client library from Maven Central\n@file:DependsOn(\"it.saabel:kotlin-notion-client:0.1.0\")\n\n// Import necessary classes\nimport it.saabel.kotlinnotionclient.NotionClient\nimport it.saabel.kotlinnotionclient.models.base.SelectOptionColor\nimport it.saabel.kotlinnotionclient.models.datasources.SortDirection\nimport it.saabel.kotlinnotionclient.models.pages.PageProperty\nimport kotlinx.coroutines.runBlocking\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\n\n// Initialize the client\nval apiToken = System.getenv(\"NOTION_API_TOKEN\")\n ?: error(\"❌ NOTION_API_TOKEN environment variable not set\")\n\nval parentPageId = System.getenv(\"NOTION_TEST_PAGE_ID\")\n ?: error(\"❌ NOTION_TEST_PAGE_ID environment variable not set\")\n\nval notion = NotionClient(apiToken)\n\nprintln(\"✅ NotionClient initialized successfully!\")",
24-
"outputs": [
25-
{
26-
"name": "stdout",
27-
"output_type": "stream",
28-
"text": [
29-
"✅ NotionClient initialized successfully!\n"
30-
]
31-
}
32-
],
33-
"execution_count": 1
23+
"source": "// Load the Kotlin Notion Client library from Maven Central\n@file:DependsOn(\"it.saabel:kotlin-notion-client:0.2.0\")\n\n// Import necessary classes\nimport it.saabel.kotlinnotionclient.NotionClient\nimport it.saabel.kotlinnotionclient.models.base.SelectOptionColor\nimport it.saabel.kotlinnotionclient.models.datasources.SortDirection\nimport it.saabel.kotlinnotionclient.models.pages.PageProperty\nimport kotlinx.coroutines.runBlocking\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\n\n// Initialize the client\nval apiToken = System.getenv(\"NOTION_API_TOKEN\")\n ?: error(\"❌ NOTION_API_TOKEN environment variable not set\")\n\nval parentPageId = System.getenv(\"NOTION_TEST_PAGE_ID\")\n ?: error(\"❌ NOTION_TEST_PAGE_ID environment variable not set\")\n\nval notion = NotionClient(apiToken)\n\nprintln(\"✅ NotionClient initialized successfully!\")",
24+
"outputs": [],
25+
"execution_count": null
3426
},
3527
{
3628
"cell_type": "markdown",
@@ -432,4 +424,4 @@
432424
},
433425
"nbformat": 4,
434426
"nbformat_minor": 4
435-
}
427+
}

notebooks/03-creating-pages.ipynb

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,9 @@
2020
"start_time": "2025-10-23T08:16:03.587615Z"
2121
}
2222
},
23-
"source": "// Load the Kotlin Notion Client library from Maven Central\n@file:DependsOn(\"it.saabel:kotlin-notion-client:0.1.0\")\n\n// Import necessary classes\nimport it.saabel.kotlinnotionclient.NotionClient\nimport it.saabel.kotlinnotionclient.models.base.SelectOptionColor\nimport it.saabel.kotlinnotionclient.models.datasources.SortDirection\nimport it.saabel.kotlinnotionclient.models.pages.PageProperty\nimport kotlinx.coroutines.runBlocking\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\n\n// Initialize the client\nval apiToken = System.getenv(\"NOTION_API_TOKEN\")\n ?: error(\"❌ NOTION_API_TOKEN environment variable not set\")\n\nval parentPageId = System.getenv(\"NOTION_TEST_PAGE_ID\")\n ?: error(\"❌ NOTION_TEST_PAGE_ID environment variable not set\")\n\nval notion = NotionClient(apiToken)\n\nprintln(\"✅ NotionClient initialized successfully!\")",
24-
"outputs": [
25-
{
26-
"name": "stdout",
27-
"output_type": "stream",
28-
"text": [
29-
"✅ NotionClient initialized successfully!\n"
30-
]
31-
}
32-
],
33-
"execution_count": 1
23+
"source": "// Load the Kotlin Notion Client library from Maven Central\n@file:DependsOn(\"it.saabel:kotlin-notion-client:0.2.0\")\n\n// Import necessary classes\nimport it.saabel.kotlinnotionclient.NotionClient\nimport it.saabel.kotlinnotionclient.models.base.SelectOptionColor\nimport it.saabel.kotlinnotionclient.models.datasources.SortDirection\nimport it.saabel.kotlinnotionclient.models.pages.PageProperty\nimport kotlinx.coroutines.runBlocking\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.awaitAll\n\n// Initialize the client\nval apiToken = System.getenv(\"NOTION_API_TOKEN\")\n ?: error(\"❌ NOTION_API_TOKEN environment variable not set\")\n\nval parentPageId = System.getenv(\"NOTION_TEST_PAGE_ID\")\n ?: error(\"❌ NOTION_TEST_PAGE_ID environment variable not set\")\n\nval notion = NotionClient(apiToken)\n\nprintln(\"✅ NotionClient initialized successfully!\")",
24+
"outputs": [],
25+
"execution_count": null
3426
},
3527
{
3628
"cell_type": "markdown",
@@ -410,4 +402,4 @@
410402
},
411403
"nbformat": 4,
412404
"nbformat_minor": 4
413-
}
405+
}

0 commit comments

Comments
 (0)