spreadsheet_model 0.2.2 → 0.3.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 +4 -4
- data/Gemfile.lock +8 -0
- data/lib/spreadsheet_model.rb +61 -14
- data/lib/spreadsheet_model/version.rb +1 -1
- data/spreadsheet_model.gemspec +4 -3
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40c78687dd4fe2890ef78cc3129d1d936c9d0e42
|
4
|
+
data.tar.gz: 304e156c682b03a717e8e10cf4f4b538f42e6319
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbf58b4a25aec6f0ffadb7288a86bb8e59c15d8c5c142b01171856bfa4747ebcd2700c8764c8f904fa5b544a46a579cb7ab2986fb0e91c64ea71677d33c6cb2b
|
7
|
+
data.tar.gz: eaa7c50ad7e5e7da5c4590c14a8cc0b0cd470144a94fafea88fd8f6f3c5bb236f82223f9b6afc0b86f80aa89fcb41d03a39380bc39f77ffc6d1ce6565ca0c86d
|
data/Gemfile.lock
CHANGED
@@ -24,6 +24,7 @@ GEM
|
|
24
24
|
extlib (>= 0.9.15)
|
25
25
|
multi_json (>= 1.0.0)
|
26
26
|
builder (3.2.2)
|
27
|
+
coderay (1.1.1)
|
27
28
|
extlib (0.9.16)
|
28
29
|
faraday (0.9.2)
|
29
30
|
multipart-post (>= 1.2, < 3)
|
@@ -61,6 +62,7 @@ GEM
|
|
61
62
|
little-plugger (~> 1.1)
|
62
63
|
multi_json (~> 1.10)
|
63
64
|
memoist (0.14.0)
|
65
|
+
method_source (0.8.2)
|
64
66
|
mini_portile2 (2.0.0)
|
65
67
|
minitest (5.8.4)
|
66
68
|
multi_json (1.11.2)
|
@@ -76,6 +78,10 @@ GEM
|
|
76
78
|
multi_xml (~> 0.5)
|
77
79
|
rack (~> 1.2)
|
78
80
|
os (0.9.6)
|
81
|
+
pry (0.10.3)
|
82
|
+
coderay (~> 1.1.0)
|
83
|
+
method_source (~> 0.8.1)
|
84
|
+
slop (~> 3.4)
|
79
85
|
rack (1.6.4)
|
80
86
|
rake (10.5.0)
|
81
87
|
retriable (1.4.1)
|
@@ -84,6 +90,7 @@ GEM
|
|
84
90
|
faraday (~> 0.9)
|
85
91
|
jwt (~> 1.5)
|
86
92
|
multi_json (~> 1.10)
|
93
|
+
slop (3.6.0)
|
87
94
|
thread_safe (0.3.5)
|
88
95
|
tzinfo (1.2.2)
|
89
96
|
thread_safe (~> 0.1)
|
@@ -94,6 +101,7 @@ PLATFORMS
|
|
94
101
|
DEPENDENCIES
|
95
102
|
bundler
|
96
103
|
minitest (~> 5.0)
|
104
|
+
pry
|
97
105
|
rake (~> 10.0)
|
98
106
|
spreadsheet_model!
|
99
107
|
|
data/lib/spreadsheet_model.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require "spreadsheet_model/version"
|
2
|
-
require 'google/api_client'
|
3
2
|
require 'google_drive'
|
4
3
|
require 'active_support'
|
5
4
|
require 'active_support/core_ext'
|
6
5
|
require 'active_model'
|
6
|
+
require 'google/api_client'
|
7
7
|
|
8
8
|
module SpreadsheetModel
|
9
9
|
extend ActiveSupport::Concern
|
@@ -43,25 +43,18 @@ module SpreadsheetModel
|
|
43
43
|
rows.each do |row|
|
44
44
|
row_hash = Hash[*header.zip(row).flatten]
|
45
45
|
row_hash = @import_callback.call(row_hash) if @import_callback
|
46
|
-
|
46
|
+
write_rows = [read_cache(row[0]), row_hash].compact.flatten
|
47
|
+
write_cache(row[0], write_rows)
|
47
48
|
end
|
48
49
|
end
|
49
50
|
write_cache('__cached', true)
|
50
51
|
end
|
51
52
|
|
52
|
-
|
53
|
+
# inspired by:
|
54
|
+
# https://github.com/rails/rails/blob/4-2-stable/activerecord/lib/active_record/relation/finder_methods.rb#L66
|
55
|
+
def self.find(*args)
|
53
56
|
import unless cached?
|
54
|
-
|
55
|
-
return nil unless row
|
56
|
-
attributes = row.select { |key, _| @@column_names.include?(key.to_sym) }
|
57
|
-
|
58
|
-
if attributes['type'].to_s.present?
|
59
|
-
instance = attributes['type'].constantize.new(attributes)
|
60
|
-
else
|
61
|
-
instance = self.new(attributes)
|
62
|
-
end
|
63
|
-
instance.instance_variable_set(:@__row, row)
|
64
|
-
instance
|
57
|
+
find_with_ids(*args)
|
65
58
|
end
|
66
59
|
|
67
60
|
def self.cached?
|
@@ -70,6 +63,46 @@ module SpreadsheetModel
|
|
70
63
|
|
71
64
|
private
|
72
65
|
|
66
|
+
# inspired by:
|
67
|
+
# https://github.com/rails/rails/blob/4-2-stable/activerecord/lib/active_record/relation/finder_methods.rb#L411
|
68
|
+
def self.find_with_ids(*ids)
|
69
|
+
expects_array = ids.first.kind_of?(Array)
|
70
|
+
ids = ids.flatten.compact.uniq
|
71
|
+
|
72
|
+
case ids.size
|
73
|
+
when 0
|
74
|
+
raise RecordNotFound
|
75
|
+
when 1
|
76
|
+
if expects_array
|
77
|
+
result = find_some([ids.first])
|
78
|
+
else
|
79
|
+
result = find_one(ids.first)
|
80
|
+
end
|
81
|
+
else
|
82
|
+
find_some(ids)
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
# inspired by:
|
88
|
+
# https://github.com/rails/rails/blob/4-2-stable/activerecord/lib/active_record/relation/finder_methods.rb#L432
|
89
|
+
def self.find_one(id)
|
90
|
+
rows = read_cache(id)
|
91
|
+
return nil unless rows
|
92
|
+
|
93
|
+
row_to_instance(rows[0])
|
94
|
+
end
|
95
|
+
|
96
|
+
# inspired by:
|
97
|
+
# https://github.com/rails/rails/blob/4-2-stable/activerecord/lib/active_record/relation/finder_methods.rb#L449
|
98
|
+
def self.find_some(ids)
|
99
|
+
records = ids.map do |id|
|
100
|
+
read_cache(id).map do |row|
|
101
|
+
row_to_instance(row)
|
102
|
+
end
|
103
|
+
end.flatten
|
104
|
+
end
|
105
|
+
|
73
106
|
def self.cache
|
74
107
|
@@cache = Rails.cache if defined? Rails
|
75
108
|
@@cache ||= ActiveSupport::Cache::MemoryStore.new
|
@@ -100,5 +133,19 @@ module SpreadsheetModel
|
|
100
133
|
session = ::GoogleDrive.login_with_oauth(auth_token.token)
|
101
134
|
session.spreadsheet_by_key(sheet_key).worksheets
|
102
135
|
end
|
136
|
+
|
137
|
+
def self.row_to_instance(row)
|
138
|
+
attributes = row.select { |key, _| @@column_names.include?(key.to_sym) }
|
139
|
+
|
140
|
+
if attributes['type'].to_s.present?
|
141
|
+
instance = attributes['type'].constantize.new(attributes)
|
142
|
+
else
|
143
|
+
instance = self.new(attributes)
|
144
|
+
end
|
145
|
+
|
146
|
+
instance.instance_variable_set(:@__row, row)
|
147
|
+
instance
|
148
|
+
end
|
149
|
+
|
103
150
|
end
|
104
151
|
end
|
data/spreadsheet_model.gemspec
CHANGED
@@ -22,7 +22,8 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_dependency 'google_drive', '~> 1.0'
|
23
23
|
spec.add_dependency 'activesupport'
|
24
24
|
spec.add_dependency 'activemodel'
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
25
|
+
spec.add_development_dependency 'bundler'
|
26
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
27
|
+
spec.add_development_dependency 'minitest', '~> 5.0'
|
28
|
+
spec.add_development_dependency 'pry'
|
28
29
|
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.
|
4
|
+
version: 0.3.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-
|
11
|
+
date: 2016-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google_drive
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '5.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
description: model-like class without database using google spreadsheet
|
98
112
|
email:
|
99
113
|
- y.kawarazuka@gmail.com
|
@@ -134,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
148
|
version: '0'
|
135
149
|
requirements: []
|
136
150
|
rubyforge_project:
|
137
|
-
rubygems_version: 2.
|
151
|
+
rubygems_version: 2.5.1
|
138
152
|
signing_key:
|
139
153
|
specification_version: 4
|
140
154
|
summary: model-like class without database using google spreadsheet
|