sumhash 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6821cbf43c71f33fb60986e6673e5a5b04f006f4
4
+ data.tar.gz: e550b4a42a77731938b66faacc91eca6cb487ab5
5
+ SHA512:
6
+ metadata.gz: 9dffd044887b13b9dc554fe45218bc8194c2c105fe62bd6684f8dd5db55240c347b8e93461b888b6d20d4ddf2e8608c1b0e8600119e8d18ff062a4c41daed36c
7
+ data.tar.gz: 86e4a7d2c1477d4cf12718cacbb0cebde19f3fcd25c9616e94e957c3f7888c41085e3020a6641cb545b12374f7467d82c439058a5906b80d803864a92c9f19bb
data/lib/sumhash.rb CHANGED
@@ -1,6 +1,12 @@
1
- $:.unshift File.dirname(__FILE__) # for use/testing when no gem is installed
2
-
3
- require 'ostruct'
1
+ require 'sumhash/version'
4
2
  require 'sumhash/hash'
5
3
  require 'sumhash/ostruct'
4
+ require 'ostruct'
5
+
6
+ class Hash
7
+ include Sumhash::Hash
8
+ end
6
9
 
10
+ class OpenStruct
11
+ include Sumhash::OpenStruct
12
+ end
data/lib/sumhash/hash.rb CHANGED
@@ -1,21 +1,15 @@
1
- class Hash
1
+ module Sumhash::Hash
2
2
  NUMBER_CLASSES = [Integer, Fixnum, Bignum, Float, Rational]
3
3
  SUPPORTED_CLASSES = NUMBER_CLASSES + [Hash, OpenStruct]
4
4
 
5
5
  # Plus
6
6
  def +(hash)
7
- (self.keys + hash.keys).inject({}) do |sum, k|
8
- sum[k] = sum(self[k], hash[k])
9
- sum
10
- end
7
+ self.merge(hash) { |_, v1, v2| sum(v1, v2) }
11
8
  end
12
9
 
13
10
  # Minus
14
11
  def -(hash)
15
- (self.keys + hash.keys).inject({}) do |sum, k|
16
- sum[k] = sum(self[k], hash[k], :-)
17
- sum
18
- end
12
+ self.merge(hash) { |_, v1, v2| sum(v1, v2, :-) }
19
13
  end
20
14
 
21
15
  # Unary minus
@@ -35,7 +29,7 @@ class Hash
35
29
  def /(num)
36
30
  raise TypeError, "#{num.class} can't be coerced into Float" unless NUMBER_CLASSES.include? num.class
37
31
  self.inject({}) do |res, (k, v)|
38
- res[k] = SUPPORTED_CLASSES.include?(v.class) ? v/num : v
32
+ res[k] = SUPPORTED_CLASSES.include?(v.class) ? v / num : v
39
33
  res
40
34
  end
41
35
  end
@@ -44,19 +38,18 @@ class Hash
44
38
  def *(num)
45
39
  raise TypeError, "#{num.class} can't be coerced into Float" unless NUMBER_CLASSES.include? num.class
46
40
  self.inject({}) do |res, (k, v)|
47
- res[k] = SUPPORTED_CLASSES.include?(v.class) ? v*num : v
41
+ res[k] = SUPPORTED_CLASSES.include?(v.class) ? v * num : v
48
42
  res
49
43
  end
50
44
  end
51
45
 
52
- private
46
+ private
53
47
  # Can sum Objects if: 1) both numbers; 2) both Hashes; 3) both OpenStructs.
54
48
  def sum(n, m, sign=:+)
55
- if (NUMBER_CLASSES.include?(n.class) && NUMBER_CLASSES.include?(m.class)) || (n.class == Hash && m.class == Hash) || (n.class == OpenStruct && m.class == OpenStruct)
56
- n.send(sign, m)
49
+ if (NUMBER_CLASSES.include?(n.class) && NUMBER_CLASSES.include?(m.class)) || (n.is_a?(Hash) && m.is_a?(Hash)) || (n.is_a?(OpenStruct) && m.is_a?(OpenStruct))
50
+ n.__send__(sign, m)
57
51
  else
