Skip to content

Commit a1602b7

Browse files
committed
doc: add project documentation, contributing and conduct guidelines
1 parent ff66119 commit a1602b7

File tree

5 files changed

+309
-1
lines changed

5 files changed

+309
-1
lines changed

CHANGELOG.md

Whitespace-only changes.

CODE_OF_CONDUCT.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Contributor Covenant Code of Conduct
2+
3+
## Our Pledge
4+
5+
In the interest of fostering an open and welcoming environment, we as
6+
contributors and maintainers pledge to making participation in our project and
7+
our community a harassment-free experience for everyone, regardless of age, body
8+
size, disability, ethnicity, sex characteristics, gender identity and expression,
9+
level of experience, education, socio-economic status, nationality, personal
10+
appearance, race, religion, or sexual identity and orientation.
11+
12+
## Our Standards
13+
14+
Examples of behavior that contributes to creating a positive environment
15+
include:
16+
17+
- Using welcoming and inclusive language
18+
- Being respectful of differing viewpoints and experiences
19+
- Gracefully accepting constructive criticism
20+
- Focusing on what is best for the community
21+
- Showing empathy towards other community members
22+
23+
Examples of unacceptable behavior by participants include:
24+
25+
- The use of sexualized language or imagery and unwelcome sexual attention or
26+
advances
27+
- Trolling, insulting/derogatory comments, and personal or political attacks
28+
- Public or private harassment
29+
- Publishing others' private information, such as a physical or electronic
30+
address, without explicit permission
31+
- Other conduct which could reasonably be considered inappropriate in a
32+
professional setting
33+
34+
## Our Responsibilities
35+
36+
Project maintainers are responsible for clarifying the standards of acceptable
37+
behavior and are expected to take appropriate and fair corrective action in
38+
response to any instances of unacceptable behavior.
39+
40+
Project maintainers have the right and responsibility to remove, edit, or
41+
reject comments, commits, code, wiki edits, issues, and other contributions
42+
that are not aligned to this Code of Conduct, or to ban temporarily or
43+
permanently any contributor for other behaviors that they deem inappropriate,
44+
threatening, offensive, or harmful.
45+
46+
## Scope
47+
48+
This Code of Conduct applies both within project spaces and in public spaces
49+
when an individual is representing the project or its community. Examples of
50+
representing a project or community include using an official project e-mail
51+
address, posting via an official social media account, or acting as an appointed
52+
representative at an online or offline event. Representation of a project may be
53+
further defined and clarified by project maintainers.
54+
55+
## Enforcement
56+
57+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
58+
reported by contacting the project team at [email protected]. All
59+
complaints will be reviewed and investigated and will result in a response that
60+
is deemed necessary and appropriate to the circumstances. The project team is
61+
obligated to maintain confidentiality with regard to the reporter of an incident.
62+
Further details of specific enforcement policies may be posted separately.
63+
64+
Project maintainers who do not follow or enforce the Code of Conduct in good
65+
faith may face temporary or permanent repercussions as determined by other
66+
members of the project's leadership.
67+
68+
## Attribution
69+
70+
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71+
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72+
73+
[homepage]: https://www.contributor-covenant.org
74+
75+
For answers to common questions about this code of conduct, see
76+
https://www.contributor-covenant.org/faq

