friendly_extensions 0.0.8 → 0.0.61
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|