table_print 1.1.3 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,13 +5,13 @@ Feature: Configuring output
5
5
 
6
6
  Given Blog has attributes title, author
7
7
 
8
- When I instantiate a Blog with {:title => "post!", :author => 'Ryan'}
9
- And table_print Blog, {:include => {:author => {:width => 10}}}
8
+ When I instantiate a Blog with {:title => "post!", :author => 'Ryan Ryan Ryan Ryan Ryan Ryan Ryan Ryan Ryan Ryan Ryan Ryan Ryan'}
9
+ And table_print Blog, {:include => {:author => {:width => 40}}}
10
10
  Then the output should contain
11
11
  """
12
- TITLE | AUTHOR
13
- ------------------
14
- post! | Ryan
12
+ TITLE | AUTHOR
13
+ ------------------------------------------------
14
+ post! | Ryan Ryan Ryan Ryan Ryan Ryan Ryan Ry...
15
15
  """
16
16
  Scenario: Specifying configuration on a per-object basis
17
17
  Given a class named Blog
@@ -1,8 +1,7 @@
1
1
  module TablePrint
2
2
  class Column
3
3
  attr_reader :formatters
4
- attr_writer :width
5
- attr_accessor :name, :data, :time_format
4
+ attr_accessor :name, :data, :time_format, :default_width
6
5
 
7
6
  def initialize(attr_hash={})
8
7
  @formatters = []
@@ -35,11 +34,16 @@ module TablePrint
35
34
  end
36
35
 
37
36
  def data_width
38
- [name.length].concat(data.compact.collect(&:to_s).collect(&:length)).max
37
+ [name.length].concat(Array(data).compact.collect(&:to_s).collect(&:length)).max
39
38
  end
40
39
 
41
40
  def width
42
- @width ||= data_width
41
+ [(default_width || max_width), data_width].min
42
+ end
43
+
44
+ private
45
+ def max_width
46
+ TablePrint::Config.max_width
43
47
  end
44
48
  end
45
49
  end
@@ -68,11 +68,16 @@ module TablePrint
68
68
  else
69
69
  option = {:name => option}
70
70
  end
71
+
72
+ if option.has_key? :width
73
+ option[:default_width] = option.delete(:width)
74
+ end
75
+
71
76
  c = Column.new(option)
72
77
  @column_hash[c.name] = c
73
78
  c
74
79
  end
75
-
80
+
76
81
  def usable_column_names
77
82
  base = @default_columns
78
83
  base = @only_columns unless @only_columns.empty?
@@ -18,18 +18,16 @@ module TablePrint
18
18
  end
19
19
 
20
20
  class FixedWidthFormatter
21
+ attr_accessor :width
22
+
21
23
  def initialize(width)
22
- @width = width
24
+ self.width = width
23
25
  end
24
26
 
25
27
  def format(value)
26
28
  "%-#{width}s" % truncate(value)
27
29
  end
28
30
 
29
- def width
30
- [@width, TablePrint::Config.max_width].min
31
- end
32
-
33
31
  private
34
32
  def truncate(value)
35
33
  return "" unless value
@@ -1,4 +1,4 @@
1
1
  module TablePrint
2
- VERSION = "1.1.3"
2
+ VERSION = "1.1.4"
3
3
  end
4
4
 
data/spec/column_spec.rb CHANGED
@@ -58,13 +58,36 @@ describe Column do
58
58
  end
59
59
 
60
60
  describe "#width" do
61
- it "returns the specified width" do
62
- c.width = 14
63
- c.width.should == 14
61
+ context "when default width is specified" do
62
+ it "uses the default width" do
63
+ c.default_width = 10
64
+ c.stub(:data_width => 15)
65
+ c.stub(:max_width => 20)
66
+ c.width.should == 10
67
+ end
68
+
69
+ it "isn't limited by the config width" do
70
+ c.default_width = 40
71
+ c.stub(:data_width => 50)
72
+ c.stub(:max_width => 20)
73
+ c.width.should == 40
74
+ end
64
75
  end
65
76
 
66
- it "uses the data_width if no width has been set" do
67
- c.width.should == 33
77
+ context "When default width is not specified" do
78
+ it "uses the data width" do
79
+ c.default_width = nil
80
+ c.stub(:data_width => 10)
81
+ c.stub(:max_width => 20)
82
+ c.width.should == 10
83
+ end
84
+
85
+ it "is limited by the config width" do
86
+ c.default_width = nil
87
+ c.stub(:data_width => 30)
88
+ c.stub(:max_width => 20)
89
+ c.width.should == 20
90
+ end
68
91
  end
69
92
  end
70
93
  end
@@ -100,7 +100,7 @@ describe TablePrint::ConfigResolver do
100
100
  c.columns.first.name.should == 'title'
101
101
 
102
102
  c.columns.last.name.should == 'foo'
103
- c.columns.last.width.should == 10
103
+ c.columns.last.default_width.should == 10
104
104
  end
105
105
  end
106
106
  end
@@ -189,11 +189,11 @@ describe TablePrint::ConfigResolver do
189
189
  end
190
190
  end
191
191
  context "width" do
192
- it "sets the width" do
192
+ it "sets the default width" do
193
193
  c = TablePrint::ConfigResolver.new(Object, [:title], :title => {:width => 100})
194
194
  c.columns.length.should == 1
195
195
  c.columns.first.name.should == 'title'
196
- c.columns.first.width.should == 100
196
+ c.columns.first.default_width.should == 100
197
197
  end
198
198
  end
199
199
  context "formatters" do
@@ -226,9 +226,9 @@ describe TablePrint::ConfigResolver do
226
226
  context "with a hash" do
227
227
  it "returns a column named foo and the specified options" do
228
228
  c = TablePrint::ConfigResolver.new(Object, [])
229
- column = c.option_to_column({:foo => {:width => 10}})
229
+ column = c.option_to_column({:foo => {:default_width => 10}})
230
230
  column.name.should == 'foo'
231
- column.width.should == 10
231
+ column.default_width.should == 10
232
232
  end
233
233
  end
234
234
  end
@@ -61,17 +61,4 @@ describe TablePrint::FixedWidthFormatter do
61
61
  @f.format(123).should == "123 "
62
62
  end
63
63
  end
64
-
65
- describe "#width" do
66
- it "returns the width" do
67
- @f.width.should == 10
68
- end
69
-
70
- it "respects the config'd max_width" do
71
- max = TablePrint::Config.max_width
72
- TablePrint::Config.max_width = 5
73
- @f.width.should == 5
74
- TablePrint::Config.max_width = max
75
- end
76
- end
77
64
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: table_print
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-27 00:00:00.000000000 Z
12
+ date: 2013-03-04 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cat