sheets_db 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c75097447925884453e6ce30f428b314898beb55
4
- data.tar.gz: 6c602c5a2d4a02b7b199e504064be4ef98c5274d
3
+ metadata.gz: b7e907bf49b4cf4aa2db7e42de08bdb000c6f7aa
4
+ data.tar.gz: 5cecdaafb237db9ee78068370db3cd0f160c050d
5
5
  SHA512:
6
- metadata.gz: 5c4bf7055ba382638a476277411e256bb4bc920db9d1755626da02f30d2ea48e6fe664d084c3f7a3c003ba609635a722a79dc0a20b7e6e4de73003af8abb4526
7
- data.tar.gz: 6f31eaba31bb2b75432421d300381f07c439e0d382fdbfa2ca547d7bf9fb8527b933310b796f9b0d3263d049a5fde49455e74f94aa98043dda4331d7ed4cffe0
6
+ metadata.gz: 94b4e4ce9fc13adc72136d1a37c24bca8343415587230b840d3158c208b3d96ef05bd7025d5aadef166dc5f369e3124a0f80b5249c2cb6a3d1fad9101915a2c4
7
+ data.tar.gz: 365e9d23933c27732a87a0760630c89c12b4d12cd878e49084593d08693a337e595351eb19d6a65a60ed4971f3f8a4c74c0cc081267e1d7efbe066430e7075c3
@@ -1,3 +1,3 @@
1
1
  module SheetsDB
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -7,12 +7,13 @@ module SheetsDB
7
7
 
8
8
  include Enumerable
9
9
 
10
- attr_reader :spreadsheet, :google_drive_resource, :type
10
+ attr_reader :spreadsheet, :google_drive_resource, :type, :synchronizing
11
11
 
12
12
  def initialize(spreadsheet:, google_drive_resource:, type:)
13
13
  @spreadsheet = spreadsheet
14
14
  @google_drive_resource = google_drive_resource
15
15
  @type = type
16
+ @synchronizing = true
16
17
  end
17
18
 
18
19
  def ==(other)
@@ -81,7 +82,29 @@ module SheetsDB
81
82
  assignment_value = attribute_definition[:multiple] ? value.join(",") : value
82
83
  google_drive_resource[row_position, column.column_position] = assignment_value
83
84
  end
84
- google_drive_resource.synchronize
85
+ google_drive_resource.synchronize if synchronizing
86
+ end
87
+
88
+ def next_available_row_position
89
+ google_drive_resource.num_rows + 1
90
+ end
91
+
92
+ def new(**attributes)
93
+ type.new(worksheet: self, row_position: nil).tap { |row|
94
+ row.stage_attributes(attributes)
95
+ }
96
+ end
97
+
98
+ def create!(**attributes)
99
+ new(**attributes).save!
100
+ end
101
+
102
+ def import!(attribute_sets)
103
+ transaction do
104
+ attribute_sets.each do |attributes|
105
+ create!(**attributes)
106
+ end
107
+ end
85
108
  end
86
109
 
87
110
  def each
@@ -147,5 +170,21 @@ module SheetsDB
147
170
  attribute_definition[:transform].call(converted_value) :
148
171
  converted_value
149
172
  end
173
+
174
+ def enable_synchronization!
175
+ @synchronizing = true
176
+ end
177
+
178
+ def disable_synchronization!
179
+ @synchronizing = false
180
+ end
181
+
182
+ def transaction
183
+ disable_synchronization!
184
+ yield
185
+ google_drive_resource.synchronize
186
+ ensure
187
+ enable_synchronization!
188
+ end
150
189
  end
151
190
  end
@@ -110,6 +110,10 @@ module SheetsDB
110
110
  @changed_foreign_items = []
111
111
  end
112
112
 
113
+ def new_row?
114
+ row_position.nil?
115
+ end
116
+
113
117
  def get_modified_attribute(name)
114
118
  loaded_attributes.fetch(name, {}).
115
119
  fetch(:changed)
@@ -164,15 +168,18 @@ module SheetsDB
164
168
  end
165
169
 
166
170
  def save!
171
+ assign_next_row_position_if_not_set
167
172
  worksheet.update_attributes_at_row_position(staged_attributes, row_position: row_position)
168
173
  save_changed_foreign_items!
169
174
  reset_attributes_and_associations_cache
170
175
  end
171
176
 
177
+ def assign_next_row_position_if_not_set
178
+ @row_position ||= worksheet.next_available_row_position
179
+ end
180
+
172
181
  def save_changed_foreign_items!
173
- changed_foreign_items.each do |foreign_item|
174
- foreign_item.save!
175
- end
182
+ changed_foreign_items.each(&:save!)
176
183
  end
177
184
 
178
185
  def reset_attributes_and_associations_cache
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sheets_db
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ravi Gadad
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-26 00:00:00.000000000 Z
11
+ date: 2018-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google_drive