friendly_extensions 0.0.62 → 0.0.65

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ff2c7ed3b7ba8d409f8ca14d3cbf0f168fc7a633
4
- data.tar.gz: c240211d83e278a198fb710393ea1f3368f4495a
3
+ metadata.gz: 599b81295e728316bffa52a91ee0f83cfe21a0fc
4
+ data.tar.gz: e279fc4b1e79c9dd27f2e59bcc223b472e20620e
5
5
  SHA512:
6
- metadata.gz: 4b0a21c79bfeb6506dda677f9143e8e12d06561702fd2cf47ddd7f464e2445d83ca670a350bd6cec774e068812d84ed9bd54a363d400f09573e70d3f142ec2aa
7
- data.tar.gz: 39ab444b280dae8877f3571ca4c4d8779e6b3030c5731b636f3f15b3c48b6b7bdcfcc54075d6fa9c5d4d688acd6a2d08b2b2adb7851f547c5b6af98aa3efa63e
6
+ metadata.gz: 29f70901e22e4edaff2566793f6d564606467fdeace229fcb910dc1c129f53b7fea4a866b9c3b64a30927f5142bb4c9b4f4980314e2aad1fba19193987105ad2
7
+ data.tar.gz: 777f32151ae55d93267d001432a3d361f32bf72b193fbf9a480d4c29eca51c338fc7995533e00ba038cfdb8536548473d0d6850981830f57074b011b50b63eb7
data/lib/array.rb CHANGED
@@ -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.join(',')})"
167
+ return "(#{self.compact.join(',')})"
168
168
  else
169
169
  return "(#{self.map{|i| "'#{i.to_s}'"}.join(',')})"
170
170
  end
@@ -0,0 +1,10 @@
1
+ module FriendlyExtensions
2
+ class Engine < Rails::Engine
3
+ engine_name "friendly_extensions"
4
+
5
+ initializer "friends.labeled_form_helper" do
6
+ ActionView::Helpers::FormBuilder.send(:include, FriendsLabeledFormHelper)
7
+ end
8
+
9
+ end
10
+ end
@@ -1,14 +1,14 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  # All dit janze zeug laden
3
3
 
4
- require "array"
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
- result = ActionController::Base.helpers.number_with_precision(self, :precision => 0, :separator => ",", :delimiter => ".")
29
- if !label.blank?
30
- return [result, label].join("&nbsp;").html_safe
31
- else
32
- return result
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
@@ -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
- l = ConceptLabel::LABELS[self]
85
- if l.nil?
86
- ConceptLabel.create(:label => self, :attribute_name => self)
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
- else
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 test_array_avg_should_no_break_with_nil_and_emtpy
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
@@ -9,6 +9,10 @@ class NumericTest < Test::Unit::TestCase
9
9
  #assert_equal 0.29.to_euro, "0,29"
10
10
  end
11
11
 
12
+ def test_number_should_convert_to_array
13
+ assert_equal 1.to_a, [1]
14
+ end
15
+
12
16
  # Test Math Functions
13
17
  def test_math_infla_defla
14
18
 
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.62
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-02-18 00:00:00.000000000 Z
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:
@@ -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("&nbsp;").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("&nbsp;").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
-
@@ -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
@@ -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(" ", "&nbsp;").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