diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/highline/builtin_styles.rb | 53 | ||||
-rw-r--r-- | lib/highline/color_scheme.rb | 36 | ||||
-rw-r--r-- | lib/highline/list.rb | 3 | ||||
-rw-r--r-- | lib/highline/list_renderer.rb | 7 | ||||
-rw-r--r-- | lib/highline/menu.rb | 48 | ||||
-rw-r--r-- | lib/highline/paginator.rb | 4 | ||||
-rwxr-xr-x | lib/highline/question.rb | 7 | ||||
-rw-r--r-- | lib/highline/question_asker.rb | 3 |
8 files changed, 93 insertions, 68 deletions
diff --git a/lib/highline/builtin_styles.rb b/lib/highline/builtin_styles.rb index 175497f..acd06b2 100644 --- a/lib/highline/builtin_styles.rb +++ b/lib/highline/builtin_styles.rb @@ -29,11 +29,13 @@ class HighLine style = String(style_name).upcase const_set style, code - const_set style + "_STYLE", Style.new(name: style_name, code: code, builtin: true) + const_set style + "_STYLE", + Style.new(name: style_name, code: code, builtin: true) end # Basic Style names like CLEAR, BOLD, UNDERLINE - STYLES = %w[CLEAR RESET BOLD DARK UNDERLINE UNDERSCORE BLINK REVERSE CONCEALED].freeze + STYLES = %w[CLEAR RESET BOLD DARK UNDERLINE + UNDERSCORE BLINK REVERSE CONCEALED].freeze # A Hash with the basic colors an their ANSI escape codes. COLOR_LIST = { @@ -64,7 +66,9 @@ class HighLine end # The builtin styles basic colors like black, red, green. - BASIC_COLORS = %w[BLACK RED GREEN YELLOW BLUE MAGENTA CYAN WHITE GRAY GREY NONE].freeze + BASIC_COLORS = + %w[BLACK RED GREEN YELLOW BLUE + MAGENTA CYAN WHITE GRAY GREY NONE].freeze colors = BASIC_COLORS.dup BASIC_COLORS.each do |color| @@ -97,27 +101,28 @@ class HighLine # builtin constants (without explicitly defining them) # @param name [Symbol] missing constant name def const_missing(name) - if name.to_s =~ RGB_COLOR_PATTERN - on = Regexp.last_match(1) - suffix = Regexp.last_match(4) - - code_name = if suffix - Regexp.last_match(1).to_s + Regexp.last_match(2) + Regexp.last_match(3) - else - name.to_s - end - - style_name = code_name + '_STYLE' - style = Style.rgb(Regexp.last_match(3)) - style = style.on if on - - const_set(style_name, style) - const_set(code_name, style.code) - - suffix ? style : style.code - else - raise NameError, "Bad color or uninitialized constant #{name}" - end + raise NameError, "Bad color or uninitialized constant #{name}" unless + name.to_s =~ RGB_COLOR_PATTERN + + on = Regexp.last_match(1) + suffix = Regexp.last_match(4) + + code_name = if suffix + Regexp.last_match(1).to_s + + Regexp.last_match(2) + + Regexp.last_match(3) + else + name.to_s + end + + style_name = code_name + '_STYLE' + style = Style.rgb(Regexp.last_match(3)) + style = style.on if on + + const_set(style_name, style) + const_set(code_name, style.code) + + suffix ? style : style.code end end end diff --git a/lib/highline/color_scheme.rb b/lib/highline/color_scheme.rb index a776fbf..414ebb1 100644 --- a/lib/highline/color_scheme.rb +++ b/lib/highline/color_scheme.rb @@ -18,7 +18,8 @@ class HighLine # # A ColorScheme contains named sets of HighLine color constants. # - # @example Instantiating a color scheme, applying it to HighLine, and using it: + # @example Instantiating a color scheme, applying it to HighLine, + # and using it: # ft = HighLine::ColorScheme.new do |cs| # cs[:headline] = [ :bold, :yellow, :on_black ] # cs[:horizontal_line] = [ :bold, :white ] @@ -93,14 +94,19 @@ class HighLine # @param color_tag [#to_sym] # @param constants [Array<Symbol>] Array of Style symbols def []=(color_tag, constants) - @scheme[to_symbol(color_tag)] = HighLine::Style.new(name: color_tag.to_s.downcase.to_sym, - list: constants, no_index: true) + @scheme[to_symbol(color_tag)] = + HighLine::Style.new(name: color_tag.to_s.downcase.to_sym, + list: constants, + no_index: true) end # Retrieve the color scheme hash (in original definition format) # @return [Hash] scheme as Hash. It may be reused in a new ColorScheme. def to_hash - @scheme.each_with_object({}) { |pair, hsh| key, value = pair; hsh[key] = value.list; } + @scheme.each_with_object({}) do |pair, hsh| + key, value = pair + hsh[key] = value.list + end end private @@ -123,23 +129,23 @@ class HighLine # A sample ColorScheme. class SampleColorScheme < ColorScheme + SAMPLE_SCHEME = { + critical: %i[yellow on_red], + error: %i[bold red], + warning: %i[bold yellow], + notice: %i[bold magenta], + info: %i[bold cyan], + debug: %i[bold green], + row_even: [:cyan], + row_odd: [:magenta] + }.freeze # # Builds the sample scheme with settings for <tt>:critical</tt>, # <tt>:error</tt>, <tt>:warning</tt>, <tt>:notice</tt>, <tt>:info</tt>, # <tt>:debug</tt>, <tt>:row_even</tt>, and <tt>:row_odd</tt> colors. # def initialize(_h = nil) - scheme = { - critical: %i[yellow on_red], - error: %i[bold red], - warning: %i[bold yellow], - notice: %i[bold magenta], - info: %i[bold cyan], - debug: %i[bold green], - row_even: [:cyan], - row_odd: [:magenta] - } - super(scheme) + super(SAMPLE_SCHEME) end end end diff --git a/lib/highline/list.rb b/lib/highline/list.rb index 8e0a0b0..6ca876f 100644 --- a/lib/highline/list.rb +++ b/lib/highline/list.rb @@ -66,7 +66,8 @@ class HighLine build end - # Transpose the (already sliced by rows) list, turning its rows into columns. + # Transpose the (already sliced by rows) list, + # turning its rows into columns. # @return [self] def transpose first_row = @list[0] diff --git a/lib/highline/list_renderer.rb b/lib/highline/list_renderer.rb index 8052d71..be1aa95 100644 --- a/lib/highline/list_renderer.rb +++ b/lib/highline/list_renderer.rb @@ -91,7 +91,8 @@ class HighLine::ListRenderer items.to_ary.map do |item| item = String(item) template = ERB.new(item, nil, "%") - template_renderer = HighLine::TemplateRenderer.new(template, self, highline) + template_renderer = + HighLine::TemplateRenderer.new(template, self, highline) template_renderer.render end end @@ -224,13 +225,13 @@ class HighLine::ListRenderer row_join_string.size end - def get_col_count + def col_count_calculate (line_size_limit + row_join_str_size) / (items_max_length + row_join_str_size) end def col_count - option || get_col_count + option || col_count_calculate end def right_padded_items diff --git a/lib/highline/menu.rb b/lib/highline/menu.rb index d9a2b6e..dc8ec93 100644 --- a/lib/highline/menu.rb +++ b/lib/highline/menu.rb @@ -13,7 +13,8 @@ require "highline/menu/item" class HighLine # - # Menu objects encapsulate all the details of a call to {HighLine#choose HighLine#choose}. + # Menu objects encapsulate all the details of a call to + # {HighLine#choose HighLine#choose}. # Using the accessors and {Menu#choice} and {Menu#choices}, the block passed # to {HighLine#choose} can detail all aspects of menu display and control. # @@ -179,7 +180,8 @@ class HighLine # cli.choose do |menu| # menu.shell = true # - # menu.choice(:load, text: 'Load a file', help: "Load a file using your favourite editor.") + # menu.choice(:load, text: 'Load a file', + # help: "Load a file using your favourite editor.") # menu.choice(:save, help: "Save data in file.") # menu.choice(:quit, help: "Exit program.") # @@ -194,11 +196,11 @@ class HighLine end # - # This method helps reduce the namespaces in the original call, which would look - # like this: HighLine::Menu::Item.new(...) + # This method helps reduce the namespaces in the original call, + # which would look like this: HighLine::Menu::Item.new(...) # With #build_item, it looks like this: menu.build_item(...) - # @param *args splat args, the same args you would pass to an initialization of - # HighLine::Menu::Item + # @param *args splat args, the same args you would pass to an + # initialization of HighLine::Menu::Item # @return [HighLine::Menu::Item] the menu item def build_item(*args) @@ -206,8 +208,8 @@ class HighLine end # - # Adds an item directly to the menu. If you want more configuraiton or options, - # use this method + # Adds an item directly to the menu. If you want more configuration + # or options, use this method # # @param item [Menu::Item] item containing choice fields and more # @return [void] @@ -223,7 +225,8 @@ class HighLine # warned:</b> An _action_ set here will apply to *all* provided # _names_. This is considered to be a feature, so you can easily # hand-off interface processing to a different chunk of code. - # @param names [Array<#to_s>] menu item titles/headers/names to be displayed. + # @param names [Array<#to_s>] menu item titles/headers/names to be + # displayed. # @param action (see #choice) # @return [void] # @example (see HighLine::Menu#initialize) @@ -281,12 +284,17 @@ class HighLine return if @items.include?(:help) topics = @help.keys.sort - help_help = @help.include?("help") ? @help["help"] : - "This command will display helpful messages about " \ - "functionality, like this one. To see the help for " \ - "a specific topic enter:\n\thelp [TOPIC]\nTry asking " \ - "for help on any of the following:\n\n" \ - "<%= list(#{topics.inspect}, :columns_across) %>" + help_help = + if @help.include?("help") + @help["help"] + else + "This command will display helpful messages about " \ + "functionality, like this one. To see the help for " \ + "a specific topic enter:\n\thelp [TOPIC]\nTry asking " \ + "for help on any of the following:\n\n" \ + "<%= list(#{topics.inspect}, :columns_across) %>" + end + choice(:help, help_help) do |_command, topic| topic.strip! topic.downcase! @@ -302,8 +310,8 @@ class HighLine # Used to set help for arbitrary topics. Use the topic <tt>"help"</tt> # to override the default message. Mainly for internal use. # - # @param topic [String] the menu item header/title/name to be associated with - # a help message. + # @param topic [String] the menu item header/title/name to be associated + # with a help message. # @param help [String] the help message to be associated with the menu # item/title/name. def help(topic, help) @@ -387,8 +395,10 @@ class HighLine # rules for this Menu object. If an action was provided for the # selection, it will be executed as described in {#choice}. # - # @param highline_context [HighLine] a HighLine instance to be used as context. - # @param selection [String, Integer] index or title of the selected menu item. + # @param highline_context [HighLine] a HighLine instance to be used + # as context. + # @param selection [String, Integer] index or title of the selected + # menu item. # @param details additional parameter to be passed when in shell mode. # @return [nil, Object] if @nil_on_handled is set it returns +nil+, # else it returns the action return value. diff --git a/lib/highline/paginator.rb b/lib/highline/paginator.rb index 9be3821..9da8735 100644 --- a/lib/highline/paginator.rb +++ b/lib/highline/paginator.rb @@ -39,8 +39,8 @@ class HighLine end # - # Ask user if they wish to continue paging output. Allows them to type "q" to - # cancel the paging process. + # Ask user if they wish to continue paging output. Allows them to + # type "q" to cancel the paging process. # def continue_paging? command = highline.new_scope.ask( diff --git a/lib/highline/question.rb b/lib/highline/question.rb index 98b3fa9..b630ef9 100755 --- a/lib/highline/question.rb +++ b/lib/highline/question.rb @@ -60,11 +60,11 @@ class HighLine @case = nil @in = nil @first_answer = nil - @directory = Pathname.new(File.expand_path(File.dirname($PROGRAM_NAME))) @glob = "*" + @overwrite = false @user_responses = {} @internal_responses = default_responses_hash - @overwrite = false + @directory = Pathname.new(File.expand_path(File.dirname($PROGRAM_NAME))) # allow block to override settings yield self if block_given? @@ -548,7 +548,8 @@ class HighLine # Provides the String to be asked when at an error situation. # It may be just the question itself (repeat on error). # @return [self] if :ask_on_error on responses Hash is set to :question - # @return [String] if :ask_on_error on responses Hash is set to something else + # @return [String] if :ask_on_error on responses Hash is set to + # something else def ask_on_error_msg if final_responses[:ask_on_error] == :question self diff --git a/lib/highline/question_asker.rb b/lib/highline/question_asker.rb index 845914a..0d124b1 100644 --- a/lib/highline/question_asker.rb +++ b/lib/highline/question_asker.rb @@ -31,7 +31,8 @@ class HighLine question.convert if question.confirm - raise NoConfirmationQuestionError unless @highline.send(:confirm, question) + confirmation = @highline.send(:confirm, question) + raise NoConfirmationQuestionError unless confirmation end rescue ExplainableError => e explain_error(e.explanation_key) |