copyable 0.0.2 → 0.1.0

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: df943b2cab1eb85ee8f53faff3a908dbcec38198
4
- data.tar.gz: 3229ce6dbef3e246d9327f2bbd2b83377a4b77e0
3
+ metadata.gz: f42c56201c71a8dae13510b60503300a1f8bfd27
4
+ data.tar.gz: c4efc57da93c3b9f0a3ff7134dc00bbb84fbba2d
5
5
  SHA512:
6
- metadata.gz: 8de6edeca4d17dceb962f8921581a20e292380ddb3089d34b8473314e8e0ef1eff494f05b5196f1a040ac9b433a78e99278bd5dc763789912171eb96311623c0
7
- data.tar.gz: c0371addf28eb0121008e1720bed8ab975bfd7eaaf78f6a313acc3de7076a967d2e65ab27195869aa0f1ca7f157f6d742c345e1256c811a9d9061b5285fb906d
6
+ metadata.gz: 69a4aa712cf34f9cba8f598dee4b970bf482ab9b6b71558b14fd5fd0c9a9dfcf7dcb2644543db4ec21c71cc118af0bde080eda5b6f15ab78ba1baecc5d3d5f93
7
+ data.tar.gz: a64545cc78dea5befe38066e86cdda5a6486bfd5115d77fcda21810802674ce8e7f40a61e9c8637bef8efcc0aa8dcab0d6a041e617b2df40bd1fa96cf9c661bc
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "activerecord", "~>4.1"
21
+ spec.add_dependency "activerecord", "~>4.1.0"
22
22
 
23
23
  spec.add_development_dependency "database_cleaner", "~> 1.4.0"
24
24
  spec.add_development_dependency "bundler", "~> 1.6"
@@ -59,7 +59,9 @@ module Copyable
59
59
  # for this brand new model, visit all of the associated models,
60
60
  # making new copies according to the instructions in the copyable
61
61
  # declaration
62
- Declarations::Associations.execute(main.association_list, original_model, new_model, options[:skip_validations])
62
+
63
+ skip_associations = options[:skip_associations] || []
64
+ Declarations::Associations.execute(main.association_list, original_model, new_model, options[:skip_validations], skip_associations)
63
65
  # run the after_copy block if it exists
64
66
  Declarations::AfterCopy.execute(main.after_copy_block, original_model, new_model)
65
67
  ensure
@@ -6,12 +6,12 @@ module Copyable
6
6
 
7
7
  # this is the algorithm for copying associated records according to the
8
8
  # instructions given in the copyable declaration
9
- def execute(association_list, original_model, new_model, skip_validations)
9
+ def execute(association_list, original_model, new_model, skip_validations, skip_associations)
10
10
  @skip_validations = skip_validations
11
11
  association_list.each do |assoc_name, advice|
12
12
  association = original_model.class.reflections[assoc_name.to_sym]
13
13
  check_advice(association, advice, original_model)
14
- unless advice == :do_not_copy
14
+ unless advice == :do_not_copy || skip_associations.include?(assoc_name.to_sym)
15
15
  copy_association(association, original_model, new_model)
16
16
  end
17
17
  end
@@ -1,7 +1,7 @@
1
1
  module Copyable
2
2
  class OptionChecker
3
3
 
4
- VALID_OPTIONS = [:override, :skip_validations]
4
+ VALID_OPTIONS = [:override, :skip_validations, :skip_associations]
5
5
  VALID_PRIVATE_OPTIONS = [:__called_recursively] # for copyable's internal use only
6
6
 
7
7
  def self.check!(options)
@@ -17,6 +17,10 @@ module Copyable
17
17
  end
18
18
  raise CopyableError.new(message)
19
19
  end
20
+ # :skip_associations needs to be an array if it's present
21
+ if (options[:skip_associations].present? && !options[:skip_associations].is_a?(Array))
22
+ raise CopyableError.new("When :skip_associations is used, it must be an array")
23
+ end
20
24
  end
21
25
 
22
26
  end
@@ -1,3 +1,3 @@
1
1
  module Copyable
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -82,6 +82,13 @@ describe 'complex model hierarchies:' do
82
82
  ['moon roof warranty', 'twitter warranty', 'jazz warranty'])
83
83
  end
84
84
 
85
+ it 'should skip branches of the tree when directed' do
86
+ @vehicle2 = @vehicle1.create_copy!(skip_associations: [:copyable_amenities])
87
+ expect(CopyableVehicle.count).to eq(2)
88
+ expect(CopyableAmenity.count).to eq(3) # No new ones created
89
+ expect(CopyableWarranty.count).to eq(3) # Because the amenities weren't copied either
90
+ end
91
+
85
92
  it 'should create the expected records if copied multiple times' do
86
93
  # this test makes sure the SingleCopyEnforcer isn't too eager
87
94
  @vehicle1.create_copy!
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: copyable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wyatt Greene
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-08-03 00:00:00.000000000 Z
12
+ date: 2016-11-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '4.1'
20
+ version: 4.1.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '4.1'
27
+ version: 4.1.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: database_cleaner
30
30
  requirement: !ruby/object:Gem::Requirement