spreadsheet_model 0.3.4 → 0.4.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: ab22b5aedfa5a23f20869f244cd27568eff44ff2
4
- data.tar.gz: c6ae62f88094e37d7709756f9e1b9466bf79c2ab
3
+ metadata.gz: c3e070f2046ee50b44e4a6301f25a6dd1c388f1e
4
+ data.tar.gz: 13cc25e164d755b421360288d8697aba3a8f3420
5
5
  SHA512:
6
- metadata.gz: 441cd0cbd0346f8842e859a0be71ae7d6c22a60ae4d040b1336d6666ae8df046a1e8f16c0ac381d6419c1dacd694f1d91752db76bda5f85fcb668e13be292abc
7
- data.tar.gz: 9db6360d48bde8db19a16209b5ba7a7a30fe8d2a78477b35c014065af6d80418b4876fe85a3d5cdf309a0f5e0542a5d29446b3c08b2f45595ceb38f55a1c33b0
6
+ metadata.gz: 50debcdb408d4d3756ef04e279723edf730a8d5ded37d18a9462bab6e4b82bbb1b2e24991bf929366fa9542a7275fb4b45ef490fc8c07b5519cec35e8d38e919
7
+ data.tar.gz: 78f441d134db3ab0b2a10959ea0b7e42e85c0fb4e5c3ada72620a6527b876f8c8b65a527bb0281515dcdf94747216334e249c1bd3c6524a7a7d5794506bca9c4
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- spreadsheet_model (0.3.4)
4
+ spreadsheet_model (0.4.0)
5
5
  activemodel
6
6
  activesupport
7
7
  google_drive (~> 1.0)
@@ -106,4 +106,4 @@ DEPENDENCIES
106
106
  spreadsheet_model!
107
107
 
108
108
  BUNDLED WITH
109
- 1.11.2
109
+ 1.12.5
@@ -1,3 +1,3 @@
1
1
  module SpreadsheetModel
2
- VERSION = "0.3.4"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -16,7 +16,8 @@ module SpreadsheetModel
16
16
 
17
17
  def self.attr_accessor(*args)
18
18
  super
19
- @column_names = args
19
+ @column_names ||= []
20
+ @column_names.concat(args.map(&:to_s))
20
21
  end
21
22
 
22
23
  def [](name)
@@ -27,9 +28,13 @@ module SpreadsheetModel
27
28
  @__row[name] = value
28
29
  end
29
30
 
30
- def self.import
31
+ def self.sheet_key
31
32
  sheet_key = ENV["GOOGLE_DRIVE_#{name.demodulize.underscore.upcase}_SHEET_KEY"]
32
33
  sheet_key = self::SHEET_KEY if defined? self::SHEET_KEY
34
+ sheet_key
35
+ end
36
+
37
+ def self.import
33
38
  title_regexp = /.*/
34
39
  title_regexp = self::SHEET_TITLE_REGEXP if defined? self::SHEET_TITLE_REGEXP
35
40
 
@@ -37,9 +42,10 @@ module SpreadsheetModel
37
42
  sheet.title =~ title_regexp
38
43
  end
39
44
 
40
- sheets.each do |sheet|
45
+ keys = sheets.each_with_object([]) do |sheet, keys|
41
46
  rows = sheet.rows.dup
42
47
  header = rows.shift
48
+ @column_names ||= header
43
49
 
44
50
  store_hash = rows.each_with_object({}) do |row, store_hash|
45
51
  row_hash = Hash[*header.zip(row).flatten]
@@ -51,8 +57,11 @@ module SpreadsheetModel
51
57
 
52
58
  store_hash.each do |k, v|
53
59
  write_cache(k, v)
60
+ keys << k
54
61
  end
62
+ keys
55
63
  end
64
+ write_cache('__keys', keys)
56
65
  write_cache('__cached', true)
57
66
  end
58
67
 
@@ -67,6 +76,11 @@ module SpreadsheetModel
67
76
  !!read_cache('__cached')
68
77
  end
69
78
 
79
+ def self.keys
80
+ import unless cached?
81
+ read_cache('__keys')
82
+ end
83
+
70
84
  private
71
85
 
72
86
  # inspired by:
@@ -141,7 +155,7 @@ module SpreadsheetModel
141
155
 
142
156
  def self.row_to_instance(row)
143
157
  return nil unless row
144
- attributes = row.select { |key, _| @column_names.include?(key.to_sym) }
158
+ attributes = row.select { |key, _| @column_names.include?(key.to_s) }
145
159
 
146
160
  if attributes['type'].to_s.present?
147
161
  instance = attributes['type'].constantize.new(attributes)
@@ -153,5 +167,9 @@ module SpreadsheetModel
153
167
  instance
154
168
  end
155
169
 
170
+ def self.column_names
171
+ import unless cached?
172
+ @column_names
173
+ end
156
174
  end
157
175
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spreadsheet_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - zucay
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-04-21 00:00:00.000000000 Z
11
+ date: 2016-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google_drive
@@ -153,3 +153,4 @@ signing_key:
153
153
  specification_version: 4
154
154
  summary: model-like class without database using google spreadsheet
155
155
  test_files: []
156
+ has_rdoc: