friendly_extensions 0.0.62 → 0.0.65
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/array.rb +1 -1
- data/lib/friendly_extensions/engine.rb +10 -0
- data/lib/friendly_extensions.rb +2 -2
- data/lib/numbers.rb +12 -6
- data/lib/string_and_more.rb +18 -10
- data/test/array_test.rb +1 -1
- data/test/numeric_test.rb +4 -0
- metadata +4 -7
- data/lib/alphanumeric.rb.orig +0 -84
- data/lib/array.rb.orig +0 -313
- data/lib/numbers.rb.orig +0 -220
- data/lib/smart_currency.rb.orig +0 -74
- data/lib/string_and_more.rb.orig +0 -303
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 599b81295e728316bffa52a91ee0f83cfe21a0fc
|
4
|
+
data.tar.gz: e279fc4b1e79c9dd27f2e59bcc223b472e20620e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29f70901e22e4edaff2566793f6d564606467fdeace229fcb910dc1c129f53b7fea4a866b9c3b64a30927f5142bb4c9b4f4980314e2aad1fba19193987105ad2
|
7
|
+
data.tar.gz: 777f32151ae55d93267d001432a3d361f32bf72b193fbf9a480d4c29eca51c338fc7995533e00ba038cfdb8536548473d0d6850981830f57074b011b50b63eb7
|
data/lib/array.rb
CHANGED
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 "
|
4
|
+
require "friendly_extensions/engine"
|
5
5
|
|
6
|
+
require "array"
|
6
7
|
require "date_n_time"
|
7
8
|
require "numbers"
|
8
9
|
require "hash"
|
9
10
|
require "string_and_more"
|
10
11
|
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/numbers.rb
CHANGED
@@ -7,6 +7,9 @@ module Numbers
|
|
7
7
|
# Convert Number to numeric german style with precision
|
8
8
|
def to_euro(label = nil, options = {})
|
9
9
|
options[:precision] ||= 2
|
10
|
+
|
11
|
+
options[:precision] = 0 if options[:fix_int] == true && self.is_a?(Integer)
|
12
|
+
|
10
13
|
result = ActionController::Base.helpers.number_with_precision(self, :precision => options[:precision], :separator => ",", :delimiter => ".")
|
11
14
|
|
12
15
|
if options[:pre] == true && self > 0
|
@@ -25,12 +28,11 @@ module Numbers
|
|
25
28
|
|
26
29
|
# Convert Number to numeric german style without precision
|
27
30
|
def to_de(label=nil)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
31
|
+
self.to_euro(label, :precision => 0)
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_a
|
35
|
+
[self]
|
34
36
|
end
|
35
37
|
|
36
38
|
# Inflate number, y = duration of years, f = percentage
|
@@ -108,6 +110,10 @@ module Numbers
|
|
108
110
|
return values.join(':')
|
109
111
|
end
|
110
112
|
end
|
113
|
+
|
114
|
+
def deg2rad
|
115
|
+
self * Math::PI / 180
|
116
|
+
end
|
111
117
|
|
112
118
|
|
113
119
|
end
|
data/lib/string_and_more.rb
CHANGED
@@ -40,6 +40,10 @@ module StringAndMore
|
|
40
40
|
end
|
41
41
|
return str
|
42
42
|
end
|
43
|
+
|
44
|
+
def self.email_message_id(mail_domain)
|
45
|
+
"<#{Digest::SHA2.hexdigest(Time.now.to_i.to_s)}@#{mail_domain}>"
|
46
|
+
end
|
43
47
|
|
44
48
|
|
45
49
|
# Extract boolean status from string
|
@@ -81,17 +85,21 @@ module StringAndMore
|
|
81
85
|
end
|
82
86
|
|
83
87
|
def to_label(options = {:show_tooltip => false})
|
84
|
-
|
85
|
-
|
86
|
-
|
88
|
+
if FriendsLabel.table_exists?
|
89
|
+
l = FriendsLabel::LABELS[self]
|
90
|
+
if l.nil?
|
91
|
+
FriendsLabel.create(:label => self, :attribute_name => self)
|
92
|
+
return self
|
93
|
+
else
|
94
|
+
unless options[:show_tooltip] == true
|
95
|
+
return l[:label]
|
96
|
+
else
|
97
|
+
return l[:tooltip]
|
98
|
+
end
|
99
|
+
end
|
100
|
+
else
|
87
101
|
return self
|
88
|
-
|
89
|
-
unless options[:show_tooltip] == true
|
90
|
-
return l[:label]
|
91
|
-
else
|
92
|
-
return l[:tooltip]
|
93
|
-
end
|
94
|
-
end
|
102
|
+
end
|
95
103
|
end
|
96
104
|
|
97
105
|
def shuffle
|
data/test/array_test.rb
CHANGED
@@ -24,7 +24,7 @@ class ArrayTest < Test::Unit::TestCase
|
|
24
24
|
assert_equal test_array.avg(:number), 4.5
|
25
25
|
end
|
26
26
|
|
27
|
-
def
|
27
|
+
def test_array_avg_should_not_break_with_nil_and_emtpy
|
28
28
|
assert_equal [3,nil].avg, 3
|
29
29
|
assert_equal [].avg, 0
|
30
30
|
end
|
data/test/numeric_test.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: friendly_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.65
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Eck
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -32,21 +32,17 @@ extensions: []
|
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
34
|
- lib/alphanumeric.rb
|
35
|
-
- lib/alphanumeric.rb.orig
|
36
35
|
- lib/array.rb
|
37
|
-
- lib/array.rb.orig
|
38
36
|
- lib/boolean.rb
|
39
37
|
- lib/chars_2_remove.rb
|
40
38
|
- lib/date_n_time.rb
|
41
39
|
- lib/friendly_extensions.rb
|
40
|
+
- lib/friendly_extensions/engine.rb
|
42
41
|
- lib/hash.rb
|
43
42
|
- lib/nil_class.rb
|
44
43
|
- lib/numbers.rb
|
45
|
-
- lib/numbers.rb.orig
|
46
44
|
- lib/smart_currency.rb
|
47
|
-
- lib/smart_currency.rb.orig
|
48
45
|
- lib/string_and_more.rb
|
49
|
-
- lib/string_and_more.rb.orig
|
50
46
|
- test/array_test.rb
|
51
47
|
- test/array_test.rb.orig
|
52
48
|
- test/dummy_class.rb
|
@@ -85,3 +81,4 @@ test_files:
|
|
85
81
|
- test/numeric_test.rb
|
86
82
|
- test/numeric_test.rb.orig
|
87
83
|
- test/string_test.rb
|
84
|
+
has_rdoc:
|
data/lib/alphanumeric.rb.orig
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
module Alphanumeric
|
3
|
-
|
4
|
-
# Give every year a letter
|
5
|
-
# TODO: should be automatically computed
|
6
|
-
<<<<<<< HEAD
|
7
|
-
LETTERS = "abcdefghijklmnopqrstuvwxyz".upcase.split('')
|
8
|
-
|
9
|
-
START_YEAR = 1960
|
10
|
-
|
11
|
-
=======
|
12
|
-
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
13
|
-
YEAR_LETTERS = {
|
14
|
-
2009 => "A",
|
15
|
-
2010 => "B",
|
16
|
-
2011 => "C",
|
17
|
-
2012 => "D",
|
18
|
-
2013 => "E",
|
19
|
-
2014 => "F",
|
20
|
-
2015 => "G",
|
21
|
-
2016 => "H",
|
22
|
-
2017 => "I",
|
23
|
-
2018 => "J",
|
24
|
-
2019 => "K",
|
25
|
-
2020 => "L",
|
26
|
-
2021 => "M",
|
27
|
-
2022 => "N",
|
28
|
-
2023 => "O",
|
29
|
-
2024 => "P",
|
30
|
-
2025 => "Q",
|
31
|
-
2026 => "R",
|
32
|
-
2027 => "S",
|
33
|
-
2028 => "T",
|
34
|
-
2029 => "U",
|
35
|
-
2030 => "V",
|
36
|
-
2031 => "W",
|
37
|
-
2032 => "X",
|
38
|
-
2033 => "Y",
|
39
|
-
2034 => "Z",
|
40
|
-
2035 => "AA",
|
41
|
-
2036 => "BA",
|
42
|
-
2037 => "CA",
|
43
|
-
2038 => "DA",
|
44
|
-
2039 => "EA",
|
45
|
-
2040 => "FA",
|
46
|
-
2041 => "GA",
|
47
|
-
2042 => "HA",
|
48
|
-
2043 => "IA",
|
49
|
-
2044 => "JA",
|
50
|
-
2045 => "KA",
|
51
|
-
2046 => "LA",
|
52
|
-
2047 => "MA",
|
53
|
-
2048 => "NA",
|
54
|
-
2049 => "OA",
|
55
|
-
2050 => "PA",
|
56
|
-
}
|
57
|
-
|
58
|
-
<<<<<<< HEAD
|
59
|
-
def self.year_letter(year=Time.now.year, letters = LETTERS)
|
60
|
-
|
61
|
-
steps = []
|
62
|
-
|
63
|
-
d = (year - START_YEAR)
|
64
|
-
n = d.fdiv(letters.size).ceil
|
65
|
-
string = ""
|
66
|
-
|
67
|
-
n.times do |i|
|
68
|
-
# First
|
69
|
-
if i == 0
|
70
|
-
string << letters[d%letters.size]
|
71
|
-
else
|
72
|
-
x = d.fdiv(letters.size*(i+1)).round
|
73
|
-
string << letters[x]
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
return string
|
78
|
-
=======
|
79
|
-
def self.year_letter(year=Time.now.year)
|
80
|
-
YEAR_LETTERS[year]
|
81
|
-
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
data/lib/array.rb.orig
DELETED
@@ -1,313 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
# Add the methods to the Array Class
|
3
|
-
module ArrayExt
|
4
|
-
Array.class_eval do
|
5
|
-
|
6
|
-
# Use sum from Activesupport
|
7
|
-
# Sum is not a default in Ruby
|
8
|
-
def sum(identity = 0, &block)
|
9
|
-
if block_given?
|
10
|
-
map(&block).sum(identity)
|
11
|
-
else
|
12
|
-
inject { |sum, element| sum + element } || identity
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# Get avg. value from, either from numeric values or from
|
17
|
-
# values from a object included in array
|
18
|
-
def avg(attribute = nil)
|
19
|
-
<<<<<<< HEAD
|
20
|
-
value = self
|
21
|
-
if attribute.nil?
|
22
|
-
value.delete(nil)
|
23
|
-
value = self.map {|r| r.to_f }
|
24
|
-
else
|
25
|
-
value = self
|
26
|
-
# Bei fehlerhaften attribute wird nil gespeichert
|
27
|
-
value = value.map {|r| r.send(attribute.to_sym).to_f rescue nil}
|
28
|
-
# Leere Werte löschen
|
29
|
-
value.delete(nil)
|
30
|
-
end
|
31
|
-
# Divide by zero ausschließen
|
32
|
-
value.size == 0 ? size = 1 : size = value.size
|
33
|
-
value.sum / size
|
34
|
-
=======
|
35
|
-
@value = self
|
36
|
-
if attribute.nil?
|
37
|
-
@value.delete(nil)
|
38
|
-
@value = self.map {|r| r.to_f }
|
39
|
-
else
|
40
|
-
@value = self
|
41
|
-
# Bei fehlerhaften attribute wird nil gespeichert
|
42
|
-
@value = @value.map {|r| r.send(attribute.to_sym).to_f rescue nil}
|
43
|
-
# Leere Werte löschen
|
44
|
-
@value.delete(nil)
|
45
|
-
end
|
46
|
-
# Divide by zero ausschließen
|
47
|
-
@value.size == 0 ? size = 1 : size = @value.size
|
48
|
-
@value.sum / size
|
49
|
-
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
50
|
-
end
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
# Generate a hash with the given array elements as keys and 'init_value' as value
|
55
|
-
def array_to_hash(init_val = 0)
|
56
|
-
h = {}
|
57
|
-
self.each {|x| h.merge!(x => init_val) unless x.nil? }
|
58
|
-
return h
|
59
|
-
end
|
60
|
-
|
61
|
-
|
62
|
-
def to_structured_hash(attribute, options = {})
|
63
|
-
data = {}
|
64
|
-
|
65
|
-
self.each do |item|
|
66
|
-
if attribute.is_a?(Symbol) && options[:load_from_hash] != true
|
67
|
-
key = item.send(attribute) rescue ""
|
68
|
-
elsif attribute.is_a?(Symbol) && options[:load_from_hash] == true
|
69
|
-
key = item[attribute] rescue ""
|
70
|
-
elsif attribute.is_a?(String)
|
71
|
-
attribute_methods = attribute.split(".")
|
72
|
-
key = item.send(attribute_methods[0])
|
73
|
-
attribute_methods[1..-1].each do |x|
|
74
|
-
key = key.send(x) rescue ""
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
if data[key].nil?
|
79
|
-
data.merge!(key => [item])
|
80
|
-
else
|
81
|
-
data[key] << item
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
return data
|
86
|
-
end
|
87
|
-
|
88
|
-
|
89
|
-
# Sum up an array of objects with given attirbute
|
90
|
-
# Attributes can be given as symbol (:my_value will return obj.my_value)
|
91
|
-
# or as string ("user.my_value" will return my_value from user object which belongs to object in array)
|
92
|
-
# also, options could be passed, which could be *args or options hash
|
93
|
-
def sum_with_attribute(arg, opt =nil)
|
94
|
-
if arg.nil?
|
95
|
-
return self.compact.sum
|
96
|
-
else
|
97
|
-
values = []
|
98
|
-
if arg.is_a?(Symbol)
|
99
|
-
self.map {|i| ((opt.nil? ? i.send(arg) : i.send(arg, opt)) rescue 0) }.sum
|
100
|
-
elsif arg.is_a?(String)
|
101
|
-
self.each do |v|
|
102
|
-
tag_methods = arg.split(".")
|
103
|
-
tagx = v.send(tag_methods[0])
|
104
|
-
tag_methods[1..-1].each do |x|
|
105
|
-
# Use options if last method in chain called
|
106
|
-
if tag_methods[1..-1].last == x && !opt.nil?
|
107
|
-
tagx = tagx.send(x,opt)
|
108
|
-
else
|
109
|
-
tagx = tagx.send(x)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
values << tagx
|
113
|
-
end
|
114
|
-
return values.compact.sum
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
|
120
|
-
# check the number of items included in the array
|
121
|
-
def count_for(item)
|
122
|
-
count = 0
|
123
|
-
self.each {|x| count += 1 if x == item}
|
124
|
-
return count
|
125
|
-
end
|
126
|
-
|
127
|
-
|
128
|
-
# return the item after the given val in array
|
129
|
-
# returns val if no item found or val is not included
|
130
|
-
# toggle :cycle => true to continue search at beginn of array if end is reached
|
131
|
-
def next(val, options = {})
|
132
|
-
i = self.index(val)
|
133
|
-
return val if i.nil?
|
134
|
-
|
135
|
-
i == self.size-1 ?
|
136
|
-
(options[:cycle] == true ? self.first : val) : self[i+1]
|
137
|
-
end
|
138
|
-
|
139
|
-
|
140
|
-
# Schnittmenge / Intersection zwischen 2 Arrays
|
141
|
-
def isec(b)
|
142
|
-
raise ArgumentError, "#{b.inspect} is not an array" if !b.is_a?(Array)
|
143
|
-
(self- (self-b))
|
144
|
-
end
|
145
|
-
|
146
|
-
# like except for hash
|
147
|
-
def except(*args)
|
148
|
-
excluded = *args
|
149
|
-
return self - excluded
|
150
|
-
end
|
151
|
-
|
152
|
-
# break array into n arrays
|
153
|
-
def seperate(n = 8)
|
154
|
-
<<<<<<< HEAD
|
155
|
-
f = n
|
156
|
-
aks_size = self.size
|
157
|
-
rest = aks_size % f
|
158
|
-
|
159
|
-
stack = ((aks_size - rest) / f)
|
160
|
-
|
161
|
-
arrays = (1..f).to_a
|
162
|
-
|
163
|
-
arrays.map! {|i| self.first(stack*i).last(stack) }
|
164
|
-
=======
|
165
|
-
@f = n
|
166
|
-
aks_size = self.size
|
167
|
-
rest = aks_size % @f
|
168
|
-
|
169
|
-
@stack = ((aks_size - rest) / @f)
|
170
|
-
|
171
|
-
arrays = (1..@f).to_a
|
172
|
-
|
173
|
-
arrays.map! {|i| self.first(@stack*i).last(@stack) }
|
174
|
-
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
175
|
-
arrays[-1] += self.last(rest) if rest != 0
|
176
|
-
#arrays.last.pop if (arrays.last.last.empty? || arrays.last.last.blank?)
|
177
|
-
return arrays
|
178
|
-
end
|
179
|
-
|
180
|
-
# [1,2,3,5,6,7].stack(2)
|
181
|
-
# will return [[1, 2], [3, 5], [6, 7]]
|
182
|
-
def stack(n = 4)
|
183
|
-
arr = []
|
184
|
-
i = (self.size.to_f/n).ceil
|
185
|
-
i.times do |x|
|
186
|
-
arr << self[x*n..(((x+1)*n)-1)]
|
187
|
-
end
|
188
|
-
return arr
|
189
|
-
end
|
190
|
-
|
191
|
-
|
192
|
-
# Prepare array for use with mysql IN operator
|
193
|
-
def to_sql
|
194
|
-
return "(NULL)" if self.empty?
|
195
|
-
if self.first.is_a?(Numeric)
|
196
|
-
return "(#{self.join(',')})"
|
197
|
-
else
|
198
|
-
return "(#{self.map{|i| "'#{i.to_s}'"}.join(',')})"
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
#== Untested / deprecated functions below, should be moved somewhere else!
|
203
|
-
# Ignore these functions, there are neither tested nor documented, use them for fun if you like but dont ask me ;-)
|
204
|
-
|
205
|
-
def fill_with_sth(sth, size)
|
206
|
-
ary_length = self.size
|
207
|
-
diff = size - ary_length
|
208
|
-
if diff > 0
|
209
|
-
pop = Array.new(diff){|i| sth}
|
210
|
-
new_ary = pop.push(self).flatten!
|
211
|
-
return new_ary
|
212
|
-
else
|
213
|
-
return self
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
|
218
|
-
# Generiert einen JSON-String aus einem Array mit Werten
|
219
|
-
def json_labels
|
220
|
-
json = "["
|
221
|
-
self.each_with_index {|l,i| json << '{"id": "%s", "text": "%s"}' % [i, l] ; json << "," unless i+1 == self.size}
|
222
|
-
json << "]"
|
223
|
-
end
|
224
|
-
|
225
|
-
def to_text(sep = "<br />")
|
226
|
-
if Rails.env == "development"
|
227
|
-
raise "#REMOVED - use .join() - (17.12.2013, 15:18, Florian Eck)"
|
228
|
-
else
|
229
|
-
self.join(sep)
|
230
|
-
end
|
231
|
-
<<<<<<< HEAD
|
232
|
-
end
|
233
|
-
|
234
|
-
|
235
|
-
def interpolate(filtered_value = nil, options = {})
|
236
|
-
begin
|
237
|
-
|
238
|
-
int_start_value = nil
|
239
|
-
int_end_value = nil
|
240
|
-
int_from = 0
|
241
|
-
int_to = 0
|
242
|
-
int_steps = 0
|
243
|
-
|
244
|
-
array_with_interpolation = []
|
245
|
-
|
246
|
-
self.each_with_index do |x,i|
|
247
|
-
if i > 0
|
248
|
-
if x != filtered_value
|
249
|
-
# Wenn der letze ein fehler war ist die strecke zuende
|
250
|
-
if self[i-1] == filtered_value
|
251
|
-
|
252
|
-
if i-1 == 0
|
253
|
-
# Berechnung anstieg der linearfunktion zwischen Start-und Endpunkt
|
254
|
-
#
|
255
|
-
m = (self[i+1]-x)
|
256
|
-
|
257
|
-
array_with_interpolation[0] = x-m
|
258
|
-
array_with_interpolation << x
|
259
|
-
|
260
|
-
else
|
261
|
-
int_end_value = x
|
262
|
-
int_to = i
|
263
|
-
|
264
|
-
# Berechnung anstieg der linearfunktion zwischen Start-und Endpunkt
|
265
|
-
m = (int_end_value-int_start_value).fdiv((int_to-int_from))
|
266
|
-
|
267
|
-
# Fülle fehlende werte mit werten (y = mx + b)
|
268
|
-
int_steps.times {|mi| array_with_interpolation << (int_start_value+((mi+1)*m)) }
|
269
|
-
array_with_interpolation << int_end_value
|
270
|
-
|
271
|
-
# Reset all values
|
272
|
-
int_start_value = int_end_value
|
273
|
-
int_end_value = nil
|
274
|
-
int_from = 0
|
275
|
-
int_to = 0
|
276
|
-
int_steps = 0
|
277
|
-
puts array_with_interpolation.inspect
|
278
|
-
end
|
279
|
-
else
|
280
|
-
int_start_value = x
|
281
|
-
array_with_interpolation << x
|
282
|
-
end
|
283
|
-
# Wenn letzer wert fehlerhaft
|
284
|
-
elsif i == self.size-1 && x == filtered_value
|
285
|
-
# Berechnung anstieg der linearfunktion zwischen Start-und Endpunkt
|
286
|
-
# Berechnung über gesamtes array
|
287
|
-
m = (array_with_interpolation.last-array_with_interpolation.first).fdiv(array_with_interpolation.size-1)
|
288
|
-
array_with_interpolation << (array_with_interpolation.last+m)
|
289
|
-
else
|
290
|
-
int_steps += 1
|
291
|
-
int_from = i-int_steps
|
292
|
-
end
|
293
|
-
|
294
|
-
else
|
295
|
-
int_start_value = x
|
296
|
-
array_with_interpolation << x
|
297
|
-
end
|
298
|
-
|
299
|
-
end
|
300
|
-
|
301
|
-
return array_with_interpolation
|
302
|
-
rescue
|
303
|
-
puts "WARNING: Interpolation not possible!".red
|
304
|
-
return self
|
305
|
-
end
|
306
|
-
|
307
|
-
end
|
308
|
-
=======
|
309
|
-
end
|
310
|
-
>>>>>>> ad58e345c5de2638e34e44d69bb19b0ebebcd41e
|
311
|
-
|
312
|
-
end
|
313
|
-
end
|
data/lib/numbers.rb.orig
DELETED
@@ -1,220 +0,0 @@
|
|
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.orig
DELETED
@@ -1,74 +0,0 @@
|
|
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.orig
DELETED
@@ -1,303 +0,0 @@
|
|
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
|