montoc 0.0.4 → 0.0.5
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 +4 -4
- data/.gitignore +1 -0
- data/lib/montoc.rb +71 -26
- data/lib/montoc/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64032cbe3ce6bb3550e177855762814a6538b056
|
4
|
+
data.tar.gz: 960325a626edc2850bc4b4cee3f0d6277a402e87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc8e5b9ab88d4e75bf4b57c83d71e6a7f236f33ffd9da8eddc999d7faa41232f713c3ece848110a10bdcd0f943a022829793f822951ab18c739424f683502206
|
7
|
+
data.tar.gz: 7ca648a7c912437ee60c2143d136ec1a6dd72ee7fe4e97177eca82ef2cc2f87cc8c9f2681c531a104cdb10f0514cd2f593259045a189c55e7f716e56391682a7
|
data/lib/montoc.rb
CHANGED
@@ -9,11 +9,9 @@ module Montoc
|
|
9
9
|
|
10
10
|
def initialize text = ""
|
11
11
|
@text = text
|
12
|
-
@rows = rows
|
13
|
-
@columns = columns
|
14
12
|
@format = :virgin
|
15
13
|
yield self if block_given?
|
16
|
-
|
14
|
+
DocBox.know self
|
17
15
|
end
|
18
16
|
|
19
17
|
# Override Object#to_s, so that puts or other methods call this
|
@@ -25,15 +23,15 @@ module Montoc
|
|
25
23
|
return @text
|
26
24
|
end
|
27
25
|
|
28
|
-
|
29
|
-
def self.
|
26
|
+
@original_text = {}
|
27
|
+
def self.know docbox
|
30
28
|
fresh_key = docbox.object_id.to_s(36).to_sym
|
31
|
-
|
29
|
+
@original_text[fresh_key] = docbox.instance_eval {@text}
|
32
30
|
end
|
33
31
|
|
34
|
-
def self.
|
32
|
+
def self.recall docbox
|
35
33
|
fresh_key = docbox.object_id.to_s(36).to_sym
|
36
|
-
return
|
34
|
+
return @original_text[fresh_key]
|
37
35
|
end
|
38
36
|
|
39
37
|
def + string
|
@@ -46,22 +44,34 @@ module Montoc
|
|
46
44
|
|
47
45
|
def text= string
|
48
46
|
@text = string
|
49
|
-
|
47
|
+
DocBox.know self
|
50
48
|
end
|
51
49
|
|
52
50
|
# Find the longest lines in text and return the first match.
|
53
51
|
# to_s is called from the longest_line to avoid chomp being called
|
54
52
|
# from nil, in the case of text = ""
|
55
|
-
|
53
|
+
# @note Should be used when the @format is still in the :virgin state.
|
54
|
+
# @return [String] Return the first longest line in text
|
55
|
+
def longest_line
|
56
56
|
longest_line = squeeze_space.lines.max_by(&:length)
|
57
|
-
longest_line = longest_line.to_s.chomp
|
57
|
+
longest_line = longest_line.to_s.chomp
|
58
58
|
return longest_line
|
59
59
|
end
|
60
60
|
|
61
|
+
# Find the number of lines in a text or the number of rows if you see
|
62
|
+
# it as a two dimensional matrix of chars.
|
63
|
+
# @return [Fixnum] Number of lines in a text
|
61
64
|
def rows
|
62
65
|
return @text.lines.length
|
63
66
|
end
|
64
67
|
|
68
|
+
# Find the contents of a specific row or line of a text.
|
69
|
+
# @note The specified number should start from 1 to number of rows. It will
|
70
|
+
# return nil if it's more than the total number of rows and raise
|
71
|
+
# ArgumentError if lower than 1.
|
72
|
+
# @param row_no [Fixnum] Specific row number, between 1 and total number
|
73
|
+
# of rows.
|
74
|
+
# @return [String] Return line at specified row
|
65
75
|
def row row_no = 1
|
66
76
|
raise ArgumentError, "Row number cannot be lower than 1." \
|
67
77
|
if row_no < 1
|
@@ -70,10 +80,22 @@ module Montoc
|
|
70
80
|
return row_text
|
71
81
|
end
|
72
82
|
|
83
|
+
# Find the length of the longest line or number of columns in a matricized
|
84
|
+
# text.
|
85
|
+
# @return [Fixnum] Number of columns in a text
|
73
86
|
def columns
|
74
87
|
return longest_line.length
|
75
88
|
end
|
76
89
|
|
90
|
+
# Find the contents of a specific column of a text.
|
91
|
+
# @note Should be used in matricized text, otherwise it could return some
|
92
|
+
# nil even though the column number specified less than the longest line.
|
93
|
+
# The specified number should start from 1 to number of columns. It will
|
94
|
+
# return nil if it's more than the total number of columns and raise
|
95
|
+
# ArgumentError if lower than 1.
|
96
|
+
# @param col_no [Fixnum] Specific column number, between 1 and total number
|
97
|
+
# of rows.
|
98
|
+
# @return [String] Return string at specified column of matricized text
|
77
99
|
def column col_no = 1
|
78
100
|
raise ArgumentError, "Column number cannot be lower than 1." \
|
79
101
|
if col_no < 1
|
@@ -88,18 +110,36 @@ module Montoc
|
|
88
110
|
return column_text
|
89
111
|
end
|
90
112
|
|
91
|
-
|
113
|
+
# Make the object plain text into a rectangular (two dimensional
|
114
|
+
# matrix) text by filling the empty spaces with spaces.
|
115
|
+
# @note This will do nothing if the text is already a matrix
|
116
|
+
# @param align [Symbol] The alignment or format state, the default
|
117
|
+
# is `:left`
|
118
|
+
# @param columns [Fixnum] Number of columns to which the plain text
|
119
|
+
# converted.
|
120
|
+
# @return [DocBox, nil] The DocBox object after the content/text made
|
121
|
+
# into matrix or nil if the text is already a matrix before this
|
122
|
+
# method called.
|
123
|
+
def matricize align = :left, column_width = 72
|
92
124
|
if !matrix?
|
93
|
-
reflow!
|
125
|
+
reflow! column_width
|
94
126
|
method(align.id2name + "!").call
|
95
127
|
end
|
96
128
|
end
|
97
129
|
|
98
|
-
|
130
|
+
# Force making/remaking an object text into a matrix no matter it's
|
131
|
+
# already a matrix or not.
|
132
|
+
# @param (see #matricize)
|
133
|
+
# @return [DocBox] The DocBox object after the content/text made into
|
134
|
+
# matrix.
|
135
|
+
def matricize! align = :left, column_width = 72
|
99
136
|
squeeze_space!
|
100
|
-
matricize align,
|
137
|
+
matricize align, column_width
|
101
138
|
end
|
102
139
|
|
140
|
+
# Check if the object text is already a matrix.
|
141
|
+
# @return [Boolean] Return `true` if the text already a matrix and
|
142
|
+
# `false` if not.
|
103
143
|
def matrix?
|
104
144
|
@text.each_line do |line|
|
105
145
|
return false if line.to_s.chomp.length != columns
|
@@ -107,7 +147,11 @@ module Montoc
|
|
107
147
|
return true
|
108
148
|
end
|
109
149
|
|
110
|
-
|
150
|
+
# Make two dimensional array of chars from the current object text
|
151
|
+
# @param (see #matricize)
|
152
|
+
# @return [Array] Return two dimensional array of chars from the
|
153
|
+
# current object text
|
154
|
+
def matrix align = :left, columns = 72
|
111
155
|
matricize align, columns
|
112
156
|
matrix_arr = []
|
113
157
|
@text.each_line.with_index do |line, index|
|
@@ -118,7 +162,7 @@ module Montoc
|
|
118
162
|
|
119
163
|
def virginize
|
120
164
|
@format = :virgin
|
121
|
-
@text =
|
165
|
+
@text = DocBox.recall self
|
122
166
|
return self
|
123
167
|
end
|
124
168
|
|
@@ -127,18 +171,19 @@ module Montoc
|
|
127
171
|
return false
|
128
172
|
end
|
129
173
|
|
174
|
+
|
130
175
|
def left
|
131
176
|
new_text = squeeze_space.split("\n").map do |line|
|
132
177
|
line = line.to_s.ljust columns
|
133
178
|
end .join "\n"
|
134
|
-
return
|
179
|
+
return DocBox.new(new_text)
|
135
180
|
end
|
136
181
|
|
137
182
|
def right
|
138
183
|
new_text = squeeze_space.split("\n").map do |line|
|
139
184
|
line = line.chomp.strip.rjust columns
|
140
185
|
end .join "\n"
|
141
|
-
return
|
186
|
+
return DocBox.new(new_text)
|
142
187
|
end
|
143
188
|
|
144
189
|
def center
|
@@ -146,7 +191,7 @@ module Montoc
|
|
146
191
|
line = line.chomp.strip.rjust columns-(columns-line.length)/2
|
147
192
|
line = line.ljust columns
|
148
193
|
end .join "\n"
|
149
|
-
return
|
194
|
+
return DocBox.new(new_text)
|
150
195
|
end
|
151
196
|
|
152
197
|
def squeeze_space
|
@@ -268,7 +313,7 @@ module Montoc
|
|
268
313
|
newer_text.chomp!
|
269
314
|
|
270
315
|
# return new object with new text
|
271
|
-
return
|
316
|
+
return DocBox.new(newer_text)
|
272
317
|
end
|
273
318
|
|
274
319
|
def justify! left_align_EOP = true
|
@@ -282,7 +327,7 @@ module Montoc
|
|
282
327
|
return longest_word
|
283
328
|
end
|
284
329
|
|
285
|
-
def reflow column_width =
|
330
|
+
def reflow column_width = 72
|
286
331
|
raise ArgumentError, "Columns cannot be shorter than the longest word." \
|
287
332
|
if columns < longest_word.length
|
288
333
|
new_text = ""
|
@@ -308,15 +353,15 @@ module Montoc
|
|
308
353
|
new_text = new_paragraph.join("\n")
|
309
354
|
|
310
355
|
unless @format == :virgin
|
311
|
-
new_text =
|
356
|
+
new_text = DocBox.new(new_text).method(@format).call.text
|
312
357
|
else
|
313
|
-
return
|
358
|
+
return DocBox.new(new_text).left # default alignment
|
314
359
|
end
|
315
360
|
|
316
|
-
return
|
361
|
+
return DocBox.new(new_text)
|
317
362
|
end
|
318
363
|
|
319
|
-
def reflow! column_width =
|
364
|
+
def reflow! column_width = 72
|
320
365
|
obj = reflow(column_width)
|
321
366
|
@text = obj.text
|
322
367
|
@format = obj.format
|
data/lib/montoc/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: montoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adrian Setyadi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|