active_object 3.1.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,3 +1,3 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
2
 
3
3
  task default: :spec
@@ -1,27 +1,30 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
2
+ lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "active_object/version"
4
+ require 'active_object/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "active_object"
7
+ spec.name = 'active_object'
8
8
  spec.version = ActiveObject::VERSION
9
- spec.authors = ["Juan Gomez"]
10
- spec.email = ["j.gomez@drexed.com"]
9
+ spec.authors = ['Juan Gomez']
10
+ spec.email = ['j.gomez@drexed.com']
11
11
 
12
- spec.summary = %q{Gem for commonly used ruby object helpers.}
13
- spec.description = %q{Class extensions of commonly used ruby object helpers.}
14
- spec.homepage = "http://drexed.github.io/active_object"
15
- spec.license = "MIT"
12
+ spec.summary = 'Gem for commonly used ruby object helpers.'
13
+ spec.description = 'Class extensions of commonly used ruby object helpers.'
14
+ spec.homepage = 'http://drexed.github.io/active_object'
15
+ spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
18
+ spec.bindir = 'exe'
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
21
21
 
22
- spec.add_development_dependency "bundler"
23
- spec.add_development_dependency "coveralls"
24
- spec.add_development_dependency "rake"
25
- spec.add_development_dependency "rspec"
26
- spec.add_development_dependency "generator_spec"
22
+ spec.add_development_dependency 'bundler'
23
+ spec.add_development_dependency 'coveralls'
24
+ spec.add_development_dependency 'rake'
25
+ spec.add_development_dependency 'rspec'
26
+ spec.add_development_dependency 'generator_spec'
27
+ spec.add_development_dependency 'fasterer'
28
+ spec.add_development_dependency 'reek'
29
+ spec.add_development_dependency 'rubocop'
27
30
  end
data/bin/console CHANGED
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "active_object"
3
+ require 'bundler/setup'
4
+ require 'active_object'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
10
+ # require 'pry'
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start
data/bin/rake CHANGED
@@ -2,15 +2,14 @@
2
2
  #
3
3
  # This file was generated by Bundler.
4
4
  #
5
- # The application "rake" is installed as part of a gem, and
5
+ # The application 'rake' is installed as part of a gem, and
6
6
  # this file is here to facilitate running it.
7
7
  #
8
8
 
9
- require "pathname"
10
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
11
- Pathname.new(__FILE__).realpath)
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', Pathname.new(__FILE__).realpath)
12
11
 
13
- require "rubygems"
14
- require "bundler/setup"
12
+ require 'rubygems'
13
+ require 'bundler/setup'
15
14
 
16
- load Gem.bin_path("rake", "rake")
15
+ load Gem.bin_path('rake', 'rake')
data/lib/.DS_Store ADDED
Binary file
data/lib/active_object.rb CHANGED
@@ -1,35 +1,6 @@
1
- require "active_object/version"
2
- require "active_object/configuration"
3
-
4
- module ActiveObject
5
-
6
- class << self
7
- attr_accessor :configuration
8
- end
9
-
10
- def self.configuration
11
- @configuration ||= Configuration.new
12
- end
13
-
14
- def self.configuration=(config)
15
- @configuration = config
16
- end
17
-
18
- def self.configure
19
- yield(configuration)
1
+ %w(version settings array date enumerable hash integer numeric object range string time)
2
+ .each do |file_name|
3
+ require "active_object/#{file_name}"
20
4
  end
21
5
 
22
- end
23
-
24
- require "active_object/array"
25
- require "active_object/date"
26
- require "active_object/enumerable"
27
- require "active_object/hash"
28
- require "active_object/integer"
29
- require "active_object/numeric"
30
- require "active_object/object"
31
- require "active_object/range"
32
- require "active_object/string"
33
- require "active_object/time"
34
-
35
- require "generators/active_object/install_generator"
6
+ require 'generators/active_object/install_generator'
Binary file
@@ -30,25 +30,26 @@ module ActiveObject::Array
30
30
 
31
31
  def delete_values(*args)
32
32
  result = []
33
- args.each { |v| result << delete(v) }
33
+ args.each { |val| result << delete(val) }
34
34
  result
35
35
  end
36
36
 
37
37
  def dig(key, *rest)
