downup 0.9.6 → 0.10.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f842e61e8bd58bae4db8fc93580498fcc5798e8a
4
- data.tar.gz: 24295105184635b519fc1e952e88963fe1bb811f
3
+ metadata.gz: 50ea069f025c5ee5ccdd082820621d10885549b9
4
+ data.tar.gz: 7a985a5e14de1a7322681559149e73610c04f5c5
5
5
  SHA512:
6
- metadata.gz: 746815cffd6a3d4fec7882595794dab2a05b84675eb214614068bb871aeb5ce43d108ec656b3effd1eeb201bc2a33095c2de3ea5e34557c1d4bb8167723e1733
7
- data.tar.gz: 67821fe72ea37dd0945bf74fbb7dda269ae644721e3c95a8c1e944ff82be62cf0a1cf63fe4ebed8432dce6c5eafb45450960b566851bba09b2810738ae87a334
6
+ metadata.gz: 096cefcf1988f3cec67893fcbd73fa5069c8c9887bc04be862f3ba961f2e5ca811cf441a33c7bc6130f678d564c2a8fb294e460a9e358fe7a9b83d3e15968d97
7
+ data.tar.gz: 7e96431cae385f47bb5354621501221bcf88736a5f94f168607e2a84cb694a3f21c44e7e95b3490518f9383860494c8654ebf2f5b93d64c58e0c11a136e74ae5
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in downup.gemspec
4
4
  gemspec
5
+
6
+ gem "minitest-focus"
data/README.md CHANGED
@@ -100,6 +100,9 @@ puts Downup::Base.new(options: options).prompt
100
100
  # You can also pass in the selector you would like
101
101
  # if passing in a hash
102
102
  puts Downup::Base.new(options: options, selector: "†").prompt
