spreadsheet_model 0.3.4 → 0.4.0

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 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: