sumhash 0.0.2 → 0.0.4

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