38
- if value = (self[key] rescue nil)
39
- if rest.empty?
40
- value
41
- elsif value.respond_to?(:dig)
42
- value.dig(*rest)
43
- end
38
+ value = (self[key] rescue nil)
39
+ return if value.nil?
40
+
41
+ if rest.empty?
42
+ value
43
+ elsif value.respond_to?(:dig)
44
+ value.dig(*rest)
44
45
  end
45
46
  end
46
47
 
47
- def duplicates(minimum=2)
48
+ def duplicates(minimum = 2)
48
49
  hash = Hash.new(0)
49
50
 
50
- each { |i| hash[i] += 1 }
51
- hash.delete_if { |k, v| v < minimum }.keys
51
+ each { |val| hash[val] += 1 }
52
+ hash.delete_if { |_, val| val < minimum }.keys
52
53
  end
53
54
 
54
55
  def from(position)
@@ -58,32 +59,36 @@ module ActiveObject::Array
58
59
  def groups(number)
59
60
  return([]) if number <= 0
60
61
 
61
- n, r = length.divmod(number)
62
- collection = (0..(n - 1)).collect { |i| self[(i * number), number] }
63
- r > 0 ? collection << self[-r, r] : collection
62
+ num, rem = length.divmod(number)
63
+ collection = (0..(num - 1)).collect { |val| self[(val * number), number] }
64
+ rem.positive? ? collection << self[-rem, rem] : collection
64
65
  end
65
66
 
66
- def in_groups(number, fill_with=nil)
67
+ # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/AbcSize
68
+ def in_groups(number, fill_with = nil)
67
69
  collection_length = length
68
70
  division = collection_length.div(number)
69
71
  modulo = collection_length % number
70
72
 
71
73
  collection = []
72
74
  start = 0
73
- number.times do |i|
74
- grouping = division + (modulo > 0 && modulo > i ? 1 : 0)
75
+ number.times do |int|
76
+ mod_gt_zero = modulo.positive?
77
+ grouping = division + (mod_gt_zero && modulo > int ? 1 : 0)
75
78
  collection << last_group = slice(start, grouping)
76
- last_group << fill_with if fill_with != false && modulo > 0 && grouping == division
79
+ last_group << fill_with if fill_with != false && mod_gt_zero && grouping == division
77
80
  start += grouping
78
81
  end
79
82
 
80
- block_given? ? collection.each { |g| yield(g) } : collection
83
+ block_given? ? collection.each { |val| yield(val) } : collection
81
84
  end
85
+ # rubocop:enable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/AbcSize
82
86
 
83
- def in_groups_of(number, fill_with=nil)
87
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
88
+ def in_groups_of(number, fill_with = nil)
84
89
  if number.to_i <= 0
85
90
  raise ArgumentError,
86
- "Group length must be a positive integer, was #{number.inspect}"
91
+ "Group length must be a positive integer, was #{number.inspect}"
87
92
  end
88
93
 
89
94
  if fill_with == false
@@ -93,17 +98,20 @@ module ActiveObject::Array
93
98
  collection = dup.concat(Array.new(padding, fill_with))
94
99
  end
95
100
 
96
- block_given? ? collection.each_slice(number) { |slice| yield(slice) } : collection.each_slice(number).to_a
101
+ sliced_collection = collection.each_slice(number)
102
+
103
+ block_given? ? sliced_collection { |val| yield(val) } : sliced_collection.to_a
97
104
  end
105
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
98
106
 
99
107
  def percentile(percentage)
100
- size = self.size
108
+ total_size = size
101
109
 
102
- if size > 1
103
- index = (size * percentage) / 100.0
104
- self.sort[index]
110
+ if total_size > 1
111
+ index = (total_size * percentage) / 100.0
112
+ sort[index]
105
113
  else
106
- self.first
114
+ first
107
115
  end
108
116
  end
109
117
 
@@ -111,31 +119,33 @@ module ActiveObject::Array
111
119
  hash = Hash.new(0.0)
112
120
  differ = 0.0
113
121
 
114
- each do |e|
115
- hash[e] += 1.0
122
+ each do |val|
123
+ hash[val] += 1.0
116
124
  differ += 1.0
117
125
  end
118
126
 
119
- hash.keys.each { |e| hash[e] /= differ }
127
+ hash.each_key { |val| hash[val] /= differ }
120
128
  hash
121
129
  end
122
130
 
