madCLIbs 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0c3ce55fec8d9b38d33c8eb9d4d716281c1b6bc2
4
+ data.tar.gz: 75dfe916d9f51d70a2c521aff89c1360772422ac
5
+ SHA512:
6
+ metadata.gz: ae10344a49778297444e83391b9e681e0d95e1dd2eb37efcb0b2c016c01bceaa1bb1313716b8fae0649736051e8c0a49b8f975e67eff65fdd19106253e10f4cf
7
+ data.tar.gz: 476a18157930971186915a5c57a548adb4d21740c89bfaeaa2509375e6148d0f3425864a8fc2d88b3786deb93e081b308cc3e5d9478de283d66b273f5a0909e5
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'pry'
5
+ gem 'pry-byebug'
6
+ end
7
+
8
+ # Specify your gem's dependencies in madCLIbs.gemspec
9
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,26 @@
1
+ Except where indicated in header comments, this work is
2
+
3
+ Copyright (c) 2015 Donald Guy
4
+
5
+ and licensed under the terms of the
6
+
7
+ MIT License
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining
10
+ a copy of this software and associated documentation files (the
11
+ "Software"), to deal in the Software without restriction, including
12
+ without limitation the rights to use, copy, modify, merge, publish,
13
+ distribute, sublicense, and/or sell copies of the Software, and to
14
+ permit persons to whom the Software is furnished to do so, subject to
15
+ the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be
18
+ included in all copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # MadCLI</tt>bs:<br> User-Friendly Fill-in-the-Blank(s) UX for your Terminal Application
2
+
3
+ Seeks to mimic the familiar UX of HTML5 form elements, with
4
+ [placeholders](http://diveintohtml5.info/forms.html#placeholder),
5
+ in the terminal.
6
+
7
+ Allows a program to present a line with one or more "blanks" which can be edited and moved between
8
+ at will (with tab or up & down arrow keys). On new line, returns the values of the blanks (treating
9
+ placeholders as a default values)
10
+
11
+ The name is supposed to be Mad Libs with a CLI in it, but you might also
12
+ reasonably call it "Mad CLI BS" :smile:
13
+
14
+ You could, in fact, use it to make a sweet Mad Libs app, but its also
15
+ pretty useful for things like [Dramaturg](https://github.com/donaldguy/dramaturg)
16
+ (for which it was created)
17
+
18
+ ## Usage
19
+
20
+ See [examples](https://github.com/donaldguy/madCLIbs/tree/master/examples)
21
+
22
+ ## Contributing
23
+
24
+ 1. Fork it ( https://github.com/donaldguy/madCLIbs/fork )
25
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
26
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
27
+ 4. Push to the branch (`git push origin my-new-feature`)
28
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/examples/basic.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'madCLIbs/import'
2
+
3
+
4
+ name, food = prompt("My name is", string(ENV['USER']), "and I like", string("chicken") )
5
+
6
+ puts "Your name is #{name} and you like #{food}"
@@ -0,0 +1,17 @@
1
+ require 'madCLIbs/import'
2
+ require 'term/ansicolor'
3
+
4
+ include Term::ANSIColor
5
+
6
+ prompt(red("Tokens"), string("are"), red("styled"), string(green(bold("individually"))))
7
+
8
+ prompt("Placeholders can have", cyan(string("the same style as a typed value")))
9
+
10
+ prompt("Or a", red(string(cyan("different one"))))
11
+ prompt(green("Including"), red(string(reset("none"))))
12
+
13
+ prompt(bold, "You can also used unscoped colors", red,
14
+ string(cyan("but")), "they leak til next reset", reset )
15
+
16
+ #you cannot/should not try to wrap multiple tokens in a scope tho
17
+ # none of this: prompt( bold("Question":, string("answer") ) )
@@ -0,0 +1,13 @@
1
+ require 'madCLIbs'
2
+ require 'term/ansicolor'
3
+
4
+ $cli = MadCLIbs.new
5
+ $color = Term::ANSIColor
6
+
7
+ s1, s2 = $cli.prompt($color.bold,
8
+ "Should also work without",
9
+ $color.cyan($cli.string("polluting too many")),
10
+ $color.red($cli.string("namespaces")),
11
+ $color.reset)
12
+
13
+ puts "Field values s1=#{s1}, s2=#{s2}"
@@ -0,0 +1,10 @@
1
+ require 'forwardable'
2
+ require_relative '../madCLIbs'
3
+
4
+ $MADCLIBS = MadCLIbs.new()
5
+
6
+ module Kernel
7
+ extend Forwardable
8
+
9
+ def_delegators :$MADCLIBS, :prompt, :string
10
+ end
data/lib/madCLIbs.rb ADDED
@@ -0,0 +1,3 @@
1
+ require_relative 'mad_clibs'
2
+
3
+ MadCLIbs = MadClibs
@@ -0,0 +1,43 @@
1
+ require_relative 'mixins/color_handling'
2
+ require_relative 'mixins/default_key_handling'
3
+
4
+ class MadClibs
5
+ module Blanks
6
+ class Base
7
+
8
+ attr_reader :start_value, :completions
9
+ attr_accessor :value, :position
10
+ def length; self.value.length; end
11
+ def empty?; self.value.length <= 0; end
12
+
13
+ def render
14
+ raise NotImplementedEror, "render called on abstract superclass D:"
15
+ end
16
+
17
+ def post_render
18
+ true # no-op
19
+ end
20
+
21
+ def valid?
22
+ raise NotImplementedEror, "valid? called on abstract superclass D:"
23
+ end
24
+
25
+ def placeholder_showing?
26
+ @placeholder_showing = true unless defined? @placeholder_showing
27
+ @placeholder_showing
28
+ end
29
+
30
+ def key(key)
31
+ if placeholder_showing?
32
+ default_key_placeholder_showing(key)
33
+ else #no placeholder showing
34
+ default_key_no_placeholder(key)
35
+ end
36
+ end
37
+
38
+ protected
39
+ include Mixins::ColorHandling
40
+ include Mixins::DefaultKeyHandling
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,50 @@
1
+ require 'term/ansicolor'
2
+
3
+ module Term::ANSIColor
4
+ alias old_color color
5
+ def color(name, string = nil, &block)
6
+ if string.respond_to? :save_and_remove_color
7
+ string.send :save_and_remove_color, old_color(name, string.value)
8
+ string
9
+ else
10
+ old_color(name, string, &block)
11
+ end
12
+ end
13
+ end
14
+
15
+ class MadClibs
16
+ module Blanks::Mixins
17
+ module ColorHandling
18
+ include Term::ANSIColor
19
+
20
+ def save_and_remove_start_color(s)
21
+ @colored_placeholder = s
22
+ stripped = uncolor(s)
23
+
24
+ @placeholder_inherits_style = (@colored_placeholder == stripped)
25
+ stripped
26
+ end
27
+
28
+ def save_and_remove_color(s)
29
+ colored = s
30
+ uncolored = uncolor(s)
31
+ @color_seed = colored.sub(%r'#{uncolored}', '%{value}')
32
+ uncolored
33
+ end
34
+
35
+ def restore_color(v)
36
+ if placeholder_showing? and !@placeholder_inherits_style
37
+ @colored_placeholder
38
+ elsif @color_seed
39
+ @color_seed % {value: v}
40
+ else
41
+ value
42
+ end
43
+ end
44
+
45
+ def to_str
46
+ value
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,35 @@
1
+ class MadClibs
2
+ module Blanks::Mixins::DefaultKeyHandling
3
+ def default_key_placeholder_showing(key)
4
+ case key
5
+ when"backspace"
6
+ #toggle visible display of value; leave behavior the same
7
+ #whether placeholder visible or not
8
+ if self.value == start_value
9
+ self.value = ""
10
+ else
11
+ self.value = start_value
12
+ end
13
+ when "left", "right"
14
+ #ignore it
15
+ else # normal character -> start writing in
16
+ self.value = ""
17
+ value_key(key)
18
+ @placeholder_showing = false
19
+ end
20
+ end
21
+
22
+ def default_key_no_placeholder(key)
23
+ case key
24
+ when"backspace"
25
+ value_key(key)
26
+ if self.value.empty?
27
+ self.value = start_value
28
+ @placeholder_showing = true
29
+ end
30
+ else
31
+ value_key(key)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,34 @@
1
+ require_relative '../../util/value_buffer'
2
+
3
+ class MadClibs
4
+ module Blanks::Mixins::ValueBufferDelegate
5
+ def value
6
+ @valuebuff ||= ValueBuffer.new(save_and_remove_start_color(start_value))
7
+ @valuebuff.value
8
+ end
9
+
10
+ def value=(v)
11
+ @valuebuff ||= ValueBuffer.new(save_and_remove_color(v))
12
+ @valuebuff.value = v
13
+ end
14
+
15
+ def value_key(key)
16
+ case key
17
+ when "backspace"
18
+ @valuebuff.backspace
19
+ when "left"
20
+ @valuebuff.left
21
+ when "right"
22
+ @valuebuff.right
23
+ when /[\w\s]/
24
+ @valuebuff << key
25
+ else
26
+ raise ArgumentError, "No handler for key '#{key}' (while focused on this blank)"
27
+ end
28
+ end
29
+
30
+ def position
31
+ @valuebuff.position > 0 ? @valuebuff.position : 0
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,23 @@
1
+ require_relative 'base'
2
+ require_relative 'mixins/value_buffer_delegate'
3
+
4
+ class MadClibs
5
+ module Blanks
6
+ class String < Base
7
+ include Mixins::ValueBufferDelegate
8
+
9
+ def initialize(s)
10
+ @start_value = s.to_s
11
+ @completions = nil
12
+ end
13
+
14
+ def render
15
+ restore_color(value)
16
+ end
17
+
18
+ def valid?
19
+ !empty?
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ module MadClibs::Blanks
2
+ autoload :String, 'mad_clibs/blanks/string'
3
+ end
@@ -0,0 +1,66 @@
1
+ require 'term/ansicolor'
2
+
3
+ class MadCLIbs
4
+ class Line
5
+ def initialize(*tokens)
6
+ @tokens = []
7
+ @blanks = []
8
+
9
+ tokens.each { |t| self << t }
10
+ squash_colors
11
+ end
12
+
13
+ def <<(token)
14
+ @tokens << token
15
+ if token_is_blank? token
16
+ @blanks << token
17
+ end
18
+
19
+ self
20
+ end
21
+
22
+ def values
23
+ values = @blanks.map &:value
24
+ values.length <= 1? values.first : values
25
+ end
26
+
27
+ def token_is_blank?(token)
28
+ token.respond_to?(:value) && token.respond_to?(:value=)
29
+ end
30
+
31
+ # Add bare color tokens to the end (or failing that beginning)
32
+ # of adjacent strings; fixes spacing when using bare colors
33
+ def squash_colors
34
+ types = @tokens.map do |t|
35
+ if token_is_blank? t
36
+ :blank
37
+ elsif Term::ANSIColor.uncolored(t).empty?
38
+ :color
39
+ else
40
+ :string
41
+ end
42
+ end
43
+
44
+ @tokens.size.times do |i|
45
+ case types[i]
46
+ when :color
47
+ if i != 0 and types[i-1] == :string
48
+ @tokens[i-1] = @tokens[i-1] + @tokens[i]
49
+ @tokens[i] = nil
50
+ i += 1
51
+ elsif i == @tokens.size - 1
52
+ # its fine by itself.
53
+ elsif types[i+1] == :string
54
+ @tokens[i+1] = @tokens[i] + @tokens[i+1]
55
+ @tokens[i] = nil
56
+ i += 1
57
+ end
58
+ else
59
+ #nothing
60
+ end
61
+ end
62
+
63
+ @tokens = @tokens.reject { |t| t.nil? }
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,105 @@
1
+ require_relative 'util/iohelper'
2
+ require 'stringio'
3
+ require 'term/ansicolor'
4
+
5
+ class MadClibs
6
+ class Prompter
7
+ def initialize
8
+ @io = IOHelper
9
+ reinit
10
+ end
11
+
12
+ def prompt(line)
13
+ reinit
14
+ @tokens = line.instance_variable_get(:@tokens)
15
+ @blanks = line.instance_variable_get(:@blanks)
16
+ @current_blank_index = 0
17
+
18
+ until done?
19
+ render
20
+ place_cursor
21
+ getc
22
+ end
23
+
24
+ post_render
25
+ end
26
+
27
+ private
28
+ def reinit
29
+ @last_char = nil
30
+ @tokens = nil
31
+ @blanks = nil
32
+ @active_blank = nil
33
+ end
34
+
35
+ def done?
36
+ @last_char == 'return'
37
+ end
38
+
39
+ def render
40
+ buffer = StringIO.new
41
+
42
+ @tokens.each do |token|
43
+ if token.respond_to? :render
44
+ buffer.print token.render
45
+ elsif token.respond_to? :to_s
46
+ buffer.print token
47
+ end
48
+
49
+ buffer.print " "
50
+ end
51
+
52
+ @io.rerender buffer.string
53
+ end
54
+
55
+ def getc
56
+ @last_char = @io.read_key
57
+ case @last_char
58
+ when "up"
59
+ previous_blank!
60
+ when "tab", "down"
61
+ #if @active_blank.has_completions?
62
+ #end
63
+ next_blank!
64
+ when "return", "linefeed"
65
+ @last_char = "return"
66
+ else
67
+ active_blank.key(@last_char)
68
+ end
69
+ end
70
+
71
+ def place_cursor
72
+ print @io.carriage_return
73
+
74
+ @tokens.each do |t|
75
+ if t == active_blank
76
+ print @io.char_right*t.position
77
+ break
78
+ end
79
+ print @io.char_right*(Term::ANSIColor.uncolored(t).length+1) # + 1 for space
80
+ end
81
+ end
82
+
83
+ def post_render
84
+ @tokens.each do |token|
85
+ token.post_render if token.respond_to? :post_render
86
+ end
87
+ render
88
+ puts ""
89
+ end
90
+
91
+ def next_blank!
92
+ @current_blank_index += 1
93
+ @current_blank_index = 0 if @current_blank_index >= @blanks.length
94
+ end
95
+
96
+ def previous_blank!
97
+ @current_blank_index -= 1
98
+ @current_blank_index = @blanks.length - 1 if @current_blank_index < 0
99
+ end
100
+
101
+ def active_blank
102
+ @blanks[@current_blank_index]
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,134 @@
1
+ # Copied initially from github.com/arlimus/inquirer.rb (http://git.io/N6xT)
2
+ # Copyright Dominik Richter, licensed under Apache v2 (http://git.io/N6xC)
3
+ #
4
+ # Additional changes by Donald Guy - see:
5
+ # https://github.com/donaldguy/madCLIbs/blame/master/lib/mad_clibs/util/iohelper.rb
6
+
7
+ require 'io/console'
8
+
9
+ module IOHelper
10
+ extend self
11
+
12
+ @rendered = ""
13
+
14
+ KEYS = {
15
+ "\t" => "tab",
16
+ "\r" => "return",
17
+ "\n" => "linefeed",
18
+ # "\e" => "escape",
19
+ "\e[A" => "up",
20
+ "\e[B" => "down",
21
+ "\e[C" => "right",
22
+ "\e[D" => "left",
23
+ "\177" => "backspace",
24
+ # ctrl + c
25
+ "\003" => "ctrl-c",
26
+ # ctrl + d
27
+ "\004" => "ctrl-d"
28
+ }
29
+
30
+ # Read a character the user enters on console. This call is synchronous blocking.
31
+ # This is taken from: http://www.alecjacobson.com/weblog/?p=75
32
+ def read_char
33
+ begin
34
+ # save previous state of stty
35
+ old_state = `stty -g`
36
+ # disable echoing and enable raw (not having to press enter)
37
+ system "stty raw -echo"
38
+ c = STDIN.getc.chr
39
+ # gather next two characters of special keys
40
+ if(c=="\e")
41
+ extra_thread = Thread.new{
42
+ c = c + STDIN.getc.chr
43
+ c = c + STDIN.getc.chr
44
+ }
45
+ # wait just long enough for special keys to get swallowed
46
+ extra_thread.join(0.00001)
47
+ # kill thread so not-so-long special keys don't wait on getc
48
+ extra_thread.kill
49
+ end
50
+ rescue => ex
51
+ puts "#{ex.class}: #{ex.message}"
52
+ puts ex.backtrace
53
+ ensure
54
+ # restore previous state of stty
55
+ system "stty #{old_state}"
56
+ end
57
+ return c
58
+ end
59
+
60
+ # Read a keypress on console. Return the key name (e.g. "space", "a", "B")
61
+ # Params:
62
+ # +with_exit_codes+:: +Bool+ whether to throw Interrupts when the user presses
63
+ # ctrl-c and ctrl-d. (true by default)
64
+ def read_key with_exit_codes = true, return_char = false
65
+ char = read_char
66
+ raise Interrupt if with_exit_codes and ( char == "\003" or char == "\004" )
67
+ if return_char then char else char_to_raw char end
68
+ end
69
+
70
+ # Get each key the user presses and hand it one by one to the block. Do this
71
+ # as long as the block returns truthy
72
+ # Params:
73
+ # +&block+:: +Proc+ a block that receives a user key and returns truthy or falsy
74
+ def read_key_while return_char = false, &block
75
+ STDIN.noecho do
76
+ # as long as the block doen't return falsy,
77
+ # read the user input key and sned it to the block
78
+ while block.( IOHelper.read_key true, return_char )
79
+ end
80
+ end
81
+ end
82
+
83
+ # Get the console window size
84
+ # Returns: [width, height]
85
+ def winsize
86
+ STDIN.winsize
87
+ end
88
+
89
+ # Render a text to the prompt
90
+ def render(s)
91
+ @rendered = s
92
+ print s
93
+ end
94
+
95
+ # Clear the prompt and render the update
96
+ def rerender(s)
97
+ clear
98
+ render s
99
+ end
100
+
101
+ # clear the console based on the last text rendered
102
+ def clear
103
+ # get console window height and width
104
+ h,w = IOHelper.winsize
105
+ # determine how many lines to move up
106
+ n = @rendered.scan(/\n/).length
107
+ # jump back to the first position and clear the line
108
+ print carriage_return + ( line_up + clear_line ) * n + clear_line
109
+ end
110
+
111
+ # hides the cursor and ensure the curso be visible at the end
112
+ def without_cursor
113
+ # tell the terminal to hide the cursor
114
+ print `tput civis`
115
+ begin
116
+ # run the block
117
+ yield
118
+ ensure
119
+ # tell the terminal to show the cursor
120
+ print `tput cnorm`
121
+ end
122
+ end
123
+
124
+ def char_to_raw char
125
+ KEYS.fetch char, char
126
+ end
127
+
128
+ def carriage_return; "\r" end
129
+ def line_up; "\e[A" end
130
+ def clear_line; "\e[0K" end
131
+ def char_left; "\e[D" end
132
+ def char_right; "\e[C" end
133
+
134
+ end
@@ -0,0 +1,37 @@
1
+ class ValueBuffer
2
+ attr_reader :position
3
+
4
+ def initialize(s="")
5
+ self.value = s
6
+ end
7
+
8
+ def left
9
+ @position -= 1 if @position >= 0
10
+ end
11
+
12
+ def right
13
+ @position += 1 if @position < value.length
14
+ end
15
+
16
+ def backspace
17
+ @buffer = @buffer[0..-2]
18
+ left
19
+ end
20
+
21
+ def << c
22
+ if @position < 0
23
+ @position = 0
24
+ end
25
+ @buffer.insert(@position,c)
26
+ @position += 1
27
+ end
28
+
29
+ def value=(s)
30
+ @buffer = s.dup
31
+ @position = -1
32
+ end
33
+
34
+ def value
35
+ @buffer
36
+ end
37
+ end
@@ -0,0 +1,3 @@
1
+ class MadClibs
2
+ VERSION = "0.0.2"
3
+ end
data/lib/mad_clibs.rb ADDED
@@ -0,0 +1,19 @@
1
+ class MadClibs
2
+ autoload :Line, 'mad_clibs/line'
3
+ autoload :Blanks, 'mad_clibs/blanks'
4
+ autoload :Prompter, 'mad_clibs/prompter'
5
+
6
+ def initialize()
7
+ @prompter = Prompter.new
8
+ end
9
+
10
+ def prompt(*args)
11
+ l = Line.new(*args)
12
+ @prompter.prompt(l)
13
+ l.values()
14
+ end
15
+
16
+ def string(val)
17
+ Blanks::String.new(val)
18
+ end
19
+ end
data/madCLIbs.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mad_clibs/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "madCLIbs"
8
+ spec.version = MadClibs::VERSION
9
+ spec.authors = ["Donald Guy"]
10
+ spec.email = ["fawkes@mit.edu"]
11
+ spec.summary = %q{User-friendly fill-in-the-blank CLI forms (think HTML5 with placeholders) }
12
+ spec.description = <<-EOS
13
+ Seeks to mimic the familiar UX of HTML5 form elements, with placeholder attributes,
14
+ in an ANSI-compatible terminal.
15
+
16
+ Allows a program to present a line with one or more "blanks" which can be edited and moved between
17
+ at will (with tab or up & down arrow keys). On new line, returns the values of the blanks (treating
18
+ placeholders as a default values if no editing occured)
19
+ EOS
20
+ spec.homepage = "https://github.com/donaldguy/madCLIbs"
21
+ spec.license = "MIT"
22
+
23
+ spec.files = `git ls-files -z`.split("\x0")
24
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
25
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
26
+ spec.require_paths = ["lib"]
27
+
28
+ spec.add_dependency "term-ansicolor", "~> 1.1"
29
+
30
+ spec.add_development_dependency "bundler", "~> 1.6"
31
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: madCLIbs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Donald Guy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: term-ansicolor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.6'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.6'
41
+ description: |2
42
+ Seeks to mimic the familiar UX of HTML5 form elements, with placeholder attributes,
43
+ in an ANSI-compatible terminal.
44
+
45
+ Allows a program to present a line with one or more "blanks" which can be edited and moved between
46
+ at will (with tab or up & down arrow keys). On new line, returns the values of the blanks (treating
47
+ placeholders as a default values if no editing occured)
48
+ email:
49
+ - fawkes@mit.edu
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - ".gitignore"
55
+ - Gemfile
56
+ - LICENSE.txt
57
+ - README.md
58
+ - Rakefile
59
+ - examples/basic.rb
60
+ - examples/colors.rb
61
+ - examples/scoped.rb
62
+ - lib/madCLIbs.rb
63
+ - lib/madCLIbs/import.rb
64
+ - lib/mad_clibs.rb
65
+ - lib/mad_clibs/blanks.rb
66
+ - lib/mad_clibs/blanks/base.rb
67
+ - lib/mad_clibs/blanks/mixins/color_handling.rb
68
+ - lib/mad_clibs/blanks/mixins/default_key_handling.rb
69
+ - lib/mad_clibs/blanks/mixins/value_buffer_delegate.rb
70
+ - lib/mad_clibs/blanks/string.rb
71
+ - lib/mad_clibs/line.rb
72
+ - lib/mad_clibs/prompter.rb
73
+ - lib/mad_clibs/util/iohelper.rb
74
+ - lib/mad_clibs/util/value_buffer.rb
75
+ - lib/mad_clibs/version.rb
76
+ - madCLIbs.gemspec
77
+ homepage: https://github.com/donaldguy/madCLIbs
78
+ licenses:
79
+ - MIT
80
+ metadata: {}
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 2.2.2
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: User-friendly fill-in-the-blank CLI forms (think HTML5 with placeholders)
101
+ test_files: []