58
52
  n || m
59
53
  end
60
54
  end
61
55
  end
62
-
@@ -1,32 +1,32 @@
1
- class OpenStruct
1
+ module Sumhash::OpenStruct
2
2
  NUMBER_CLASSES = [Integer, Fixnum, Bignum, Float, Rational]
3
3
  SUPPORTED_CLASSES = NUMBER_CLASSES + [Hash, OpenStruct]
4
4
 
5
5
  def _fields
6
- @table.keys.map{|k| k.to_sym }
6
+ @table.keys.map(&:to_sym)
7
7
  end
8
8
 
9
9
  # Plus
10
10
  def +(os)
11
- (self._fields + os._fields).inject(OpenStruct.new()) do |sum, f|
12
- sum.send(:"#{f}=", sum(self.send(f), os.send(f)))
11
+ (self._fields + os._fields).inject(OpenStruct.new) do |sum, f|
12
+ sum.__send__(:"#{f}=", sum(self.__send__(f), os.__send__(f)))
13
13
  sum
14
14
  end
15
15
  end
16
16
 
17
17
  # Minus
18
18
  def -(os)
19
- (self._fields + os._fields).inject(OpenStruct.new()) do |sum, f|
20
- sum.send(:"#{f}=", sum(self.send(f), os.send(f), :-))
19
+ (self._fields + os._fields).inject(OpenStruct.new) do |sum, f|
20
+ sum.__send__(:"#{f}=", sum(self.__send__(f), os.__send__(f), :-))
21
21
  sum
22
22
  end
23
23
  end
24
24
 
25
25
  # Unary minus
26
26
  def -@
27
- self._fields.inject(OpenStruct.new()) do |res, f|
28
- v = self.send(f)
29
- res.send(:"#{f}=", SUPPORTED_CLASSES.include?(v.class) ? -v : v)
27
+ self._fields.inject(OpenStruct.new) do |res, f|
28
+ v = self.__send__(f)
29
+ res.__send__(:"#{f}=", SUPPORTED_CLASSES.include?(v.class) ? -v : v)
30
30
  res
31
31
  end
32
32
  end
@@ -38,32 +38,31 @@ class OpenStruct
38
38
 
39
39
  # Division
40
40
  def /(num)
41
- raise TypeError, "#{num.class} can't be coerced into Float" unless NUMBER_CLASSES.include? num.class
42
- self._fields.inject(OpenStruct.new()) do |res, f|
43
- v = self.send(f)
44
- res.send(:"#{f}=", SUPPORTED_CLASSES.include?(v.class) ? v/num.to_f : v)
41
+ raise TypeError, "#{num.class} can't be coerced into Float" unless NUMBER_CLASSES.include? num.class
42
+ self._fields.inject(OpenStruct.new) do |res, f|
43
+ v = self.__send__(f)
44
+ res.__send__(:"#{f}=", SUPPORTED_CLASSES.include?(v.class) ? v / num.to_f : v)
45
45
  res
46
46
  end
47
47
  end
48
48
 
49
49
  # Multiplication
50
50
  def *(num)
51
- raise TypeError, "#{num.class} can't be coerced into Float" unless NUMBER_CLASSES.include? num.class
52
- self._fields.inject(OpenStruct.new()) do |res, f|
53
- v = self.send(f)
54
- res.send(:"#{f}=", SUPPORTED_CLASSES.include?(v.class) && !v.kind_of?(String) ? v*num.to_f : v)
51
+ raise TypeError, "#{num.class} can't be coerced into Float" unless NUMBER_CLASSES.include? num.class
52
+ self._fields.inject(OpenStruct.new) do |res, f|
53
+ v = self.__send__(f)
54
+ res.__send__(:"#{f}=", SUPPORTED_CLASSES.include?(v.class) && !v.kind_of?(String) ? v * num.to_f : v)
55
55
  res
56
56
  end
57
57
  end
58
58
 
