kuku 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +15 -0
  2. data/README.rdoc +17 -0
  3. data/lib/kuku.rb +158 -0
  4. metadata +45 -0
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ OGYxYTU5NjJjYmU3OWNiM2Q5MjFkMzYxNWQ4MzQ5ODRhNTk0MTZkMA==
5
+ data.tar.gz: !binary |-
6
+ NWYwZWViNGIzMjYxYWFkZjI4ODJlODM2YzIzMjhjZjFjOTQ5ZDZkYw==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ ZjVkMzY2YTVkZDU2OTA3MjU1MmQ0NDJiOTg3YTUwYmQwM2IxNGRjYjljMmQ0
10
+ YzllMWYyZTBjZmFmZGIxMTZjNGZiY2U5NjY0NzE1MDhiMTJjODk3N2RiYjgy
11
+ OGY2MGUxNDBmZmVhZjY0MmJiZWFjOTg3ZDlmYTk2MDMzODRlMzU=
12
+ data.tar.gz: !binary |-
13
+ YjQ2ZmY4MDFiMDdhZDdlMjFmYWU1OTdiZmVmY2UzMWZlZGMwMTk1ZDJhY2Nh
14
+ ODlmMmVkOGZkZWY2ZWY4MTg3MTU3MGQzYzIyZTc1ZGE0ZjE4ZDE2NGE0ODMx
15
+ MWJjMGYzMDM2MGYwODM1N2Y3ZDFiZjZjZmY2NjU2MzZjOGVhNGQ=
data/README.rdoc ADDED
@@ -0,0 +1,17 @@
1
+ = kuku
2
+
3
+ Ruby object modifications.
4
+ - Array as_chain
5
+ - Array rank
6
+ - Range near_top?, near_bottom?
7
+ - Object attributes, update_attributes
8
+
9
+ == INSTALL
10
+
11
+ gem install kuku
12
+
13
+ == DEPENDENCIES
14
+
15
+ None
16
+
17
+
data/lib/kuku.rb ADDED
@@ -0,0 +1,158 @@
1
+ module ChainAnalysis
2
+ def stability method_name, n=8
3
+ elements(method_name, n).stability
4
+ end
5
+ def average_growth method_name, n=8
6
+ elements(method_name, n).average_growth
7
+ end
8
+ def mean method_name, n=8
9
+ elements(method_name, n).mean
10
+ end
11
+ def elements method_name, n=8
12
+ as_unchained_array[0..(n-1)].map{|s| s.method(method_name).call}
13
+ end
14
+ end
15
+
16
+
17
+ class Object
18
+ include ChainAnalysis
19
+ attr_accessor :next, :previous
20
+ def nvl v
21
+ v ? v : 0
22
+ end
23
+ def as_number
24
+ return self if self.class != String
25
+ signing = start_with?("(") && end_with?(")") ? -1 : 1
26
+ s = gsub(",", "").gsub("--", "").gsub("(", "").gsub(")", "")
27
+ !s.empty? ? s.to_i * signing : 0
28
+ end
29
+ def as_unchained_array
30
+ return Array[self] if self.next == nil
31
+ a = Array[self] << self.next.as_unchained_array
32
+ a.flatten
33
+ end
34
+ def update_attributes hash
35
+ hash.each { |name, value| instance_variable_set("@#{name}", value) }
36
+ end
37
+ def attributes
38
+ !instance_variables.empty? ?
39
+ (instance_variables_as_hash) :
40
+ (struct_as_hash self)
41
+ end
42
+ def instance_variables_as_hash
43
+ hash = Hash.new
44
+ instance_variables.each{|v|
45
+ hash[hash_key_for(v)] = instance_variable_get(v)
46
+ }
47
+ hash
48
+ end
49
+ def struct_as_hash obj
50
+ hash = Hash.new
51
+ obj.each_pair {|name, value| hash[name] = value}
52
+ hash
53
+ end
54
+ def hash_key_for v
55
+ v.to_s.gsub("@","").to_sym
56
+ end
57
+ end
58
+
59
+
60
+ class Array
61
+ def as_chain
62
+ self.size.times{|i|
63
+ a = self[i+1]
64
+ b = self[i-1]
65
+ (self[i].next = a) if a
66
+ (self[i].previous = b) if (b && i > 0)
67
+ }
68
+ self[0]
69
+ end
70
+ def rank
71
+ Rank.new self
72
+ end
73
+ def total
74
+ Totaler.new self
75
+ end
76
+ def product
77
+ reduce{|k,v| k*v}
78
+ end
79
+ def geometric_mean
80
+ product ** (1/size.to_f)
81
+ end
82
+ def sum
83
+ reduce{|k,v| k+v}
84
+ end
85
+ def mean
86
+ sum / size
87
+ end
88
+ def standard_deviation
89
+ Math.sqrt variance
90
+ end
91
+ def variance
92
+ ((reduce(0){|k,v| k+(v-mean)**2})) / size.to_f
93
+ end
94
+ def stability
95
+ mean / (standard_deviation > 1.0 ? standard_deviation : 1)
96
+ end
97
+ def growth
98
+ result = Array.new
99
+ (size-1).times {|i| result << ((self[i].to_f - self[i+1].to_f)/self[i+1].to_f) * 100 }
100
+ result
101
+ end
102
+ def average_growth
103
+ growth.mean
104
+ end
105
+ end
106
+
107
+
108
+ class Range
109
+ def percent n
110
+ a = last - first
111
+ b = n - first
112
+ ((b / a) * 100).round(2)
113
+ end
114
+ def near_top? n, definition = 25.0
115
+ percent(n).between?((100-definition), 100+definition)
116
+ end
117
+ def near_bottom? n, definition = 25.0
118
+ percent(n).between?(0, definition)
119
+ end
120
+ end
121
+
122
+
123
+ RankedObject = Struct.new(:rank, :object)
124
+ class Rank
125
+ def initialize objects
126
+ @objects = objects
127
+ @all_rankings = Array.new
128
+ end
129
+ def size
130
+ @objects.size
131
+ end
132
+ def higher_is_better criteria
133
+ rank_reverse true, criteria
134
+ end
135
+ def lower_is_better criteria
136
+ rank_reverse false, criteria
137
+ end
138
+ def rank_reverse do_reverse, criteria
139
+ criteria.each{|criterion|
140
+ i = 0
141
+ sorted = @objects.sort_by {|o| eval("o.#{criterion}")}
142
+ sorted = sorted.reverse if do_reverse
143
+ @all_rankings << sorted.collect{|o| RankedObject.new(i+=1, o) }
144
+ }
145
+ self
146
+ end
147
+ def total_for a
148
+ @all_rankings.collect{|rank|
149
+ rank.select{|ranked_item| ranked_item.object == a}[0].rank}.
150
+ inject{|sum, i| sum + i}
151
+ end
152
+ def execute
153
+ @objects.
154
+ collect{|o| RankedObject.new(total_for(o), o)}.
155
+ sort_by{|r| r.rank}.
156
+ collect{|r| r.object}
157
+ end
158
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kuku
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Craig Davidson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-09-20 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: General helpers.
14
+ email: craig@craigdavidson.co.uk
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - README.rdoc
20
+ - lib/kuku.rb
21
+ homepage: https://github.com/craigmdavidson/kuku
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.0.5
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Kuku.
45
+ test_files: []