Skip to content

Commit

Permalink
Add ability to export usage to hash
Browse files Browse the repository at this point in the history
  • Loading branch information
piotrmurach committed May 5, 2020
1 parent 10cf453 commit 5f8a5c8
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 0 deletions.
15 changes: 15 additions & 0 deletions lib/tty/option/usage.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# frozen_string_literal: true

require_relative "deep_dup"

module TTY
module Option
class Usage
Expand Down Expand Up @@ -114,6 +116,19 @@ def footer(value = (not_set = true))
def footer?
@properties.key?(:footer) && !@properties[:footer].nil?
end

# Return a hash of this usage properties
#
# @return [Hash] the names and values of this usage
#
# @api public
def to_h(&block)
if block_given?
@properties.to_h(&block)
else
DeepDup.deep_dup(@properties)
end
end
end # Usage
end # Option
end # TTY
40 changes: 40 additions & 0 deletions spec/unit/usage_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -151,4 +151,44 @@
expect(usage.footer?).to eq(true)
end
end

context "to_h" do
it "returns all properties as hash" do
usage = described_class.new do
header "Header"
program "Program"
desc "Description"
example "Example"
footer "Footer"
end

expect(usage.to_h).to eq({
desc: [["Description"]],
example: [["Example"]],
footer: "Footer",
header: "Header",
program: "Program"
})
end

it "transforms hash via a block" do
usage = described_class.new do
header "Header"
program "Program"
desc "Description"
example "Example"
footer "Footer"
end

transformed = usage.to_h { |k, v| [k.to_s, v] }

expect(transformed).to eq({
"desc" => [["Description"]],
"example" => [["Example"]],
"footer" => "Footer",
"header" => "Header",
"program" => "Program"
})
end
end
end

0 comments on commit 5f8a5c8

Please sign in to comment.