Create clickable links in the terminal
Terminal utils for NodeJS
A custom render for marked to output to the Terminal
ANSI escape codes for manipulating the terminal
User interface primitives for console applications
Detect whether a terminal supports hyperlinks
Detect whether a terminal supports color
Detect whether the terminal supports Unicode
Reliably get the terminal window size (columns & rows)
Better terminal and file output for cypress test logs.
QRCodes, in the terminal
Routers to help build custom navigators
256 colors, keys and mouse, input field, progress bars, screen buffer (including 32-bit composition and image loading), text buffer, and many more... Whether you just need colors and styles, build a simple interactive command line tool or a complexe termi
Unicode symbols with fallbacks for older terminals
Check if stdout or stderr is interactive
An addon for [xterm.js](https://github.com/xtermjs/xterm.js) that enables fitting the terminal's dimensions to a containing element. This addon requires xterm.js v4+.
Node cli table
This library provides terminal links for terminals that support them.
Full xterm terminal, in your browser
Easily add ANSI colors to your text and symbols in the terminal. A faster drop-in replacement for chalk, kleur and turbocolor (without the dependencies and rendering bugs).
Plugin for markdown-it to parse and output markdown formatted for the terminal
An addon for [xterm.js](https://github.com/xtermjs/xterm.js) that enables web links. This addon requires xterm.js v4+.
An addon for [xterm.js](https://github.com/xtermjs/xterm.js) that enables a WebGL2-based renderer. This addon requires xterm.js v4+.
Stripe Terminal loading utility
I've followed an example instructions found in http://guides.rubygems.org/ to make my own gem. But then I've added a customized terminal-friendly command named 'hi', so you can interact with this gem from the terminal. It's very simple, but it's the ground for other terminal-friendly gems that could do some useful work.
Win32::Console allows controling the windows command line terminal thru an OO-interface. This allows you to query the terminal (find its size, characters, attributes, etc). The interface and functionality should be identical to Perl's counterpart. A port of Perl's Win32::Console and Win32::Console::ANSI modules. This gem packages Gonzalo Garramuno's Win32::Console project, and includes a compiled binary for speed. The Win32::Console project's home can be found at: http://rubyforge.org/projects/win32console
Simple ruby based CLI application to pull a surf report for Rockaway Beach, Queens, NY
Parasite is currently at version 0.2. The Parasite package is composed of two gems: parasite and the camping_generator. The first provides a way to hook into the Rails development environment, while the second provides a generator for creating Camping apps quickly and painlessly. *** Installation To install parasite and the camping_generator fire up a terminal and: $ sudo gem install parasite parasite will require the camping_generator, along with Rails and Camping. More details on installing those packages can be found at their project pages.
go (to project) do (stuffs) godo provides a smart way of opening a project folder in multiple terminal tabs and, in each tab, invoking a commands appropriate to that project. For example if the folder contains a Rails project the actions might include: starting mongrel, tailing one or more logs, starting consoles or IRB sessions, tailing production logs, opening an editor, running autospec, or gitk. godo works by searching your project paths for a given search string and trying to match it against paths found in one or more configured project roots. It will make some straightforward efforts to disambiguate among multiple matches to find the one you want. godo then uses configurable heuristics to figure out what type of project it is, for example "a RoR project using RSpec and Subversion". From that it will invokes a series of action appropriate to the type of project detected with each action being run, from the project folder, in its own terminal session. godo is entirely configured by a YAML file (~/.godo) that contains project types, heuristics, actions, project paths, and a session controller. A sample configuration file is provided that can be installed using godo --install. godo comes with an iTerm session controller for MacOSX that uses the rb-appscript gem to control iTerm (see lib/session.rb and lib/sessions/iterm_session.rb). It should be relatively straightforward to add new controller (e.g. for Leopard Terminal.app), or a controller that works in a different way (e.g. by creating new windows instead of new tabs). There is nothing MacOSX specific about the rest of godo so creating controllers for other unixen should be straightforward if they can be controlled from ruby. godo is a rewrite of my original 'gp' script (http://matt.blogs.it/entries/00002674.html) which fixes a number of the deficiencies of that script, turns it into a gem, has a better name, and steals the idea of using heuristics to detect project types from Solomon White's gp variant (http://onrails.org/articles/2007/11/28/scripting-the-leopard-terminal). godo now includes contributions from Lee Marlow <lee.marlow@gmail.com> including support for project level .godo files to override the global configuration, support for Terminal.app, and maximum depth support to speed up the finder. godo lives at the excellent GitHub: http://github.com/mmower/godo/ and accepts patches and forks.
## Studio Game Demo App I made this app following along with The Pragmatic Studio's Ruby course found here: https://pragmaticstudio.com/courses/ruby. ## Install the gem I published the gem for this app on RubyGems.org. In order to install it, run `gem install studio_game_dylan_attal-1.0.0.gem` ## Run the app In order to run the app run the following command `studio_game` ## Summary This is a console app that simulates a game. Players are loaded from the `players.csv` file be default. Each player has a name and a starting health value, i.e.: `Larry,100` If the user wants, they can provide a different CSV file to load the players. For example, I've provided a file `my_favorite_players.csv` as an alternate list of players. The user should provide the file like so `studio_game bin/my_favorite_players.csv` Before the game is played, the user gets to decide how many rounds to play. At this point, the user can also terminate the program by typing in `quit` or `exit`: `How many game rounds? ('quit to exit')` Once the user provides the number of rounds, the game is played automatically. The user then sees 1. Which players are involved ``` There are 5 players in Knuckleheads: I'm Boba with a health = 100, points = 0, and score = 100. I'm Jango with a health = 90, points = 0, and score = 90. I'm Din with a health = 80, points = 0, and score = 80. I'm Klutz with a health = 105, points = 0, and score = 105. I'm Berserker with a health = 50, points = 0, and score = 50. ``` 2. Which treasures there are to find ``` There are 6 treasures to be found: A pie is worth 5 A bottle is worth 25 A hammer is worth 50 A skillet is worth 100 A broomstick is worth 200 A crowbar is worth 400 ``` 3. The results of each round ``` Round 1 Rolled a 3 (StudioGame::Die) Rolled a 4 (StudioGame::Die) Boba has been skipped Boba found a skillet worth 100 points. Boba's treasures: {:skillet=>100} I'm Boba with a health = 100, points = 100, and score = 200. Rolled a 3 (StudioGame::Die) Rolled a 2 (StudioGame::Die) Jango got blammed! Jango found a bottle worth 25 points. Jango's treasures: {:bottle=>25} I'm Jango with a health = 80, points = 25, and score = 105. Rolled a 1 (StudioGame::Die) Rolled a 6 (StudioGame::Die) Din got w00ted! Din found a crowbar worth 400 points. Din's treasures: {:crowbar=>400} I'm Din with a health = 95, points = 400, and score = 495. Rolled a 1 (StudioGame::Die) Rolled a 4 (StudioGame::Die) Klutz has been skipped Klutz found a bottle worth 12.5 points. Klutz's treasures: {:bottle=>12.5} I'm Klutz with a health = 105, points = 12.5, and score = 117.5. Rolled a 1 (StudioGame::Die) Rolled a 4 (StudioGame::Die) Berserker has been skipped Berserker found a hammer worth 50 points. Berserker's treasures: {:hammer=>50} I'm Berserker with a health = 50, points = 50, and score = 100. ``` Once the user quits, they see the final results of all the rounds: ``` How many game rounds? ('quit to exit') quit Knuckleheads Statistics: 2 strong players: Boba (115) Klutz (120) 3 wimpy players: Jango (85) Din (75) Berserker (40) Berserker........... 690 Boba................ 620 Din................. 575 Jango............... 235 Klutz............... 207.5 Boba's point totals: 100 total skillet points 5 total pie points 400 total crowbar points 505 grand total points Jango's point totals: 50 total bottle points 100 total skillet points 150 grand total points Din's point totals: 400 total crowbar points 100 total hammer points 500 grand total points Klutz's point totals: 12.5 total bottle points 25.0 total hammer points 50.0 total skillet points 87.5 grand total points Berserker's point totals: 50 total hammer points 200 total broomstick points 400 total crowbar points 650 grand total points ``` ## Rules of the game Each round, each player rolls the die. If a player rolls between 1 and 2, then they are `blammed`, meaning they lose `10 health`. If a player rolls between 3 and 4, then they are `skipped`, meaning they do not gain or lose points that turn. If a player rolls between 5 and 6, then they are `w00ted`, meaning they gain `15 health`. Each round, players can find treasure worth different points. Treasures are found randomly. Every game, there are two special players added: 1. `ClumsyPlayer`: this player's treasure points are cut in half. 2. `BerserkPlayer`: once this player is `w00ted` five times, it cannot be `blammed` in that game anymore—if this player rolls between 1 and 2, they are `w00ted` instead of `blammed`.
# SecureDataBag / Knife Secure Bag Knife Secure Bag provides a consistent interface to DataBagItem, EncryptedDataBagItem as well as the custom created SecureDataBagItem while also providing a few extra handy features to help in your DataBag workflows. SecureDataBagItem, can not only manage your existing DataBagItems and EncryptedDataBagItems, but it also provides you with a DataBag type which enables you to selectively encrypt only some of the fields in your DataBag thus allowing you to be able to search for the remaining fields. ## Installation To build and install the plugin add it your Gemfile or run: ```shell gem install secure_data_bag ``` ## Configuration #### Knife Secure Bag Defaults for the Knife command may be provided in your _knife.rb_ file. ```ruby knife[:secure_data_bag][:encrypted_keys] = %w( password ssh_keys ssh_ids public_keys private_keys keys secret ) knife[:secure_data_bag][:secret_file] = "#{local_dir}/secret.pem" knife[:secure_data_bag][:export_root] = "#{kitchen_dir}/data_bags" knife[:secure_data_bag][:export_on_upload] = true knife[:secure_data_bag][:defaults][:secrets][:export_format] = 'plain' ``` To break this up: `knife[:secure_data_bag][:encrypted_keys] = []` When Knife Secure Bag encrypts a hash with an _encryption format_ of *nested*, it will recursively walk through the hash from the bottom up and encrypt any key found within this array. `knife[:secure_data_bag][:secret_file]` When encryption is required, the shared secret found at this location will be loaded. `knife[:secure_data_bag][:export_root]` When exporting a data\_bag\_item, files will be created in below this root directory. Typically this would be the data\_bag folder located within your kitchen. `knife[:secure_data_bag][:export_on_upload]` When a data\_bag\_item is edited using `knife secure bag edit`, it may be automatically exported to the _export\_root_. `knife[:secure_data_bag][:defaults][:secrets][:export_format]` The configuration file additionally supports the _defaults_ hash which provides default values for all _command line arguments_ that one might use. Of all of them only the _export\_format_ key is likely to be of much use. ## Examples #### Chef cookbook recipe ```ruby metadata = {} # Define the keys we wish to encrypt metadata[:encrypted_keys] = %w(encoded) # Optionally load a specific shared secret. Otherwise, the global # encrypted\_data\_bag\_secret will be automatically used. secret_key = SecureDataBagItem.load_key("/path/to/secret") # Create a hash of data to use as an exampe raw_data = { id: "item", data_bag: "data_bag", encoded: "my string", unencoded: "other string" } # Instantiate a SecureDataBagItem from a hash item = SecureDataBagItem.from_hash(data, metadata) # Or more explicitely item = SecureDataBagItem.from_hash(data, encrypted_keys: %w(encoded)) # Or load from server item = SecureDataBagItem.load("data_bag", "item") # Print the un-encrypted raw data pp item.raw_data # Print the un-encrypted `encoded` key pp item['encoded'] # Print the encrypted hash as a data_bag_item hash pp item.to_hash =begin { id: "item", data_bag: "data_bag", encoded: { encrypted_data: "encoded", cipher: aes-256-cbc, iv: 13453453dkgfefg== version: 1 } unencoded: "other string", } =end ``` ## Usage #### Knife commands Print an DataBagItem, EncryptedDataBagItem or SecureDataBagItem, auto-detecting the encryption method used as plain text. ```shell knife secure bag show -F js secrets secret_item ``` Print an DataBagItem, EncryptedDataBagItem or SecureDataBagItem, auto-detecting the encryption method used as a SecureDataBagItem in encrypted format. ```shell knife secure bag show -F js secrets secret_item --enc-format nested ``` Edit an EncryptedDataBagItem, preserve it's encryption type, and export a copy to the _data\_bag_ folder in your kitchen. ```shell knife secure bag edit secrets secret_item --export ``` ## Knife SubCommands Most of the SubCommands support the following command-line options: `--enc-format [plain,encrypted,nested]` Ensure that, when displaying or uploading the data\_bag\_item, we forcibly encrypt the data\_bag\_item using the specified format instead of preserving the existing format. In this case: - plain: refers to a DataBagItem - encrypted: refers to an EnrytpedDataBagItem - nested: refers to a SecureDataBagItem `--dec-format [plain,encrypted,nested]` Attempt to decrypt the data\_bag\_item using the given format rather than the auto-detected one. The only real reason to use this is when you wish to specifically select _plain_ as the format so as to not decrypt the item. `--enc-keys key1,key2,key3` Provide a comma delimited list of hash keys which should be encrypted when encrypting the data\_bag\_item. This list will be concatenated with any key names listed in the configuration file or which were previously encrypted. `--export` Export the data\_bag\_item to json file in either of _export-format_ or _enc-format_. `--export-format` Overrides the encryption format only for the _export_ feature. `--export-root` Root directly under which a folder should exist for each _data_bag_ into which to export _data_bag_items_ as json files. When displaying the content of the _data\_bag\_item_, an additional key of *_secure_metadata* will be added to the output which contains gem specific metadata such as the encryption formats and any encrypted keys found. This key will _not_ be saved with the item, however it may be manipulated to alter the behavior of the _edit_ or _export_ commands. #### knife secure bag show DATA_BAG ITEM This command functions just like `knife data bag show` and is used to print out the content of either a DataBagItem, EncryptedDataBagItem or SecureDataBagItem. By default, it will auto-detect the Item type, and print it's unencrypted version to the terminal. This behavior, however, may be altered using the previously mentioned command line options. #### knife secure bag open PATH This commands functions much like `knife secure bag show`, however it is designed to load a _data\_bag\_item_ from disk as opposed to loading it from Chef server. This may be of use when view the content of an exported encrypted file. #### knife secure bag edit DATA_BAG DATA_BAG_ITEM This command functions just like `knife data bag edit` and is used to edit either a DataBagItem, EncryptedDataBagItem or a SecureDataBagItem. It supports all of the same options as `knife secure bag show`. #### knife secure bag from file DATA_BAG PATH This command functions just like `knife data bag from file` and is used to upload either a DataBagItem, EncryptedDataBagItem or a SecureDataBagItem. It supports all of the same options as `knife secure bag show`. ## Recipe DSL The gem additionally provides a few Recipe DSL methods which may be useful. ```ruby load_secure_item = secure_data_bag_item( data_bag_name, data_bag_item, cache: false ) load_plain_item = data_bag_item(data_bag_name, data_bag_item) convert_plain_to_secure = secure_data_bag_item!(load_plain_item) ```
No description provided.
No description provided.