friendly_extensions 0.0.61 → 0.0.62
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 +23 -2
- data/lib/alphanumeric.rb.orig +84 -0
- data/lib/array.rb +90 -15
- data/lib/array.rb.orig +313 -0
- data/lib/nil_class.rb +3 -0
- data/lib/numbers.rb +29 -31
- data/lib/numbers.rb.orig +220 -0
- data/lib/smart_currency.rb +4 -2
- data/lib/smart_currency.rb.orig +74 -0
- data/lib/string_and_more.rb +20 -20
- data/lib/string_and_more.rb.orig +303 -0
- data/test/array_test.rb +24 -2
- data/test/array_test.rb.orig +221 -0
- data/test/numeric_test.rb +11 -1
- data/test/numeric_test.rb.orig +94 -0
- metadata +15 -6
data/lib/numbers.rb.orig
ADDED
@@ -0,0 +1,220 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
# Numeric Extensions
|
3
|
+
module Numbers
|
4
|
+
|
5
|
+
<<<<<<< HEAD
|
6
|
+
=======
|
7
|
+
# returns an array with all prime numbers up to limit
|
8
|
+
def self.prime_numbers(limit = 1_000_000, options = {:verbose => false})
|
9
|
+
i = 1; divisors = [2]; primzahlen = []
|
10
|
+
t = Time.now
|
11
|
+
while i <= limit do
|
12
|
+
p = true
|
13
|
+
divisors.each do |d|
|
14
|
+
if i%d == 0 && d != i
|
15
|
+
p = false
|
16
|
+
break
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
if p == true
|
21
|
+
puts i if options[:verbose] == true
|
22
|
+
primzahlen << i
|
23
|
+
end
|
24
|
+
|
25
|
+
i += 1
|
26
|
+
divisors << divisors.last+1
|
27
|
+
end
|
28
|
+
|
29
|
+
puts "Took #{(t-Time.now).abs.round(2)} sec." if options[:verbose] == true
|
30
|
+
return primzahlen
|
31
|
+
end
|
32
|
+
|
33
|
+
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
34
|
+
Numeric.class_eval do
|
35
|
+
|
36
|
+
# Convert Number to numeric german style with precision
|
37
|
+
def to_euro(label = nil, options = {})
|
38
|
+
options[:precision] ||= 2
|
39
|
+
result = ActionController::Base.helpers.number_with_precision(self, :precision => options[:precision], :separator => ",", :delimiter => ".")
|
40
|
+
|
41
|
+
if options[:pre] == true && self > 0
|
42
|
+
result = "+#{result}"
|
43
|
+
elsif options[:pre] == true && self < 0
|
44
|
+
result = "-#{result}"
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
if !label.blank?
|
49
|
+
return [result, label].join(" ").html_safe
|
50
|
+
else
|
51
|
+
return result
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Convert Number to numeric german style without precision
|
56
|
+
def to_de(label=nil)
|
57
|
+
<<<<<<< HEAD
|
58
|
+
=======
|
59
|
+
nr = self.round.to_i
|
60
|
+
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
61
|
+
result = ActionController::Base.helpers.number_with_precision(self, :precision => 0, :separator => ",", :delimiter => ".")
|
62
|
+
if !label.blank?
|
63
|
+
return [result, label].join(" ").html_safe
|
64
|
+
else
|
65
|
+
return result
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Inflate number, y = duration of years, f = percentage
|
70
|
+
# tested
|
71
|
+
def infla(y=40,f=2)
|
72
|
+
self.to_f*(f.to_q**y)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Deflate number, y = duration of years, f = percentage
|
76
|
+
# tested
|
77
|
+
def defla(y=40,f=2)
|
78
|
+
self.to_f*((1-(f.fdiv(100)))**y)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Prüfen, welche Zahl aus dem Array am nächsten an der aktuellen Dran ist
|
82
|
+
# tested
|
83
|
+
def get_closest(nrs = [], lim = :ceil)
|
84
|
+
|
85
|
+
com = {}
|
86
|
+
com_a = []
|
87
|
+
nrs.each do |n|
|
88
|
+
case lim
|
89
|
+
when :ceil
|
90
|
+
x = ((self+0.001)-n).abs
|
91
|
+
when :floor
|
92
|
+
x = ((self-0.001)-n).abs
|
93
|
+
else
|
94
|
+
raise ArgumentError, "lim must be :ceil or :floor"
|
95
|
+
end
|
96
|
+
com.merge!(x => n)
|
97
|
+
com_a << x
|
98
|
+
end
|
99
|
+
return com[com_a.min]
|
100
|
+
end
|
101
|
+
|
102
|
+
# tested
|
103
|
+
def min(ref)
|
104
|
+
<<<<<<< HEAD
|
105
|
+
[self.to_f, ref.to_f].min
|
106
|
+
=======
|
107
|
+
[self, ref].min
|
108
|
+
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
109
|
+
end
|
110
|
+
|
111
|
+
# tested
|
112
|
+
def max(ref)
|
113
|
+
<<<<<<< HEAD
|
114
|
+
[self.to_f, ref.to_f].max
|
115
|
+
=======
|
116
|
+
[self, ref].max
|
117
|
+
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
118
|
+
end
|
119
|
+
|
120
|
+
# Wert zwischen den Grenzen, ansonsten ober-oder unterkante
|
121
|
+
# tested
|
122
|
+
def min_max(m1, m2)
|
123
|
+
self.min(m2).max(m1)
|
124
|
+
end
|
125
|
+
|
126
|
+
# => tested
|
127
|
+
def fdiv(d)
|
128
|
+
self.to_f/d
|
129
|
+
end
|
130
|
+
|
131
|
+
|
132
|
+
# Finanzmathematik, Zinsen und so
|
133
|
+
def to_q
|
134
|
+
1+(self/100.0)
|
135
|
+
end
|
136
|
+
|
137
|
+
def alpha_sum(u,o)
|
138
|
+
(self**u - self**(o+1)).fdiv(1-self)
|
139
|
+
end
|
140
|
+
|
141
|
+
|
142
|
+
def to_time(options = {})
|
143
|
+
values = [ self.to_i/3600, self.to_i / 60 % 60, self.to_i%60 ].map{ |t| t.to_s.rjust(2, '0') }
|
144
|
+
if options[:split] == true
|
145
|
+
return {:h => values[0].round, :m => values[1].round, :s => values[2].round}
|
146
|
+
elsif options[:discard_hour] == true && values[0] == "00"
|
147
|
+
return values[1,2].join(':')
|
148
|
+
else
|
149
|
+
return values.join(':')
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
Integer.class_eval do
|
157
|
+
|
158
|
+
|
159
|
+
|
160
|
+
def odd?
|
161
|
+
self%2 == 0
|
162
|
+
end
|
163
|
+
|
164
|
+
def even?
|
165
|
+
!self.odd?
|
166
|
+
end
|
167
|
+
|
168
|
+
|
169
|
+
# Cals
|
170
|
+
def to_years(options = {:s_years => "Jahre", :s_months => "Monate", :s_sep => "und"})
|
171
|
+
x = [self/12, self%12]
|
172
|
+
"#{x[0]} #{options[:s_years]} #{options[:s_sep]} #{x[1]} #{options[:s_months]}"
|
173
|
+
end
|
174
|
+
|
175
|
+
def days_to_months(options = {:s_days => "Tage", :s_months => "Monate", :s_sep => "und"})
|
176
|
+
x = [self/30, self%30]
|
177
|
+
"#{x[0]} #{options[:s_months]} #{options[:s_sep]} #{x[1]} #{options[:s_days]}"
|
178
|
+
<<<<<<< HEAD
|
179
|
+
end
|
180
|
+
|
181
|
+
|
182
|
+
# Split number in smallest prime factors
|
183
|
+
def prime_factors(options = {})
|
184
|
+
options[:nrs] ||= Math.sqrt(self).floor.prime_numbers
|
185
|
+
options[:nrs].each_with_index do |n,i|
|
186
|
+
if self%n == 0
|
187
|
+
return [n, (self/n).prime_factors(:nrs => options[:nrs])].flatten.except(1)
|
188
|
+
elsif i == options[:nrs].size-1
|
189
|
+
return [self]
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
# Create list with prime numbers up to 'self'
|
195
|
+
def prime_numbers
|
196
|
+
s = (0..self).to_a
|
197
|
+
s[0] = s[1] = nil
|
198
|
+
s.each do |p|
|
199
|
+
next unless p
|
200
|
+
break if p * p > self
|
201
|
+
(p*p).step(self, p) { |m| s[m] = nil }
|
202
|
+
end
|
203
|
+
s.compact
|
204
|
+
end
|
205
|
+
|
206
|
+
=======
|
207
|
+
end
|
208
|
+
|
209
|
+
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
210
|
+
end
|
211
|
+
|
212
|
+
|
213
|
+
Fixnum.class_eval do
|
214
|
+
def nan?
|
215
|
+
self.to_f.nan?
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
end
|
220
|
+
|
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) && c.name
|
14
|
+
attributes = self.columns.select {|c| (c.type == :integer || c.type == :decimal) && !c.name.match("id") }
|
15
15
|
|
16
16
|
attributes.each do |a|
|
17
17
|
define_method("#{a.name}=") do |val|
|
@@ -33,7 +33,9 @@ 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
|
-
|
36
|
+
elsif string.nil?
|
37
|
+
return 0
|
38
|
+
else
|
37
39
|
return string
|
38
40
|
end
|
39
41
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module SmartCurrency
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.extend ClassMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
def smart_currency
|
10
|
+
unless smart_currency?
|
11
|
+
include InstanceMethods
|
12
|
+
auto_attributes = []
|
13
|
+
self.skip_time_zone_conversion_for_attributes = []
|
14
|
+
<<<<<<< HEAD
|
15
|
+
attributes = self.columns.select {|c| (c.type == :integer || c.type == :decimal) && !c.name.match("id") }
|
16
|
+
=======
|
17
|
+
attributes = self.columns.select {|c| (c.type == :integer || c.type == :decimal) && c.name != "id" }
|
18
|
+
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
19
|
+
|
20
|
+
attributes.each do |a|
|
21
|
+
define_method("#{a.name}=") do |val|
|
22
|
+
self[a.name.to_sym] = currency_to_db(val)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def smart_currency?
|
30
|
+
self.included_modules.include?(InstanceMethods)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
module InstanceMethods # any method placed here will apply to instaces, like @hickwall
|
36
|
+
|
37
|
+
def currency_to_db(string)
|
38
|
+
if string.is_a?(String)
|
39
|
+
return (string.gsub(/\./, '').gsub(/,/, '.')).to_f
|
40
|
+
<<<<<<< HEAD
|
41
|
+
elsif string.nil?
|
42
|
+
return 0
|
43
|
+
else
|
44
|
+
=======
|
45
|
+
else
|
46
|
+
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
47
|
+
return string
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def currency_to_view(decimal)
|
52
|
+
if !decimal.nil?
|
53
|
+
str = decimal.to_s.split(".")
|
54
|
+
str[1] = "0" unless str[1]
|
55
|
+
if str[1].size == 1
|
56
|
+
str[1] += "0"
|
57
|
+
end
|
58
|
+
if str[0].size == 5 || str[0].size == 6
|
59
|
+
str[0].gsub!(/\B([0-9]{3})\b/,'.\1')
|
60
|
+
elsif str[0].size > 7
|
61
|
+
str[0].gsub!(/([0-9]{3})\b/,'.\1').gsub!(/([0-9]{3}\.)/, '.\1')
|
62
|
+
else
|
63
|
+
str[0].gsub!(/\B([0-9]{3})/,'.\1')
|
64
|
+
end
|
65
|
+
str[1].size > 2 ? str[1] = str[1][0..1] : nil
|
66
|
+
return (str[0] + "," + str[1]).to_s
|
67
|
+
else
|
68
|
+
return "keine Angabe"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
data/lib/string_and_more.rb
CHANGED
@@ -53,10 +53,19 @@ module StringAndMore
|
|
53
53
|
|
54
54
|
# Create string with german date format to Date
|
55
55
|
def to_date
|
56
|
-
|
57
|
-
|
56
|
+
# Try German
|
57
|
+
matched_date = self.match(/((0|1|2|3)[0-9]{1})\.(0[0-9]{1}|10|11|12)\.[0-9]{4}/)
|
58
58
|
|
59
|
-
|
59
|
+
if !matched_date.nil?
|
60
|
+
return 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)
|
61
|
+
elsif matched_date.nil?
|
62
|
+
matched_date = self.match(/[0-9]{4}-(0[0-9]{1}|10|11|12)-((0|1|2|3)[0-9]{1})/)
|
63
|
+
if !matched_date.nil?
|
64
|
+
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)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
raise ArgumentError, "String has no date like DD.MM.YYYY or YYYY-DD-MM" if matched_date.nil?
|
60
69
|
end
|
61
70
|
|
62
71
|
|
@@ -72,11 +81,10 @@ module StringAndMore
|
|
72
81
|
end
|
73
82
|
|
74
83
|
def to_label(options = {:show_tooltip => false})
|
75
|
-
|
76
|
-
l = ConceptLabel::LABELS[attribute]
|
84
|
+
l = ConceptLabel::LABELS[self]
|
77
85
|
if l.nil?
|
78
|
-
ConceptLabel.create(:label =>
|
79
|
-
return
|
86
|
+
ConceptLabel.create(:label => self, :attribute_name => self)
|
87
|
+
return self
|
80
88
|
else
|
81
89
|
unless options[:show_tooltip] == true
|
82
90
|
return l[:label]
|
@@ -85,19 +93,11 @@ module StringAndMore
|
|
85
93
|
end
|
86
94
|
end
|
87
95
|
end
|
88
|
-
|
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
96
|
|
99
|
-
|
100
|
-
|
97
|
+
def shuffle
|
98
|
+
self.split("").sort_by {rand}.join.humanize
|
99
|
+
end
|
100
|
+
|
101
101
|
|
102
102
|
def to_foldername(sep = "_")
|
103
103
|
# deutsch umlaute ersetzen
|
@@ -193,7 +193,7 @@ module StringAndMore
|
|
193
193
|
self.gsub(" ", " ").html_safe
|
194
194
|
end
|
195
195
|
|
196
|
-
def replace_entities(mode = :html)
|
196
|
+
def replace_entities(mode = :html, options = {})
|
197
197
|
str = self
|
198
198
|
Chars2Remove::ENTITIES.each do |orig, rep|
|
199
199
|
str = str.gsub(orig, rep[mode])
|
@@ -0,0 +1,303 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module StringAndMore
|
3
|
+
String.class_eval do
|
4
|
+
|
5
|
+
require "chars_2_remove"
|
6
|
+
require 'digest/sha1'
|
7
|
+
|
8
|
+
# List with internation chars and their ASCII replacement
|
9
|
+
CHARS_TO_REMOVE = Chars2Remove::CHARS
|
10
|
+
|
11
|
+
# Characters for creating randdom char combinations
|
12
|
+
String::RANDOM_CHARS = {:upcase => "ABCDEFGHIJKLMNOPQRSTUVWXYZ", :downcase => "abcdefghijklmnopqrstuvwxyz", :numbers => "1234567890"}
|
13
|
+
|
14
|
+
# String charsets used for numeric encryption
|
15
|
+
STRING_CHARSETS = {
|
16
|
+
"a" => String::RANDOM_CHARS[:upcase],
|
17
|
+
"A" => String::RANDOM_CHARS[:downcase],
|
18
|
+
"1" => String::RANDOM_CHARS[:numbers],
|
19
|
+
"ä" => "äöüÄÖÜß",
|
20
|
+
"!" => '!\"§$%&/()=?+*#@,.-;:_\' ¡“”¶¢[]|{}≠¿^°≤≥∞…–‘’<>'
|
21
|
+
}
|
22
|
+
|
23
|
+
# Array with all strings which can be encrypted
|
24
|
+
STRING_BASE = STRING_CHARSETS.values.join("")
|
25
|
+
|
26
|
+
# Returns random String, for Passwords, Captachs etc..
|
27
|
+
# could create :upcase, :downcase, :numbers or :all
|
28
|
+
def self.random_string(l=12, mode = :all)
|
29
|
+
case mode
|
30
|
+
when :all
|
31
|
+
base = String::RANDOM_CHARS.values.join("").split("")
|
32
|
+
else
|
33
|
+
base = String::RANDOM_CHARS[mode].split("")
|
34
|
+
end
|
35
|
+
|
36
|
+
str = ""
|
37
|
+
|
38
|
+
l.times do
|
39
|
+
str << base.shuffle[rand(base.size-1)]
|
40
|
+
end
|
41
|
+
return str
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
# Extract boolean status from string
|
46
|
+
def to_boolean
|
47
|
+
if ['true', 'True', 'TRUE', '1'].include?(self)
|
48
|
+
return true
|
49
|
+
else
|
50
|
+
return false
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Create string with german date format to Date
|
55
|
+
def to_date
|
56
|
+
<<<<<<< HEAD
|
57
|
+
# Try German
|
58
|
+
matched_date = self.match(/((0|1|2|3)[0-9]{1})\.(0[0-9]{1}|10|11|12)\.[0-9]{4}/)
|
59
|
+
|
60
|
+
if !matched_date.nil?
|
61
|
+
return 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)
|
62
|
+
elsif matched_date.nil?
|
63
|
+
matched_date = self.match(/[0-9]{4}-(0[0-9]{1}|10|11|12)-((0|1|2|3)[0-9]{1})/)
|
64
|
+
if !matched_date.nil?
|
65
|
+
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)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
raise ArgumentError, "String has no date like DD.MM.YYYY or YYYY-DD-MM" if matched_date.nil?
|
70
|
+
=======
|
71
|
+
matched_date = self.match(/((0|1|2|3)[0-9]{1})\.(0[0-9]{1}|11|12)\.[0-9]{4}/)
|
72
|
+
raise ArgumentError, "String has no date like DD.MM.YYYY" if matched_date.nil?
|
73
|
+
|
74
|
+
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)
|
75
|
+
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
def to_number(type = :float)
|
80
|
+
extract = self.match(/[0-9\.,]{1,}/).to_s
|
81
|
+
final = extract.gsub(".", "").gsub(",", ".")
|
82
|
+
case type
|
83
|
+
when :float
|
84
|
+
return final.to_f
|
85
|
+
else
|
86
|
+
return final.to_i
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def to_label(options = {:show_tooltip => false})
|
91
|
+
l = ConceptLabel::LABELS[self]
|
92
|
+
if l.nil?
|
93
|
+
ConceptLabel.create(:label => self, :attribute_name => self)
|
94
|
+
return self
|
95
|
+
else
|
96
|
+
unless options[:show_tooltip] == true
|
97
|
+
return l[:label]
|
98
|
+
else
|
99
|
+
return l[:tooltip]
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
<<<<<<< HEAD
|
104
|
+
|
105
|
+
def shuffle
|
106
|
+
self.split("").sort_by {rand}.join.humanize
|
107
|
+
end
|
108
|
+
=======
|
109
|
+
|
110
|
+
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
111
|
+
|
112
|
+
|
113
|
+
def to_glossar(with = "", options = {:show_tooltip => false})
|
114
|
+
with ||= ""
|
115
|
+
attribute = self
|
116
|
+
l = Glossar.find_by_attribute_name(attribute)
|
117
|
+
if l.nil?
|
118
|
+
Glossar.create(:label => attribute, :attribute_name => attribute)
|
119
|
+
end
|
120
|
+
|
121
|
+
return "<a href='#glossar_#{attribute.parameterize}' class='glossarlink_small'>#{attribute}#{with}</a>".html_safe
|
122
|
+
end
|
123
|
+
|
124
|
+
def to_foldername(sep = "_")
|
125
|
+
# deutsch umlaute ersetzen
|
126
|
+
parameterized_string = self.strip.gsub(/\ {2,}/ , " ").de_2_int
|
127
|
+
|
128
|
+
# Turn unwanted chars into the separator
|
129
|
+
parameterized_string.gsub!(/[^a-zA-Z0-9ÄÖÜöäüß\-_]+/, sep)
|
130
|
+
unless sep.nil? || sep.empty?
|
131
|
+
re_sep = Regexp.escape(sep)
|
132
|
+
# No more than one of the separator in a row.
|
133
|
+
parameterized_string.gsub!(/#{re_sep}{2,}/, sep)
|
134
|
+
# Remove leading/trailing separator.
|
135
|
+
parameterized_string.gsub!(/^#{re_sep}|#{re_sep}$/, '')
|
136
|
+
end
|
137
|
+
return parameterized_string
|
138
|
+
end
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
def de_2_int
|
143
|
+
str = self
|
144
|
+
CHARS_TO_REMOVE.each do |de, int|
|
145
|
+
str = str.gsub(de, int)
|
146
|
+
end
|
147
|
+
str = str.gsub(" ", " ")
|
148
|
+
return str
|
149
|
+
end
|
150
|
+
|
151
|
+
def limit(l=20)
|
152
|
+
if self.size > l
|
153
|
+
s = self.size
|
154
|
+
s2 = (((self.size-1)/2).round)
|
155
|
+
first = self.slice(0..s2)
|
156
|
+
last = self.slice(s2+1..-1)
|
157
|
+
|
158
|
+
l1 = (l/2).round
|
159
|
+
|
160
|
+
"#{first.first(l1)}...#{last.last(l1)}"
|
161
|
+
else
|
162
|
+
return self
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
def to_datetime
|
170
|
+
date = self.split(" ").first
|
171
|
+
time = self.split(" ").last.split(":")
|
172
|
+
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)
|
173
|
+
end
|
174
|
+
|
175
|
+
|
176
|
+
def clear_html(options = {})
|
177
|
+
ActionView::Base.full_sanitizer.sanitize(self, :tags => options[:tags] )
|
178
|
+
end
|
179
|
+
|
180
|
+
def replace_html(from, to)
|
181
|
+
new_text = self
|
182
|
+
new_text = new_text.gsub("<#{from}>", "<#{to}>")
|
183
|
+
new_text = new_text.gsub("</#{from}>", "</#{to}>")
|
184
|
+
return new_text
|
185
|
+
end
|
186
|
+
|
187
|
+
def to_model
|
188
|
+
self.singularize.camelize.constantize
|
189
|
+
end
|
190
|
+
|
191
|
+
def to_a
|
192
|
+
return [self]
|
193
|
+
end
|
194
|
+
|
195
|
+
#== HTML Styling
|
196
|
+
# as the function names say
|
197
|
+
|
198
|
+
def bold
|
199
|
+
"<b>#{self}</b>".html_safe
|
200
|
+
end
|
201
|
+
|
202
|
+
def ital
|
203
|
+
"<i>#{self}</i>".html_safe
|
204
|
+
end
|
205
|
+
|
206
|
+
def span
|
207
|
+
"<span>#{self}</span>".html_safe
|
208
|
+
end
|
209
|
+
|
210
|
+
def uline
|
211
|
+
"<u>#{self}</u>".html_safe
|
212
|
+
end
|
213
|
+
|
214
|
+
def nbsp
|
215
|
+
self.gsub(" ", " ").html_safe
|
216
|
+
end
|
217
|
+
|
218
|
+
<<<<<<< HEAD
|
219
|
+
def replace_entities(mode = :html, options = {})
|
220
|
+
=======
|
221
|
+
def replace_entities(mode = :html)
|
222
|
+
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
223
|
+
str = self
|
224
|
+
Chars2Remove::ENTITIES.each do |orig, rep|
|
225
|
+
str = str.gsub(orig, rep[mode])
|
226
|
+
end
|
227
|
+
return str.html_safe
|
228
|
+
end
|
229
|
+
|
230
|
+
def add_brs
|
231
|
+
return self.gsub("\n", "<br />")
|
232
|
+
end
|
233
|
+
|
234
|
+
#== colorization in console
|
235
|
+
|
236
|
+
def colorize(color_code)
|
237
|
+
"\e[#{color_code};40m#{self}\e[0m"
|
238
|
+
end
|
239
|
+
|
240
|
+
def red
|
241
|
+
colorize(31)
|
242
|
+
end
|
243
|
+
|
244
|
+
def green
|
245
|
+
colorize(32)
|
246
|
+
end
|
247
|
+
|
248
|
+
def yellow
|
249
|
+
colorize(33)
|
250
|
+
end
|
251
|
+
|
252
|
+
def pink
|
253
|
+
colorize(35)
|
254
|
+
end
|
255
|
+
|
256
|
+
|
257
|
+
#== Numerische encription
|
258
|
+
# cool thing for simple encrypt and decrypt strings
|
259
|
+
|
260
|
+
def numberize(options = {})
|
261
|
+
# Basisarray das alle zeichen enthält die verschlüsselt werden können
|
262
|
+
string_array = STRING_BASE.split("")
|
263
|
+
|
264
|
+
# Nur Zahlen und buchstaben für die verschlüsselung/mix nehmen wg. URLs
|
265
|
+
string_array_filtered = string_array.select {|s| !s.match(/[a-zA-Z0-9\-_]/).nil? }
|
266
|
+
splitted = self.split("")
|
267
|
+
|
268
|
+
numbered_string = ""
|
269
|
+
|
270
|
+
splitted.each do |s|
|
271
|
+
position = string_array.index(s)
|
272
|
+
if !position.nil?
|
273
|
+
numbered_string << (position.to_s.rjust(2, "0")+string_array_filtered[rand(string_array_filtered.size-1)])
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
return options[:base_64] == true ? Base64.encode64(numbered_string) : numbered_string
|
278
|
+
end
|
279
|
+
|
280
|
+
def denumberize(options = {})
|
281
|
+
string_array = STRING_BASE.split("")
|
282
|
+
real_string = ""
|
283
|
+
(options[:base_64] == true ? Base64.decode64(self) : self ).scan(/[0-9]{2}.{1}/).each do |s|
|
284
|
+
real_string << string_array[s.first(2).to_i]
|
285
|
+
end
|
286
|
+
return real_string
|
287
|
+
end
|
288
|
+
|
289
|
+
|
290
|
+
|
291
|
+
end
|
292
|
+
|
293
|
+
Symbol.class_eval do
|
294
|
+
|
295
|
+
def to_label(options = {})
|
296
|
+
self.to_s.to_label(options)
|
297
|
+
end
|
298
|
+
|
299
|
+
def gsub(old, repl)
|
300
|
+
self.to_s.gsub(old, repl)
|
301
|
+
end
|
302
|
+
end
|
303
|
+
end
|