drive_time 0.0.8 → 0.0.9
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.
- data/README.md +2 -1
- data/lib/drive_time/builders/multi_builder.rb +15 -0
- data/lib/drive_time/builders/name_builder.rb +0 -1
- data/lib/drive_time/converters/spreadsheets_converter.rb +0 -4
- data/lib/drive_time/converters/worksheet_converter.rb +21 -19
- data/lib/drive_time/model_store.rb +1 -1
- data/lib/drive_time/version.rb +1 -1
- data/spec/drive_time/builder/join_builder_spec.rb +1 -1
- data/spec/drive_time/builder/multi_buider_spec.rb +31 -0
- data/spec/{full_tests.rb → drive_time/integration/full.rb} +0 -0
- metadata +6 -3
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# DriveTime
|
2
|
+
[](http://badge.fury.io/rb/drive_time)
|
2
3
|
|
3
|
-
Drive Time allows you
|
4
|
+
Drive Time allows you transfer data from one or more Google Spreadsheets to your Rails Models. It supports associations and has a number of useful features to give you choices on how to mapthe data.
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
@@ -104,11 +104,7 @@ module DriveTime
|
|
104
104
|
def worksheet_for_association(name, worksheets)
|
105
105
|
# And find the worksheet that satisfies it
|
106
106
|
worksheets.each do |worksheet|
|
107
|
-
puts "#{name} --->"
|
108
107
|
class_name = DriveTime.class_name_from_title(worksheet.title)
|
109
|
-
puts " -- #{DriveTime.underscore_from_text(worksheet.title)}"
|
110
|
-
#resolved = @class_name_map.resolve_mapped_from_original class_name
|
111
|
-
#puts "Resolved -- #{resolved}"
|
112
108
|
# If the name matches we have a dependent relationship
|
113
109
|
if name == DriveTime.underscore_from_text(worksheet.title)
|
114
110
|
return worksheet
|
@@ -35,7 +35,6 @@ module DriveTime
|
|
35
35
|
fields = rows.shift.map{ |row| row }
|
36
36
|
# Reject rows of only empty strings (empty cells).
|
37
37
|
rows.reject! {|row| row.all?(&:empty?)}
|
38
|
-
|
39
38
|
rows.each do |row|
|
40
39
|
generate_model_from_row clazz, worksheet.mapping, fields, row
|
41
40
|
end
|
@@ -70,18 +69,7 @@ module DriveTime
|
|
70
69
|
# Create new model
|
71
70
|
model = clazz.new(model_fields, without_protection: true)
|
72
71
|
|
73
|
-
|
74
|
-
method_calls.each do |method_call|
|
75
|
-
call_step = model
|
76
|
-
methods = method_call["methods"]
|
77
|
-
methods.each_with_index do |method, index|
|
78
|
-
if index == method_call.length - 1
|
79
|
-
call_step.send(method, method_call["value"])
|
80
|
-
else
|
81
|
-
call_step = call_step.send(method)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
72
|
+
invoke_methods_on_model(model, method_calls)
|
85
73
|
|
86
74
|
# Add its associations
|
87
75
|
add_associations(model, mapping)
|
@@ -101,6 +89,21 @@ module DriveTime
|
|
101
89
|
end
|
102
90
|
end
|
103
91
|
|
92
|
+
def invoke_methods_on_model(model, method_calls)
|
93
|
+
# Invoke any method calls
|
94
|
+
method_calls.each do |method_call|
|
95
|
+
call_step = model
|
96
|
+
methods = method_call["methods"]
|
97
|
+
methods.each_with_index do |method, index|
|
98
|
+
if index == method_call.length - 1
|
99
|
+
call_step.send(method, method_call["value"])
|
100
|
+
else
|
101
|
+
call_step = call_step.send(method)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
104
107
|
def row_fields_to_method_calls(mapping, model_key)
|
105
108
|
method_calls = []
|
106
109
|
# Run through the mapping, pulling values from row_map as required
|
@@ -113,7 +116,7 @@ module DriveTime
|
|
113
116
|
raise NoMethodError "Missing Method: Name for call field: #{field_name} in mapping: #{mapping}"
|
114
117
|
end
|
115
118
|
|
116
|
-
field_value = parse_field_value(@row_map[field_name])
|
119
|
+
field_value = parse_field_value(@row_map[field_name], model_key)
|
117
120
|
|
118
121
|
# handle multi-values
|
119
122
|
if call_mapping[:builder] == "multi"
|
@@ -139,14 +142,13 @@ module DriveTime
|
|
139
142
|
raise NoFieldNameError "Missing Field: Name for field: #{value} in mapping: #{mapping}"
|
140
143
|
end
|
141
144
|
|
142
|
-
field_value = parse_field_value(@row_map[field_name])
|
145
|
+
field_value = parse_field_value(@row_map[field_name], model_key)
|
143
146
|
model_fields[mapped_to_field_name || field_name] = field_value
|
144
147
|
end
|
145
148
|
end
|
146
149
|
return model_fields
|
147
150
|
end
|
148
151
|
|
149
|
-
# TODO: Refactor this big ugly beast
|
150
152
|
def add_associations(model, mapping)
|
151
153
|
associations_mapping = mapping[:associations]
|
152
154
|
if associations_mapping
|
@@ -282,9 +284,9 @@ module DriveTime
|
|
282
284
|
class_name.constantize
|
283
285
|
end
|
284
286
|
|
285
|
-
def parse_field_value(field_value)
|
287
|
+
def parse_field_value(field_value, model_key)
|
286
288
|
if field_value
|
287
|
-
field_value = check_for_token(field_value)
|
289
|
+
field_value = check_for_token(field_value, model_key)
|
288
290
|
field_value = check_for_boolean(field_value)
|
289
291
|
end
|
290
292
|
# Make sure any empty cells give us nil (rather than an empty string)
|
@@ -292,7 +294,7 @@ module DriveTime
|
|
292
294
|
field_value
|
293
295
|
end
|
294
296
|
|
295
|
-
def check_for_token(field_value)
|
297
|
+
def check_for_token(field_value, model_key)
|
296
298
|
# Check for token pattern: {{some_value}}
|
297
299
|
match = /\{\{(.*?)\}\}/.match(field_value)
|
298
300
|
if match
|
data/lib/drive_time/version.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module DriveTime
|
4
|
+
|
5
|
+
describe MultiBuilder do
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
@builder = MultiBuilder.new
|
9
|
+
@valid_string = "one,two,three"
|
10
|
+
@valid_string_with_newlines = "\none,\ntwo,\nthree\n"
|
11
|
+
end
|
12
|
+
|
13
|
+
context "for a valid string" do
|
14
|
+
|
15
|
+
it "should split a string on commas" do
|
16
|
+
@builder.build(@valid_string).should == ["one", "two", "three"]
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should remove all newlines" do
|
20
|
+
@builder.build(@valid_string_with_newlines).should == ["one", "two", "three"]
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should return an empty array for an empty string" do
|
26
|
+
@builder.build("").should == []
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drive_time
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -171,6 +171,7 @@ files:
|
|
171
171
|
- lib/drive_time.rb
|
172
172
|
- lib/drive_time/bi_directional_hash.rb
|
173
173
|
- lib/drive_time/builders/join_builder.rb
|
174
|
+
- lib/drive_time/builders/multi_builder.rb
|
174
175
|
- lib/drive_time/builders/name_builder.rb
|
175
176
|
- lib/drive_time/class_name_map.rb
|
176
177
|
- lib/drive_time/converters/spreadsheets_converter.rb
|
@@ -182,15 +183,16 @@ files:
|
|
182
183
|
- lib/drive_time/version.rb
|
183
184
|
- spec/drive_time/bi_directional_hash_spec.rb
|
184
185
|
- spec/drive_time/builder/join_builder_spec.rb
|
186
|
+
- spec/drive_time/builder/multi_buider_spec.rb
|
185
187
|
- spec/drive_time/builder/name_builder_spec.rb
|
186
188
|
- spec/drive_time/class_name_map_spec.rb
|
187
189
|
- spec/drive_time/converters/worksheet_converter_spec.rb
|
188
190
|
- spec/drive_time/field_expander_spec.rb
|
191
|
+
- spec/drive_time/integration/full.rb
|
189
192
|
- spec/drive_time/loader_spec.rb
|
190
193
|
- spec/drive_time/model_store_spec.rb
|
191
194
|
- spec/drive_time_spec.rb
|
192
195
|
- spec/fixtures/mapping.yml
|
193
|
-
- spec/full_tests.rb
|
194
196
|
- spec/spec_helper.rb
|
195
197
|
homepage: https://github.com/stationkeeping/drive_time
|
196
198
|
licenses: []
|
@@ -220,14 +222,15 @@ summary: Map Worksheets to Models and their columns to model attributes. Seed yo
|
|
220
222
|
test_files:
|
221
223
|
- spec/drive_time/bi_directional_hash_spec.rb
|
222
224
|
- spec/drive_time/builder/join_builder_spec.rb
|
225
|
+
- spec/drive_time/builder/multi_buider_spec.rb
|
223
226
|
- spec/drive_time/builder/name_builder_spec.rb
|
224
227
|
- spec/drive_time/class_name_map_spec.rb
|
225
228
|
- spec/drive_time/converters/worksheet_converter_spec.rb
|
226
229
|
- spec/drive_time/field_expander_spec.rb
|
230
|
+
- spec/drive_time/integration/full.rb
|
227
231
|
- spec/drive_time/loader_spec.rb
|
228
232
|
- spec/drive_time/model_store_spec.rb
|
229
233
|
- spec/drive_time_spec.rb
|
230
234
|
- spec/fixtures/mapping.yml
|
231
|
-
- spec/full_tests.rb
|
232
235
|
- spec/spec_helper.rb
|
233
236
|
has_rdoc:
|