friendly_extensions 0.0.8 → 0.0.61
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/alphanumeric.rb +2 -23
- data/lib/array.rb +16 -91
- data/lib/friendly_extensions.rb +2 -2
- data/lib/nil_class.rb +2 -5
- data/lib/numbers.rb +37 -41
- data/lib/smart_currency.rb +2 -4
- data/lib/string_and_more.rb +118 -142
- data/test/array_test.rb +3 -25
- data/test/numeric_test.rb +1 -15
- metadata +8 -19
- data/app/helpers/friends_forms_helper.rb +0 -27
- data/app/helpers/friends_labeled_form_helper.rb +0 -124
- data/app/models/friends_label.rb +0 -22
- data/config/initializers/values.rb +0 -24
- data/db/migrate/20140326005600_create_labels.rb +0 -13
- data/lib/friendly_extensions/engine.rb +0 -10
- data/test/array_test.rb.orig +0 -221
- data/test/numeric_test.rb.orig +0 -94
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ebc04c86f165e85cce604a03cbe21ffa685304e0
|
4
|
+
data.tar.gz: 3826585ee6fb0d1544bbde4e4b93519604a3a45b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3dc232df0e30edef609b48f461b8fa099e5e33ff19172f0b6db7f42a3cad3a3e2ac398fdf0abb934946e899bff56da43bf68d9257be95ec30e61305a0a805c5d
|
7
|
+
data.tar.gz: eb1f47fa799d108f31025ac86c3fad18d77ba99d99e546530509efafc663f9589429957c6ef71dc56c9b9e8921e987a02a45a9041e94798560f4e03061f465de
|
data/lib/alphanumeric.rb
CHANGED
@@ -3,10 +3,6 @@ module Alphanumeric
|
|
3
3
|
|
4
4
|
# Give every year a letter
|
5
5
|
# TODO: should be automatically computed
|
6
|
-
LETTERS = "abcdefghijklmnopqrstuvwxyz".upcase.split('')
|
7
|
-
|
8
|
-
START_YEAR = 1960
|
9
|
-
|
10
6
|
YEAR_LETTERS = {
|
11
7
|
2009 => "A",
|
12
8
|
2010 => "B",
|
@@ -52,25 +48,8 @@ module Alphanumeric
|
|
52
48
|
2050 => "PA",
|
53
49
|
}
|
54
50
|
|
55
|
-
def self.year_letter(year=Time.now.year
|
56
|
-
|
57
|
-
steps = []
|
58
|
-
|
59
|
-
d = (year - START_YEAR)
|
60
|
-
n = d.fdiv(letters.size).ceil
|
61
|
-
string = ""
|
62
|
-
|
63
|
-
n.times do |i|
|
64
|
-
# First
|
65
|
-
if i == 0
|
66
|
-
string << letters[d%letters.size]
|
67
|
-
else
|
68
|
-
x = d.fdiv(letters.size*(i+1)).round
|
69
|
-
string << letters[x]
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
return string
|
51
|
+
def self.year_letter(year=Time.now.year)
|
52
|
+
YEAR_LETTERS[year]
|
74
53
|
end
|
75
54
|
|
76
55
|
end
|
data/lib/array.rb
CHANGED
@@ -16,20 +16,20 @@ module ArrayExt
|
|
16
16
|
# Get avg. value from, either from numeric values or from
|
17
17
|
# values from a object included in array
|
18
18
|
def avg(attribute = nil)
|
19
|
-
value = self
|
19
|
+
@value = self
|
20
20
|
if attribute.nil?
|
21
|
-
value.delete(nil)
|
22
|
-
value = self.map {|r| r.to_f }
|
21
|
+
@value.delete(nil)
|
22
|
+
@value = self.map {|r| r.to_f }
|
23
23
|
else
|
24
|
-
value = self
|
24
|
+
@value = self
|
25
25
|
# Bei fehlerhaften attribute wird nil gespeichert
|
26
|
-
value = value.map {|r| r.send(attribute.to_sym).to_f rescue nil}
|
26
|
+
@value = @value.map {|r| r.send(attribute.to_sym).to_f rescue nil}
|
27
27
|
# Leere Werte löschen
|
28
|
-
value.delete(nil)
|
28
|
+
@value.delete(nil)
|
29
29
|
end
|
30
|
-
# Divide by zero
|
31
|
-
value.size == 0 ? size = 1 : size = value.size
|
32
|
-
value.sum / size
|
30
|
+
# Divide by zero ausschliessen
|
31
|
+
@value.size == 0 ? size = 1 : size = @value.size
|
32
|
+
@value.sum / size
|
33
33
|
end
|
34
34
|
|
35
35
|
|
@@ -134,15 +134,15 @@ module ArrayExt
|
|
134
134
|
|
135
135
|
# break array into n arrays
|
136
136
|
def seperate(n = 8)
|
137
|
-
f = n
|
137
|
+
@f = n
|
138
138
|
aks_size = self.size
|
139
|
-
rest = aks_size % f
|
139
|
+
rest = aks_size % @f
|
140
140
|
|
141
|
-
stack = ((aks_size - rest) / f)
|
141
|
+
@stack = ((aks_size - rest) / @f)
|
142
142
|
|
143
|
-
arrays = (1
|
143
|
+
arrays = (1..@f).to_a
|
144
144
|
|
145
|
-
arrays.map! {|i| self.first(stack*i).last(stack) }
|
145
|
+
arrays.map! {|i| self.first(@stack*i).last(@stack) }
|
146
146
|
arrays[-1] += self.last(rest) if rest != 0
|
147
147
|
#arrays.last.pop if (arrays.last.last.empty? || arrays.last.last.blank?)
|
148
148
|
return arrays
|
@@ -164,7 +164,7 @@ module ArrayExt
|
|
164
164
|
def to_sql
|
165
165
|
return "(NULL)" if self.empty?
|
166
166
|
if self.first.is_a?(Numeric)
|
167
|
-
return "(#{self.
|
167
|
+
return "(#{self.join(',')})"
|
168
168
|
else
|
169
169
|
return "(#{self.map{|i| "'#{i.to_s}'"}.join(',')})"
|
170
170
|
end
|
@@ -199,82 +199,7 @@ module ArrayExt
|
|
199
199
|
else
|
200
200
|
self.join(sep)
|
201
201
|
end
|
202
|
-
end
|
203
|
-
|
204
|
-
|
205
|
-
def interpolate(filtered_value = nil, options = {})
|
206
|
-
begin
|
207
|
-
|
208
|
-
int_start_value = nil
|
209
|
-
int_end_value = nil
|
210
|
-
int_from = 0
|
211
|
-
int_to = 0
|
212
|
-
int_steps = 0
|
213
|
-
|
214
|
-
array_with_interpolation = []
|
215
|
-
|
216
|
-
self.each_with_index do |x,i|
|
217
|
-
if i > 0
|
218
|
-
if x != filtered_value
|
219
|
-
# Wenn der letze ein fehler war ist die strecke zuende
|
220
|
-
if self[i-1] == filtered_value
|
221
|
-
|
222
|
-
if i-1 == 0
|
223
|
-
# Berechnung anstieg der linearfunktion zwischen Start-und Endpunkt
|
224
|
-
#
|
225
|
-
m = (self[i+1]-x)
|
226
|
-
|
227
|
-
array_with_interpolation[0] = x-m
|
228
|
-
array_with_interpolation << x
|
229
|
-
|
230
|
-
else
|
231
|
-
int_end_value = x
|
232
|
-
int_to = i
|
233
|
-
|
234
|
-
# Berechnung anstieg der linearfunktion zwischen Start-und Endpunkt
|
235
|
-
m = (int_end_value-int_start_value).fdiv((int_to-int_from))
|
236
|
-
|
237
|
-
# Fülle fehlende werte mit werten (y = mx + b)
|
238
|
-
int_steps.times {|mi| array_with_interpolation << (int_start_value+((mi+1)*m)) }
|
239
|
-
array_with_interpolation << int_end_value
|
240
|
-
|
241
|
-
# Reset all values
|
242
|
-
int_start_value = int_end_value
|
243
|
-
int_end_value = nil
|
244
|
-
int_from = 0
|
245
|
-
int_to = 0
|
246
|
-
int_steps = 0
|
247
|
-
puts array_with_interpolation.inspect
|
248
|
-
end
|
249
|
-
else
|
250
|
-
int_start_value = x
|
251
|
-
array_with_interpolation << x
|
252
|
-
end
|
253
|
-
# Wenn letzer wert fehlerhaft
|
254
|
-
elsif i == self.size-1 && x == filtered_value
|
255
|
-
# Berechnung anstieg der linearfunktion zwischen Start-und Endpunkt
|
256
|
-
# Berechnung über gesamtes array
|
257
|
-
m = (array_with_interpolation.last-array_with_interpolation.first).fdiv(array_with_interpolation.size-1)
|
258
|
-
array_with_interpolation << (array_with_interpolation.last+m)
|
259
|
-
else
|
260
|
-
int_steps += 1
|
261
|
-
int_from = i-int_steps
|
262
|
-
end
|
263
|
-
|
264
|
-
else
|
265
|
-
int_start_value = x
|
266
|
-
array_with_interpolation << x
|
267
|
-
end
|
268
|
-
|
269
|
-
end
|
270
|
-
|
271
|
-
return array_with_interpolation
|
272
|
-
rescue
|
273
|
-
puts "WARNING: Interpolation not possible!".red
|
274
|
-
return self
|
275
|
-
end
|
276
|
-
|
277
|
-
end
|
202
|
+
end
|
278
203
|
|
279
204
|
end
|
280
205
|
end
|
data/lib/friendly_extensions.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
# All dit janze zeug laden
|
3
3
|
|
4
|
-
require "friendly_extensions/engine"
|
5
|
-
|
6
4
|
require "array"
|
5
|
+
|
7
6
|
require "date_n_time"
|
8
7
|
require "numbers"
|
9
8
|
require "hash"
|
10
9
|
require "string_and_more"
|
11
10
|
require "boolean"
|
11
|
+
|
12
12
|
require "nil_class"
|
13
13
|
|
14
14
|
# SmartCurrency jetzt auch hier (26.03.2013, 16:30, Florian Eck)
|
data/lib/nil_class.rb
CHANGED
data/lib/numbers.rb
CHANGED
@@ -2,14 +2,37 @@
|
|
2
2
|
# Numeric Extensions
|
3
3
|
module Numbers
|
4
4
|
|
5
|
+
# returns an array with all prime numbers up to limit
|
6
|
+
def self.prime_numbers(limit = 1_000_000, options = {:verbose => false})
|
7
|
+
i = 1; divisors = [2]; primzahlen = []
|
8
|
+
t = Time.now
|
9
|
+
while i <= limit do
|
10
|
+
p = true
|
11
|
+
divisors.each do |d|
|
12
|
+
if i%d == 0 && d != i
|
13
|
+
p = false
|
14
|
+
break
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
if p == true
|
19
|
+
puts i if options[:verbose] == true
|
20
|
+
primzahlen << i
|
21
|
+
end
|
22
|
+
|
23
|
+
i += 1
|
24
|
+
divisors << divisors.last+1
|
25
|
+
end
|
26
|
+
|
27
|
+
puts "Took #{(t-Time.now).abs.round(2)} sec." if options[:verbose] == true
|
28
|
+
return primzahlen
|
29
|
+
end
|
30
|
+
|
5
31
|
Numeric.class_eval do
|
6
32
|
|
7
33
|
# Convert Number to numeric german style with precision
|
8
34
|
def to_euro(label = nil, options = {})
|
9
35
|
options[:precision] ||= 2
|
10
|
-
|
11
|
-
options[:precision] = 0 if options[:fix_int] == true && self.is_a?(Integer)
|
12
|
-
|
13
36
|
result = ActionController::Base.helpers.number_with_precision(self, :precision => options[:precision], :separator => ",", :delimiter => ".")
|
14
37
|
|
15
38
|
if options[:pre] == true && self > 0
|
@@ -28,11 +51,13 @@ module Numbers
|
|
28
51
|
|
29
52
|
# Convert Number to numeric german style without precision
|
30
53
|
def to_de(label=nil)
|
31
|
-
self.
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
54
|
+
nr = self.round.to_i
|
55
|
+
result = ActionController::Base.helpers.number_with_precision(self, :precision => 0, :separator => ",", :delimiter => ".")
|
56
|
+
if !label.blank?
|
57
|
+
return [result, label].join(" ").html_safe
|
58
|
+
else
|
59
|
+
return result
|
60
|
+
end
|
36
61
|
end
|
37
62
|
|
38
63
|
# Inflate number, y = duration of years, f = percentage
|
@@ -70,12 +95,12 @@ module Numbers
|
|
70
95
|
|
71
96
|
# tested
|
72
97
|
def min(ref)
|
73
|
-
[self
|
98
|
+
[self, ref].min
|
74
99
|
end
|
75
100
|
|
76
101
|
# tested
|
77
102
|
def max(ref)
|
78
|
-
[self
|
103
|
+
[self, ref].max
|
79
104
|
end
|
80
105
|
|
81
106
|
# Wert zwischen den Grenzen, ansonsten ober-oder unterkante
|
@@ -110,10 +135,6 @@ module Numbers
|
|
110
135
|
return values.join(':')
|
111
136
|
end
|
112
137
|
end
|
113
|
-
|
114
|
-
def deg2rad
|
115
|
-
self * Math::PI / 180
|
116
|
-
end
|
117
138
|
|
118
139
|
|
119
140
|
end
|
@@ -140,33 +161,8 @@ module Numbers
|
|
140
161
|
def days_to_months(options = {:s_days => "Tage", :s_months => "Monate", :s_sep => "und"})
|
141
162
|
x = [self/30, self%30]
|
142
163
|
"#{x[0]} #{options[:s_months]} #{options[:s_sep]} #{x[1]} #{options[:s_days]}"
|
143
|
-
end
|
144
|
-
|
145
|
-
|
146
|
-
# Split number in smallest prime factors
|
147
|
-
def prime_factors(options = {})
|
148
|
-
options[:nrs] ||= Math.sqrt(self).floor.prime_numbers
|
149
|
-
options[:nrs].each_with_index do |n,i|
|
150
|
-
if self%n == 0
|
151
|
-
return [n, (self/n).prime_factors(:nrs => options[:nrs])].flatten.except(1)
|
152
|
-
elsif i == options[:nrs].size-1
|
153
|
-
return [self]
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
# Create list with prime numbers up to 'self'
|
159
|
-
def prime_numbers
|
160
|
-
s = (0..self).to_a
|
161
|
-
s[0] = s[1] = nil
|
162
|
-
s.each do |p|
|
163
|
-
next unless p
|
164
|
-
break if p * p > self
|
165
|
-
(p*p).step(self, p) { |m| s[m] = nil }
|
166
|
-
end
|
167
|
-
s.compact
|
168
|
-
end
|
169
|
-
|
164
|
+
end
|
165
|
+
|
170
166
|
end
|
171
167
|
|
172
168
|
|
data/lib/smart_currency.rb
CHANGED
@@ -11,7 +11,7 @@ module SmartCurrency
|
|
11
11
|
include InstanceMethods
|
12
12
|
auto_attributes = []
|
13
13
|
self.skip_time_zone_conversion_for_attributes = []
|
14
|
-
attributes = self.columns.select {|c| (c.type == :integer || c.type == :decimal) &&
|
14
|
+
attributes = self.columns.select {|c| (c.type == :integer || c.type == :decimal) && c.name != "id" }
|
15
15
|
|
16
16
|
attributes.each do |a|
|
17
17
|
define_method("#{a.name}=") do |val|
|
@@ -33,9 +33,7 @@ module SmartCurrency
|
|
33
33
|
def currency_to_db(string)
|
34
34
|
if string.is_a?(String)
|
35
35
|
return (string.gsub(/\./, '').gsub(/,/, '.')).to_f
|
36
|
-
|
37
|
-
return 0
|
38
|
-
else
|
36
|
+
else
|
39
37
|
return string
|
40
38
|
end
|
41
39
|
end
|
data/lib/string_and_more.rb
CHANGED
@@ -22,10 +22,6 @@ module StringAndMore
|
|
22
22
|
|
23
23
|
# Array with all strings which can be encrypted
|
24
24
|
STRING_BASE = STRING_CHARSETS.values.join("")
|
25
|
-
|
26
|
-
# Encode String Base with custom secrect key
|
27
|
-
#SHUFFLED_STRING_BASE = STRING_CHARSETS.values.sort_by {|y| STRING_CHARSETS.values.map.with_index {|x,i| STRING_BASE.split("").reverse[i].hex * x.hex }[STRING_CHARSETS.values.index(y)] }
|
28
|
-
|
29
25
|
|
30
26
|
# Returns random String, for Passwords, Captachs etc..
|
31
27
|
# could create :upcase, :downcase, :numbers or :all
|
@@ -44,10 +40,6 @@ module StringAndMore
|
|
44
40
|
end
|
45
41
|
return str
|
46
42
|
end
|
47
|
-
|
48
|
-
def self.email_message_id(mail_domain)
|
49
|
-
"<#{Digest::SHA2.hexdigest(Time.now.to_i.to_s)}@#{mail_domain}>"
|
50
|
-
end
|
51
43
|
|
52
44
|
|
53
45
|
# Extract boolean status from string
|
@@ -60,21 +52,12 @@ module StringAndMore
|
|
60
52
|
end
|
61
53
|
|
62
54
|
# Create string with german date format to Date
|
63
|
-
|
64
|
-
|
65
|
-
|
55
|
+
def to_date
|
56
|
+
matched_date = self.match(/((0|1|2|3)[0-9]{1})\.(0[0-9]{1}|11|12)\.[0-9]{4}/)
|
57
|
+
raise ArgumentError, "String has no date like DD.MM.YYYY" if matched_date.nil?
|
66
58
|
|
67
|
-
|
68
|
-
|
69
|
-
elsif matched_date.nil?
|
70
|
-
matched_date = self.match(/[0-9]{4}-(0[0-9]{1}|10|11|12)-((0|1|2|3)[0-9]{1})/)
|
71
|
-
if !matched_date.nil?
|
72
|
-
return Date.new(matched_date.to_s.split("-")[0].to_i, matched_date.to_s.split("-")[1].to_i, matched_date.to_s.split("-")[2].to_i)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
raise ArgumentError, "String has no date like DD.MM.YYYY or YYYY-DD-MM" if matched_date.nil?
|
77
|
-
end
|
59
|
+
Date.new(matched_date.to_s.split(".")[2].to_i, matched_date.to_s.split(".")[1].to_i, matched_date.to_s.split(".")[0].to_i)
|
60
|
+
end
|
78
61
|
|
79
62
|
|
80
63
|
def to_number(type = :float)
|
@@ -89,28 +72,33 @@ module StringAndMore
|
|
89
72
|
end
|
90
73
|
|
91
74
|
def to_label(options = {:show_tooltip => false})
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
else
|
105
|
-
return self
|
106
|
-
end
|
75
|
+
attribute = self
|
76
|
+
l = ConceptLabel::LABELS[attribute]
|
77
|
+
if l.nil?
|
78
|
+
ConceptLabel.create(:label => attribute, :attribute_name => attribute)# rescue nil
|
79
|
+
return attribute
|
80
|
+
else
|
81
|
+
unless options[:show_tooltip] == true
|
82
|
+
return l[:label]
|
83
|
+
else
|
84
|
+
return l[:tooltip]
|
85
|
+
end
|
86
|
+
end
|
107
87
|
end
|
108
|
-
|
109
|
-
def shuffle
|
110
|
-
self.split("").sort_by {rand}.join.humanize
|
111
|
-
end
|
112
88
|
|
113
89
|
|
90
|
+
|
91
|
+
def to_glossar(with = "", options = {:show_tooltip => false})
|
92
|
+
with ||= ""
|
93
|
+
attribute = self
|
94
|
+
l = Glossar.find_by_attribute_name(attribute)
|
95
|
+
if l.nil?
|
96
|
+
Glossar.create(:label => attribute, :attribute_name => attribute)
|
97
|
+
end
|
98
|
+
|
99
|
+
return "<a href='#glossar_#{attribute.parameterize}' class='glossarlink_small'>#{attribute}#{with}</a>".html_safe
|
100
|
+
end
|
101
|
+
|
114
102
|
def to_foldername(sep = "_")
|
115
103
|
# deutsch umlaute ersetzen
|
116
104
|
parameterized_string = self.strip.gsub(/\ {2,}/ , " ").de_2_int
|
@@ -138,155 +126,143 @@ module StringAndMore
|
|
138
126
|
return str
|
139
127
|
end
|
140
128
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
129
|
+
def limit(l=20)
|
130
|
+
if self.size > l
|
131
|
+
s = self.size
|
132
|
+
s2 = (((self.size-1)/2).round)
|
133
|
+
first = self.slice(0..s2)
|
146
134
|
last = self.slice(s2+1..-1)
|
147
135
|
|
148
136
|
l1 = (l/2).round
|
149
137
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
138
|
+
"#{first.first(l1)}...#{last.last(l1)}"
|
139
|
+
else
|
140
|
+
return self
|
141
|
+
end
|
142
|
+
end
|
155
143
|
|
156
144
|
|
157
145
|
|
158
146
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
147
|
+
def to_datetime
|
148
|
+
date = self.split(" ").first
|
149
|
+
time = self.split(" ").last.split(":")
|
150
|
+
DateTime.new(date.split(".")[2].to_i, date.split(".")[1].to_i, date.split(".")[0].to_i, time.first.to_i, time.last.to_i)
|
151
|
+
end
|
164
152
|
|
165
153
|
|
166
|
-
|
167
|
-
|
168
|
-
|
154
|
+
def clear_html(options = {})
|
155
|
+
ActionView::Base.full_sanitizer.sanitize(self, :tags => options[:tags] )
|
156
|
+
end
|
169
157
|
|
170
|
-
|
171
|
-
|
172
|
-
|
158
|
+
def replace_html(from, to)
|
159
|
+
new_text = self
|
160
|
+
new_text = new_text.gsub("<#{from}>", "<#{to}>")
|
173
161
|
new_text = new_text.gsub("</#{from}>", "</#{to}>")
|
174
162
|
return new_text
|
175
|
-
|
163
|
+
end
|
176
164
|
|
177
|
-
|
165
|
+
def to_model
|
178
166
|
self.singularize.camelize.constantize
|
179
|
-
|
167
|
+
end
|
180
168
|
|
181
|
-
|
182
|
-
|
183
|
-
|
169
|
+
def to_a
|
170
|
+
return [self]
|
171
|
+
end
|
184
172
|
|
185
|
-
|
173
|
+
#== HTML Styling
|
186
174
|
# as the function names say
|
187
175
|
|
188
|
-
|
176
|
+
def bold
|
189
177
|
"<b>#{self}</b>".html_safe
|
190
|
-
|
178
|
+
end
|
191
179
|
|
192
|
-
|
180
|
+
def ital
|
193
181
|
"<i>#{self}</i>".html_safe
|
194
|
-
|
182
|
+
end
|
195
183
|
|
196
|
-
|
184
|
+
def span
|
197
185
|
"<span>#{self}</span>".html_safe
|
198
|
-
|
186
|
+
end
|
199
187
|
|
200
|
-
|
188
|
+
def uline
|
201
189
|
"<u>#{self}</u>".html_safe
|
202
|
-
|
190
|
+
end
|
203
191
|
|
204
192
|
def nbsp
|
205
193
|
self.gsub(" ", " ").html_safe
|
206
194
|
end
|
207
195
|
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
196
|
+
def replace_entities(mode = :html)
|
197
|
+
str = self
|
198
|
+
Chars2Remove::ENTITIES.each do |orig, rep|
|
199
|
+
str = str.gsub(orig, rep[mode])
|
200
|
+
end
|
201
|
+
return str.html_safe
|
202
|
+
end
|
215
203
|
|
216
|
-
|
217
|
-
|
218
|
-
|
204
|
+
def add_brs
|
205
|
+
return self.gsub("\n", "<br />")
|
206
|
+
end
|
219
207
|
|
220
|
-
|
208
|
+
#== colorization in console
|
221
209
|
|
222
|
-
|
223
|
-
|
224
|
-
|
210
|
+
def colorize(color_code)
|
211
|
+
"\e[#{color_code};40m#{self}\e[0m"
|
212
|
+
end
|
225
213
|
|
226
|
-
|
227
|
-
|
228
|
-
|
214
|
+
def red
|
215
|
+
colorize(31)
|
216
|
+
end
|
229
217
|
|
230
|
-
|
231
|
-
|
232
|
-
|
218
|
+
def green
|
219
|
+
colorize(32)
|
220
|
+
end
|
233
221
|
|
234
|
-
|
235
|
-
|
236
|
-
|
222
|
+
def yellow
|
223
|
+
colorize(33)
|
224
|
+
end
|
237
225
|
|
238
|
-
|
239
|
-
|
240
|
-
|
226
|
+
def pink
|
227
|
+
colorize(35)
|
228
|
+
end
|
241
229
|
|
242
230
|
|
243
|
-
|
244
|
-
|
231
|
+
#== Numerische encription
|
232
|
+
# cool thing for simple encrypt and decrypt strings
|
245
233
|
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
# Nur Zahlen und buchstaben für die verschlüsselung/mix nehmen wg. URLs
|
255
|
-
string_array_filtered = string_array.select {|s| !s.match(/[a-zA-Z0-9\-_]/).nil? }
|
256
|
-
splitted = self.split("")
|
234
|
+
def numberize(options = {})
|
235
|
+
# Basisarray das alle zeichen enthält die verschlüsselt werden können
|
236
|
+
string_array = STRING_BASE.split("")
|
237
|
+
|
238
|
+
# Nur Zahlen und buchstaben für die verschlüsselung/mix nehmen wg. URLs
|
239
|
+
string_array_filtered = string_array.select {|s| !s.match(/[a-zA-Z0-9\-_]/).nil? }
|
240
|
+
splitted = self.split("")
|
257
241
|
|
258
|
-
|
242
|
+
numbered_string = ""
|
259
243
|
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
244
|
+
splitted.each do |s|
|
245
|
+
position = string_array.index(s)
|
246
|
+
if !position.nil?
|
247
|
+
numbered_string << (position.to_s.rjust(2, "0")+string_array_filtered[rand(string_array_filtered.size-1)])
|
248
|
+
end
|
249
|
+
end
|
266
250
|
|
267
|
-
|
268
|
-
|
251
|
+
return options[:base_64] == true ? Base64.encode64(numbered_string) : numbered_string
|
252
|
+
end
|
269
253
|
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
(options[:base_64] == true ? Base64.decode64(self) : self ).scan(/[0-9]{2}.{1}/).each do |s|
|
279
|
-
real_string << string_array[s.first(2).to_i]
|
280
|
-
end
|
281
|
-
return real_string
|
282
|
-
end
|
283
|
-
|
284
|
-
|
285
|
-
|
254
|
+
def denumberize(options = {})
|
255
|
+
string_array = STRING_BASE.split("")
|
256
|
+
real_string = ""
|
257
|
+
(options[:base_64] == true ? Base64.decode64(self) : self ).scan(/[0-9]{2}.{1}/).each do |s|
|
258
|
+
real_string << string_array[s.first(2).to_i]
|
259
|
+
end
|
260
|
+
return real_string
|
261
|
+
end
|
286
262
|
|
287
263
|
|
264
|
+
|
288
265
|
end
|
289
|
-
|
290
266
|
|
291
267
|
Symbol.class_eval do
|
292
268
|
|