transproc 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c88956f58489c894cec8a4dd8a8714e47b3b1af0
4
- data.tar.gz: 570b8a17eb185d2129fda432dce71160d13fdcc0
3
+ metadata.gz: 8df075878909a89bb9304ac442044a20d768860b
4
+ data.tar.gz: 2ebde290094e7cf302891f536c043af3c933f6b3
5
5
  SHA512:
6
- metadata.gz: c81a55daec46a1cf7f46b0ce4aa99897f2efa598899f335891036fd9531b1e991fb969d4f17a31ef89743eea7cff21c8b72573bac9eb98e02fc45b4212a1a620
7
- data.tar.gz: b6f9740cab83acad2875220322f1a93814ce6e1a861893cceb08903730f2f2208b11f98b229b6a54cf6da63f3b8d1925d52b00e009fc0567c6a953796ffd8032
6
+ metadata.gz: 5baa7f8034bb8e727c1a0f8870a4f5e9f5ec9c9d4f04ad39400572473fa543aca6ab6540ba6658a75570acf068010f0637102ac973772e349cc8a59949c602d8
7
+ data.tar.gz: 86a696d76233333a933bec5fd4ac83052cc4ce04bab8ae9bb9c11204caae818fa9020392846ff7a948b3c30fdaaa28257cad8448cf46a0d90a3a166b26b4962c
data/.rubocop.yml CHANGED
@@ -50,7 +50,7 @@ Style/MultilineBlockChain:
50
50
 
51
51
  # Even a single escaped slash can be confusing
52
52
  Style/RegexpLiteral:
53
- MaxSlashes: 0
53
+ EnforcedStyle: percent_r
54
54
 
55
55
  # Don’t introduce semantic fail/raise distinction
56
56
  Style/SignalException:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## v0.2.2 2015-05-22
2
+
3
+ ### Added
4
+
5
+ * `:fold` folds array of tuples into array of values from a specified key of the hash (nepalez)
6
+
7
+ ### Internal
8
+
9
+ * Fixed some Rubocop warnings (nepalez)
10
+ * Changed Rubocop `RegexpLiteral` from `MaxSlashes: 0` (not supported) to
11
+ `EnforcedStyle: percent_r` (nepalez)
12
+
13
+ [Compare v0.2.1...v0.2.2](https://github.com/solnic/transproc/compare/v0.2.1...v0.2.2)
14
+
1
15
  ## v0.2.1 2015-05-17
2
16
 
3
17
  ### Added
data/lib/transproc/all.rb CHANGED
@@ -5,5 +5,4 @@ require 'transproc/coercions'
5
5
  require 'transproc/conditional'
6
6
  require 'transproc/array'
7
7
  require 'transproc/hash'
8
- require 'transproc/object'
9
8
  require 'transproc/recursion'
@@ -116,7 +116,7 @@ module Transproc
116
116
  def combine(array, mappings)
117
117
  root, groups = array
118
118
 
119
- cache = Hash.new { |h, k| h[k] = Hash.new }
119
+ cache = Hash.new { |h, k| h[k] = {} }
120
120
 
121
121
  root.map { |parent|
122
122
  child_hash = {}
@@ -6,9 +6,9 @@ module Transproc
6
6
  #
7
7
  # include Transproc::Helper
8
8
  #
9
- # fn = t(:constructor_inject, 'User', :name, :age)
9
+ # fn = t(:constructor_inject, Struct)
10
10
  #
11
- # fn[Struct]
11
+ # fn['User', :name, :age]
12
12
  # # => Struct::User
13
13
  #
14
14
  # @api public
@@ -18,12 +18,12 @@ module Transproc
18
18
  # Inject given arguments into the constructor of the class
19
19
  #
20
20
  # @example
21
- # Transproct(:constructor_inject, 'User', :name, :age)[Struct]
21
+ # Transproct(:constructor_inject, Struct)['User', :name, :age]
22
22
  # # => Struct::User
23
23
  #
24
- # @param [Class]
24
+ # @param [*Mixed] A list of arguments to inject
25
25
  #
26
- # @return [Mixed]
26
+ # @return [Object] An instance of the given klass
27
27
  #
28
28
  # @api public
29
29
  def constructor_inject(*args, klass)
@@ -1,3 +1,4 @@
1
+ require 'transproc/array'
1
2
  require 'transproc/coercions'
2
3
 
3
4
  module Transproc
@@ -151,7 +152,7 @@ module Transproc
151
152
  #
152
153
  # @api public
153
154
  def reject_keys!(hash, keys)
154
- hash.reject { |k,_| keys.include?(k) }
155
+ hash.reject { |k, _| keys.include?(k) }
155
156
  end
156
157
 
157
158
  # Rejects specified keys from a hash
@@ -280,5 +281,37 @@ module Transproc
280
281
 
281
282
  hash
282
283
  end
284
+
285
+ # Folds array of tuples to array of values from a specified key
286
+ #
287
+ # The second argument defines the key to fold tuples by
288
+ #
289
+ # @example
290
+ # source = {
291
+ # name: "Jane",
292
+ # tasks: [{ title: "be nice", priority: 1 }, { title: "sleep well" }]
293
+ # }
294
+ # Transproc(:fold, :tasks, :title)[source]
295
+ # # => { name: "Jane", tasks: ["be nice", "sleep well"] }
296
+ # Transproc(:fold, :tasks, :priority)[source]
297
+ # # => { name: "Jane", tasks: [1, nil] }
298
+ #
299
+ # @param [Hash]
300
+ #
301
+ # @return [Hash]
302
+ #
303
+ # @api public
304
+ def fold(hash, key, tuple_key)
305
+ fold!(hash.dup, key, tuple_key)
306
+ end
307
+
308
+ # Same as `:fold` but mutates the hash
309
+ #
310
+ # @see HashTransformations.fold
311
+ #
312
+ # @api public
313
+ def fold!(hash, key, tuple_key)
314
+ hash.merge!(key => ArrayTransformations.extract_key(hash[key], tuple_key))
315
+ end
283
316
  end
284
317
  end
@@ -1,3 +1,3 @@
1
1
  module Transproc
2
- VERSION = '0.2.1'.freeze
2
+ VERSION = '0.2.2'.freeze
3
3
  end
data/rakelib/mutant.rake CHANGED
@@ -1,4 +1,4 @@
1
- desc "Run mutant against a specific subject"
1
+ desc 'Run mutant against a specific subject'
2
2
  task :mutant do
3
3
  subject = ARGV.last
4
4
  if subject == 'mutant'
@@ -32,8 +32,7 @@ describe Transproc::ArrayTransformations do
32
32
 
33
33
  output = ['Alice', 'Bob', nil]
34
34
 
35
- extract_key[input]
36
-
35
+ expect(extract_key[input]).to eql(output)
37
36
  expect(input).to eql(output)
38
37
  end
39
38
  end
@@ -147,10 +146,10 @@ describe Transproc::ArrayTransformations do
147
146
  [
148
147
  { name: 'Jane', email: 'jane@doe.org', tasks: [
149
148
  { user: 'Jane', title: 'One', tags: [{ task: 'One', tag: 'red' }] },
150
- { user: 'Jane', title: 'Two', tags: [] } ]
149
+ { user: 'Jane', title: 'Two', tags: [] }]
151
150
  },
152
151
  { name: 'Joe', email: 'joe@doe.org', tasks: [
153
- { user: 'Joe', title: 'Three', tags: [{ task: 'Three', tag: 'blue' }] } ]
152
+ { user: 'Joe', title: 'Three', tags: [{ task: 'Three', tag: 'blue' }] }]
154
153
  }
155
154
  ]