CONTRIBUTING.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Contributing Guidelines
2+
3+
This document contains information and guidelines about contributing to this project.
4+
Please read it before you start participating.
5+
6+
_See also: [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md)_
7+
8+
## Submitting Pull Requests
9+
10+
You can contribute by fixing bugs or adding new features. For larger code changes, we first recommend discussing them in our [Github issues](https://github.com/SwiftyLab/ValidatableKit/issues). When submitting a pull request, please add relevant tests and ensure your changes don't break any existing tests (see [Automated Tests](#automated-tests) below).
11+
12+
### Things you will need
13+
14+
* Linux, Mac OS (preferred), or Windows.
15+
* Git
16+
* [Swift](https://www.swift.org/getting-started/#installing-swift)
17+
* Optional
18+
* Xcode and [CocoaPods], to test [CocoaPods] integration
19+
* [Node], to use helper scripts in [Scripts](Scripts/) folder.
20+
21+
### Automated Tests
22+
23+
GitHub action is already setup to run tests on pull requests targeting `main` branch. However, to reduce heavy usage of GitHub runners, run the following commands in your terminal to test:
24+
25+
| Test category | With [Node] | Manually |
26+
| --- | --- | --- |
27+
| SPM integration | Run `npm run test` | Run `swift test` |
28+
| [CocoaPods] integration (Requires Xcode) | Run `npm run pod-lint` | Run `pod lib lint --no-clean --allow-warnings` |
29+
30+
## Developer's Certificate of Origin 1.1
31+
32+
By making a contribution to this project, I certify that:
33+
34+
<ol type='a'>
35+
<li id='cert-a'>
36+
The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or
37+
</li>
38+
<li id='cert-b'>
39+
The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or
40+
</li>
41+
<li id='cert-c'>
42+
The contribution was provided directly to me by some other person who certified <a href="#cert-a">(a)</a>, <a href="#cert-b">(b)</a> or <a href="#cert-c">(c)</a> and I have not modified it.
43+
</li>
44+
<li id='cert-d'>
45+
I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.
46+
</li>
47+
</ol>
48+
49+
[CocoaPods]: https://cocoapods.org/
50+
[Node]: https://nodejs.org/

README.md

Lines changed: 141 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,142 @@
11
# ValidatableKit
2-
Composable data validation API in Swift.
2+
3+
[![API Docs](http://img.shields.io/badge/Read_the-docs-2196f3.svg)](https://swiftylab.github.io/ValidatableKit/documentation/validatablekit/)
4+
[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/ValidatableKit.svg?label=CocoaPods&color=C90005)](https://badge.fury.io/co/ValidatableKit)
5+
[![Swift Package Manager Compatible](https://img.shields.io/github/v/tag/SwiftyLab/ValidatableKit?label=SPM&color=orange)](https://badge.fury.io/gh/SwiftyLab%2FValidatableKit)
6+
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg)](https://github.com/Carthage/Carthage)
7+
[![Swift](https://img.shields.io/badge/Swift-5+-orange)](https://img.shields.io/badge/Swift-5-DE5D43)
8+
[![Platforms](https://img.shields.io/badge/Platforms-all-sucess)](https://img.shields.io/badge/Platforms-all-sucess)
9+
[![CI/CD](https://github.com/SwiftyLab/ValidatableKit/actions/workflows/main.yml/badge.svg?event=push)](https://github.com/SwiftyLab/ValidatableKit/actions/workflows/main.yml)
10+
[![CodeFactor](https://www.codefactor.io/repository/github/swiftylab/ValidatableKit/badge)](https://www.codefactor.io/repository/github/swiftylab/validatablekit)
11+
[![codecov](https://codecov.io/gh/SwiftyLab/ValidatableKit/branch/main/graph/badge.svg?token=YSryFeUvVW)](https://codecov.io/gh/SwiftyLab/ValidatableKit)
12+
13+
Composable data validation API in Swift exposing simple DSL for writing validations.
14+
15+
## Overview
16+
17+
**ValidatableKit** allows validating data by providing ``Validator`` for the type. ``Validator``s can be created by directly providing callback that performs the validation on basic data types and provides ``ValidatorResult``:
18+
19+
```swift
20+
let skip: Validator<Int> = .init { _ in ValidatorResults.Skipped() }
21+
```
22+
23+
Or the library provided DSL can be used to add validations to properties for complex data types:
24+
25+
```swift
26+
struct User: Validatable {
27+
let name: String
28+
let email: String
29+
let age: Int
30+
31+
var validator: Validator<Self> {
32+
return Validator<Self>
33+
.name(!.isEmpty, .alphanumeric)
34+
.email(.isEmail)
35+
}
36+
}
37+
```
38+
39+
## Requirements
40+
41+
| Platform | Minimum Swift Version | Installation | Status |
42+
| --- | --- | --- | --- |
43+
| iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+ | 5.1 | [CocoaPods](#cocoapods), [Carthage](#carthage), [Swift Package Manager](#swift-package-manager), [Manual](#manually) | Fully Tested |
44+
| Linux | 5.1 | [Swift Package Manager](#swift-package-manager) | Fully Tested |
45+
| Windows | 5.3 | [Swift Package Manager](#swift-package-manager) | Fully Tested |
46+
47+
## Installation
48+
49+
### CocoaPods
50+
51+
[CocoaPods](https://cocoapods.org) is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. To integrate `ValidatableKit` into your Xcode project using CocoaPods, specify it in your `Podfile`:
52+
53+
```ruby
54+
pod 'ValidatableKit'
55+
```
56+
57+
Optionally, you can also use the pre-built XCFramework from the GitHub releases page by replacing `{version}` with the required version you want to use:
58+
59+
```ruby
60+
pod 'ValidatableKit', :http => 'https://github.com/SwiftyLab/ValidatableKit/releases/download/v{version}/ValidatableKit-{version}.xcframework.zip'
61+
```
62+
63+
### Carthage
64+
65+
[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. To integrate `ValidatableKit` into your Xcode project using Carthage, specify it in your `Cartfile`:
66+
67+
```ogdl
68+
github "SwiftyLab/ValidatableKit"
69+
```
70+
71+
### Swift Package Manager
72+
73+
The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler.
74+
75+
Once you have your Swift package set up, adding `ValidatableKit` as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`.
76+
77+
```swift
78+
.package(url: "https://github.com/SwiftyLab/ValidatableKit.git", from: "1.0.0"),
79+
```
80+
81+
Optionally, you can also use the pre-built XCFramework from the GitHub releases page by replacing `{version}` and `{checksum}` with the required version and checksum of artifact you want to use:
82+
83+
```swift
84+
.binaryTarget(name: "ValidatableKit", url: "https://github.com/SwiftyLab/ValidatableKit/releases/download/v{version}/ValidatableKit-{version}.xcframework.zip", checksum: "{checksum}"),
85+
```
86+
87+
### Manually
88+
89+
If you prefer not to use any of the aforementioned dependency managers, you can integrate `ValidatableKit` into your project manually.
90+
91+
#### Git Submodule
92+
93+
- Open up Terminal, `cd` into your top-level project directory, and run the following command "if" your project is not initialized as a git repository:
94+
95+
```bash
96+
$ git init
97+
```
98+
99+
- Add `ValidatableKit` as a git [submodule](https://git-scm.com/docs/git-submodule) by running the following command:
100+
101+
```bash
102+
$ git submodule add https://github.com/SwiftyLab/ValidatableKit.git
103+
```
104+
105+
- Open the new `ValidatableKit` folder, and drag the `ValidatableKit.xcodeproj` into the Project Navigator of your application's Xcode project or existing workspace.
106+
107+
> It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter.
108+
109+
- Select the `ValidatableKit.xcodeproj` in the Project Navigator and verify the deployment target satisfies that of your application target (should be less or equal).
110+
- Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the `Targets` heading in the sidebar.
111+
- In the tab bar at the top of that window, open the "General" panel.
112+
- Click on the `+` button under the `Frameworks and Libraries` section.
113+
- You will see `ValidatableKit.xcodeproj` folder with `ValidatableKit.framework` nested inside.
114+
- Select the `ValidatableKit.framework` and that's it!
115+
116+
> The `ValidatableKit.framework` is automagically added as a target dependency, linked framework and embedded framework in build phase which is all you need to build on the simulator and a device.
117+
118+
#### XCFramework
119+
120+
You can also directly download the pre-built artifact from the GitHub releases page:
121+
122+
- Download the artifact from the GitHub releases page of the format `ValidatableKit-{version}.xcframework.zip` where `{version}` is the version you want to use.
123+
- Extract the XCFrameworks from the archive, and drag the `ValidatableKit.xcframework` into the Project Navigator of your application's target folder in your Xcode project.
124+
- Select `Copy items if needed` and that's it!
125+
126+
> The `ValidatableKit.xcframework` is automagically added in the embedded `Frameworks and Libraries` section, an in turn the linked framework in build phase.
127+
128+
## Usage
129+
130+
See the full [documentation](https://swiftylab.github.io/ValidatableKit/documentation/validatablekit/) for API details and articles on sample scenarios.
131+
132+
## Contributing
133+
134+
If you wish to contribute a change, suggest any improvements,
135+
please review our [contribution guide](CONTRIBUTING.md),
136+
check for open [issues](https://github.com/SwiftyLab/ValidatableKit/issues), if it is already being worked upon
137+
or open a [pull request](https://github.com/SwiftyLab/ValidatableKit/pulls).
138+
139+
## License
140+
141+
`ValidatableKit` is released under the MIT license. [See LICENSE](LICENSE) for details.
142+
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# ``ValidatableKit``
2+
3+
Composable data validation API in Swift exposing simple DSL for writing validations.
4+
5+
## Overview
6+
7+
**ValidatableKit** allows validating data by providing ``Validator`` for the type. ``Validator``s can be created by directly providing callback that performs the validation on basic data types and provides ``ValidatorResult``:
8+
9+
```swift
10+
let skip: Validator<Int> = .init { _ in ValidatorResults.Skipped() }
11+
```
12+
13+
Or the library provided DSL can be used to add validations to properties for complex data types:
14+
15+
```swift
16+
struct User: Validatable {
17+
let name: String
18+
let email: String
19+
let age: Int
20+
21+
var validator: Validator<Self> {
22+
return Validator<Self>
23+
.name(!.isEmpty, .alphanumeric)
24+
.email(.isEmail)
25+
}
26+
}
27+
```
28+
29+
## Topics
30+
31+
### Validation DSL
32+
33+
- ``Validatable``
34+
- ``Validator``
35+
- ``Validation``
36+
- ``Validations``
37+
38+
### Validation Result
39+
40+
- ``ValidatorResult``
41+
- ``ValidationError``
42+
- ``ValidatorResults``

0 commit comments

Comments
 (0)