123
131
  def reject_values(*args)
124
- reject { |x| args.include?(x) }
132
+ reject { |val| args.include?(val) }
125
133
  end
126
134
 
127
135
  def sample!
128
136
  delete_at(Random.rand(length - 1))
129
137
  end
130
138
 
131
- def split(number=nil)
139
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
140
+ def split(number = nil)
132
141
  if block_given?
133
- inject([[]]) do |results, element|
142
+ each_with_object([[]]) do |element, results|
134
143
  yield(element) ? (results << []) : (results.last << element)
135
- results
136
144
  end
137
145
  else
138
- results, arr = [[]], dup
146
+ results = [[]]
147
+ arr = dup
148
+
139
149
  until arr.empty?
140
150
  if (idx = arr.index(number))
141
151
  results.last.concat(arr.shift(idx))
@@ -145,12 +155,14 @@ module ActiveObject::Array
145
155
  results.last.concat(arr.shift(arr.length))
146
156
  end
147
157
  end
158
+
148
159
  results
149
160
  end
150
161
  end
162
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
151
163
 
152
164
  def strip
153
- reject { |v| v.blank? }
165
+ reject(&:blank?)
154
166
  end
155
167
 
156
168
  def strip!
@@ -161,17 +173,18 @@ module ActiveObject::Array
161
173
  position >= 0 ? first(position + 1) : self[0..position]
162
174
  end
163
175
 
164
- def to_sentence(options={})
176
+ # rubocop:disable Metrics/MethodLength
177
+ def to_sentence(options = {})
165
178
  default_connectors = {
166
- words_connector: ", ",
167
- two_words_connector: " and ",
168
- last_word_connector: ", and "
179
+ words_connector: ', ',
180
+ two_words_connector: ' and ',
181
+ last_word_connector: ', and '
169
182
  }
170
183
  options = default_connectors.merge!(options)
171
184
 
172
185
  case length
173
186
  when 0
174
- ""
187
+ ''
175
188
  when 1
176
189
  self[0].to_s.dup
177
190
  when 2
@@ -180,7 +193,8 @@ module ActiveObject::Array
180
193
  "#{self[0...-1].join(options[:words_connector])}#{options[:last_word_connector]}#{self[-1]}"
181
194
  end
182
195
  end
196
+ # rubocop:enable Metrics/MethodLength
183
197
 
184
198
  end
185
199
 
186
- Array.send(:include, ActiveObject::Array) if ActiveObject.configuration.autoload_array
200
+ Array.send(:include, ActiveObject::Array) if ActiveObject::Settings.config.autoload_array
@@ -1,5 +1,4 @@
1
1
  module ActiveObject::Date
2
-
3
2
  MINUTE = 60.0
4
3
  HOUR = MINUTE * 60.0
5
4
  DAY = HOUR * 24.0
@@ -10,26 +9,22 @@ module ActiveObject::Date
10
9
  MILLENNIUM = CENTURY * 10.0
11
10
 