156
155
  end
@@ -300,4 +300,58 @@ describe Transproc::HashTransformations do
300
300
  expect(input).to eql(name: 'Jane', email: 'jane@doe.org', age: 21)
301
301
  end
302
302
  end
303
+
304
+ describe '.fold' do
305
+ let(:input) do
306
+ {
307
+ name: 'Jane',
308
+ tasks: [{ title: 'be nice', priority: 1 }, { title: 'sleep well' }]
309
+ }
310
+ end
311
+
312
+ it 'returns an updated hash with folded key' do
313
+ fold = t(:fold, :tasks, :title)
314
+
315
+ output = { name: 'Jane', tasks: ['be nice', 'sleep well'] }
316
+
317
+ expect { fold[input] }.not_to change { input }
318
+ expect(fold[input]).to eq output
319
+ end
320
+
321
+ it 'does not compact results' do
322
+ fold = t(:fold, :tasks, :priority)
323
+
324
+ output = { name: 'Jane', tasks: [1, nil] }
325
+
326
+ expect { fold[input] }.not_to change { input }
327
+ expect(fold[input]).to eql output
328
+ end
329
+ end
330
+
331
+ describe '.fold!' do
332
+ let(:input) do
333
+ {
334
+ name: 'Jane',
335
+ tasks: [{ title: 'be nice', priority: 1 }, { title: 'sleep well' }]
336
+ }
337
+ end
338
+
339
+ it 'returns an updated hash with folded key' do
340
+ fold = t(:fold!, :tasks, :title)
341
+
342
+ output = { name: 'Jane', tasks: ['be nice', 'sleep well'] }
343
+
344
+ expect(fold[input]).to eql output
345
+ expect(input).to eql output
346
+ end
347
+
348
+ it 'does not compact results' do
349
+ fold = t(:fold!, :tasks, :priority)
350
+
351
+ output = { name: 'Jane', tasks: [1, nil] }
352
+
353
+ expect(fold[input]).to eql output
354
+ expect(input).to eql output
355
+ end
356
+ end
303
357
  end
@@ -52,11 +52,11 @@ describe Transproc do
52
52
 
53
53
  describe 'handling malformed input' do
54
54
  it 'raises a Transproc::MalformedInputError' do
55
- Transproc.register(:im_dangerous, ->(){
56
- raise ArgumentError.new('sorry, you got some bad apples in your input')
55
+ Transproc.register(:im_dangerous, ->() {
56
+ raise ArgumentError, 'sorry, you got some bad apples in your input'
57
57
  })
58
58
 
59
- expect{
59
+ expect {
60
60
  Transproc(:im_dangerous)[hello: 'world']
61
61
  }.to raise_error(Transproc::MalformedInputError)
62
62
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transproc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-17 00:00:00.000000000 Z
11
+ date: 2015-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -81,7 +81,6 @@ files:
81
81
  - lib/transproc/error.rb
82
82
  - lib/transproc/function.rb
83
83
  - lib/transproc/hash.rb
84
- - lib/transproc/object.rb
85
84
  - lib/transproc/recursion.rb
86
85
  - lib/transproc/version.rb
87
86
  - rakelib/mutant.rake
@@ -1,19 +0,0 @@
1
- module Transproc
2
- # Transformation functions for Objects
3
- #
4
- # @example
5
- # require 'transproc/object'
6
- #
7
- # include Transproc::Helper
8
- #
9
- # fn = t(:set_ivars, { name: 'Jane', age: 25 })
10
- #
11
- # fn[Object.new]
12
- # # => #<Object:0x007f73afe7d6f8 @name="Jane", @age=25>
13
- #
14
- # @api public
15
- module ObjectTransformations
16
- extend Functions
17
-
18
- end
19
- end