darthjee-core_ext 1.3.0 → 1.3.1

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: e119db2a6c2d8eb97f42b48b82500d93f81665fb
4
- data.tar.gz: 9fa9cbda6ad8a1feef1f57eb917df0b0391d8a52
3
+ metadata.gz: 5e4db49fb26170a6468253694dc8710568992db8
4
+ data.tar.gz: 903f2881ee71e1af4ee05d2e3715e9b3de77f347
5
5
  SHA512:
6
- metadata.gz: 4f904ea861ca6e47029632718356f0802d4f828bb4343ea5fd14db142406a6ec95c4462c28b2010bab2eb410af6b71539a08e87e34ec5cc849062239f8f05529
7
- data.tar.gz: 90afdb065d5f08e91ee76927ff2487d0f848ae903af8c036f42ac89e318a1b34b2b24f2343165b2aff9059197a6a066012763252159028642e57518a7039af8f
6
+ metadata.gz: bf30dc4d88125615001e78ee47801387b850df4923a002c18b8a00b28f611725c7c1ece40f29a85ee809d5ef44105f6943a0a8451537b8104d09142558462250
7
+ data.tar.gz: 918aad79466a050cd855c59eb48022314c0ac4532389b3f0b82b0bbefd5ab342544a6c71a3bec1d0edc46fe257e37f4db8c896e3bb4e58c847126b039a7f4c92
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  coverage
2
2
  pkg
3
+ Gemfile.lock
data/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  Core_Ext
2
2
  ========
3
3
 
