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 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