attached 0.0.7 → 0.0.8
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.
- data/lib/attached.rb +35 -5
- metadata +2 -2
data/lib/attached.rb
CHANGED
@@ -104,15 +104,22 @@ module Attached
|
|
104
104
|
|
105
105
|
def validates_attached_size(name, options = {})
|
106
106
|
|
107
|
-
|
107
|
+
zero = (0.0 / 1.0)
|
108
|
+
infi = (1.0 / 0.0)
|
108
109
|
|
109
|
-
minimum = options[:minimum] || options[:in] && options[:in].first ||
|
110
|
-
maximum = options[:maximum] || options[:in] && options[:in].last ||
|
110
|
+
minimum = options[:minimum] || options[:in] && options[:in].first || zero
|
111
|
+
maximum = options[:maximum] || options[:in] && options[:in].last || infi
|
112
|
+
|
113
|
+
message = options[:message]
|
114
|
+
message ||= "size must be specified" if minimum == zero && maximum == infi
|
115
|
+
message ||= "size must be a minimum of :minimum" if maximum == infi
|
116
|
+
message ||= "size must be a maximum of :maximum" if minimum == zero
|
117
|
+
message ||= "size must be between :minimum and :maximum bytes"
|
111
118
|
|
112
119
|
range = minimum..maximum
|
113
120
|
|
114
|
-
message.gsub!(/:minimum/, number_to_human_size(minimum))
|
115
|
-
message.gsub!(/:maximum/, number_to_human_size(maximum))
|
121
|
+
message.gsub!(/:minimum/, number_to_human_size(minimum)) unless minimum == zero
|
122
|
+
message.gsub!(/:maximum/, number_to_human_size(maximum)) unless maximum == infi
|
116
123
|
|
117
124
|
validates_inclusion_of :"#{name}_size", :in => range, :message => message,
|
118
125
|
:if => options[:if], :unless => options[:unless]
|
@@ -141,6 +148,29 @@ module Attached
|
|
141
148
|
end
|
142
149
|
|
143
150
|
|
151
|
+
private
|
152
|
+
|
153
|
+
|
154
|
+
SINGULAR = 1
|
155
|
+
|
156
|
+
def number_to_human_size(number, options = {})
|
157
|
+
return if number == 0.0 / 1.0
|
158
|
+
return if number == 1.0 / 0.0
|
159
|
+
|
160
|
+
base = 1024
|
161
|
+
units = ["byte", "kilobyte", "megabyte", "gigabyte", "terabyte", "petabyte"]
|
162
|
+
|
163
|
+
exponent = (Math.log(number) / Math.log(base)).floor
|
164
|
+
|
165
|
+
number /= base ** exponent
|
166
|
+
unit = units[exponent]
|
167
|
+
|
168
|
+
number == SINGULAR ? unit.gsub!(/s$/, '') : unit.gsub!(/$/, 's')
|
169
|
+
|
170
|
+
"#{number} #{unit}"
|
171
|
+
end
|
172
|
+
|
173
|
+
|
144
174
|
end
|
145
175
|
|
146
176
|
|