4
+ [![Code Climate](https://codeclimate.com/github/darthjee/core_ext/badges/gpa.svg)](https://codeclimate.com/github/darthjee/core_ext)
5
+ [![Test Coverage](https://codeclimate.com/github/darthjee/core_ext/badges/coverage.svg)](https://codeclimate.com/github/darthjee/core_ext/coverage)
6
+ [![Issue Count](https://codeclimate.com/github/darthjee/core_ext/badges/issue_count.svg)](https://codeclimate.com/github/darthjee/core_ext)
7
+
4
8
  # Usage
5
9
  This project adds some new methods to the core ruby classes
6
10
 
@@ -20,7 +24,7 @@ gem 'darthjee-core_ext'
20
24
  bundle install darthjee-core_ext
21
25
  ```
22
26
 
23
- #methods added
27
+ # methods added
24
28
 
25
29
  ## Array
26
30
  [ARRAY_README.md](ARRAY_README.md)
data/circle.yml ADDED
@@ -0,0 +1,10 @@
1
+ dependencies:
2
+ post:
3
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
4
+ - chmod +x ./cc-test-reporter
5
+
6
+ test:
7
+ pre:
8
+ - ./cc-test-reporter before-build
9
+ override:
10
+ - bundle exec rspec; ./cc-test-reporter after-build --exit-code $?
@@ -1,5 +1,5 @@
1
1
  module Darthjee
2
2
  module CoreExt
3
- VERSION = '1.3.0'
3
+ VERSION = '1.3.1'
4
4
  end
5
5
  end
@@ -30,15 +30,16 @@ class Hash::ValueChanger
30
30
  end
31
31
 
32
32
  def change_array(array)
33
- array = array.to_a
33
+ method = %w(map! map).find { |m| array.respond_to? m }
34
34
 
35
- array.each.with_index do |value, index|
35
+ array.public_send(method) do |value|
36
36
  if value.respond_to?(:change_values)
37
- value = value.change_values(options, &block)
37
+ value.change_values(options, &block)
38
38
  elsif is_iterable?(value)
39
- value = change_array(value)
39
+ change_array(value)
40
+ else
41
+ new_value(value)
40
42
  end
41
- array[index] = value
42
43
  end
43
44
  end
44
45
 
@@ -7,6 +7,10 @@ class Hash::ValueChanger::Dummy
7
7
  @value = value
8
8
  end
9
9
 
10
+ def as_json
11
+ { val: value }
12
+ end
13
+
10
14
  def eql?(other)
11
15
  return true if equals?(other)
12
16
  return false unless other.is_a?(self.class)
@@ -3,7 +3,7 @@ class Hash::ValueChanger::DummyIteractor
3
3
  @array = array
4
4
  end
5
5
 
6
- delegate :each, :to_a, to: :array
6
+ delegate :each, :map, :to_a, to: :array
7
7
 
8
8
  private
9
9
 
@@ -1,5 +1,6 @@
1
1
  shared_examples 'a class with change_values method' do
2
2
  let(:subject) { { a: 1, b: 2, c: { d: 3, e: 4 } } }
3
+ let(:inner_hash) { subject[:c] }
3
4
 
4
5
  describe :change_values do
5
6
  it_behaves_like 'a method that change the hash values', :change_values
@@ -9,6 +10,23 @@ shared_examples 'a class with change_values method' do
9
10
  subject.change_values { |value| value + 1 }
10
11
  end.not_to change { subject }
11
12
  end
13
+
14
+ it 'does not change original hash' do
15
+ expect do
16
+ subject.change_values { |value| value + 1 }
17
+ end.not_to change { inner_hash }
18
+ end
19
+
20
+ context 'when using an array' do
21
+ let(:subject) { { a: [{ b: 1}]} }
22
+ let(:inner_array) { subject[:a] }
23
+
24
+ it 'does not change original hash' do
25
+ expect do
26
+ subject.change_values { |value| value + 1 }
27
+ end.not_to change { inner_array }
28
+ end
29
+ end
12
30
  end
13
31
 
14
32
  describe :change_values! do
@@ -19,6 +37,23 @@ shared_examples 'a class with change_values method' do
19
37
  subject.change_values! { |value| value + 1 }
20
38
  end.to change { subject }
21
39
  end
40
+
41
+ it 'changes original hash' do
42
+ expect do
43
+ subject.change_values! { |value| value + 1 }
44
+ end.to change { inner_hash }
45
+ end
46
+
47
+ context 'when using an array' do
48
+ let(:subject) { { a: [{ b: 1}]} }
49
+ let(:inner_array) { subject[:a] }
50
+
51
+ it 'changes original hash' do
52
+ expect do
53
+ subject.change_values! { |value| value + 1 }
54
+ end.to change { inner_array }
55
+ end
56
+ end
22
57
  end
23
58
  end
24
59
 
@@ -50,26 +85,26 @@ shared_examples 'a method that change the hash values' do |method|
50
85
  end
51
86
 
52
87
  context 'when using deeply nested arrays' do
53
- let(:subject) { { a: 1, b: 2, c: [{ d: 3 }, { e: { f: 4 } } ] } }
88
+ let(:subject) { { a: 1, b: 2, c: [{ d: 3 }, { e: { f: 4 } }, 5 ] } }
54
89
 
55
90
  it 'goes recursivly true arrays' do
56
- expect(subject.public_send(method) { |value| value + 1 }).to eq(a: 2, b: 3, c: [{ d: 4 }, { e: { f: 5 } }])
91
+ expect(subject.public_send(method) { |value| value + 1 }).to eq(a: 2, b: 3, c: [{ d: 4 }, { e: { f: 5 } }, 6])
57
92
  end
58
93
 
59
94
  it 'does not work recursively when parameter is passed as false' do
60
- expect(subject.public_send(method, recursive: false) { |value| value + 1 }).to eq(a: 2, b: 3, c: [{ d: 3 }, { e: { f: 4 } }])
95
+ expect(subject.public_send(method, recursive: false) { |value| value + 1 }).to eq(a: 2, b: 3, c: [{ d: 3 }, { e: { f: 4 } }, 5])
61
96
  end
62
97
 
63
98
  it 'does not ignore array when option is passed' do
64
- expect(subject.public_send(method, skip_inner: false) { |value| value.is_a?(Array) ? 10 + value.size : value + 1 }).to eq(a: 2, b: 3, c: 12)
99
+ expect(subject.public_send(method, skip_inner: false) { |value| value.is_a?(Array) ? 10 + value.size : value + 1 }).to eq(a: 2, b: 3, c: 13)
65
100
  end
66
101
 
67
102
  it 'ignores array when option is passed' do
68
- expect(subject.public_send(method, skip_inner: true) { |value| value.is_a?(Array) ? 10 + value.size : value + 1 }).to eq(a: 2, b: 3, c: [{ d: 4 }, { e: { f: 5 } }])
103
+ expect(subject.public_send(method, skip_inner: true) { |value| value.is_a?(Array) ? 10 + value.size : value + 1 }).to eq(a: 2, b: 3, c: [{ d: 4 }, { e: { f: 5 } }, 6])
69
104
  end
70
105
 
71
106
  it 'ignore hash and does not work recursively when option is passed' do
72
- expect(subject.public_send(method, skip_inner: false, recursive: false) { |value| value.is_a?(Array) ? value : value + 1 }).to eq(a: 2, b: 3, c: [{ d: 3 }, { e: { f: 4 } }])
107
+ expect(subject.public_send(method, skip_inner: false, recursive: false) { |value| value.is_a?(Array) ? value : value + 1 }).to eq(a: 2, b: 3, c: [{ d: 3 }, { e: { f: 4 } }, 5])
73
108
  end
74
109
  end
75
110
 
@@ -88,5 +123,25 @@ shared_examples 'a method that change the hash values' do |method|
88
123
  end
89
124
  end
90
125
 
126
+ context 'when using mapping inner array with inner object into a new hash' do
127
+ let(:object) { Hash::ValueChanger::Dummy.new(2) }
128
+ let(:array) { Hash::ValueChanger::DummyIteractor.new(object) }
129
+ let(:subject) { { a: 1, b: array } }
130
+ let(:result) do
131
+ subject.public_send(method, skip_inner: false) do |value|
132
+ if value.is_a?(Numeric)
133
+ value + 10
134
+ elsif value.is_a?(Hash) || value.is_a?(Hash::ValueChanger::DummyIteractor)
135
+ value
136
+ else
137
+ value.as_json
138
+ end
139
+ end
140
+ end
141
+
142
+ it 'process the object after processing the array' do
143
+ expect(result).to eq(a: 11, b: [{ val: 12 }])
144
+ end
145
+ end
91
146
  end
92
147
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: darthjee-core_ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darthjee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-12 00:00:00.000000000 Z
11
+ date: 2017-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -134,11 +134,11 @@ files:
134
134
  - ARRAY_README.md
135
135
  - ENUMERABLE_README.md
136
136
  - Gemfile
137
- - Gemfile.lock
138
137
  - HASH_README.md
139
138
  - LICENSE
140
139
  - README.md
141
140
  - Rakefile
141
+ - circle.yml
142
142
  - core_ext.gemspec
143
143
  - lib/array.rb
144
144
  - lib/array/hash_builder.rb
data/Gemfile.lock DELETED
@@ -1,62 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- darthjee-core_ext (1.3.0)
5
- activesupport (~> 5.1.1)
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- activesupport (5.1.1)
11
- concurrent-ruby (~> 1.0, >= 1.0.2)
12
- i18n (~> 0.7)
13
- minitest (~> 5.1)
14
- tzinfo (~> 1.1)
15
- coderay (1.1.1)
16
- concurrent-ruby (1.0.5)
17
- diff-lcs (1.2.5)
18
- docile (1.1.5)
19
- i18n (0.8.4)
20
- json (2.1.0)
21
- method_source (0.8.2)
22
- minitest (5.10.2)
23
- pry (0.10.4)
24
- coderay (~> 1.1.0)
25
- method_source (~> 0.8.1)
26
- slop (~> 3.4)
27
- pry-nav (0.2.4)
28
- pry (>= 0.9.10, < 0.11.0)
29
- rake (11.3.0)
30
- rspec (2.99.0)
31
- rspec-core (~> 2.99.0)
32
- rspec-expectations (~> 2.99.0)
33
- rspec-mocks (~> 2.99.0)
34
- rspec-core (2.99.2)
35
- rspec-expectations (2.99.2)
36
- diff-lcs (>= 1.1.3, < 2.0)
37
- rspec-mocks (2.99.4)
38
- simplecov (0.14.1)
39
- docile (~> 1.1.0)
40
- json (>= 1.8, < 3)
41
- simplecov-html (~> 0.10.0)
42
- simplecov-html (0.10.1)
43
- slop (3.6.0)
44
- thread_safe (0.3.6)
45
- tzinfo (1.2.3)
46
- thread_safe (~> 0.1)
47
-
48
- PLATFORMS
49
- ruby
50
-
51
- DEPENDENCIES
52
- bundler (~> 1.6)
53
- darthjee-core_ext!
54
- pry (~> 0.10.4)
55
- pry-nav (~> 0.2.4)
56
- rake (~> 11.3.0)
57
- rspec (~> 2.14)
58
- rspec-mocks (~> 2.99.4)
59
- simplecov (~> 0.14.1)
60
-
61
- BUNDLED WITH
62
- 1.15.1