hirber 0.8.0
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 +7 -0
- data/.gemspec +21 -0
- data/.travis.yml +11 -0
- data/CHANGELOG.rdoc +165 -0
- data/CONTRIBUTING.md +1 -0
- data/LICENSE.txt +22 -0
- data/README.rdoc +205 -0
- data/Rakefile +35 -0
- data/lib/bond/completions/hirb.rb +15 -0
- data/lib/hirb.rb +84 -0
- data/lib/hirb/console.rb +43 -0
- data/lib/hirb/dynamic_view.rb +113 -0
- data/lib/hirb/formatter.rb +126 -0
- data/lib/hirb/helpers.rb +18 -0
- data/lib/hirb/helpers/auto_table.rb +24 -0
- data/lib/hirb/helpers/markdown_table.rb +14 -0
- data/lib/hirb/helpers/object_table.rb +14 -0
- data/lib/hirb/helpers/parent_child_tree.rb +24 -0
- data/lib/hirb/helpers/tab_table.rb +24 -0
- data/lib/hirb/helpers/table.rb +376 -0
- data/lib/hirb/helpers/table/filters.rb +10 -0
- data/lib/hirb/helpers/table/resizer.rb +82 -0
- data/lib/hirb/helpers/tree.rb +181 -0
- data/lib/hirb/helpers/unicode_table.rb +15 -0
- data/lib/hirb/helpers/vertical_table.rb +37 -0
- data/lib/hirb/import_object.rb +10 -0
- data/lib/hirb/menu.rb +226 -0
- data/lib/hirb/pager.rb +106 -0
- data/lib/hirb/string.rb +44 -0
- data/lib/hirb/util.rb +96 -0
- data/lib/hirb/version.rb +3 -0
- data/lib/hirb/view.rb +272 -0
- data/lib/hirb/views.rb +8 -0
- data/lib/hirb/views/couch_db.rb +11 -0
- data/lib/hirb/views/misc_db.rb +15 -0
- data/lib/hirb/views/mongo_db.rb +17 -0
- data/lib/hirb/views/orm.rb +11 -0
- data/lib/hirb/views/rails.rb +19 -0
- data/lib/ripl/hirb.rb +15 -0
- data/test/auto_table_test.rb +33 -0
- data/test/console_test.rb +27 -0
- data/test/dynamic_view_test.rb +94 -0
- data/test/formatter_test.rb +176 -0
- data/test/hirb_test.rb +39 -0
- data/test/import_test.rb +9 -0
- data/test/menu_test.rb +272 -0
- data/test/object_table_test.rb +79 -0
- data/test/pager_test.rb +162 -0
- data/test/resizer_test.rb +62 -0
- data/test/table_test.rb +667 -0
- data/test/test_helper.rb +60 -0
- data/test/tree_test.rb +184 -0
- data/test/util_test.rb +59 -0
- data/test/view_test.rb +178 -0
- data/test/views_test.rb +22 -0
- metadata +164 -0
data/lib/hirb/views.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
module Hirb::Views::CouchDb #:nodoc:
|
2
|
+
def default_couch(obj)
|
3
|
+
{:fields=>([:_id] + obj.class.properties.map {|e| e.name }) }
|
4
|
+
end
|
5
|
+
|
6
|
+
alias_method :couch_rest__extended_document_view, :default_couch
|
7
|
+
alias_method :couch_foo__base_view, :default_couch
|
8
|
+
alias_method :couch_potato__persistence_view, :default_couch
|
9
|
+
end
|
10
|
+
|
11
|
+
Hirb::DynamicView.add Hirb::Views::CouchDb, :helper=>:auto_table
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Hirb::Views::MiscDb #:nodoc:
|
2
|
+
def friendly__document_view(obj)
|
3
|
+
{:fields=>obj.class.attributes.keys - [:id]}
|
4
|
+
end
|
5
|
+
|
6
|
+
def ripple__document_view(obj)
|
7
|
+
{:fields=>obj.class.properties.keys}
|
8
|
+
end
|
9
|
+
|
10
|
+
def d_b_i__row_view(obj)
|
11
|
+
{:fields=>obj.column_names, :table_class=>Hirb::Helpers::Table}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
Hirb::DynamicView.add Hirb::Views::MiscDb, :helper=>:auto_table
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Hirb::Views::MongoDb #:nodoc:
|
2
|
+
def mongoid__document_view(obj)
|
3
|
+
fields = obj.class.fields.keys
|
4
|
+
fields.delete('_id')
|
5
|
+
fields.unshift('_id')
|
6
|
+
{:fields=>fields}
|
7
|
+
end
|
8
|
+
|
9
|
+
def mongo_mapper__document_view(obj)
|
10
|
+
fields = obj.class.column_names
|
11
|
+
fields.delete('_id') && fields.unshift('_id')
|
12
|
+
{:fields=>fields}
|
13
|
+
end
|
14
|
+
alias_method :mongo_mapper__embedded_document_view, :mongo_mapper__document_view
|
15
|
+
end
|
16
|
+
|
17
|
+
Hirb::DynamicView.add Hirb::Views::MongoDb, :helper=>:auto_table
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Hirb::Views::ORM #:nodoc:
|
2
|
+
def data_mapper__resource_view(obj)
|
3
|
+
{:fields=>obj.class.properties.map {|e| e.name }}
|
4
|
+
end
|
5
|
+
|
6
|
+
def sequel__model_view(obj)
|
7
|
+
{:fields=>obj.class.columns}
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
Hirb::DynamicView.add Hirb::Views::ORM, :helper=>:auto_table
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Hirb::Views::Rails #:nodoc:
|
2
|
+
def active_record__base_view(obj)
|
3
|
+
{:fields=>get_active_record_fields(obj)}
|
4
|
+
end
|
5
|
+
|
6
|
+
def get_active_record_fields(obj)
|
7
|
+
fields = obj.class.column_names.map {|e| e.to_sym }
|
8
|
+
# if query used select
|
9
|
+
if obj.attributes.keys.compact.sort != obj.class.column_names.sort
|
10
|
+
selected_columns = obj.attributes.keys.compact
|
11
|
+
sorted_columns = obj.class.column_names.dup.delete_if {|e| !selected_columns.include?(e) }
|
12
|
+
sorted_columns += (selected_columns - sorted_columns)
|
13
|
+
fields = sorted_columns.map {|e| e.to_sym}
|
14
|
+
end
|
15
|
+
fields
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Hirb::DynamicView.add Hirb::Views::Rails, :helper=>:auto_table
|
data/lib/ripl/hirb.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'hirb'
|
2
|
+
|
3
|
+
module Ripl::Hirb
|
4
|
+
def before_loop
|
5
|
+
super
|
6
|
+
Hirb.enable(Ripl.config[:hirb] || {})
|
7
|
+
end
|
8
|
+
|
9
|
+
def format_result(result)
|
10
|
+
return super if !Hirb::View.enabled?
|
11
|
+
Hirb::View.view_or_page_output(result) || super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
Ripl::Shell.include Ripl::Hirb
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
describe "auto table" do
|
4
|
+
it "converts nonarrays to arrays and renders" do
|
5
|
+
require 'set'
|
6
|
+
# rubinius sorts Set#to_a differently
|
7
|
+
arr = RUBY_DESCRIPTION.include?('rubinius') ? Set.new([1,2,3]).to_a : [1,2,3]
|
8
|
+
|
9
|
+
expected_table = <<-TABLE.unindent
|
10
|
+
+-------+
|
11
|
+
| value |
|
12
|
+
+-------+
|
13
|
+
| #{arr[0]} |
|
14
|
+
| #{arr[1]} |
|
15
|
+
| #{arr[2]} |
|
16
|
+
+-------+
|
17
|
+
3 rows in set
|
18
|
+
TABLE
|
19
|
+
Helpers::AutoTable.render(::Set.new([1,2,3])).should == expected_table
|
20
|
+
end
|
21
|
+
|
22
|
+
it "renders hash" do
|
23
|
+
expected_table = <<-TABLE.unindent
|
24
|
+
+---+-------+
|
25
|
+
| 0 | 1 |
|
26
|
+
+---+-------+
|
27
|
+
| a | 12345 |
|
28
|
+
+---+-------+
|
29
|
+
1 row in set
|
30
|
+
TABLE
|
31
|
+
Helpers::AutoTable.render({:a=>12345}).should == expected_table
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
describe "Console" do
|
4
|
+
it "#table is called without Hirb enabled" do
|
5
|
+
extend Hirb::Console
|
6
|
+
reset_config
|
7
|
+
expected_table = <<-TABLE.unindent
|
8
|
+
+-------+
|
9
|
+
| value |
|
10
|
+
+-------+
|
11
|
+
| 5 |
|
12
|
+
| 3 |
|
13
|
+
+-------+
|
14
|
+
2 rows in set
|
15
|
+
TABLE
|
16
|
+
capture_stdout {
|
17
|
+
table([5,3], :fields=>[:to_s])
|
18
|
+
}.should == expected_table +"\n"
|
19
|
+
end
|
20
|
+
|
21
|
+
it ".render_output sets config if it wasn't before" do
|
22
|
+
reset_config
|
23
|
+
View.expects(:render_output)
|
24
|
+
Console.render_output('blah')
|
25
|
+
View.config.is_a?(Hash).should == true
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
describe "DynamicView" do
|
4
|
+
def output_expects(output, expects)
|
5
|
+
Helpers::ObjectTable.expects(:render).with(output, expects)
|
6
|
+
Helpers::AutoTable.render(output)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "add" do
|
10
|
+
before_all { View.load_config }
|
11
|
+
|
12
|
+
it "raises error if no :helper option" do
|
13
|
+
lambda { Hirb.add_dynamic_view 'Blah', {} }.should.raise(ArgumentError).
|
14
|
+
message.should =~ /:helper.*required/
|
15
|
+
end
|
16
|
+
|
17
|
+
it "raises error if :helper option not a dynamic_view module" do
|
18
|
+
lambda { Hirb.add_dynamic_view('Blah', :helper=>:table) {|obj| } }.
|
19
|
+
should.raise(ArgumentError).message.should =~ /:helper.*must/
|
20
|
+
end
|
21
|
+
|
22
|
+
it "raises error if views module not a module" do
|
23
|
+
lambda { Hirb.add_dynamic_view 'Blah', :helper=>:auto_table }.should.raise(ArgumentError).
|
24
|
+
message.should =~ /must be a module/
|
25
|
+
end
|
26
|
+
|
27
|
+
it "adds a view with block" do
|
28
|
+
Hirb.add_dynamic_view('Date', :helper=>:auto_table) do |obj|
|
29
|
+
{:fields=>obj.class::DAYNAMES}
|
30
|
+
end
|
31
|
+
output_expects [Date.new], :fields=>Date::DAYNAMES
|
32
|
+
end
|
33
|
+
|
34
|
+
it "when adding views with a block, second view for same class overrides first one" do
|
35
|
+
Hirb.add_dynamic_view('Date', :helper=>:auto_table) do |obj|
|
36
|
+
{:fields=>obj.class::DAYNAMES}
|
37
|
+
end
|
38
|
+
Hirb.add_dynamic_view('Date', :helper=>:auto_table) do |obj|
|
39
|
+
{:fields=>[:blah]}
|
40
|
+
end
|
41
|
+
output_expects [Date.new], :fields=>[:blah]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it "class_to_method and method_to_class convert to each other" do
|
46
|
+
["DBI::Row", "Hirb::View"].each do |e|
|
47
|
+
Helpers::AutoTable.method_to_class(DynamicView.class_to_method(e).downcase).should == e
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "class_to_method converts correctly" do
|
52
|
+
DynamicView.class_to_method("DBI::Row").should == 'd_b_i__row_view'
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "dynamic_view" do
|
56
|
+
def define_view(mod_name= :Blah, &block)
|
57
|
+
mod = Views.const_set(mod_name, Module.new)
|
58
|
+
mod_block = block_given? ? block : lambda {|obj| {:fields=>obj.class::DAYNAMES}}
|
59
|
+
mod.send(:define_method, :date_view, mod_block)
|
60
|
+
Hirb.add_dynamic_view mod, :helper=>:auto_table
|
61
|
+
end
|
62
|
+
|
63
|
+
before_all { View.load_config }
|
64
|
+
before { Formatter.dynamic_config = {} }
|
65
|
+
after { Views.send(:remove_const, :Blah) }
|
66
|
+
|
67
|
+
it "sets a view's options" do
|
68
|
+
define_view
|
69
|
+
output_expects [Date.new], :fields=>Date::DAYNAMES
|
70
|
+
end
|
71
|
+
|
72
|
+
it "does override existing formatter dynamic_config" do
|
73
|
+
Formatter.dynamic_config["Date"] = {:class=>Helpers::Table}
|
74
|
+
define_view
|
75
|
+
Formatter.dynamic_config["Date"].should == {:class=>Hirb::Helpers::AutoTable, :ancestor=>true}
|
76
|
+
end
|
77
|
+
|
78
|
+
it "raises a readable error when error occurs in a view" do
|
79
|
+
define_view {|obj| raise 'blah' }
|
80
|
+
lambda { Helpers::AutoTable.render([Date.new]) }.should.raise(RuntimeError).
|
81
|
+
message.should =~ /'Date'.*date_view.*\nblah/
|
82
|
+
end
|
83
|
+
|
84
|
+
it "another view can reuse an old view's options" do
|
85
|
+
define_view
|
86
|
+
define_view(:Blah2) do |obj|
|
87
|
+
{:fields=>obj.class::DAYNAMES + ['blah']}
|
88
|
+
end
|
89
|
+
output_expects [Date.new], :fields=>(Date::DAYNAMES + ['blah'])
|
90
|
+
end
|
91
|
+
after_all { reset_config }
|
92
|
+
end
|
93
|
+
after_all { Formatter.dynamic_config = {} }
|
94
|
+
end
|
@@ -0,0 +1,176 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
describe "Formatter" do
|
4
|
+
def set_formatter(hash={})
|
5
|
+
@formatter = Formatter.new(hash)
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "klass_config" do
|
9
|
+
it "recursively merges ancestor options" do
|
10
|
+
@formatter = set_formatter "String"=>{:args=>[1,2], :options=>{:fields=>[:to_s]}},
|
11
|
+
"Object"=>{:method=>:object_output, :ancestor=>true, :options=>{:vertical=>true}},
|
12
|
+
"Kernel"=>{:method=>:default_output}
|
13
|
+
expected_result = {:method=>:object_output, :args=>[1, 2], :ancestor=>true, :options=>{:fields=>[:to_s], :vertical=>true}}
|
14
|
+
@formatter.klass_config(::String).should == expected_result
|
15
|
+
end
|
16
|
+
|
17
|
+
it "doesn't merge ancestor options" do
|
18
|
+
@formatter = set_formatter "String"=>{:args=>[1,2]}, "Object"=>{:method=>:object_output},
|
19
|
+
"Kernel"=>{:method=>:default_output}
|
20
|
+
@formatter.klass_config(::String).should == {:args=>[1, 2]}
|
21
|
+
end
|
22
|
+
|
23
|
+
it "returns hash when nothing found" do
|
24
|
+
set_formatter.klass_config(::String).should == {}
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "with dynamic_config" do
|
28
|
+
def set_formatter(hash={})
|
29
|
+
@formatter = Formatter.new(hash)
|
30
|
+
end
|
31
|
+
after { Formatter.dynamic_config = {}}
|
32
|
+
|
33
|
+
it "merges ancestor options and sets local config" do
|
34
|
+
Formatter.dynamic_config = {"Object"=>{:method=>:blah}, "Kernel"=>{:args=>[1,2], :ancestor=>true}}
|
35
|
+
set_formatter.klass_config(::String).should == {:args=>[1,2], :ancestor=>true}
|
36
|
+
@formatter.config['Kernel'].should == {:args=>[1,2], :ancestor=>true}
|
37
|
+
end
|
38
|
+
|
39
|
+
it "uses local config over dynamic_config" do
|
40
|
+
Formatter.dynamic_config = {"String"=>{:method=>:blah}}
|
41
|
+
set_formatter "String"=>{:args=>[1,2]}
|
42
|
+
@formatter.klass_config(::String).should == {:args=>[1,2]}
|
43
|
+
end
|
44
|
+
|
45
|
+
it "uses dynamic_config and sets local config" do
|
46
|
+
Formatter.dynamic_config = {"String"=>{:method=>:blah}}
|
47
|
+
set_formatter.klass_config(::String).should == {:method=>:blah}
|
48
|
+
@formatter.config['String'].should == {:method=>:blah}
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "formatter methods:" do
|
54
|
+
before_all { eval "module ::Dooda; end" }
|
55
|
+
|
56
|
+
it "#add_view sets formatter config" do
|
57
|
+
@formatter = set_formatter
|
58
|
+
@formatter.add_view ::Dooda, :class=>"DoodaView"
|
59
|
+
@formatter.klass_config(::Dooda).should == {:class=>"DoodaView"}
|
60
|
+
end
|
61
|
+
|
62
|
+
it "#add_view overwrites existing formatter config" do
|
63
|
+
@formatter = set_formatter "Dooda"=>{:class=>"DoodaView"}
|
64
|
+
@formatter.add_view ::Dooda, :class=>"DoodaView2"
|
65
|
+
@formatter.klass_config(::Dooda).should == {:class=>"DoodaView2"}
|
66
|
+
end
|
67
|
+
|
68
|
+
it "#parse_console_options passes all options except for formatter options into :options" do
|
69
|
+
@formatter = set_formatter
|
70
|
+
options = {:class=>'blah', :method=>'blah', :output_method=>'blah', :blah=>'blah'}
|
71
|
+
expected_options = {:class=>'blah', :method=>'blah', :output_method=>'blah', :options=>{:blah=>'blah'}}
|
72
|
+
@formatter.parse_console_options(options).should == expected_options
|
73
|
+
end
|
74
|
+
|
75
|
+
it "#determine_output_class recognizes subclasses of to_a classes" do
|
76
|
+
class Array2 < Array; end
|
77
|
+
@formatter.determine_output_class(Array2.new(%w{ok dude})).should == String
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "format_output" do
|
82
|
+
def view_output(*args, &block); View.view_output(*args, &block); end
|
83
|
+
def render_method(*args); View.render_method(*args); end
|
84
|
+
|
85
|
+
def enable_with_output(value)
|
86
|
+
Hirb.enable :output=>value
|
87
|
+
end
|
88
|
+
|
89
|
+
before_all {
|
90
|
+
eval %[module ::Commify
|
91
|
+
def self.render(strings)
|
92
|
+
strings = Array(strings)
|
93
|
+
strings.map {|e| e.split('').join(',')}.join("\n")
|
94
|
+
end
|
95
|
+
end]
|
96
|
+
reset_config
|
97
|
+
}
|
98
|
+
before { View.formatter = nil; reset_config }
|
99
|
+
after { Hirb.disable }
|
100
|
+
|
101
|
+
it "formats with method option" do
|
102
|
+
eval "module ::Kernel; def commify(string); string.split('').join(','); end; end"
|
103
|
+
enable_with_output "String"=>{:method=>:commify}
|
104
|
+
render_method.expects(:call).with('d,u,d,e')
|
105
|
+
view_output('dude')
|
106
|
+
end
|
107
|
+
|
108
|
+
it "formats with class option" do
|
109
|
+
enable_with_output "String"=>{:class=>"Commify"}
|
110
|
+
render_method.expects(:call).with('d,u,d,e')
|
111
|
+
view_output('dude')
|
112
|
+
end
|
113
|
+
|
114
|
+
it "formats with class option as symbol" do
|
115
|
+
enable_with_output "String"=>{:class=>:auto_table}
|
116
|
+
Helpers::AutoTable.expects(:render)
|
117
|
+
view_output('dude')
|
118
|
+
end
|
119
|
+
|
120
|
+
it "formats arrays" do
|
121
|
+
enable_with_output "String"=>{:class=>"Commify"}
|
122
|
+
render_method.expects(:call).with('d,u,d,e')
|
123
|
+
view_output(['dude'])
|
124
|
+
end
|
125
|
+
|
126
|
+
it "formats array-like objects" do
|
127
|
+
enable_with_output "String"=>{:class=>"Commify"}
|
128
|
+
render_method.expects(:call).with('d,u,d,e')
|
129
|
+
require 'set'
|
130
|
+
view_output Set.new(['dude'])
|
131
|
+
end
|
132
|
+
|
133
|
+
it "formats with options option" do
|
134
|
+
eval "module ::Blahify; def self.render(*args); end; end"
|
135
|
+
enable_with_output "String"=>{:class=>"Blahify", :options=>{:fields=>%w{a b}}}
|
136
|
+
Blahify.expects(:render).with('dude', :fields=>%w{a b})
|
137
|
+
view_output('dude')
|
138
|
+
end
|
139
|
+
|
140
|
+
it "doesn't format and returns false when no format method found" do
|
141
|
+
Hirb.enable
|
142
|
+
render_method.expects(:call).never
|
143
|
+
view_output(Date.today).should == false
|
144
|
+
end
|
145
|
+
|
146
|
+
it "formats with output_method option as method" do
|
147
|
+
enable_with_output 'String'=>{:class=>"Commify", :output_method=>:chop}
|
148
|
+
render_method.expects(:call).with('d,u,d')
|
149
|
+
view_output('dude')
|
150
|
+
end
|
151
|
+
|
152
|
+
it "formats with output_method option as proc" do
|
153
|
+
enable_with_output 'String'=>{:class=>"Commify", :output_method=>lambda {|e| e.chop}}
|
154
|
+
render_method.expects(:call).with('d,u,d')
|
155
|
+
view_output('dude')
|
156
|
+
end
|
157
|
+
|
158
|
+
it "formats output array with output_method option" do
|
159
|
+
enable_with_output 'String'=>{:class=>"Commify", :output_method=>:chop}
|
160
|
+
render_method.expects(:call).with("d,u,d\nm,a")
|
161
|
+
view_output(['dude', 'man'])
|
162
|
+
end
|
163
|
+
|
164
|
+
it "formats with explicit class option" do
|
165
|
+
enable_with_output 'String'=>{:class=>"Blahify"}
|
166
|
+
render_method.expects(:call).with('d,u,d,e')
|
167
|
+
view_output('dude', :class=>"Commify")
|
168
|
+
end
|
169
|
+
|
170
|
+
it "formats with explicit options option merges with existing options" do
|
171
|
+
enable_with_output "String"=>{:class=>"Commify", :options=>{:fields=>%w{f1 f2}}}
|
172
|
+
Commify.expects(:render).with('dude', :max_width=>10, :fields=>%w{f1 f2})
|
173
|
+
view_output('dude', :options=>{:max_width=>10})
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
data/test/hirb_test.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
describe "Hirb" do
|
4
|
+
before_all { Hirb.config_files = nil }
|
5
|
+
before { Hirb.config = nil }
|
6
|
+
|
7
|
+
it "config converts yaml when config file exists" do
|
8
|
+
yaml_data = {:blah=>'blah'}
|
9
|
+
File.stubs('exist?').returns(true)
|
10
|
+
Hirb.config_files = ['ok']
|
11
|
+
YAML.expects(:load_file).returns(yaml_data)
|
12
|
+
Hirb.config.should == yaml_data
|
13
|
+
end
|
14
|
+
|
15
|
+
it "config defaults to hash when no config file" do
|
16
|
+
File.stubs('exist?').returns(false)
|
17
|
+
Hirb.config.should == {}
|
18
|
+
end
|
19
|
+
|
20
|
+
it "config reloads if given explicit reload" do
|
21
|
+
Hirb.config
|
22
|
+
Hirb.expects(:read_config_file).returns({})
|
23
|
+
Hirb.config(true)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "config reads multiple config files and merges them" do
|
27
|
+
Hirb.config_files = %w{one two}
|
28
|
+
Hirb.expects(:read_config_file).times(2).returns({:output=>{"String"=>:auto_table}}, {:output=>{"Array"=>:auto_table}})
|
29
|
+
Hirb.config.should == {:output=>{"Array"=>:auto_table, "String"=>:auto_table}}
|
30
|
+
Hirb.config_files = nil
|
31
|
+
end
|
32
|
+
|
33
|
+
it "config_file sets correctly when no ENV['HOME']" do
|
34
|
+
Hirb.config_files = nil
|
35
|
+
home = ENV.delete('HOME')
|
36
|
+
Hirb.config_files[0].class.should == String
|
37
|
+
ENV["HOME"] = home
|
38
|
+
end
|
39
|
+
end
|