12
11
  STRING_UNITS = {
13
- d: "d", day: "d", day_padded: "d", dd: "-d", Day: "-d", day_unpadded: "-d",
14
- ddd: "_d", DAY: "_d", day_blank: "_d", dddd: "j", day_of_the_year: "j",
15
- m: "m", month: "m", month_padded: "m", mm: "-m", Month: "-m",
16
- month_unpadded: "-m", mmm: "_m", MONTH: "_m", month_blank: "_m", mmmm: "B",
17
- month_name: "B", mmmmm: "b", month_name_abbr: "b", w: "u", weekday: "u",
18
- ww: "w", weekday_offset: "w", www: "A", weekday_name: "A", wwww: "a",
19
- weekday_name_abbr: "a", wwwww: "W", week: "W", wwwwww: "U", week_offset: "U",
20
- yy: "y", yr: "y", yyyy: "Y", year: "Y"
21
- }
12
+ d: 'd', day: 'd', day_padded: 'd', dd: '-d', Day: '-d', day_unpadded: '-d', ddd: '_d',
13
+ DAY: '_d', day_blank: '_d', dddd: 'j', day_of_the_year: 'j', m: 'm', month: 'm', yyyy: 'Y',
14
+ month_padded: 'm', mm: '-m', Month: '-m', month_unpadded: '-m', mmm: '_m', MONTH: '_m',
15
+ month_blank: '_m', mmmm: 'B', month_name: 'B', mmmmm: 'b', month_name_abbr: 'b', w: 'u',
16
+ weekday: 'u', ww: 'w', weekday_offset: 'w', www: 'A', weekday_name: 'A', wwww: 'a', year: 'Y',
17
+ weekday_name_abbr: 'a', wwwww: 'W', week: 'W', wwwwww: 'U', week_offset: 'U', yy: 'y', yr: 'y'
18
+ }.freeze
22
19
  KEY_UNITS = {
23
- month: "%m", month_padded: "%m", month_unpadded: "%-m", month_blank: "%_m",
24
- month_name: "%B", month_name_abbr: "%b", month_year: "%m %Y",
25
- month_padded_year: "%m %Y", month_unpadded_year: "%-m %Y",
26
- month_blank_year: "%_m %Y", month_name_year: "%B %Y",
27
- month_name_abbr_year: "%b %Y", weekday: "%d", weekday_padded: "%d",
28
- weekday_unpadded: "%-d", weekday_blank: "%_d", weekday_name: "%A",
29
- weekday_name_abbr: "%a", yr: "%y", year_abbr: "%y", year: "%Y",
30
- date: "%B %-d, %Y", date_abbr:"%b %-d, %Y", date_iso: "%Y-%m-%d",
31
- day: "%B %-d", day_abbr: "%b %-d", day_iso: "%m-%d"
32
- }
20
+ month: '%m', month_padded: '%m', month_unpadded: '%-m', month_blank: '%_m', month_name: '%B',
21
+ month_name_abbr: '%b', month_year: '%m %Y', month_padded_year: '%m %Y', day_iso: '%m-%d',
22
+ month_unpadded_year: '%-m %Y', month_blank_year: '%_m %Y', month_name_year: '%B %Y',
23
+ month_name_abbr_year: '%b %Y', weekday: '%d', weekday_padded: '%d', weekday_unpadded: '%-d',
24
+ weekday_blank: '%_d', weekday_name: '%A', weekday_name_abbr: '%a', yr: '%y', year_abbr: '%y',
25
+ year: '%Y', date: '%B %-d, %Y', date_abbr: '%b %-d, %Y', date_iso: '%Y-%m-%d', day: '%B %-d',
26
+ day_abbr: '%b %-d'
27
+ }.freeze
33
28
 
34
29
  def count_centuries_since(time)
35
30
  count_seconds_since(time) / CENTURY
@@ -96,7 +91,7 @@ module ActiveObject::Date
96
91
  strftime(string.join)
97
92
  end
98
93
 
99
- def to_format(key=:datetime_iso)
94
+ def to_format(key = :datetime_iso)
100
95
  strftime(KEY_UNITS.fetch(key.to_sym))
101
96
  end
102
97
 
@@ -104,4 +99,4 @@ module ActiveObject::Date
104
99
 
105
100
  end
106
101
 
107
- Date.send(:include, ActiveObject::Date) if ActiveObject.configuration.autoload_date
102
+ Date.send(:include, ActiveObject::Date) if ActiveObject::Settings.config.autoload_date
@@ -1,39 +1,43 @@
1
1
  module Enumerable
2
2
 
3
+ # rubocop:disable Lint/UnusedMethodArgument
3
4
  def cluster(&block)
4
5
  result = []
5
- each do |element|
6
- if result.last && (yield(result.last.last) == yield(element))
7
- result.last << element
6
+ each do |ele|
7
+ last_res = result.last
8
+
9
+ if last_res && (yield(last_res.last) == yield(ele))
10
+ last_res << ele
8
11
  else
9
- result << [element]
12
+ result << [ele]
10
13
  end
11
14
  end
12
15
  result
13
16
  end
17
+ # rubocop:enable Lint/UnusedMethodArgument
14
18
 
15
- def difference(identity=0, &block)
19
+ def difference(identity = 0, &block)
16
20
  if block_given?
17
21
  map(&block).difference(identity)
18
22
  else
19
- inject { |d, v| d - v } || identity
23
+ inject { |key, val| key - val } || identity
20
24
  end
21
25
  end
22
26
 
23
- def divisible(identity=0, &block)
27
+ def divisible(identity = 0, &block)
24
28
  if block_given?
25
29
  map(&block).divisible(identity)
26
30
  else
