graph-ruby 0.0.0 → 0.0.1
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/lib/graph-ruby.rb +96 -48
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b72695b9cdfdd262fba4ebc54bd4bee99a0a24d
|
4
|
+
data.tar.gz: b8e838de622ce8ee02fbdf7bfe3af7a1912e8cff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37284a9f00dc41609d1dda59fd97662edccdbf8d75a0f23e7b7121994eead36047715c96b8e35c745087f1f3fab6a861d9c89c372c6588236fb701782b816141
|
7
|
+
data.tar.gz: 9d1692f8e923bda081dec5f36a8376076aeeb51e5bc37f4eb0e70d5823fbca79416cc2963e8aa7d51ab8231650a732a77e6c2d60399e6ed6a599856cd5f4c78e
|
data/lib/graph-ruby.rb
CHANGED
@@ -1,53 +1,113 @@
|
|
1
1
|
class GraphRuby
|
2
2
|
|
3
|
-
def self.histogram(
|
4
|
-
|
3
|
+
def self.histogram!(args)
|
4
|
+
View.clear_screen
|
5
|
+
self.histogram(args)
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.histogram(args)
|
9
|
+
|
10
|
+
data = args[:data]
|
11
|
+
percent = args[:percent] || false
|
12
|
+
axis = args[:axis] || 1
|
13
|
+
|
14
|
+
ValidateData.run(data)
|
15
|
+
|
16
|
+
hist = HistogramHelper.new(data, axis)
|
17
|
+
header_padding = hist.padding
|
18
|
+
View.print_heading(data, header_padding)
|
19
|
+
|
20
|
+
hist.convert_to_percentages if(percent)
|
21
|
+
|
22
|
+
View.print_numerical_value(data, header_padding)
|
23
|
+
hist.calculate_axis
|
24
|
+
View.print_marks(data, header_padding)
|
5
25
|
end
|
6
26
|
|
7
27
|
end
|
8
28
|
|
29
|
+
class ValidateData
|
9
30
|
|
10
|
-
|
31
|
+
def self.run(data)
|
32
|
+
@data = data
|
33
|
+
self.isHash
|
34
|
+
self.valuesAreNumbers
|
35
|
+
end
|
11
36
|
|
37
|
+
def self.isHash
|
38
|
+
raise "Data must be a hash" if (!@data.is_a?(Hash))
|
39
|
+
end
|
12
40
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
41
|
+
def self.valuesAreNumbers
|
42
|
+
@data.each do |key, value|
|
43
|
+
if (!value.is_a?(Fixnum) && !value.is_a?(Float))
|
44
|
+
raise "Values in data hash must be numbers"
|
45
|
+
end
|
46
|
+
end
|
18
47
|
end
|
19
48
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
def clear_screen
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
# my_hash = {a: 5, b: 6, c: 10, d: 2, e: 9}
|
54
|
+
class View
|
55
|
+
|
56
|
+
def self.clear_screen
|
31
57
|
puts "\e[H\e[2J"
|
32
58
|
end
|
33
59
|
|
34
|
-
def print_heading
|
35
|
-
|
36
|
-
print "%-#{
|
60
|
+
def self.print_heading(data, padding)
|
61
|
+
data.each do |key, value|
|
62
|
+
print "%-#{padding}s" % "#{key}"
|
37
63
|
end
|
38
64
|
puts ""
|
39
|
-
puts "-"*((
|
65
|
+
puts "-"*((data.length*padding)-3)
|
40
66
|
end
|
41
67
|
|
42
|
-
def
|
43
|
-
|
44
|
-
print "%-#{
|
68
|
+
def self.print_numerical_value(data, padding)
|
69
|
+
data.each do |key, value|
|
70
|
+
print "%-#{padding}s" % "#{value}"
|
45
71
|
end
|
46
72
|
puts ""
|
47
73
|
end
|
48
74
|
|
75
|
+
def self.print_marks(data, padding)
|
76
|
+
all_zero = false
|
77
|
+
while !all_zero
|
78
|
+
all_zero = true
|
79
|
+
data.each do |key, value|
|
80
|
+
if value > 0
|
81
|
+
print print "%-#{padding}s" % "X"
|
82
|
+
data[key] -=1
|
83
|
+
all_zero = false
|
84
|
+
else
|
85
|
+
print "%-#{padding}s" % " "
|
86
|
+
end
|
87
|
+
end
|
88
|
+
puts " "
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
class HistogramHelper
|
97
|
+
|
98
|
+
attr_reader :padding, :data
|
99
|
+
|
100
|
+
def initialize(my_hash = {}, axis = 1)
|
101
|
+
@data = my_hash
|
102
|
+
@axis = axis
|
103
|
+
@padding = calculate_padding
|
104
|
+
end
|
105
|
+
|
106
|
+
|
49
107
|
def calculate_axis
|
50
|
-
|
108
|
+
if (@axis >0)
|
109
|
+
@data.each {|key, value| @data[key] = value/@axis}
|
110
|
+
end
|
51
111
|
end
|
52
112
|
|
53
113
|
def convert_to_percentages
|
@@ -67,33 +127,21 @@ class Histogram
|
|
67
127
|
end
|
68
128
|
|
69
129
|
|
70
|
-
def print_values
|
71
|
-
all_zero = false
|
72
|
-
while !all_zero
|
73
|
-
all_zero = true
|
74
|
-
@data.each do |key, value|
|
75
|
-
if value > 0
|
76
|
-
print print "%-#{@padding}s" % "X"
|
77
|
-
@data[key] -=1
|
78
|
-
all_zero = false
|
79
|
-
else
|
80
|
-
print "%-#{@padding}s" % " "
|
81
|
-
end
|
82
|
-
end
|
83
|
-
puts " "
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
130
|
|
88
131
|
def calculate_padding
|
89
|
-
|
132
|
+
longest_key_length = 0
|
90
133
|
@data.each do |key, value|
|
91
|
-
|
134
|
+
longest_key_length = key.length if key.length > longest_key_length
|
92
135
|
end
|
93
136
|
|
94
|
-
|
137
|
+
return longest_key_length + 3
|
95
138
|
end
|
96
139
|
|
97
140
|
|
98
141
|
|
99
|
-
end
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
|