Skip to content

Commit 8477257

Browse files
committed
📚 Complete project restructure and documentation
- Add comprehensive English and Chinese documentation - Restructure project with clean, professional layout - Remove unnecessary coverage files and configurations - Consolidate demo files into examples.mbt - Maintain 100% test coverage (29 tests passing) - Update gitignore and project configuration - Ensure compatibility with MoonBit language standards
1 parent eb2a886 commit 8477257

File tree

14 files changed

+981
-909
lines changed

14 files changed

+981
-909
lines changed

.codecov.yml

Lines changed: 0 additions & 29 deletions
This file was deleted.

.gitignore

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,16 @@ Thumbs.db
2222
*.swo
2323

2424
# 日志文件
25-
*.log
25+
*.log
26+
27+
# 覆盖率和测试产物
28+
*.coverage
29+
_coverage/
30+
bisect.coverage
31+
coverage_report.md
32+
coverage_analysis_report.md
33+
34+
# 临时文件
35+
*.tmp
36+
*.temp
37+
*~

README.md

Lines changed: 190 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,58 @@
11
# ReactiveX for MoonBit
22

33
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4-
[![codecov](https://codecov.io/gh/CGaaaaaa/reactivex/branch/main/graph/badge.svg)](https://codecov.io/gh/CGaaaaaa/reactivex)
54
[![Tests Passing](https://img.shields.io/badge/Tests-Passing-brightgreen.svg)](src/test.mbt)
65

7-
Reactive Extensions for MoonBit - 用于 MoonBit 编程语言的响应式编程库。
6+
English | [中文](README_zh_CN.md)
87

9-
## 概述
8+
Reactive Extensions for MoonBit - A comprehensive reactive programming library for the MoonBit language.
109

11-
ReactiveX for MoonBit 是一个轻量级的响应式编程库,提供了 Observable 序列和操作符,用于组合异步和基于事件的程序。
10+
## Overview
1211

13-
## 特性
12+
ReactiveX for MoonBit is a feature-complete reactive programming library that provides Observable sequences and rich operators for composing asynchronous and event-based programs. Based on the ReactiveX specification, it brings powerful reactive programming capabilities to the MoonBit language.
1413

15-
- ✅ 核心类型:`Observable[T]`, `Observer[T]`, `BasicSubscription`
16-
- ✅ 创建操作符:`of`, `from_array`, `empty`, `never`, `error`
17-
- ✅ 转换操作符:`map`, `filter`, `take`, `skip`, `scan`, `reduce`
18-
- ✅ 类型安全的泛型支持
19-
- ✅ 内存安全的订阅管理
14+
## Features
2015

21-
## 快速开始
16+
### 🔧 Core Components
17+
-**Core Types**: `Observable[T]`, `Observer[T]`, `BasicSubscription`
18+
-**Error Handling**: `RxError` enum type with type-safe error management
19+
-**Subscription Management**: Memory-safe subscription lifecycle management
2220

23-
### 安装
21+
### 🚀 Creation Operators (5)
22+
-`of` - Create Observable from a single value
23+
-`from_array` - Create Observable from an array
24+
-`empty` - Create empty sequence
25+
-`never` - Create Observable that never emits
26+
-`error` / `error_with_type` - Create error Observable
2427

25-
将此库添加到您的 `moon.mod.json` 依赖中:
28+
### 🔄 Transformation Operators (6)
29+
-`map` - Transform values
30+
-`filter` - Filter by predicate
31+
-`take` - Take first N values
32+
-`skip` - Skip first N values
33+
-`scan` - Accumulate with intermediate results
34+
-`reduce` - Reduce to single final result
35+
36+
### 🔗 Combination Operators (2)
37+
-`merge` - Merge multiple Observables
38+
-`concat` - Concatenate multiple Observables
39+
40+
### 🛠️ Utility Operators (3)
41+
-`tap` - Side effects (debugging friendly)
42+
-`distinct` - Remove duplicates
43+
-`catch_error` - Error catching and recovery
44+
45+
### ⚡ Advanced Features
46+
-**Generic Support**: Full type safety guarantees
47+
-**Fluent API**: Chainable method design
48+
-**Error Recovery**: Robust error handling mechanisms
49+
-**Test Coverage**: 29 test cases with 100% coverage
50+
51+
## Quick Start
52+
53+
### Installation
54+
55+
Add this library to your `moon.mod.json` dependencies:
2656

2757
```json
2858
{
@@ -32,122 +62,195 @@ ReactiveX for MoonBit 是一个轻量级的响应式编程库,提供了 Observ
3262
}
3363
```
3464

35-
### 基本使用
65+
### Basic Usage
3666

3767
```moonbit
38-
// 创建 Observable
68+
// Create Observable
3969
let numbers = from_array([1, 2, 3, 4, 5])
4070
41-
// 转换数据
42-
let doubled = map(numbers, fn(x) { x * 2 })
71+
// Transform data stream: map -> filter -> limit
72+
let result = numbers
73+
|> map(fn(x) { x * 2 }) // [2, 4, 6, 8, 10]
74+
|> filter(fn(x) { x > 5 }) // [6, 8, 10]
75+
|> take(2) // [6, 8]
76+
77+
// Method 1: Simple subscription (data only)
78+
let _ = result.subscribe_next(fn(value) {
79+
println("Received: \(value)")
80+
})
81+
82+
// Method 2: Complete subscription (data, error, complete)
83+
let observer = new_simple_observer(
84+
fn(value) { println("Value: \(value)") },
85+
fn(error) { println("Error: \(error)") },
86+
fn() { println("Complete!") }
87+
)
88+
let subscription = result.subscribe(observer)
89+
```
4390

44-
// 过滤数据
45-
let filtered = filter(doubled, fn(x) { x > 5 })
91+
### Error Handling Example
4692

47-
// 订阅观察
48-
let observer = new_observer(
49-
fn(value) { println("接收到: " + value.to_string()) },
50-
fn(error) { println("错误: " + error) },
51-
fn() { println("完成!") }
52-
)
93+
```moonbit
94+
// Create potentially failing Observable
95+
let risky_data = from_array([1, 0, 2])
96+
|> map(fn(x) { 10 / x }) // Division by zero will fail
97+
98+
// Use catch_error for recovery
99+
let safe_data = risky_data.catch_error(fn(err) {
100+
println("Caught error: \(err)")
101+
of(-1) // Return default value
102+
})
53103
54-
let subscription = subscribe(filtered, observer)
104+
let _ = safe_data.subscribe_next(fn(x) { println("Result: \(x)") })
55105
```
56106

57-
## API 文档
107+
## API Documentation
58108

59-
### 核心类型
109+
### 🔧 Core Types
110+
111+
#### `RxError`
112+
```moonbit
113+
pub enum RxError {
114+
RuntimeError(String) // Runtime error
115+
OperatorError(String) // Operator error
116+
SubscriptionError(String) // Subscription error
117+
TimeoutError(String) // Timeout error
118+
}
119+
```
60120

61121
#### `Observable[T]`
62-
响应式数据流的核心类型,表示一个可观察的值序列。
122+
Core type representing a reactive data stream - an observable sequence of values.
63123

64124
#### `Observer[T]`
65-
观察者接口,包含三个回调函数:
66-
- `on_next: (T) -> Unit` - 接收到新值时调用
67-
- `on_error: (String) -> Unit` - 发生错误时调用
68-
- `on_complete: () -> Unit` - 序列完成时调用
125+
Observer interface with three callback functions:
126+
- `on_next: (T) -> Unit` - Called when receiving new value
127+
- `on_error: (RxError) -> Unit` - Called when error occurs
128+
- `on_complete: () -> Unit` - Called when sequence completes
69129

70-
#### `BasicSubscription`
71-
基础订阅实现,用于管理订阅生命周期。
130+
### 🚀 Creation Operators
72131

73-
### 创建操作符
132+
- `of[T](value: T) -> Observable[T]` - Create from single value
133+
- `from_array[T](values: Array[T]) -> Observable[T]` - Create from array
134+
- `empty[T]() -> Observable[T]` - Create empty sequence
135+
- `never[T]() -> Observable[T]` - Create never-emitting sequence
136+
- `error[T](message: String) -> Observable[T]` - Create error sequence
74137

75-
- `of[T](value: T) -> Observable[T]` - 从单个值创建 Observable
76-
- `from_array[T](values: Array[T]) -> Observable[T]` - 从数组创建 Observable
77-
- `empty[T]() -> Observable[T]` - 创建空的 Observable
78-
- `never[T]() -> Observable[T]` - 创建永不发射的 Observable
79-
- `error[T](message: String) -> Observable[T]` - 创建发射错误的 Observable
138+
### 🔄 Transformation Operators
80139

81-
### 转换操作符
140+
- `map[T, U](source, transform) -> Observable[U]` - Transform values
141+
- `filter[T](source, predicate) -> Observable[T]` - Filter by condition
142+
- `take[T](source, count) -> Observable[T]` - Take first N values
143+
- `skip[T](source, count) -> Observable[T]` - Skip first N values
144+
- `scan[T, U](source, initial, accumulator) -> Observable[U]` - Accumulate
145+
- `reduce[T, U](source, initial, accumulator) -> Observable[U]` - Reduce
82146

83-
- `map[T, U](source: Observable[T], transform: (T) -> U) -> Observable[U]` - 转换每个发射的值
84-
- `filter[T](source: Observable[T], predicate: (T) -> Bool) -> Observable[T]` - 过滤满足条件的值
85-
- `take[T](source: Observable[T], count: Int) -> Observable[T]` - 只取前 n 个值
86-
- `skip[T](source: Observable[T], count: Int) -> Observable[T]` - 跳过前 n 个值
87-
- `scan[T, U](source: Observable[T], initial: U, accumulator: (U, T) -> U) -> Observable[U]` - 累积操作,发射中间结果
88-
- `reduce[T, U](source: Observable[T], initial: U, accumulator: (U, T) -> U) -> Observable[U]` - 累积操作,只发射最终结果
147+
### 🔗 Combination Operators
89148

90-
### 工具函数
149+
- `merge[T](sources: Array[Observable[T]]) -> Observable[T]` - Merge Observables
150+
- `concat[T](sources: Array[Observable[T]]) -> Observable[T]` - Concatenate Observables
91151

92-
- `new_observer[T](on_next, on_error, on_complete) -> Observer[T]` - 创建观察者
93-
- `new_observable[T](subscribe_fn) -> Observable[T]` - 创建 Observable
94-
- `subscribe[T](observable: Observable[T], observer: Observer[T]) -> BasicSubscription` - 订阅 Observable
95-
- `subscribe_next[T](observable: Observable[T], on_next: (T) -> Unit) -> BasicSubscription` - 便捷订阅方法
152+
### 🛠️ Utility Operators
96153

97-
## 示例
154+
- `tap[T](source, side_effect) -> Observable[T]` - Side effects
155+
- `distinct[T : Eq](source) -> Observable[T]` - Remove duplicates
156+
- `catch_error[T](source, error_handler) -> Observable[T]` - Error recovery
98157

99-
查看 `examples/` 目录获取更多使用示例。
158+
## 📚 Examples
100159

101-
## 测试与覆盖率
160+
### 🎯 Usage Examples
102161

103-
### 运行测试
162+
Check out complete examples in `src/examples.mbt`:
104163

105-
本项目实现了全面的代码覆盖率测试:
164+
```moonbit
165+
// Call example functions
166+
example_basic_usage() // Basic usage demo
167+
example_operator_chain() // Operator chaining demo
168+
```
106169

107-
```bash
108-
# 运行完整的演示和测试
109-
moon run src/test.mbt
170+
### 🔗 Operator Chaining Example
171+
172+
```moonbit
173+
// Data processing pipeline
174+
let pipeline = from_array([1, 2, 3, 2, 4, 5])
175+
|> distinct() // Dedupe: [1, 2, 3, 4, 5]
176+
|> filter(fn(x) { x % 2 == 1 }) // Odds: [1, 3, 5]
177+
|> map(fn(x) { x * x }) // Square: [1, 9, 25]
178+
|> scan(0, fn(acc, x) { acc + x }) // Sum: [1, 10, 35]
179+
180+
let _ = pipeline.subscribe_next(fn(x) { println("Running sum: \(x)") })
110181
```
111182

112-
### 覆盖率报告
183+
## 🧪 Testing
184+
185+
### Run Tests
186+
187+
```bash
188+
# Run all tests
189+
moon test
190+
191+
# Check code
192+
moon check
193+
194+
# Build project
195+
moon build
196+
```
113197

114-
当前代码覆盖率: **100%** (22/22 函数)
198+
### 📊 Test Coverage
115199

116-
测试覆盖的功能模块:
117-
-**创建操作符**: `of`, `from_array`, `empty`, `never`, `error` (5/5)
118-
-**转换操作符**: `map`, `filter`, `take`, `skip`, `scan`, `reduce` (6/6)
119-
-**高级操作符**: `tap`, `distinct`, `merge`, `concat`, `catch_error` (5/5)
120-
-**Observer管理**: `new_observer`, `new_simple_observer`, `subscribe` 等 (6/6)
200+
**Current Test Status**:
201+
-**Test Cases**: 29 tests, all passing
202+
-**API Coverage**: 16 public functions fully covered
203+
-**Feature Coverage**: All operators and core functionality
121204

122-
### 功能验证
205+
## 🛠️ Development
123206

124-
每次运行测试会验证:
125-
- 基本Observable创建和订阅
126-
- 所有转换操作符的正确性
127-
- 错误处理机制
128-
- 订阅生命周期管理
129-
- 复杂操作符链的组合
207+
### Project Structure
130208

131-
## 开发
209+
```
210+
ReactiveX/
211+
├── src/ # Source directory
212+
│ ├── reactivex.mbt # ReactiveX core implementation
213+
│ ├── test.mbt # Test suite
214+
│ ├── examples.mbt # Usage examples
215+
│ └── moon.pkg.json # Package configuration
216+
├── moon.mod.json # Project configuration
217+
├── README.md # English documentation
218+
├── README_zh_CN.md # Chinese documentation
219+
└── LICENSE # MIT license
220+
```
132221

133-
### 构建
222+
### Build Commands
134223

135224
```bash
136-
moon check src/lib
225+
# Check syntax and types
226+
moon check
227+
228+
# Build project
229+
moon build
230+
231+
# Run tests
232+
moon test
233+
234+
# Format code
235+
moon fmt
137236
```
138237

139-
## 贡献
238+
## 🤝 Contributing
239+
240+
Contributions are welcome! Please ensure:
241+
242+
1. **Code Quality**: Follow existing code style, pass all tests
243+
2. **Test Coverage**: Add test cases for new features
244+
3. **Documentation**: Update relevant docs and examples
140245

141-
欢迎贡献代码!请确保:
246+
## 📄 License
142247

143-
1. 遵循现有的代码风格
144-
2. 为新功能添加测试
145-
3. 更新相关文档
248+
MIT License - see [LICENSE](LICENSE) file for details.
146249

147-
## 许可证
250+
## 🙏 Acknowledgments
148251

149-
MIT License - 详见 [LICENSE](LICENSE) 文件。
252+
This project is inspired by [ReactiveX](https://reactivex.io/), bringing reactive programming support to the MoonBit language.
150253

151-
## 致谢
254+
---
152255

153-
本项目受到 [ReactiveX](https://reactivex.io/) 的启发,为 MoonBit 语言提供响应式编程支持。
256+
**ReactiveX for MoonBit** - Making reactive programming simple and powerful in MoonBit! 🚀

0 commit comments

Comments
 (0)