59
- private
59
+ private
60
60
  # Can sum Objects if: 1) both numbers; 2) both Hashes; 3) both OpenStructs.
61
61
  def sum(n, m, sign=:+)
62
- if (NUMBER_CLASSES.include?(n.class) && NUMBER_CLASSES.include?(m.class)) || (n.class == Hash && m.class == Hash) || (n.class == OpenStruct && m.class == OpenStruct)
63
- n.send(sign, m)
62
+ if (NUMBER_CLASSES.include?(n.class) && NUMBER_CLASSES.include?(m.class)) || (n.is_a?(Hash) && m.is_a?(Hash)) || (n.is_a?(OpenStruct) && m.is_a?(OpenStruct))
63
+ n.__send__(sign, m)
64
64
  else
65
65
  n || m
66
66
  end
67
67
  end
68
68
  end
69
-
@@ -1,4 +1,3 @@
1
1
  module Sumhash
2
- VERSION = "0.0.2"
2
+ VERSION = '0.0.4'
3
3
  end
4
-
data/sumhash.gemspec CHANGED
@@ -6,26 +6,24 @@ Gem::Specification.new do |s|
6
6
  s.name = "sumhash"
7
7
  s.version = Sumhash::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Alex Avoyants"]
9
+ s.authors = ["Oleksandr Avoiants", "Andrii Dmytrenko", "Alexey Grachov"]
10
10
  s.email = ["shhavel@gmail.com"]
11
11
  s.homepage = "https://github.com/shhavel/sumhash"
12
- s.summary = %q{Sum operations for Hash & OpenStruct classes}
13
- s.description = %q{This gem provides summing operations to Hashes and OpenStructs. Works with nested structures. If you need a feature added, send me a message on Github!}
12
+ s.summary = %q{Summation operation for Hash and OpenStruct}
13
+ s.description = %q{Provides summation operation to Hash and OpenStruct. Works with nested structures.}
14
14
  s.rubyforge_project = "sumhash"
15
15
  s.files = [
16
16
  "sumhash.gemspec",
17
17
  "lib/sumhash.rb",
18
18
  "lib/sumhash/hash.rb",
19
19
  "lib/sumhash/ostruct.rb",
20
- "lib/sumhash/version.rb",
21
- "test/suite.rb",
20
+ "lib/sumhash/version.rb",
22
21
  "test/test_division.rb",
23
22
  "test/test_multiplication.rb",
24
23
  "test/test_plus.rb",
25
24
  "test/test_unary_minus.rb",
26
25
  ]
27
26
  s.test_files = [
28
- "test/suite.rb",
29
27
  "test/test_division.rb",
30
28
  "test/test_multiplication.rb",
31
29
  "test/test_plus.rb",
@@ -33,4 +31,3 @@ Gem::Specification.new do |s|
33
31
  ]
34
32
  s.require_paths = ["lib"]
35
33
  end
36
-
@@ -1,5 +1,4 @@
1
- require "ostruct"
2
- require "#{File.expand_path('../')}/lib/sumhash.rb"
1
+ require "sumhash"
3
2
  require "test/unit"
4
3
 
5
4
  class TestDivision < Test::Unit::TestCase
@@ -11,4 +10,3 @@ class TestDivision < Test::Unit::TestCase
11
10
  assert_raise(TypeError) { OpenStruct.new({ n: 10, m: 14 })/"2" }
12
11
  end
13
12
  end
14
-
@@ -1,5 +1,4 @@
1
- require "ostruct"
2
- require "#{File.expand_path('../')}/lib/sumhash.rb"
1
+ require "sumhash"
3
2
  require "test/unit"
4
3
 
5
4
  class TestMultiplication < Test::Unit::TestCase
@@ -11,4 +10,3 @@ class TestMultiplication < Test::Unit::TestCase
11
10
  assert_raise(TypeError) { OpenStruct.new({ n: 5, m: 7 }) * "2" }
12
11
  end
13
12
  end
