rom-mapper 0.3.0.beta1 → 0.3.0.rc1

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: e261943dc4114a157a1f142045a0f5ee033dd5c5
4
- data.tar.gz: 06c40a576ebf206f9719c161f332f43a5dbf075c
3
+ metadata.gz: 8445a0b1754d08c53cd69fb5e4d5ebc1101b81b1
4
+ data.tar.gz: 48e8e7ff9b54220e4e1680e9675db6e56a385639
5
5
  SHA512:
6
- metadata.gz: 5f3dd818d7f91c3c73828bd8ed93354e41183bd86d3a3a30c1f8a26bad02994a37ed86c22befc4fa473d11b788595805a015d41792226ba12947fd6af71a984f
7
- data.tar.gz: d53d9d99ad4be33c2faf1eca94eff0cf05bd75966e2cf6267afda48c605d7551772f141d3cb1c0b4f370d9a6bf3d9344838b456f9abde81cd303f3774d994115
6
+ metadata.gz: fb63e1a42a59f4feee6d5457d729c52616f7c7ba4818da90bb904553d01b75920165bdb7923e1d7b77766a19945c8e221eb080c4cfa32b59aa5574c6879d403e
7
+ data.tar.gz: aca717bcb4b6d16c29b55a61ae5630581fd5f5f057ab4c6261e1dcf92d1c6730f1d5c121a73e4e0a8a98f23e78f2abb993c4870b38664edc59d0e0cdd5c2002d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ # v0.3.0 to-be-released
2
+
3
+ ### Added
4
+
5
+ * Allow `attribute`'s `:from` option to take an array of other attribute names (hmadison)
6
+
7
+ ### Changed
8
+
9
+ * Coercer blocks are now executed in the context of the mapper object (AMHOL)
10
+
11
+ ### Fixed
12
+
13
+ * `model` will skip excluded attributes (chastell)
14
+
15
+ [Compare v0.2.0..HEAD](https://github.com/rom-rb/rom-mapper/compare/v0.2.0...HEAD)
16
+
1
17
  # v0.2.0 2015-08-10
2
18
 
3
19
  Import code from rom 0.8.1
data/lib/rom/header.rb CHANGED
@@ -19,6 +19,9 @@ module ROM
19
19
  # @api private
20
20
  attr_reader :reject_keys
21
21
 
22
+ # @api private
23
+ attr_reader :copy_keys
24
+
22
25
  # @api private
23
26
  attr_reader :attributes
24
27
 
@@ -62,6 +65,7 @@ module ROM
62
65
  def initialize(attributes, options = {})
63
66
  @options = options
64
67
  @model = options[:model]
68
+ @copy_keys = options.fetch(:copy_keys, false)
65
69
  @reject_keys = options.fetch(:reject_keys, false)
66
70
 
67
71
  @attributes = attributes
data/lib/rom/mapper.rb CHANGED
@@ -8,7 +8,7 @@ module ROM
8
8
  include DSL
9
9
  include Dry::Equalizer(:transformers, :header)
10
10
 
11
- defines :relation, :register_as, :symbolize_keys,
11
+ defines :relation, :register_as, :symbolize_keys, :copy_keys,
12
12
  :prefix, :prefix_separator, :inherit_header, :reject_keys
13
13
 
14
14
  inherit_header true
@@ -14,7 +14,7 @@ module ROM
14
14
  class AttributeDSL
15
15
  include ModelDSL
16
16
 
17
- attr_reader :attributes, :options, :symbolize_keys, :reject_keys, :steps
17
+ attr_reader :attributes, :options, :copy_keys, :symbolize_keys, :reject_keys, :steps
18
18
 
19
19
  # @param [Array] attributes accumulator array
20
20
  # @param [Hash] options
@@ -23,6 +23,7 @@ module ROM
23
23
  def initialize(attributes, options)
24
24
  @attributes = attributes
25
25
  @options = options
26
+ @copy_keys = options.fetch(:copy_keys)
26
27
  @symbolize_keys = options.fetch(:symbolize_keys)
27
28
  @prefix = options.fetch(:prefix)
28
29
  @prefix_separator = options.fetch(:prefix_separator)
@@ -344,7 +345,7 @@ module ROM
344
345
  #
345
346
  # @api private
346
347
  def header
347
- Header.coerce(attributes, model: model, reject_keys: reject_keys)
348
+ Header.coerce(attributes, copy_keys: copy_keys, model: model, reject_keys: reject_keys)
348
349
  end
349
350
 
350
351
  private
@@ -78,7 +78,8 @@ module ROM
78
78
  #
79
79
  # @api private
80
80
  def options
81
- { prefix: prefix,
81
+ { copy_keys: copy_keys,
82
+ prefix: prefix,
82
83
  prefix_separator: prefix_separator,
83
84
  symbolize_keys: symbolize_keys,
84
85
  reject_keys: reject_keys }
@@ -1,5 +1,5 @@
1
1
  module ROM
2
2
  class Mapper
3
- VERSION = '0.3.0.beta1'.freeze
3
+ VERSION = '0.3.0.rc1'.freeze
4
4
  end
5
5
  end
@@ -353,9 +353,10 @@ module ROM
353
353
  # @api private
354
354
  def initialize_row_proc
355
355
  @row_proc = compose { |ops|
356
+ alias_handler = header.copy_keys ? :copy_keys : :rename_keys
356
357
  process_header_keys(ops)
357
358
 
358
- ops << t(:rename_keys, mapping) if header.aliased?
359
+ ops << t(alias_handler, mapping) if header.aliased?
359
360
  ops << header.map { |attr| visit(attr) }
360
361
  ops << t(:constructor_inject, model) if model
361
362
  }
@@ -17,7 +17,7 @@ describe ROM::Mapper do
17
17
  let(:mapper_body) do
18
18
  proc do
19
19
  attribute(:key) { |key| [prefix, key].join('_') }
20
-
20
+
21
21
  def prefix
22
22
  'foo'
23
23
  end
@@ -28,6 +28,21 @@ describe ROM::Mapper do
28
28
  is_expected.to match_array(results)
29
29
  end
30
30
  end
31
+
32
+ context 'when copying aliased keys to multiple attributes' do
33
+ let(:tuples) { [{ key: 'bar' }] }
34
+ let(:results) { [{ key: 'bar', key2: 'bar', key3: 'bar' }] }
35
+ let(:mapper_body) do
36
+ proc do
37
+ copy_keys true
38
+ attribute([:key2, :key3], from: :key)
39
+ end
40
+ end
41
+
42
+ it 'creates attributes by copying keys rather than renaming' do
43
+ is_expected.to match_array(results)
44
+ end
45
+ end
31
46
  end
32
47
 
33
48
  describe '.embedded' do
@@ -39,7 +54,7 @@ describe ROM::Mapper do
39
54
  embedded :items, type: :hash do
40
55
  attribute(:key) { |key| [prefix, key].join('_') }
41
56
  end
42
-
57
+
43
58
  def prefix
44
59
  'foo'
45
60
  end
@@ -61,7 +76,7 @@ describe ROM::Mapper do
61
76
  wrap :items do
62
77
  attribute(:key) { |key| [prefix, key].join('_') }
63
78
  end
64
-
79
+
65
80
  def prefix
66
81
  'foo'
67
82
  end
@@ -83,7 +98,7 @@ describe ROM::Mapper do
83
98
  unwrap :items do
84
99
  attribute(:key) { |key| [prefix, key].join('_') }
85
100
  end
86
-
101
+
87
102
  def prefix
88
103
  'foo'
89
104
  end
@@ -71,11 +71,23 @@ describe ROM::Mapper do
71
71
  end
72
72
  end
73
73
 
74
+ describe 'copy_keys' do
75
+ let(:attributes) { [[:name, type: :string]] }
76
+ let(:options) { { copy_keys: true } }
77
+
78
+ it 'sets copy_keys for the header' do
79
+ mapper.copy_keys true
80
+ mapper.attribute :name, type: :string
81
+
82
+ expect(header).to eql(expected_header)
83
+ end
84
+ end
85
+
74
86
  describe 'reject_keys' do
75
87
  let(:attributes) { [[:name, type: :string]] }
76
88
  let(:options) { { reject_keys: true } }
77
89
 
78
- it 'sets rejected_keys for the header' do
90
+ it 'sets reject_keys for the header' do
79
91
  mapper.reject_keys true
80
92
  mapper.attribute :name, type: :string
81
93
 
@@ -68,21 +68,39 @@ describe ROM::Processor::Transproc do
68
68
  end
69
69
  end
70
70
 
71
+ context 'copying keys' do
72
+ let(:options) do
73
+ { copy_keys: true }
74
+ end
75
+
76
+ let(:attributes) do
77
+ [['b', from: 'a'], ['c', from: 'b']]
78
+ end
79
+
80
+ let(:relation) do
81
+ [{ 'a' => 'copy' }]
82
+ end
83
+
84
+ it 'copies without removing the original' do
85
+ expect(transproc[relation]).to eql([{ 'a' => 'copy', 'b' => 'copy', 'c' => 'copy' }])
86
+ end
87
+ end
88
+
71
89
  describe 'key from exsisting keys' do
72
90
  let(:attributes) do
73
- coercer = ->(a,b) { b + a }
74
- [[:c, {from: [:a, :b], coercer: coercer} ]]
91
+ coercer = ->(a, b) { b + a }
92
+ [[:c, { from: [:a, :b], coercer: coercer }]]
75
93
  end
76
94
 
77
95
  let(:relation) do
78
96
  [
79
- {a: 'works', b: 'this'}
97
+ { a: 'works', b: 'this' }
80
98
  ]
81
99
  end
82
100
 
83
- let (:expected_result) do
101
+ let(:expected_result) do
84
102
  [
85
- {c: 'thisworks'}
103
+ { c: 'thisworks' }
86
104
  ]
87
105
  end
88
106
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rom-mapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0.beta1
4
+ version: 0.3.0.rc1
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-11-23 00:00:00.000000000 Z
11
+ date: 2015-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-equalizer