Class: Harmonize::Strategies::BasicCrudStrategy
- Inherits:
-
Strategy
- Object
- Strategy
- Harmonize::Strategies::BasicCrudStrategy
show all
- Defined in:
- lib/harmonize/strategies/basic_crud_strategy.rb
Instance Attribute Summary
Attributes inherited from Strategy
#harmonize_log, #harmonizer, #sources, #targets
Instance Method Summary
collapse
Methods inherited from Strategy
#harmonize, #initialize
Instance Method Details
#create_and_update_targets ⇒ Object
41
42
43
44
45
46
47
48
|
# File 'lib/harmonize/strategies/basic_crud_strategy.rb', line 41
def create_and_update_targets
sources.each.inject([]) do |keys, source|
target_instance = find_target_instance(harmonizer.key, source[harmonizer.key])
modification = create_modification(target_instance)
harmonize_target_instance!(target_instance, source, modification)
keys << source[harmonizer.key]
end
end
|
#create_modification(instance) ⇒ Object
13
14
15
16
17
18
19
|
# File 'lib/harmonize/strategies/basic_crud_strategy.rb', line 13
def create_modification(instance)
unless instance.new_record?
harmonize_log.modifications.create!(:modification_type => 'update', :before_time => DateTime.now)
else
harmonize_log.modifications.create!(:modification_type => 'create', :before_time => DateTime.now)
end
end
|
#destroy_targets_not_found_in_source(touched_keys) ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/harmonize/strategies/basic_crud_strategy.rb', line 50
def destroy_targets_not_found_in_source(touched_keys)
destroy_scope = touched_keys.empty? ? targets : targets.where("#{harmonizer.key} NOT IN (?)", touched_keys)
destroy_scope.find_each do |instance|
modification = harmonize_log.modifications.build(
:modification_type => 'destroy', :before_time => DateTime.now,
:instance_id => instance.id
)
instance.destroy
modification.update_attributes!(:after_time => DateTime.now)
end
end
|
#find_target_instance(key, value) ⇒ Object
6
7
8
9
10
11
|
# File 'lib/harmonize/strategies/basic_crud_strategy.rb', line 6
def find_target_instance(key, value)
target_relation = targets.where(key => value)
instance = target_relation.first rescue nil
instance ||= target_relation.build
instance
end
|
#harmonize! ⇒ Object
63
64
65
66
|
# File 'lib/harmonize/strategies/basic_crud_strategy.rb', line 63
def harmonize!
touched_keys = create_and_update_targets
destroy_targets_not_found_in_source(touched_keys)
end
|
#harmonize_target_instance!(target_instance, source, modification) ⇒ Object
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/harmonize/strategies/basic_crud_strategy.rb', line 21
def harmonize_target_instance!(target_instance, source, modification)
error_message = nil
errored = false
begin
unless target_instance.update_attributes(source)
errored = true
error_message = target_instance.errors.full_messages
end
rescue ActiveRecord::ActiveRecordError, ActiveRecord::UnknownAttributeError => e
errored = true
error_message = e.message
end
unless errored
modification.update_attributes!(:after_time => DateTime.now, :instance_id => target_instance.id)
else
modification.update_attributes!(:modification_type => 'error', :instance_errors => error_message)
end
end
|