diff --git a/.gitignore b/.gitignore index 31c07a8..d3941ec 100644 --- a/.gitignore +++ b/.gitignore @@ -170,3 +170,5 @@ crashlytics.properties crashlytics-build.properties Examples/Rome/ +TestPackage/.build +.build/ diff --git a/Makefile b/Makefile index 6298004..f2caf19 100644 --- a/Makefile +++ b/Makefile @@ -23,3 +23,11 @@ build_help: test: cd SwiftlineTests; xctool -project Swiftline.xcodeproj -scheme Swiftline clean build test -sdk macosx GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES + +test-spm: + cd TestPackage && rm -rf .build + cd TestPackage && swift build + +build-spm: + rm -rf .build + swift build diff --git a/Readme.md b/Readme.md index c939664..d3c23f7 100644 --- a/Readme.md +++ b/Readme.md @@ -2,30 +2,30 @@

-[![Build Status](https://travis-ci.org/Swiftline/Swiftline.svg?branch=master)](https://travis-ci.org/Swiftline/Swiftline) -[![Platform](https://img.shields.io/badge/platform-osx-lightgrey.svg)](https://travis-ci.org/Swiftline/Swiftline) -[![Language: Swift](https://img.shields.io/badge/language-swift-orange.svg)](https://travis-ci.org/Swiftline/Swiftline) -[![CocoaPods](https://img.shields.io/cocoapods/v/Swiftline.svg)](https://cocoapods.org/pods/Swiftline) -[![Carthage](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) -[![GITTER: join chat](https://img.shields.io/badge/GITTER-join%20chat-00D06F.svg)](https://gitter.im/Swiftline?utm_source=share-link&utm_medium=link&utm_campaign=share-link) -[![GITTER: join chat](https://img.shields.io/badge/license-MIT-000000.svg)](https://github.com/Swiftline/Swiftline/blob/oarrabi/adding-env-and-args/LICENCE) -
-Swiftline is a set of tools to help you create command line applications. Swiftline is inspired by [highline](https://github.com/JEG2/highline) +[![Build Status](https://travis-ci.org/Swiftline/Swiftline.svg?branch=master)](https://travis-ci.org/Swiftline/Swiftline) +[![Platform](https://img.shields.io/badge/platform-osx-lightgrey.svg)](https://travis-ci.org/Swiftline/Swiftline) +[![Language: Swift](https://img.shields.io/badge/language-swift-orange.svg)](https://travis-ci.org/Swiftline/Swiftline) +[![CocoaPods](https://img.shields.io/cocoapods/v/Swiftline.svg)](https://cocoapods.org/pods/Swiftline) +[![Carthage](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +[![GITTER: join chat](https://img.shields.io/badge/GITTER-join%20chat-00D06F.svg)](https://gitter.im/Swiftline?utm_source=share-link&utm_medium=link&utm_campaign=share-link) +[![GITTER: join chat](https://img.shields.io/badge/license-MIT-000000.svg)](https://github.com/Swiftline/Swiftline/blob/oarrabi/adding-env-and-args/LICENCE) +
+Swiftline is a set of tools to help you create command line applications. Swiftline is inspired by [highline](https://github.com/JEG2/highline)
Swiftline contains the following: - Colorize: Helps adding colors to strings written to the terminal - Ask , Choose and agree: Easily create prompt for asking the user more info -- Run: A quick way to run an external command and read its standard output and standard error. +- Run: A quick way to run an external command and read its standard output and standard error. - Env: Read and write environment variables [ruby-flavored](http://ruby-doc.org/core-2.2.0/ENV.html) - Args: Parses command line arguments and return a hash of the passed flags ## Contents -[Usage](#usage) -[Installation](#installation) -[Examples](#examples) -[Docs](http://swiftline.github.io/docs/index.html) -[Tests](#tests) +[Usage](#usage) +[Installation](#installation) +[Examples](#examples) +[Docs](http://swiftline.github.io/docs/index.html) +[Tests](#tests) ## Usage @@ -75,7 +75,7 @@ Ask can be used to ask for value of Int, Double or Float types, to ask for an in let age = ask("How old are you?", type: Int.self) ``` If the user prints something thats not convertible to integer, a new prompt is displayed to him, this prompt will keep displaying until the user enters an Int: - + How old are you? None You must enter a valid Integer. @@ -138,7 +138,7 @@ This will print: Whats your favorite programming language? The user can either choose the numbers (1..5) or the item itself. If the user enters a wrong input. A prompt will keep showing until the user makes a correct choice - + Whats your favorite programming language? JavaScript You must choose one of [1, 2, 3, 4, 5, Swift, Objective C, Ruby, Python, Java :S]. ? BBB @@ -161,11 +161,11 @@ The number on the left can be changed to letters, here is how you could do that: ```siwft let choice = choose("Whats your favorite programming language? ", type: String.self) { settings in //choice value will be set to GOOD - settings.addChoice("Swift") { "GOOD" } + settings.addChoice("Swift") { "GOOD" } //choice value will be set to BAD settings.addChoice("Java") { "BAD" } - + settings.index = .Letters settings.indexSuffix = " ----> " } @@ -191,7 +191,7 @@ If the user enters any invalid input, agree will keep prompting him for a Yes/No Are you sure you want to `rm -rf /` ? Wait Please enter "yes" or "no". Are you sure you want to `rm -rf /` ? No - + You entered false ## Run 🏃 @@ -232,9 +232,9 @@ To customize the run function, you can pass in a customization block: - `EchoSettings.Stdout`: The stdout returned from running the command will be printed to the terminal - `EchoSettings.Stderr`: The stderr returned from running the command will be printed to the terminal - `EchoSettings.Command`: The command executed will be printed to the terminal -- `settings.interactive`: defaults to false. If set to true the command will be executed using `system` kernel function and only the exit status will be captured. If set to false, the command will be executed using `NSTask` and both stdout and stderr will be captured. -Set `interactive` to true if you expect the launched command to ask input from the user through the stdin. - +- `settings.interactive`: defaults to false. If set to true the command will be executed using `system` kernel function and only the exit status will be captured. If set to false, the command will be executed using `NSTask` and both stdout and stderr will be captured. +Set `interactive` to true if you expect the launched command to ask input from the user through the stdin. + `runWithoutCapture("command")` is a quick way to run a command in interactive mode. The return value is the exit code of that command. ## Env @@ -259,15 +259,15 @@ Returns the arguments passed to the script. For example when calling `script -f1 `Args.all ` returns an array of all the raw arguments, in this example it will be `["-f1", "val1", "-f2", "val2", "--", "val3", "val4"` -`Args.parsed ` returns a structure that contains a parsed map of arguments and an array of arguments, for this example: +`Args.parsed ` returns a structure that contains a parsed map of arguments and an array of arguments, for this example: -`Args.parsed.parameters` returns `["val3", "val4"]` +`Args.parsed.parameters` returns `["val3", "val4"]` `Args.parsed.flags` returns a dictinary of flags `["f1": "val1", "f2", "val2"]` ## Installation -You can install Swiftline using cocoapods, +You can install Swiftline using cocoapods, carthage and Swift package manager ### Cocoapods use_frameworks! @@ -276,6 +276,19 @@ You can install Swiftline using cocoapods, ### Carthage github 'swiftline/swiftline' +### Swift Package Manager +Add swiftline as dependency in your `Package.swift` + +``` + import PackageDescription + + let package = Package(name: "YourPackage", + dependencies: [ + .Package(url: "https://github.com/Swiftline/Swiftline.git", majorVersion: 0, minor: 3), + ] + ) +``` + ### Cocoapods + Rome plugin If you want to use swiftline in a script you can use [Rome](https://github.com/neonichu/Rome) cocoapod plugin. This plugin builds the framework from the pod file and place them in a Rome directory. @@ -284,7 +297,7 @@ If you want to use swiftline in a script you can use [Rome](https://github.com/n pod 'Swiftline' -### Manual +### Manual To install Swiftline manually, add `Pod/Swiftline` directory to your project. ## Examples @@ -304,5 +317,5 @@ Documentation can be found [here](http://swiftline.github.io/docs/index.html) - Better documentation ## Credits -Daniel Beere for creating the logo [@DanielBeere](https://twitter.com/DanielBeere) check out [danielbeere on dribble](https://dribbble.com/danielbeere) +Daniel Beere for creating the logo [@DanielBeere](https://twitter.com/DanielBeere) check out [danielbeere on dribble](https://dribbble.com/danielbeere) Omar Abdelhafith current project maintainer [@ifnottrue](https://twitter.com/ifnottrue) diff --git a/TestPackage/Package.swift b/TestPackage/Package.swift new file mode 100644 index 0000000..9b3996f --- /dev/null +++ b/TestPackage/Package.swift @@ -0,0 +1,7 @@ +import PackageDescription + +let package = Package(name: "TestPackage", + dependencies: [ + .Package(url: "../", majorVersion: 0, minor: 3), + ] +) diff --git a/TestPackage/Source/main.swift b/TestPackage/Source/main.swift new file mode 100644 index 0000000..38c09e0 --- /dev/null +++ b/TestPackage/Source/main.swift @@ -0,0 +1,9 @@ +import Swiftline + +let res = ask("How are you doing?") + +if res == "Good" { + print("Cool!") +} else { + print("Oh, bad!") +}