table_display 2.0.0 → 2.1.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 +5 -5
- data/MIT-LICENSE +1 -1
- data/README.md +97 -0
- data/lib/table_display.rb +14 -9
- data/lib/table_display/version.rb +1 -1
- data/test/table_display_test.rb +54 -17
- data/test/test_helper.rb +1 -10
- metadata +4 -4
- data/README +0 -82
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c3013953f835a9c3948a8197eeebb9ffe9a53e8fb2ad14471a6802155205c03d
|
4
|
+
data.tar.gz: b569caed7b3c6b65327c6391b3fd63b68b0dd815b6068160fdfafed811fe76ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3592665702f00ad8602e9a32a3c6e51fb8af848c302d2bd9220221cf116d315de2c3bbd705556266e3c4685055d1039f62f21a1479a2d22568aa6d1caabd0aec
|
7
|
+
data.tar.gz: f42df4ce0723ec6bdd8d4c18b323ca05b48c8c0579b6119edecb0117d41408ab1b856f19e5d4a7af44b3bbcb45ea74bb8c4cf71f7c156361c031f7a1553338e9
|
data/MIT-LICENSE
CHANGED
data/README.md
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
Table Display
|
2
|
+
=============
|
3
|
+
|
4
|
+
Adds support for displaying your ActiveRecord tables, named scopes, collections, or
|
5
|
+
plain arrays in a table view when working in rails console, shell, or email template.
|
6
|
+
|
7
|
+
`Enumerable#to_table_display` returns the printable strings; `Object#pt` calls `#to_table_display`
|
8
|
+
on its first argument and puts out the result.
|
9
|
+
|
10
|
+
Columns you haven't loaded (eg. from using `:select`) are omitted, and derived/calculated
|
11
|
+
columns (eg. again, from using `:select`) are added.
|
12
|
+
|
13
|
+
Both `#to_table_display` and `Object#pt` methods take `:only`, `:except`, and `:methods` which
|
14
|
+
change what attributes/methods are output, like they do on the `#to_xml` method.
|
15
|
+
|
16
|
+
The normal output uses `#inspect` on the data values to make them printable, so you can
|
17
|
+
see what type the values had. When that's inconvenient or you'd prefer direct display,
|
18
|
+
you can pass the option `:inspect => false` to disable inspection.
|
19
|
+
|
20
|
+
|
21
|
+
Example
|
22
|
+
-------
|
23
|
+
|
24
|
+
You can call the `to_table_display` method:
|
25
|
+
|
26
|
+
>> puts Project.find(31).tasks.to_table_display
|
27
|
+
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|
28
|
+
| id | project_id | description | due_on | completed_at | created_at | updated_at |
|
29
|
+
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|
30
|
+
| 1 | 31 | "Write a handy plugin" | Wed, 25 Mar 2009 | Tue Mar 24 23:17:05 +1300 2009 | Mon Mar 23 09:11:02 +1300 2009 | Tue Mar 24 23:17:05 +1300 2009 |
|
31
|
+
| 2 | 31 | "Blog the plugin" | Sun, 05 Apr 2009 | nil | Mon Mar 23 09:11:46 +1300 2009 | Mon Mar 23 09:11:46 +1300 2009 |
|
32
|
+
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|
33
|
+
|
34
|
+
Or equivalently, use `pt` (like `pp`, but in a table):
|
35
|
+
|
36
|
+
>> pt Customer.find(31).purchases
|
37
|
+
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|
38
|
+
| id | project_id | description | due_on | completed_at | created_at | updated_at |
|
39
|
+
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|
40
|
+
| 1 | 31 | "Write a handy plugin" | Wed, 25 Mar 2009 | Tue Mar 24 23:17:05 +1300 2009 | Mon Mar 23 09:11:02 +1300 2009 | Tue Mar 24 23:17:05 +1300 2009 |
|
41
|
+
| 2 | 31 | "Blog the plugin" | Sun, 05 Apr 2009 | nil | Mon Mar 23 09:11:46 +1300 2009 | Mon Mar 23 09:11:46 +1300 2009 |
|
42
|
+
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|
43
|
+
|
44
|
+
|
45
|
+
Like `to_xml`, you can pass a `:methods` option to add the output methods on your models, and you
|
46
|
+
can pass `:only` or `:except` to (respectively) show only certain columns or show all except certain columns:
|
47
|
+
|
48
|
+
>> puts Customer.find(31).purchases.to_table_display(:only => [:id, :description], :methods => [:met_due_date?])
|
49
|
+
+----+------------------------+---------------+
|
50
|
+
| id | description | met_due_date? |
|
51
|
+
+----+------------------------+---------------+
|
52
|
+
| 1 | "Write a handy plugin" | true |
|
53
|
+
| 2 | "Blog the plugin" | nil |
|
54
|
+
+----+------------------------+---------------+
|
55
|
+
|
56
|
+
`pt` accepts and passes on all options as well:
|
57
|
+
|
58
|
+
>> pt Customer.find(31).purchases, :only => [:id, :description], :methods => [:met_due_date?]
|
59
|
+
+----+------------------------+---------------+
|
60
|
+
| id | description | met_due_date? |
|
61
|
+
+----+------------------------+---------------+
|
62
|
+
| 1 | "Write a handy plugin" | true |
|
63
|
+
| 2 | "Blog the plugin" | nil |
|
64
|
+
+----+------------------------+---------------+
|
65
|
+
|
66
|
+
There's a convenient equivalent syntax for displaying an ordered list of columns, like `:only` and `:methods`:
|
67
|
+
|
68
|
+
>> puts Customer.find(31).purchases.to_table_display :id, :description, :met_due_date?
|
69
|
+
|
70
|
+
which provides:
|
71
|
+
|
72
|
+
>> pt Customer.find(31).purchases, :id, :description, :met_due_date?
|
73
|
+
|
74
|
+
resulting in the same output as above.
|
75
|
+
|
76
|
+
|
77
|
+
If `:inspect => false` is used, the values will be shown in `#to_s` form rather than `#inspect` form:
|
78
|
+
|
79
|
+
>> pt Customer.find(31).purchases, :only => [:id, :description, :due_on, :completed_at]
|
80
|
+
+----+----------------------+------------+--------------------------------+
|
81
|
+
| id | description | due_on | completed_at |
|
82
|
+
+----+----------------------+------------+--------------------------------+
|
83
|
+
| 1 | Write a handy plugin | 2009-03-25 | Tue Mar 24 23:17:05 +1300 2009 |
|
84
|
+
| 2 | Blog the plugin | 2009-04-05 | |
|
85
|
+
+----+----------------------+------------+--------------------------------+
|
86
|
+
|
87
|
+
It is possible to use objects that respond to `#call` -- such as methods or procs -- to set up columns. They will be
|
88
|
+
passed the record as their sole argument. If these have names (as with methods), those will be used as the headers.
|
89
|
+
Otherwise, the default `to_s` behaviour will be used.
|
90
|
+
|
91
|
+
Note that in all cases, values whose class descends from `Numeric` are right-aligned, while all other values are left-aligned.
|
92
|
+
|
93
|
+
Thanks
|
94
|
+
------
|
95
|
+
* Michael Fowler (@mkrfowler)
|
96
|
+
|
97
|
+
Copyright (c) 2009-2018 Will Bryant, Sekuda Ltd, released under the MIT license
|
data/lib/table_display.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module TableDisplay
|
2
2
|
def to_table_display(*args)
|
3
3
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
4
|
-
|
5
|
-
|
4
|
+
extra_entries = args.collect { |arg| arg.respond_to?(:call) ? arg : arg.to_s }
|
5
|
+
extra_entries += Array(options.delete(:methods)) if options[:methods]
|
6
6
|
only_attributes = Array(options.delete(:only)) if options[:only]
|
7
7
|
only_attributes ||= [] if args.length > 0
|
8
8
|
except_attributes = Array(options.delete(:except)) if options[:except]
|
@@ -12,7 +12,6 @@ module TableDisplay
|
|
12
12
|
|
13
13
|
column_lengths = ActiveSupport::OrderedHash.new
|
14
14
|
|
15
|
-
data = []
|
16
15
|
if only_attributes
|
17
16
|
# we've been given an explicit list of attributes to display
|
18
17
|
only_attributes.each {|attribute| column_lengths[attribute] = 0}
|
@@ -50,12 +49,18 @@ module TableDisplay
|
|
50
49
|
end
|
51
50
|
|
52
51
|
# also add any :methods given to the list
|
53
|
-
|
52
|
+
extra_entries.each {|name| column_lengths[name] = 0}
|
54
53
|
|
55
|
-
|
54
|
+
data = collect do |record|
|
56
55
|
# add the values for all the columns in our list in order they are
|
57
|
-
|
58
|
-
value =
|
56
|
+
column_lengths.collect do |attribute, max_width|
|
57
|
+
value = if attribute.respond_to?(:call)
|
58
|
+
attribute.call(record)
|
59
|
+
elsif record.is_a?(Hash)
|
60
|
+
record[attribute]
|
61
|
+
else
|
62
|
+
record.send(attribute)
|
63
|
+
end
|
59
64
|
string_value = display_inspect ? value.inspect : (value.is_a?(String) ? value : value.to_s)
|
60
65
|
column_lengths[attribute] = string_value.mb_chars.length if string_value.mb_chars.length > max_width
|
61
66
|
value.is_a?(Numeric) ? value : string_value # keep Numeric values as-is for now, so we can handle them specially in the output below
|
@@ -69,7 +74,7 @@ module TableDisplay
|
|
69
74
|
heading_string = "|"
|
70
75
|
column_lengths.each do |attribute, max_width|
|
71
76
|
next unless max_width > 0 # skip any columns we never actually saw
|
72
|
-
name = attribute.to_s
|
77
|
+
name = (attribute.respond_to?(:name) ? attribute.name : attribute).to_s
|
73
78
|
|
74
79
|
# the column needs to fit the column header as well as the values
|
75
80
|
if name.mb_chars.length > max_width
|
@@ -83,7 +88,7 @@ module TableDisplay
|
|
83
88
|
rows = [separator_string, heading_string, separator_string]
|
84
89
|
data.each do |data_row|
|
85
90
|
data_string = "|"
|
86
|
-
column_lengths.each_with_index do |(
|
91
|
+
column_lengths.each_with_index do |(_attribute, max_width), index|
|
87
92
|
next unless max_width > 0 # skip any columns we never actually saw
|
88
93
|
value = data_row[index]
|
89
94
|
if value.is_a?(Numeric)
|
data/test/table_display_test.rb
CHANGED
@@ -21,7 +21,7 @@ end
|
|
21
21
|
class Task < ActiveRecord::Base
|
22
22
|
belongs_to :project
|
23
23
|
|
24
|
-
scope :completed,
|
24
|
+
scope :completed, -> { where('completed_at IS NOT NULL') }
|
25
25
|
|
26
26
|
def completed?
|
27
27
|
!completed_at.nil?
|
@@ -47,7 +47,7 @@ class TableDisplayTest < ActiveSupport::TestCase
|
|
47
47
|
|
48
48
|
test "#to_table_display is available on ActiveRecord find results" do # which should be arrays, in fact
|
49
49
|
assert_nothing_raised do
|
50
|
-
Task.
|
50
|
+
Task.all.to_table_display
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -76,36 +76,36 @@ class TableDisplayTest < ActiveSupport::TestCase
|
|
76
76
|
+----+------------+------------------------+------------------+---------------------------+---------------------------+---------------------------+
|
77
77
|
| id | project_id | description | due_on | completed_at | created_at | updated_at |
|
78
78
|
+----+------------+------------------------+------------------+---------------------------+---------------------------+---------------------------+
|
79
|
-
| 1 | 31 | "Write a handy plugin" | Wed, 25 Mar 2009 | 2009-03-24
|
80
|
-
| 2 | 31 | "Blog the plugin" | Sun, 05 Apr 2009 | nil | 2009-03-
|
79
|
+
| 1 | 31 | "Write a handy plugin" | Wed, 25 Mar 2009 | 2009-03-24 10:17:05 +0000 | 2009-03-22 20:11:02 +0000 | 2009-03-24 10:17:05 +0000 |
|
80
|
+
| 2 | 31 | "Blog the plugin" | Sun, 05 Apr 2009 | nil | 2009-03-22 20:11:46 +0000 | 2009-03-22 20:11:46 +0000 |
|
81
81
|
+----+------------+------------------------+------------------+---------------------------+---------------------------+---------------------------+
|
82
82
|
END
|
83
83
|
end
|
84
84
|
|
85
85
|
test "#to_table_display by default includes all the database columns in database order even when not called on a typeless array" do
|
86
|
-
assert_equal <<END.strip, @project.tasks.
|
86
|
+
assert_equal <<END.strip, @project.tasks.all.to_table_display.join("\n")
|
87
87
|
+----+------------+------------------------+------------------+---------------------------+---------------------------+---------------------------+
|
88
88
|
| id | project_id | description | due_on | completed_at | created_at | updated_at |
|
89
89
|
+----+------------+------------------------+------------------+---------------------------+---------------------------+---------------------------+
|
90
|
-
| 1 | 31 | "Write a handy plugin" | Wed, 25 Mar 2009 | 2009-03-24
|
91
|
-
| 2 | 31 | "Blog the plugin" | Sun, 05 Apr 2009 | nil | 2009-03-
|
90
|
+
| 1 | 31 | "Write a handy plugin" | Wed, 25 Mar 2009 | 2009-03-24 10:17:05 +0000 | 2009-03-22 20:11:02 +0000 | 2009-03-24 10:17:05 +0000 |
|
91
|
+
| 2 | 31 | "Blog the plugin" | Sun, 05 Apr 2009 | nil | 2009-03-22 20:11:46 +0000 | 2009-03-22 20:11:46 +0000 |
|
92
92
|
+----+------------+------------------------+------------------+---------------------------+---------------------------+---------------------------+
|
93
93
|
END
|
94
94
|
end
|
95
95
|
|
96
96
|
test "#to_table_display leaves out any attributes not loaded" do
|
97
|
-
assert_equal <<END.strip, @project.tasks.
|
97
|
+
assert_equal <<END.strip, @project.tasks.select("id, project_id, completed_at").to_table_display.join("\n")
|
98
98
|
+----+------------+---------------------------+
|
99
99
|
| id | project_id | completed_at |
|
100
100
|
+----+------------+---------------------------+
|
101
|
-
| 1 | 31 | 2009-03-24
|
101
|
+
| 1 | 31 | 2009-03-24 10:17:05 +0000 |
|
102
102
|
| 2 | 31 | nil |
|
103
103
|
+----+------------+---------------------------+
|
104
104
|
END
|
105
105
|
end
|
106
106
|
|
107
107
|
test "#to_table_display also shows any attributes that are not columns on the underlying table" do
|
108
|
-
assert_equal <<END.strip, @project.tasks.
|
108
|
+
assert_equal <<END.strip, @project.tasks.joins(:project).select("tasks.id, project_id, projects.description AS BigProjectDescription").to_table_display.join("\n")
|
109
109
|
+----+------------+-----------------------------------------------------------------------------------------------------+
|
110
110
|
| id | project_id | BigProjectDescription |
|
111
111
|
+----+------------+-----------------------------------------------------------------------------------------------------+
|
@@ -120,8 +120,8 @@ END
|
|
120
120
|
+----+------------+------------------------+------------------+---------------------------+
|
121
121
|
| id | project_id | description | due_on | updated_at |
|
122
122
|
+----+------------+------------------------+------------------+---------------------------+
|
123
|
-
| 1 | 31 | "Write a handy plugin" | Wed, 25 Mar 2009 | 2009-03-24
|
124
|
-
| 2 | 31 | "Blog the plugin" | Sun, 05 Apr 2009 | 2009-03-
|
123
|
+
| 1 | 31 | "Write a handy plugin" | Wed, 25 Mar 2009 | 2009-03-24 10:17:05 +0000 |
|
124
|
+
| 2 | 31 | "Blog the plugin" | Sun, 05 Apr 2009 | 2009-03-22 20:11:46 +0000 |
|
125
125
|
+----+------------+------------------------+------------------+---------------------------+
|
126
126
|
END
|
127
127
|
end
|
@@ -183,19 +183,56 @@ END
|
|
183
183
|
+----+------------+------------------------+------------------+---------------------------+---------------------------+---------------------------+------------+------------------------+
|
184
184
|
| id | project_id | description | due_on | completed_at | created_at | updated_at | completed? | project_name |
|
185
185
|
+----+------------+------------------------+------------------+---------------------------+---------------------------+---------------------------+------------+------------------------+
|
186
|
-
| 1 | 31 | "Write a handy plugin" | Wed, 25 Mar 2009 | 2009-03-24
|
187
|
-
| 2 | 31 | "Blog the plugin" | Sun, 05 Apr 2009 | nil | 2009-03-
|
186
|
+
| 1 | 31 | "Write a handy plugin" | Wed, 25 Mar 2009 | 2009-03-24 10:17:05 +0000 | 2009-03-22 20:11:02 +0000 | 2009-03-24 10:17:05 +0000 | true | "table_display plugin" |
|
187
|
+
| 2 | 31 | "Blog the plugin" | Sun, 05 Apr 2009 | nil | 2009-03-22 20:11:46 +0000 | 2009-03-22 20:11:46 +0000 | false | "table_display plugin" |
|
188
188
|
+----+------------+------------------------+------------------+---------------------------+---------------------------+---------------------------+------------+------------------------+
|
189
189
|
END
|
190
190
|
end
|
191
|
-
|
191
|
+
|
192
|
+
test "#to_table_display also shows any named callables given as columns" do
|
193
|
+
named_callable = Object.new.tap do |object|
|
194
|
+
object.define_singleton_method(:name) { :sample }
|
195
|
+
object.define_singleton_method(:call) { |record| "(id #{record.id})" }
|
196
|
+
end
|
197
|
+
|
198
|
+
assert_equal <<END.strip, @project.tasks.to_table_display('id', :due_on, :completed?, named_callable).join("\n")
|
199
|
+
+----+------------------+------------+----------+
|
200
|
+
| id | due_on | completed? | sample |
|
201
|
+
+----+------------------+------------+----------+
|
202
|
+
| 1 | Wed, 25 Mar 2009 | true | "(id 1)" |
|
203
|
+
| 2 | Sun, 05 Apr 2009 | false | "(id 2)" |
|
204
|
+
+----+------------------+------------+----------+
|
205
|
+
END
|
206
|
+
end
|
207
|
+
|
208
|
+
test "#to_table_display shows multiple callables given as columns in the order provided" do
|
209
|
+
callable = Object.new.tap do |object|
|
210
|
+
object.define_singleton_method(:call) { |record| "(id #{record.id})" }
|
211
|
+
object.define_singleton_method(:to_s) { "arbitrary to_s" }
|
212
|
+
end
|
213
|
+
|
214
|
+
instrument = Object.new.tap { |o| o.define_singleton_method(:creation) { |record| "(#{record.created_at.to_date})" } }
|
215
|
+
|
216
|
+
due_on_proc = -> (record) { record.due_on }
|
217
|
+
due_on_proc.define_singleton_method(:to_s) { "due_on_proc" }
|
218
|
+
|
219
|
+
assert_equal <<END.strip, @project.tasks.to_table_display('id', due_on_proc, instrument.method(:creation), callable).join("\n")
|
220
|
+
+----+------------------+----------------+----------------+
|
221
|
+
| id | due_on_proc | creation | arbitrary to_s |
|
222
|
+
+----+------------------+----------------+----------------+
|
223
|
+
| 1 | Wed, 25 Mar 2009 | "(2009-03-22)" | "(id 1)" |
|
224
|
+
| 2 | Sun, 05 Apr 2009 | "(2009-03-22)" | "(id 2)" |
|
225
|
+
+----+------------------+----------------+----------------+
|
226
|
+
END
|
227
|
+
end
|
228
|
+
|
192
229
|
test "#to_table_display shows the #to_s format rather than the #inspect format when :inspect => false is set" do
|
193
230
|
assert_equal <<END.strip, @project.tasks.to_table_display(:inspect => false).join("\n")
|
194
231
|
+----+------------+----------------------+------------+---------------------------+---------------------------+---------------------------+
|
195
232
|
| id | project_id | description | due_on | completed_at | created_at | updated_at |
|
196
233
|
+----+------------+----------------------+------------+---------------------------+---------------------------+---------------------------+
|
197
|
-
| 1 | 31 | Write a handy plugin | 2009-03-25 | 2009-03-24
|
198
|
-
| 2 | 31 | Blog the plugin | 2009-04-05 | | 2009-03-
|
234
|
+
| 1 | 31 | Write a handy plugin | 2009-03-25 | 2009-03-24 10:17:05 +0000 | 2009-03-22 20:11:02 +0000 | 2009-03-24 10:17:05 +0000 |
|
235
|
+
| 2 | 31 | Blog the plugin | 2009-04-05 | | 2009-03-22 20:11:46 +0000 | 2009-03-22 20:11:46 +0000 |
|
199
236
|
+----+------------+----------------------+------------+---------------------------+---------------------------+---------------------------+
|
200
237
|
END
|
201
238
|
# note the strings no longer have quotes, the nil is not shown, and the date format happens to be different
|
data/test/test_helper.rb
CHANGED
@@ -1,21 +1,12 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require "../../../config/boot.rb" if File.exist?("../../../config/boot.rb")
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
require 'test/unit'
|
4
|
+
require 'minitest/autorun'
|
7
5
|
require 'active_support'
|
8
6
|
require 'active_support/test_case'
|
9
7
|
require 'active_record'
|
10
8
|
require 'active_record/fixtures'
|
11
9
|
|
12
|
-
begin
|
13
|
-
require 'ruby-debug'
|
14
|
-
Debugger.start
|
15
|
-
rescue LoadError
|
16
|
-
# ruby-debug not installed, no debugging for you
|
17
|
-
end
|
18
|
-
|
19
10
|
ENV['RAILS_ENV'] ||= 'test'
|
20
11
|
FileUtils.mkdir File.join(File.dirname(__FILE__), "log") rescue nil
|
21
12
|
RAILS_DEFAULT_LOGGER = ActiveRecord::Base.logger = Logger.new(File.join(File.dirname(__FILE__), "log", "#{ENV['RAILS_ENV']}.log"))
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: table_display
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Will Bryant
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -90,7 +90,7 @@ files:
|
|
90
90
|
- ".gitignore"
|
91
91
|
- Gemfile
|
92
92
|
- MIT-LICENSE
|
93
|
-
- README
|
93
|
+
- README.md
|
94
94
|
- Rakefile
|
95
95
|
- init.rb
|
96
96
|
- lib/table_display.rb
|
@@ -121,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
121
121
|
version: '0'
|
122
122
|
requirements: []
|
123
123
|
rubyforge_project:
|
124
|
-
rubygems_version: 2.
|
124
|
+
rubygems_version: 2.7.6
|
125
125
|
signing_key:
|
126
126
|
specification_version: 4
|
127
127
|
summary: Adds support for displaying your ActiveRecord tables, named scopes, collections,
|
data/README
DELETED
@@ -1,82 +0,0 @@
|
|
1
|
-
Table Display
|
2
|
-
=============
|
3
|
-
|
4
|
-
Adds support for displaying your ActiveRecord tables, named scopes, collections, or
|
5
|
-
plain arrays in a table view when working in rails console, shell, or email template.
|
6
|
-
|
7
|
-
Enumerable#to_table_display returns the printable strings; Object#pt calls #to_table_display on its
|
8
|
-
first argument and puts out the result.
|
9
|
-
|
10
|
-
Columns you haven't loaded (eg. from using :select) are omitted, and derived/calculated
|
11
|
-
columns (eg. again, from using :select) are added.
|
12
|
-
|
13
|
-
Both #to_table_display and Object#pt methods take :only, :except, and :methods which work like
|
14
|
-
the #to_xml method to change what attributes/methods are output.
|
15
|
-
|
16
|
-
The normal output uses #inspect on the data values to make them printable, so you can
|
17
|
-
see what type the values had. When that's inconvenient or you'd prefer direct display,
|
18
|
-
you can pass the option :inspect => false to disable inspection.
|
19
|
-
|
20
|
-
|
21
|
-
Example
|
22
|
-
=======
|
23
|
-
|
24
|
-
# You can call the to_table_display method:
|
25
|
-
>> puts Project.find(31).tasks.to_table_display
|
26
|
-
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|
27
|
-
| id | project_id | description | due_on | completed_at | created_at | updated_at |
|
28
|
-
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|
29
|
-
| 1 | 31 | "Write a handy plugin" | Wed, 25 Mar 2009 | Tue Mar 24 23:17:05 +1300 2009 | Mon Mar 23 09:11:02 +1300 2009 | Tue Mar 24 23:17:05 +1300 2009 |
|
30
|
-
| 2 | 31 | "Blog the plugin" | Sun, 05 Apr 2009 | nil | Mon Mar 23 09:11:46 +1300 2009 | Mon Mar 23 09:11:46 +1300 2009 |
|
31
|
-
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|
32
|
-
|
33
|
-
# Or equivalently, use "pt" (like pp, but in a table):
|
34
|
-
>> pt Customer.find(31).purchases
|
35
|
-
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|
36
|
-
| id | project_id | description | due_on | completed_at | created_at | updated_at |
|
37
|
-
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|
38
|
-
| 1 | 31 | "Write a handy plugin" | Wed, 25 Mar 2009 | Tue Mar 24 23:17:05 +1300 2009 | Mon Mar 23 09:11:02 +1300 2009 | Tue Mar 24 23:17:05 +1300 2009 |
|
39
|
-
| 2 | 31 | "Blog the plugin" | Sun, 05 Apr 2009 | nil | Mon Mar 23 09:11:46 +1300 2009 | Mon Mar 23 09:11:46 +1300 2009 |
|
40
|
-
+----+------------+------------------------+------------------+--------------------------------+--------------------------------+--------------------------------+
|
41
|
-
|
42
|
-
|
43
|
-
# Like to_xml, you can pass a :methods option to add the output methods on your models, and you can pass :only or :except
|
44
|
-
# to (respectively) show only certain columns or show all except certain columns:
|
45
|
-
>> puts Customer.find(31).purchases.to_table_display(:only => [:id, :description], :methods => [:met_due_date?])
|
46
|
-
+----+------------------------+---------------+
|
47
|
-
| id | description | met_due_date? |
|
48
|
-
+----+------------------------+---------------+
|
49
|
-
| 1 | "Write a handy plugin" | true |
|
50
|
-
| 2 | "Blog the plugin" | nil |
|
51
|
-
+----+------------------------+---------------+
|
52
|
-
|
53
|
-
# pt accepts and passes on all options as well:
|
54
|
-
>> pt Customer.find(31).purchases, :only => [:id, :description], :methods => [:met_due_date?]
|
55
|
-
+----+------------------------+---------------+
|
56
|
-
| id | description | met_due_date? |
|
57
|
-
+----+------------------------+---------------+
|
58
|
-
| 1 | "Write a handy plugin" | true |
|
59
|
-
| 2 | "Blog the plugin" | nil |
|
60
|
-
+----+------------------------+---------------+
|
61
|
-
|
62
|
-
# There's a convenient equivalent syntax for displaying an ordered list of columns, like :only and :methods:
|
63
|
-
>> puts Customer.find(31).purchases.to_table_display :id, :description, :met_due_date?
|
64
|
-
# which provides:
|
65
|
-
>> pt Customer.find(31).purchases, :id, :description, :met_due_date?
|
66
|
-
# resulting in the same output as above.
|
67
|
-
|
68
|
-
|
69
|
-
# If :inspect => false is used, the values will be shown in #to_s form rather than #inspect form:
|
70
|
-
>> pt Customer.find(31).purchases, :only => [:id, :description, :due_on, :completed_at]
|
71
|
-
+----+----------------------+------------+--------------------------------+
|
72
|
-
| id | description | due_on | completed_at |
|
73
|
-
+----+----------------------+------------+--------------------------------+
|
74
|
-
| 1 | Write a handy plugin | 2009-03-25 | Tue Mar 24 23:17:05 +1300 2009 |
|
75
|
-
| 2 | Blog the plugin | 2009-04-05 | |
|
76
|
-
+----+----------------------+------------+--------------------------------+
|
77
|
-
|
78
|
-
|
79
|
-
# Note that in all cases, values descending from Numeric are right-aligned, while all other values are left-aligned.
|
80
|
-
|
81
|
-
|
82
|
-
Copyright (c) 2009 Will Bryant, Sekuda Ltd, released under the MIT license
|