27
- inject { |d, v| d / v } || identity
31
+ inject { |key, val| key / val } || identity
28
32
  end
29
33
  end
30
34
 
31
- def drop_last(n)
35
+ def drop_last(num)
32
36
  collection_length = to_a.length
33
37
 
34
- return(self) if n > collection_length
38
+ return(self) if num > collection_length
35
39
 
36
- self[0...(collection_length - n)]
40
+ self[0...(collection_length - num)]
37
41
  end
38
42
 
39
43
  def drop_last_if
@@ -41,16 +45,20 @@ module Enumerable
41
45
 
42
46
  result = []
43
47
  dropping = true
44
- reverse_each do |value|
45
- result.unshift(value) unless dropping &&= yield(value)
48
+ reverse_each do |val|
49
+ result.unshift(val) unless dropping &&= yield(val)
46
50
  end
47
51
  result
48
52
  end
49
53
 
50
- def exactly?(n)
54
+ def exactly?(num)
51
55
  found_count = 0
52
- block_given? ? each { |*o| found_count += 1 if yield(*o) } : each { |o| found_count += 1 if o }
53
- (found_count > n) ? false : n == found_count
56
+ if block_given?
57
+ each { |*opt| found_count += 1 if yield(*opt) }
58
+ else
59
+ each { |opt| found_count += 1 if opt }
60
+ end
61
+ found_count > num ? false : num == found_count
54
62
  end
55
63
 
56
64
  def exclude?(object)
@@ -58,30 +66,32 @@ module Enumerable
58
66
  end
59
67
 
60
68
  def expand
61
- map { |n| n.is_a?(Enumerable) ? n.expand : n }
69
+ map { |val| val.is_a?(Enumerable) ? val.expand : val }
62
70
  end
63
71
 
64
- def exponential(identity=0, &block)
72
+ def exponential(identity = 0, &block)
65
73
  if block_given?
66
74
  map(&block).exponential(identity)
67
75
  else
68
- inject { |d, v| d ** v } || identity
76
+ inject { |key, val| key**val } || identity
69
77
  end
70
78
  end
71
79
 
72
80
  def frequencies
73
- each_with_object(Hash.new(0)) { |e, a| a[e] += 1 }
81
+ each_with_object(Hash.new(0)) { |key, hsh| hsh[key] += 1 }
74
82
  end
75
83
 
84
+ # rubocop:disable Style/CaseEquality
76
85
  def incase?(object)
77
- any? { |x| object === x }
86
+ any? { |val| object === val }
78
87
  end
88
+ # rubocop:enable Style/CaseEquality
79
89
 
80
90
  def many?
81
91
  found_count = 0
82
92
  if block_given?
83
- any? do |v|
84
- found_count += 1 if yield v
93
+ any? do |val|
94
+ found_count += 1 if yield val
85
95
  found_count > 1
86
96
  end
87
97
  else
@@ -89,16 +99,16 @@ module Enumerable
89
99
  end
90
100
  end
91
101
 
92
- def max(identity=0)
93
- (length rescue count) > 0 ? sort.last : identity
102
+ def max(identity = 0)
103
+ (length rescue count).positive? ? sort.last : identity
94
104
  end
95
105
 
96
- def min(identity=0)
97
- (length rescue count) > 0 ? sort.first : identity
106
+ def min(identity = 0)
107
+ (length rescue count).positive? ? sort.first : identity
98
108
  end
99
109
 
100
- def mean(identity=0)
101
- return(identity) unless length > 0
110
+ def mean(identity = 0)
111
+ return(identity) unless length.positive?
102
112
 
103
113
  collection_length = length
104
114
  sum.to_f / collection_length.to_f
@@ -106,44 +116,47 @@ module Enumerable
106
116
 
107
117
  alias_method :average, :mean
108
118
 
109
- def median(identity=0)
119
+ def median(identity = 0)
110
120
  collection_length = length.to_f
111
121
  collection_sorted = sort
112
122
 
113
123
  return(identity) unless collection_length > 0.0
124
+ half_collection = collection_length / 2.0
125
+ sorted_collection = collection_sorted[half_collection]
114
126
 
115
127
  if (collection_length % 2).zero?
116
- (collection_sorted[(collection_length / 2.0) -1.0] + collection_sorted[collection_length / 2.0]) / 2.0
128
+ (collection_sorted[half_collection - 1.0] + sorted_collection) / 2.0
117
129
  else