103
+
104
+ # You can also enable multi_select,
105
+ Downup::Base.new(options: options, type: :multi_select).prompt
103
106
  ```
104
107
 
105
108
  ## Inspired By
@@ -115,6 +118,12 @@ http://stackoverflow.com/questions/1489183/colorized-ruby-output
115
118
 
116
119
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
117
120
 
121
+ To run specs
122
+
123
+ ```ruby
124
+ rake test
125
+ ```
126
+
118
127
  ## Contributing
119
128
 
120
129
  1. Fork it ( https://github.com/[my-github-username]/downup/fork )
data/Rakefile CHANGED
@@ -1,2 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
+ task :test do
4
+ Dir.glob("test/test*").map do |file|
5
+ require_relative file
6
+ end
7
+ end
data/downup-0.9.6.gem ADDED
Binary file
data/examples/basic.rb CHANGED
@@ -57,3 +57,13 @@ options = {
57
57
  }
58
58
 
59
59
  puts Downup::Base.new(options: options).prompt
60
+
61
+ options = {
62
+ "a" => "Cat",
63
+ "b" => "Dog",
64
+ "c" => "Kangaroo",
65
+ "d" => "Snake",
66
+ "e" => "Eel"
67
+ }
68
+
69
+ Downup::Base.new(options: options, type: :multi_select).prompt
@@ -5,25 +5,25 @@ module Downup
5
5
  using Colors
6
6
 
7
7
  def initialize(options:,
8
- selected_position:,
9
- title: nil,
8
+ selected_position: 0,
10
9
  default_color: :brown,
11
10
  selected_color: :magenta,
12
11
  selector: "‣",
12
+ multi_selected_positions: [],
13
+ type: :default,
13
14
  stdin: $stdout,
14
- stdout: $stdout,
15
- header_proc: Proc.new {})
15
+ stdout: $stdout)
16
16
 
17
- @options = options
18
- @title = title
19
- @default_color = default_color
20
- @selected_position = selected_position
21
- @selected_color = selected_color
22
- @selector = selector
23
- @header_proc = header_proc
24
- @stdin = stdin
25
- @stdout = stdout
26
- @colonel = Kernel
17
+ @options = options
18
+ @default_color = default_color
19
+ @selected_position = selected_position
20
+ @selected_color = selected_color
21
+ @multi_selected_positions = multi_selected_positions
22
+ @selector = selector
23
+ @type = type
24
+ @stdin = stdin
25
+ @stdout = stdout
26
+ @colonel = Kernel
27
27
  end
28
28
 
29
29
  def print_options
@@ -41,12 +41,12 @@ module Downup
41
41
  private
42
42
 
43
43
  attr_reader :options,
44
- :title,
45
44
  :selected_position,
46
- :header_proc,
47
45
  :selected_color,
48
46
  :selector,
49
47
  :default_color,
48
+ :multi_selected_positions,
49
+ :type,
50
50
  :stdin,
51
51
  :stdout,
52
52
  :colonel
@@ -60,7 +60,9 @@ module Downup
60
60
  eval("value_hash.fetch('display').#{selected_color}")
61
61
  else
62
62
  stdout.print "(#{eval("key.#{default_color}")}) "
63
- stdout.print "#{eval("value_hash.fetch('display').#{default_color}")}\n"
63
+ stdout.print(
64
+ "#{eval("value_hash.fetch('display').#{default_color}")}\n"
65
+ )
64
66
  end
65
67
  end
66
68
  end
@@ -70,6 +72,9 @@ module Downup
70
72
  if index == selected_position
71
73
  stdout.puts "(#{eval("selector.#{selected_color}")}) " +
72
74
  eval("option_array.last.#{selected_color}")
75
+ elsif multi_selected_positions.include?(index)
76
+ stdout.puts "(#{eval("multi_selector.#{selected_color}")}) " +
77
+ eval("option_array.last.#{selected_color}")
73
78
  else
74
79
  stdout.print "(#{eval("option_array.first.#{default_color}")}) "
75
80
  stdout.print "#{eval("option_array.last.#{default_color}")}\n"
@@ -99,5 +104,9 @@ module Downup
99
104
  option.is_a?(Hash) && option.has_key?("display")
100
105
  }
101
106
  end
107
+
108
+ def multi_selector
109
+ "•"
110
+ end
102
111
  end
103
112
  end
@@ -1,3 +1,3 @@
1
1
  module Downup
2
- VERSION = "0.9.6"
2
+ VERSION = "0.10.6"
3
3
  end
data/lib/downup.rb CHANGED
@@ -7,12 +7,15 @@ module Downup
7
7
  using Colors
8
8
 
9
9
  class Base
10
+ attr_reader :selected_position
11
+
10
12
  def initialize(options:,
11
13
  flash_message: nil,
12
14
  flash_color: :green,
13
15
  default_color: :brown,
14
16
  selected_color: :magenta,
15
17
  selector: "‣",
18
+ type: :default,
16
19
  stdin: $stdin,
17
20
  stdout: $stdout,
18
21
  header_proc: Proc.new {})
@@ -23,10 +26,13 @@ module Downup
23
26
  @default_color = default_color
24
27
  @selected_color = selected_color
25
28
  @selector = selector
29
+ @type = type
26
30
  @header_proc = header_proc
27
31
  @stdin = stdin
28
32
  @stdout = stdout
29
33
  @colonel = Kernel
34
+
35
+ @multi_selected_positions = []
30
36
  end
31
37
 
32
38
  def prompt(position = 0)
@@ -37,9 +43,12 @@ module Downup
37
43
  Downup::OptionsPrinter.new(
38
44
  options: options,
39
45
  selected_position: @selected_position,
46
+ multi_selected_positions: @multi_selected_positions,
40
47
  default_color: default_color,
41
48
  selected_color: selected_color,
42
- selector: selector
49
+ selector: selector,
50
+ stdin: stdin,
51
+ stdout: stdout,
43
52
  ).print_options
44
53
  stdout.print "\n> "
45
54
  input = read_char
@@ -48,17 +57,27 @@ module Downup
48
57
 
49
58
  private
50
59
 
51
- attr_reader :options,
52
- :flash_message,
53
- :flash_color,
54
- :selected_position,
55
- :header_proc,
56
- :selected_color,
57
- :selector,
58
- :default_color,
59
- :stdin,
60
- :stdout,
61
- :colonel
60
+ def options
61
+ @_options ||=
62
+ begin
63
+ if multi_select?
64
+ @options.merge({"z" => "ENTER"})
65
+ else
66
+ @options
67
+ end
68
+ end
69
+ end
70
+
71
+ attr_reader :flash_message,
72
+ :flash_color,
73
+ :header_proc,
74
+ :selected_color,
75
+ :selector,
76
+ :type,
77
+ :default_color,
78
+ :stdin,
79
+ :stdout,
80
+ :colonel
62
81
 
63
82
  def process_input(input)
64
83
  case input
@@ -69,11 +88,37 @@ module Downup
69
88
  when *option_keys
70
89
  prompt(option_keys.index(input))
71
90
  when "\r"
72
- execute_selection(input)
91
+ if multi_select?
92
+ manage_multi_select
93
+ if selected_value == "ENTER"
94
+ execute_selection(input)
95
+ else
96
+ prompt(selected_position)
97
+ end
98
+ else
99
+ execute_selection(input)
100
+ end
73
101
  when "\u0003" then exit
74
102
  else prompt(selected_position); end
75
103
  end
76
104
 
105
+ def selected_value
106
+ options.values[selected_position]
107
+ end
108
+
109
+ def manage_multi_select
110
+ if @multi_selected_positions.include?(selected_position)
111
+ @multi_selected_positions.delete(selected_position)
112
+ else
113
+ return if selected_position == @options.length
114
+ @multi_selected_positions << selected_position
115
+ end
116
+ end
117
+
118
+ def multi_select?
119
+ type == :multi_select
120
+ end
121
+
77
122
  def execute_selection(input)
78
123
  case options
79
124
  when Array
@@ -82,7 +127,13 @@ module Downup
82
127
  if options_has_value_and_display?
83
128
  options.fetch(option_keys[selected_position]).fetch("value")
84
129
  else
85
- options.fetch(option_keys[selected_position])
130
+ if multi_select?
131
+ @multi_selected_positions.map do |p|
132
+ options.fetch(option_keys[p])
133
+ end
134
+ else
135
+ options.fetch(option_keys[selected_position])
136
+ end
86
137
  end
87
138
  end
88
139
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: downup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.6
4
+ version: 0.10.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Begin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-15 00:00:00.000000000 Z
11
+ date: 2015-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -55,7 +55,7 @@ files:
55
55
  - Rakefile
56
56
  - bin/console
57
57
  - bin/setup
58
- - downup-0.8.6.gem
58
+ - downup-0.9.6.gem
59
59
  - downup.gemspec
60
60
  - examples/basic.rb
61
61
  - lib/downup.rb
data/downup-0.8.6.gem DELETED
Binary file