activeresource-google_spreadsheets 0.1.1 → 0.1.2
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 +4 -4
- data/lib/google_spreadsheets/enhanced/syncing.rb +26 -14
- data/lib/google_spreadsheets/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 626c5911caadf7c19fbdd573adfbc1b9ae543086
         | 
| 4 | 
            +
              data.tar.gz: a248679186714cddcd97a03e3fbe0dbee0059f70
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 1d9420f2494b146e3da65248c05eec4fdb1c7d32f6142b2f23f987ef8cfbe2c004954cc36666f0caeada9478431046c7513d2998b87b3b1a226b34933d6bfa31
         | 
| 7 | 
            +
              data.tar.gz: c7e8afd0c1ab9e86f8a074eb7c30e7b6230a6223fd5bb4c11c2e839f92668b406f151180c514169f977a60de8e8e0aba86df11c62a8359fbc806e6a6fec2b78f
         | 
| @@ -19,10 +19,12 @@ module GoogleSpreadsheets | |
| 19 19 | 
             
                    #                         worksheet_title: 'users'
         | 
| 20 20 | 
             
                    #   after_commit :sync_user_row
         | 
| 21 21 | 
             
                    def sync_with(rows_name, options)
         | 
| 22 | 
            -
                      options.assert_valid_keys(:spreadsheet_id, :worksheet_title, :class_name)
         | 
| 23 | 
            -
                       | 
| 24 | 
            -
                       | 
| 25 | 
            -
                       | 
| 22 | 
            +
                      options.assert_valid_keys(:spreadsheet_id, :worksheet_title, :class_name, :assigner, :include_blank)
         | 
| 23 | 
            +
                      opts = options.dup
         | 
| 24 | 
            +
                      spreadsheet_id = opts.delete(:spreadsheet_id)
         | 
| 25 | 
            +
                      worksheet_title = opts.delete(:worksheet_title) || rows_name.to_s
         | 
| 26 | 
            +
                      class_name = opts.delete(:class_name) || rows_name.to_s.classify
         | 
| 27 | 
            +
                      synchronizer = Synchronizer.new(self, class_name.safe_constantize, spreadsheet_id, worksheet_title, opts)
         | 
| 26 28 | 
             
                      self.synchronizers = self.synchronizers.merge(rows_name => synchronizer) # not share parent class attrs
         | 
| 27 29 |  | 
| 28 30 | 
             
                      # rows accessor
         | 
| @@ -32,9 +34,9 @@ module GoogleSpreadsheets | |
| 32 34 | 
             
                      end
         | 
| 33 35 |  | 
| 34 36 | 
             
                      # inbound sync all (import)
         | 
| 35 | 
            -
                      define_singleton_method("sync_with_#{rows_name}") do | 
| 37 | 
            +
                      define_singleton_method("sync_with_#{rows_name}") do
         | 
| 36 38 | 
             
                        synchronizer = self.synchronizers[rows_name]
         | 
| 37 | 
            -
                        synchronizer.sync_with_rows | 
| 39 | 
            +
                        synchronizer.sync_with_rows
         | 
| 38 40 | 
             
                      end
         | 
| 39 41 |  | 
| 40 42 | 
             
                      # outbound sync one (export)
         | 
| @@ -48,11 +50,12 @@ module GoogleSpreadsheets | |
| 48 50 | 
             
                  class Synchronizer
         | 
| 49 51 | 
             
                    attr_reader :record_class, :row_class, :spreadsheet_id, :worksheet_title
         | 
| 50 52 |  | 
| 51 | 
            -
                    def initialize(record_class, row_class, spreadsheet_id, worksheet_title)
         | 
| 53 | 
            +
                    def initialize(record_class, row_class, spreadsheet_id, worksheet_title, options = {})
         | 
| 52 54 | 
             
                      @record_class = record_class
         | 
| 53 55 | 
             
                      @row_class = row_class || default_class_for(REL_NAME_ROW)
         | 
| 54 56 | 
             
                      @spreadsheet_id = spreadsheet_id
         | 
| 55 57 | 
             
                      @worksheet_title = worksheet_title
         | 
| 58 | 
            +
                      @options = options
         | 
| 56 59 | 
             
                    end
         | 
| 57 60 |  | 
| 58 61 | 
             
                    def all_rows
         | 
| @@ -66,20 +69,22 @@ module GoogleSpreadsheets | |
| 66 69 | 
             
                      end
         | 
| 67 70 | 
             
                    end
         | 
| 68 71 |  | 
| 69 | 
            -
                    def sync_with_rows | 
| 72 | 
            +
                    def sync_with_rows
         | 
| 70 73 | 
             
                      reset
         | 
| 71 74 | 
             
                      records = all_rows.map do |row|
         | 
| 72 75 | 
             
                        record_class.find_or_initialize_by(id: row.id).tap do |record|
         | 
| 73 76 | 
             
                          if row.all_values_empty?
         | 
| 74 77 | 
             
                            # Due to destroy if exists
         | 
| 75 78 | 
             
                            record.instance_variable_set(:@due_to_destroy, true)
         | 
| 79 | 
            +
                            next
         | 
| 80 | 
            +
                          end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                          row_attributes = Hash[row.aliased_attributes.map{|attr| [attr, row.send(attr)] }]
         | 
| 83 | 
            +
                          row_attributes.reject!{|_, v| v.blank? } unless @options[:include_blank]
         | 
| 84 | 
            +
                          if @options[:assigner]
         | 
| 85 | 
            +
                            record.send(@options[:assigner], row_attributes)
         | 
| 76 86 | 
             
                          else
         | 
| 77 | 
            -
                             | 
| 78 | 
            -
                              value = row.send(attr)
         | 
| 79 | 
            -
                              if options[:include_blank] || value.present?
         | 
| 80 | 
            -
                                record.send("#{attr}=", value)
         | 
| 81 | 
            -
                              end
         | 
| 82 | 
            -
                            end
         | 
| 87 | 
            +
                            assign_row_attributes(record, row_attributes)
         | 
| 83 88 | 
             
                          end
         | 
| 84 89 | 
             
                        end
         | 
| 85 90 | 
             
                      end
         | 
| @@ -126,10 +131,17 @@ module GoogleSpreadsheets | |
| 126 131 | 
             
                    end
         | 
| 127 132 |  | 
| 128 133 | 
             
                    private
         | 
| 134 | 
            +
             | 
| 129 135 | 
             
                    def default_class_for(rel_name)
         | 
| 130 136 | 
             
                      LinkRelations.class_name_mappings[rel_name].classify.constantize
         | 
| 131 137 | 
             
                    end
         | 
| 132 138 |  | 
| 139 | 
            +
                    def assign_row_attributes(record, row_attributes)
         | 
| 140 | 
            +
                      row_attributes.each do |attr, value|
         | 
| 141 | 
            +
                        record.public_send("#{attr}=", value)
         | 
| 142 | 
            +
                      end
         | 
| 143 | 
            +
                    end
         | 
| 144 | 
            +
             | 
| 133 145 | 
             
                    def transaction_if_possible(origin = self, &block)
         | 
| 134 146 | 
             
                      if origin.respond_to?(:transaction)
         | 
| 135 147 | 
             
                        origin.transaction(&block)
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: activeresource-google_spreadsheets
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Chihiro Ito
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2014- | 
| 12 | 
            +
            date: 2014-12-26 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: activeresource
         |