118
- collection_sorted[collection_length / 2.0]
130
+ sorted_collection
119
131
  end
120
132
  end
121
133
 
122
- def mode(identity=0)
123
- return(identity) unless length > 0
134
+ # rubocop:disable Metrics/AbcSize
135
+ def mode(identity = 0)
136
+ return(identity) unless length.positive?
124
137
 
125
- frequency_distribution = inject(Hash.new(0)) { |h, v| h[v] += 1; h }
126
- frequency_top_two = frequency_distribution.sort { |k, v| v[1] <=> k[1] }.take(2)
138
+ frequency_distribution = each_with_object(Hash.new(0)) { |val, hsh| hsh[val] += 1 }
139
+ frequency_top_two = frequency_distribution.sort_by { |_, val| -val }.take(2)
140
+ top_two_first = frequency_top_two.first
127
141
 
128
- if frequency_top_two.length == 1
129
- frequency_top_two.first.first
130
- elsif frequency_top_two.first.last == frequency_top_two.last.last
142
+ if frequency_top_two.length != 1 && top_two_first.last == frequency_top_two.last.last
131
143
  nil
132
144
  else
133
- frequency_top_two.first.first
145
+ top_two_first.first
134
146
  end
135
147
  end
148
+ # rubocop:ensable Metrics/AbcSize
136
149
 
137
- def multiple(identity=0, &block)
150
+ def multiple(identity = 0, &block)
138
151
  if block_given?
139
152
  map(&block).multiple(identity)
140
153
  else
141
- inject { |d, v| d * v } || identity
154
+ inject { |key, val| key * val } || identity
142
155
  end
143
156
  end
144
157
 
145
- def range(identity=0)
146
- return(identity) unless length > 0
158
+ def range(identity = 0)
159
+ return(identity) unless length.positive?
147
160
 
148
161
  collection_sorted = sort
149
162
  collection_sorted.last - collection_sorted.first
@@ -151,47 +164,51 @@ module Enumerable
151
164
 
152
165
  def several?
153
166
  found_count = 0
154
- block_given? ? each { |*o| found_count += 1 if yield(*o) } : each { |o| found_count += 1 if o }
155
- (found_count > 1) ? true : false
167
+ if block_given?
168
+ each { |*opt| found_count += 1 if yield(*opt) }
169
+ else
170
+ each { |opt| found_count += 1 if opt }
171
+ end
172
+ found_count > 1 ? true : false
156
173
  end
157
174
 
158
- def standard_deviation(identity=0)
175
+ def standard_deviation(identity = 0)
159
176
  return(identity) if length < 2
160
177
 
161
178
  Math.sqrt(variance)
162
179
  end
163
180
 
164
- def sum(identity=0, &block)
181
+ def sum(identity = 0, &block)
165
182
  if block_given?
166
183
  map(&block).sum(identity)
167
184
  else
168
- inject { |s, v| s + v } || identity
185
+ inject { |sum, val| sum + val } || identity
169
186
  end
170
187
  end
171
188
 
172
- def take_last(n)
189
+ def take_last(num)
173
190
  collection_length = to_a.length
174
191
 
175
- return(self) if n > collection_length
192
+ return(self) if num > collection_length
176
193
 
177
- self[(collection_length - n)..-1]
194
+ self[(collection_length - num)..-1]
178
195
  end
179
196
 
180
197
  def take_last_if
181
198
  return(to_enum(:take_last_if)) unless block_given?
182
199
 
183
200
  result = []
184
- reverse_each { |e| yield(e) ? result.unshift(e) : break }
201
+ reverse_each { |val| yield(val) ? result.unshift(val) : break }
185
202
  result
186
203
  end
187
204
 
188
- def variance(identity=0)
205
+ def variance(identity = 0)
189
206
  collection_length = length
190
207
 
191
208
  return(identity) if collection_length <= 1
192
209
 
193
- sum = inject(0.0) { |s,v| s + (v - mean) ** 2.0 }
194
- sum.to_f / (collection_length.to_f - 1.0)
210
+ total = inject(0.0) { |sum, val| sum + (val - mean)**2.0 }
211
+ total.to_f / (collection_length.to_f - 1.0)
195
212
  end
196
213
 
197
214
  end