Class: Dslimple::QueryBuilder
- Inherits:
-
Object
- Object
- Dslimple::QueryBuilder
- Defined in:
- lib/dslimple/query_builder.rb
Instance Attribute Summary collapse
-
#append_records ⇒ Object
readonly
Returns the value of attribute append_records.
-
#change_records ⇒ Object
readonly
Returns the value of attribute change_records.
-
#current_zones ⇒ Object
readonly
Returns the value of attribute current_zones.
-
#delete_records ⇒ Object
readonly
Returns the value of attribute delete_records.
-
#expected_zones ⇒ Object
readonly
Returns the value of attribute expected_zones.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#queries ⇒ Object
readonly
Returns the value of attribute queries.
Instance Method Summary collapse
- #append_zones ⇒ Object
- #build_queries ⇒ Object
- #delete_zones ⇒ Object
- #execute ⇒ Object
- #execute_records(zone_name, zone) ⇒ Object
- #filtered_queries(options) ⇒ Object
-
#initialize(current_zones, expected_zones, options = {}) ⇒ QueryBuilder
constructor
A new instance of QueryBuilder.
Constructor Details
#initialize(current_zones, expected_zones, options = {}) ⇒ QueryBuilder
Returns a new instance of QueryBuilder.
9 10 11 12 13 |
# File 'lib/dslimple/query_builder.rb', line 9 def initialize(current_zones, expected_zones, = {}) @current_zones = Hash[*current_zones.map { |zone| [zone.name, zone] }.flatten] @expected_zones = Hash[*expected_zones.map { |zone| [zone.name, zone] }.flatten] = end |
Instance Attribute Details
#append_records ⇒ Object (readonly)
Returns the value of attribute append_records.
7 8 9 |
# File 'lib/dslimple/query_builder.rb', line 7 def append_records @append_records end |
#change_records ⇒ Object (readonly)
Returns the value of attribute change_records.
7 8 9 |
# File 'lib/dslimple/query_builder.rb', line 7 def change_records @change_records end |
#current_zones ⇒ Object (readonly)
Returns the value of attribute current_zones.
6 7 8 |
# File 'lib/dslimple/query_builder.rb', line 6 def current_zones @current_zones end |
#delete_records ⇒ Object (readonly)
Returns the value of attribute delete_records.
7 8 9 |
# File 'lib/dslimple/query_builder.rb', line 7 def delete_records @delete_records end |
#expected_zones ⇒ Object (readonly)
Returns the value of attribute expected_zones.
6 7 8 |
# File 'lib/dslimple/query_builder.rb', line 6 def expected_zones @expected_zones end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
5 6 7 |
# File 'lib/dslimple/query_builder.rb', line 5 def end |
#queries ⇒ Object (readonly)
Returns the value of attribute queries.
5 6 7 |
# File 'lib/dslimple/query_builder.rb', line 5 def queries @queries end |
Instance Method Details
#append_zones ⇒ Object
15 16 17 |
# File 'lib/dslimple/query_builder.rb', line 15 def append_zones @append_zones ||= expected_zones.values.reject { |zone| current_zones.key?(zone.name) } end |
#build_queries ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/dslimple/query_builder.rb', line 55 def build_queries @queries = [] append_zones.each do |zone| @queries << Dslimple::Query.new(:addition, :zone, zone) end append_records.each do |record| @queries << Dslimple::Query.new(:addition, :record, record.zone, record.to_params) end change_records.each do |old, new| @queries << Dslimple::Query.new(:modification, :record, new.zone, new.to_params.merge(id: old.id)) end delete_records.each do |record| @queries << Dslimple::Query.new(:deletion, :record, record.zone, record.to_params) end delete_zones.each do |zone| @queries << Dslimple::Query.new(:deletion, :zone, zone) end @queries end |
#delete_zones ⇒ Object
19 20 21 |
# File 'lib/dslimple/query_builder.rb', line 19 def delete_zones @delete_zones ||= current_zones.values.reject { |zone| expected_zones.key?(zone.name) } end |
#execute ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/dslimple/query_builder.rb', line 23 def execute @append_records = append_zones.map { |z| z.clean_records([:ignore]) }.flatten @change_records = [] @delete_records = delete_zones.map { |z| z.clean_records([:ignore]) }.flatten expected_zones.each_pair do |name, zone| execute_records(name, zone) end build_queries end |
#execute_records(zone_name, zone) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/dslimple/query_builder.rb', line 35 def execute_records(zone_name, zone) current_zone = current_zones[zone_name] return unless current_zone current_records = current_zone.clean_records([:ignore]).dup zone.clean_records([:ignore]).each do |record| at = current_records.index { |current| current == record } current_record = at ? current_records.slice!(at) : nil like_record = current_records.find { |current| current === record } if !like_record && !current_record @append_records << record elsif like_record @change_records << [like_record, record] current_records.delete(like_record) end end @delete_records.concat(current_records) end |
#filtered_queries(options) ⇒ Object
81 82 83 84 85 86 87 |
# File 'lib/dslimple/query_builder.rb', line 81 def filtered_queries() queries.select do |query| (query.addition? && [:addition]) || (query.modification? && [:modification]) || (query.deletion? && [:deletion]) end end |