14
-
data/test/test_plus.rb CHANGED
@@ -1,5 +1,4 @@
1
- require "ostruct"
2
- require "#{File.expand_path('../')}/lib/sumhash.rb"
1
+ require "sumhash"
3
2
  require "test/unit"
4
3
 
5
4
  class TestPlus < Test::Unit::TestCase
@@ -58,4 +57,3 @@ class TestPlus < Test::Unit::TestCase
58
57
  { n: 2.1, m: 3.2, os: OpenStruct.new(x: 1.1, y: 2.1), s: 'str' } * 2)
59
58
  end
60
59
  end
61
-
@@ -1,5 +1,4 @@
1
- require "ostruct"
2
- require "#{File.expand_path('../')}/lib/sumhash.rb"
1
+ require "sumhash"
3
2
  require "test/unit"
4
3
 
5
4
  class TestUnaryMinus < Test::Unit::TestCase
@@ -8,4 +7,3 @@ class TestUnaryMinus < Test::Unit::TestCase
8
7
  -{ n: 4.2, m: 3.3, os: OpenStruct.new(x: 2.2, y: -4.2), s: 'str' })
9
8
  end
10
9
  end
11
-
metadata CHANGED
@@ -1,60 +1,58 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sumhash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
5
- prerelease:
4
+ version: 0.0.4
6
5
  platform: ruby
7
6
  authors:
8
- - Alex Avoyants
7
+ - Oleksandr Avoiants
8
+ - Andrii Dmytrenko
9
+ - Alexey Grachov
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2012-06-23 00:00:00.000000000 Z
13
+ date: 2016-01-10 00:00:00.000000000 Z
13
14
  dependencies: []
14
- description: This gem provides summing operations to Hashes and OpenStructs. Works
15
- with nested structures. If you need a feature added, send me a message on Github!
15
+ description: Provides summation operation to Hash and OpenStruct. Works with nested
16
+ structures.
16
17
  email:
17
18
  - shhavel@gmail.com
18
19
  executables: []
19
20
  extensions: []
20
21
  extra_rdoc_files: []
21
22
  files:
22
- - sumhash.gemspec
23
23
  - lib/sumhash.rb
24
24
  - lib/sumhash/hash.rb
25
25
  - lib/sumhash/ostruct.rb
26
26
  - lib/sumhash/version.rb
27
- - test/suite.rb
27
+ - sumhash.gemspec
28
28
  - test/test_division.rb
29
29
  - test/test_multiplication.rb
30
30
  - test/test_plus.rb
31
31
  - test/test_unary_minus.rb
32
32
  homepage: https://github.com/shhavel/sumhash
33
33
  licenses: []
34
+ metadata: {}
34
35
  post_install_message:
35
36
  rdoc_options: []
36
37
  require_paths:
37
38
  - lib
38
39
  required_ruby_version: !ruby/object:Gem::Requirement
39
- none: false
40
40
  requirements:
41
- - - ! '>='
41
+ - - ">="
42
42
  - !ruby/object:Gem::Version
43
43
  version: '0'
44
44
  required_rubygems_version: !ruby/object:Gem::Requirement
45
- none: false
46
45
  requirements:
47
- - - ! '>='
46
+ - - ">="
48
47
  - !ruby/object:Gem::Version
49
48
  version: '0'
50
49
  requirements: []
51
50
  rubyforge_project: sumhash
52
- rubygems_version: 1.8.24
51
+ rubygems_version: 2.4.8
53
52
  signing_key:
54
- specification_version: 3
55
- summary: Sum operations for Hash & OpenStruct classes
53
+ specification_version: 4
54
+ summary: Summation operation for Hash and OpenStruct
56
55
  test_files:
57
- - test/suite.rb
58
56
  - test/test_division.rb
59
57
  - test/test_multiplication.rb
60
58
  - test/test_plus.rb
data/test/suite.rb DELETED
@@ -1,5 +0,0 @@
1
- tests = Dir["#{File.dirname(__FILE__)}/test_*.rb"]
2
- tests.each do |file|
3
- require file
4
- end
5
-