ar_loader 0.0.6 → 0.0.8
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/LICENSE +9 -9
- data/README.markdown +268 -221
- data/Rakefile +76 -76
- data/lib/VERSION +1 -1
- data/lib/ar_loader.rb +87 -66
- data/lib/ar_loader/exceptions.rb +2 -0
- data/lib/{engine → ar_loader}/file_definitions.rb +353 -353
- data/lib/{engine → ar_loader}/mapping_file_definitions.rb +87 -87
- data/lib/ar_loader/method_detail.rb +257 -0
- data/lib/ar_loader/method_mapper.rb +213 -0
- data/lib/helpers/jruby/jexcel_file.rb +187 -0
- data/lib/{engine → helpers/jruby}/word.rb +79 -70
- data/lib/helpers/spree_helper.rb +85 -0
- data/lib/loaders/csv_loader.rb +87 -0
- data/lib/loaders/excel_loader.rb +132 -0
- data/lib/loaders/loader_base.rb +205 -73
- data/lib/loaders/spree/image_loader.rb +45 -41
- data/lib/loaders/spree/product_loader.rb +140 -91
- data/lib/to_b.rb +24 -24
- data/spec/csv_loader_spec.rb +27 -0
- data/spec/database.yml +19 -6
- data/spec/db/migrate/20110803201325_create_test_bed.rb +78 -0
- data/spec/excel_loader_spec.rb +113 -98
- data/spec/fixtures/BadAssociationName.xls +0 -0
- data/spec/fixtures/DemoNegativeTesting.xls +0 -0
- data/spec/fixtures/DemoTestModelAssoc.xls +0 -0
- data/spec/fixtures/ProjectsMultiCategories.xls +0 -0
- data/spec/fixtures/SimpleProjects.xls +0 -0
- data/spec/fixtures/SpreeProducts.xls +0 -0
- data/spec/fixtures/SpreeZoneExample.csv +5 -0
- data/spec/fixtures/SpreeZoneExample.xls +0 -0
- data/spec/loader_spec.rb +116 -0
- data/spec/logs/test.log +5000 -0
- data/spec/method_mapper_spec.rb +222 -0
- data/spec/models.rb +55 -0
- data/spec/spec_helper.rb +85 -18
- data/spec/spree_loader_spec.rb +223 -157
- data/tasks/config/seed_fu_product_template.erb +15 -15
- data/tasks/config/tidy_config.txt +12 -12
- data/tasks/db_tasks.rake +64 -64
- data/tasks/excel_loader.rake +63 -113
- data/tasks/file_tasks.rake +36 -37
- data/tasks/loader.rake +45 -0
- data/tasks/spree/image_load.rake +108 -107
- data/tasks/spree/product_loader.rake +49 -107
- data/tasks/word_to_seedfu.rake +166 -166
- metadata +66 -61
- data/lib/engine/jruby/jexcel_file.rb +0 -182
- data/lib/engine/jruby/method_mapper_excel.rb +0 -44
- data/lib/engine/method_detail.rb +0 -140
- data/lib/engine/method_mapper.rb +0 -157
- data/lib/engine/method_mapper_csv.rb +0 -28
- data/spec/db/migrate/20110803201325_create_testbed.rb +0 -25
metadata
CHANGED
@@ -1,21 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ar_loader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 19
|
5
4
|
prerelease:
|
6
|
-
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 6
|
10
|
-
version: 0.0.6
|
5
|
+
version: 0.0.8
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
|
-
- thomas statter
|
8
|
+
- thomas statter
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date: 2011-08-
|
13
|
+
date: 2011-08-15 00:00:00 +01:00
|
19
14
|
default_executable:
|
20
15
|
dependencies: []
|
21
16
|
|
@@ -26,46 +21,62 @@ executables: []
|
|
26
21
|
extensions: []
|
27
22
|
|
28
23
|
extra_rdoc_files:
|
29
|
-
- README.markdown
|
30
|
-
- LICENSE
|
24
|
+
- README.markdown
|
25
|
+
- LICENSE
|
31
26
|
files:
|
32
|
-
- LICENSE
|
33
|
-
- README.markdown
|
34
|
-
- Rakefile
|
35
|
-
- lib/ar_loader.rb
|
36
|
-
- lib/
|
37
|
-
- lib/
|
38
|
-
- lib/
|
39
|
-
- lib/
|
40
|
-
- lib/
|
41
|
-
- lib/
|
42
|
-
- lib/
|
43
|
-
- lib/
|
44
|
-
- lib/
|
45
|
-
- lib/
|
46
|
-
- lib/java/poi-
|
47
|
-
- lib/java/poi-
|
48
|
-
- lib/java/poi-
|
49
|
-
- lib/java/poi-
|
50
|
-
- lib/java/poi-
|
51
|
-
- lib/
|
52
|
-
- lib/
|
53
|
-
- lib/loaders/
|
54
|
-
- lib/
|
55
|
-
- lib/
|
56
|
-
-
|
57
|
-
-
|
58
|
-
- spec/
|
59
|
-
- spec/
|
60
|
-
- spec/
|
61
|
-
-
|
62
|
-
-
|
63
|
-
-
|
64
|
-
-
|
65
|
-
-
|
66
|
-
-
|
67
|
-
-
|
68
|
-
-
|
27
|
+
- LICENSE
|
28
|
+
- README.markdown
|
29
|
+
- Rakefile
|
30
|
+
- lib/ar_loader.rb
|
31
|
+
- lib/to_b.rb
|
32
|
+
- lib/VERSION
|
33
|
+
- lib/ar_loader/exceptions.rb
|
34
|
+
- lib/ar_loader/file_definitions.rb
|
35
|
+
- lib/ar_loader/mapping_file_definitions.rb
|
36
|
+
- lib/ar_loader/method_detail.rb
|
37
|
+
- lib/ar_loader/method_mapper.rb
|
38
|
+
- lib/helpers/spree_helper.rb
|
39
|
+
- lib/helpers/jruby/jexcel_file.rb
|
40
|
+
- lib/helpers/jruby/word.rb
|
41
|
+
- lib/java/poi-3.2-FINAL-20081019.jar
|
42
|
+
- lib/java/poi-3.6.jar
|
43
|
+
- lib/java/poi-contrib-3.6-20091214.jar
|
44
|
+
- lib/java/poi-examples-3.6-20091214.jar
|
45
|
+
- lib/java/poi-ooxml-3.6-20091214.jar
|
46
|
+
- lib/java/poi-ooxml-schemas-3.6-20091214.jar
|
47
|
+
- lib/java/poi-scratchpad-3.6-20091214.jar
|
48
|
+
- lib/loaders/csv_loader.rb
|
49
|
+
- lib/loaders/excel_loader.rb
|
50
|
+
- lib/loaders/loader_base.rb
|
51
|
+
- lib/loaders/spree/image_loader.rb
|
52
|
+
- lib/loaders/spree/product_loader.rb
|
53
|
+
- spec/csv_loader_spec.rb
|
54
|
+
- spec/database.yml
|
55
|
+
- spec/excel_loader_spec.rb
|
56
|
+
- spec/loader_spec.rb
|
57
|
+
- spec/method_mapper_spec.rb
|
58
|
+
- spec/models.rb
|
59
|
+
- spec/spec_helper.rb
|
60
|
+
- spec/spree_loader_spec.rb
|
61
|
+
- spec/db/migrate/20110803201325_create_test_bed.rb
|
62
|
+
- spec/fixtures/BadAssociationName.xls
|
63
|
+
- spec/fixtures/DemoNegativeTesting.xls
|
64
|
+
- spec/fixtures/DemoTestModelAssoc.xls
|
65
|
+
- spec/fixtures/ProjectsMultiCategories.xls
|
66
|
+
- spec/fixtures/SimpleProjects.xls
|
67
|
+
- spec/fixtures/SpreeProducts.xls
|
68
|
+
- spec/fixtures/SpreeZoneExample.csv
|
69
|
+
- spec/fixtures/SpreeZoneExample.xls
|
70
|
+
- spec/logs/test.log
|
71
|
+
- tasks/db_tasks.rake
|
72
|
+
- tasks/excel_loader.rake
|
73
|
+
- tasks/file_tasks.rake
|
74
|
+
- tasks/loader.rake
|
75
|
+
- tasks/word_to_seedfu.rake
|
76
|
+
- tasks/config/seed_fu_product_template.erb
|
77
|
+
- tasks/config/tidy_config.txt
|
78
|
+
- tasks/spree/image_load.rake
|
79
|
+
- tasks/spree/product_loader.rake
|
69
80
|
has_rdoc: true
|
70
81
|
homepage: http://www.autotelik.co.uk
|
71
82
|
licenses: []
|
@@ -74,29 +85,23 @@ post_install_message:
|
|
74
85
|
rdoc_options: []
|
75
86
|
|
76
87
|
require_paths:
|
77
|
-
- lib
|
88
|
+
- lib
|
78
89
|
required_ruby_version: !ruby/object:Gem::Requirement
|
79
90
|
none: false
|
80
91
|
requirements:
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
segments:
|
85
|
-
- 0
|
86
|
-
version: "0"
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: "0"
|
87
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
96
|
none: false
|
89
97
|
requirements:
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
segments:
|
94
|
-
- 0
|
95
|
-
version: "0"
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: "0"
|
96
101
|
requirements: []
|
97
102
|
|
98
103
|
rubyforge_project:
|
99
|
-
rubygems_version: 1.5.
|
104
|
+
rubygems_version: 1.5.1
|
100
105
|
signing_key:
|
101
106
|
specification_version: 3
|
102
107
|
summary: File based loader for Active Record models
|
@@ -1,182 +0,0 @@
|
|
1
|
-
# Copyright:: (c) Autotelik Media Ltd 2011
|
2
|
-
# Author :: Tom Statter
|
3
|
-
# Date :: Aug 2010
|
4
|
-
# License:: MIT
|
5
|
-
#
|
6
|
-
# An Excel file helper. Create and populate XSL files
|
7
|
-
#
|
8
|
-
# The maximum number of columns and rows in an Excel file is fixed at 256 Columns and 65536 Rows
|
9
|
-
#
|
10
|
-
# POI jar location needs to be added to class path.
|
11
|
-
#
|
12
|
-
# TODO - Check out http://poi.apache.org/poi-ruby.html
|
13
|
-
#
|
14
|
-
class Object
|
15
|
-
def add_to_classpath(path)
|
16
|
-
$CLASSPATH << File.join( ArLoader.root_path, 'lib', path.gsub("\\", "/") )
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
require 'java'
|
21
|
-
require 'rubygems'
|
22
|
-
|
23
|
-
add_to_classpath 'java/poi-3.6.jar'
|
24
|
-
|
25
|
-
class JExcelFile
|
26
|
-
include_class 'org.apache.poi.poifs.filesystem.POIFSFileSystem'
|
27
|
-
include_class 'org.apache.poi.hssf.usermodel.HSSFCell'
|
28
|
-
include_class 'org.apache.poi.hssf.usermodel.HSSFWorkbook'
|
29
|
-
include_class 'org.apache.poi.hssf.usermodel.HSSFCellStyle'
|
30
|
-
include_class 'org.apache.poi.hssf.usermodel.HSSFDataFormat'
|
31
|
-
|
32
|
-
include_class 'java.io.ByteArrayOutputStream'
|
33
|
-
include_class 'java.util.Date'
|
34
|
-
include_class 'java.io.FileInputStream'
|
35
|
-
|
36
|
-
attr_accessor :book, :row, :current_sheet
|
37
|
-
|
38
|
-
attr_reader :sheet
|
39
|
-
|
40
|
-
MAX_COLUMNS = 256.freeze
|
41
|
-
MAX_ROWS = 65536.freeze
|
42
|
-
|
43
|
-
# The HSSFWorkbook uses 0 based indexes
|
44
|
-
|
45
|
-
def initialize()
|
46
|
-
@book = nil
|
47
|
-
end
|
48
|
-
|
49
|
-
def open(filename)
|
50
|
-
inp = FileInputStream.new(filename)
|
51
|
-
|
52
|
-
@book = HSSFWorkbook.new(inp)
|
53
|
-
|
54
|
-
sheet(0) # also sets @current_sheet
|
55
|
-
end
|
56
|
-
|
57
|
-
def create(sheet_name)
|
58
|
-
@book = HSSFWorkbook.new()
|
59
|
-
@sheet = @book.createSheet(sheet_name.gsub(" ", ''))
|
60
|
-
date_style = @book.createCellStyle()
|
61
|
-
date_style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"))
|
62
|
-
end
|
63
|
-
|
64
|
-
# Return the current or specified HSSFSheet
|
65
|
-
def sheet(i = nil)
|
66
|
-
@current_sheet = i if i
|
67
|
-
@sheet = @book.getSheetAt(@current_sheet)
|
68
|
-
@sheet
|
69
|
-
end
|
70
|
-
|
71
|
-
def num_rows
|
72
|
-
@sheet.getPhysicalNumberOfRows
|
73
|
-
end
|
74
|
-
|
75
|
-
# Process each row. (type is org.apache.poi.hssf.usermodel.HSSFRow)
|
76
|
-
|
77
|
-
def each_row
|
78
|
-
@sheet.rowIterator.each { |row| yield row }
|
79
|
-
end
|
80
|
-
|
81
|
-
|
82
|
-
# Create new row, bring index in line with POI usage (our 1 is their 0)
|
83
|
-
def create_row(index)
|
84
|
-
@row = @sheet.createRow(index)
|
85
|
-
@row
|
86
|
-
end
|
87
|
-
|
88
|
-
def set_cell(row, column, data)
|
89
|
-
@row = @sheet.getRow(row) || create_row(row)
|
90
|
-
@row.createCell(column).setCellValue(data)
|
91
|
-
end
|
92
|
-
|
93
|
-
def value(row, column)
|
94
|
-
raise TypeError, "Expect row argument of type HSSFRow" unless row.is_a?(Java::OrgApachePoiHssfUsermodel::HSSFRow)
|
95
|
-
#puts "DEBUG - CELL VALUE : #{column} => #{ cell_value( row.getCell(column) ).inspect}"
|
96
|
-
cell_value( row.getCell(column) )
|
97
|
-
end
|
98
|
-
|
99
|
-
def cell_value(cell)
|
100
|
-
return nil unless cell
|
101
|
-
#puts "DEBUG CELL TYPE : #{cell} => #{cell.getCellType().inspect}"
|
102
|
-
case (cell.getCellType())
|
103
|
-
when HSSFCell::CELL_TYPE_FORMULA then return cell.getCellFormula()
|
104
|
-
when HSSFCell::CELL_TYPE_NUMERIC then return cell.getNumericCellValue()
|
105
|
-
when HSSFCell::CELL_TYPE_STRING then return cell.getStringCellValue()
|
106
|
-
when HSSFCell::CELL_TYPE_BOOLEAN then return cell.getBooleanCellValue()
|
107
|
-
when HSSFCell::CELL_TYPE_BLANK then return ""
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def save( filename )
|
112
|
-
File.open( filename, 'w') {|f| f.write(to_s) }
|
113
|
-
end
|
114
|
-
|
115
|
-
|
116
|
-
# The internal representation of a Excel File
|
117
|
-
|
118
|
-
def to_s
|
119
|
-
outs = ByteArrayOutputStream.new
|
120
|
-
@book.write(outs);
|
121
|
-
outs.close();
|
122
|
-
String.from_java_bytes(outs.toByteArray)
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
126
|
-
|
127
|
-
module ExcelHelper
|
128
|
-
require 'java'
|
129
|
-
|
130
|
-
include_class 'org.apache.poi.poifs.filesystem.POIFSFileSystem'
|
131
|
-
include_class 'org.apache.poi.hssf.usermodel.HSSFCell'
|
132
|
-
include_class 'org.apache.poi.hssf.usermodel.HSSFWorkbook'
|
133
|
-
include_class 'org.apache.poi.hssf.usermodel.HSSFCellStyle'
|
134
|
-
include_class 'org.apache.poi.hssf.usermodel.HSSFDataFormat'
|
135
|
-
include_class 'java.io.ByteArrayOutputStream'
|
136
|
-
include_class 'java.util.Date'
|
137
|
-
|
138
|
-
# ActiveRecord Helper - Export model data to XLS file format
|
139
|
-
#
|
140
|
-
def to_xls(items=[])
|
141
|
-
|
142
|
-
@excel = ExcelFile.new(items[0].class.name)
|
143
|
-
|
144
|
-
@excel.create_row(0)
|
145
|
-
|
146
|
-
sheet = @excel.sheet
|
147
|
-
|
148
|
-
# header row
|
149
|
-
if !items.empty?
|
150
|
-
row = sheet.createRow(0)
|
151
|
-
cell_index = 0
|
152
|
-
items[0].class.columns.each do |column|
|
153
|
-
row.createCell(cell_index).setCellValue(column.name)
|
154
|
-
cell_index += 1
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
# value rows
|
159
|
-
row_index = 1
|
160
|
-
items.each do |item|
|
161
|
-
row = sheet.createRow(row_index);
|
162
|
-
|
163
|
-
cell_index = 0
|
164
|
-
item.class.columns.each do |column|
|
165
|
-
cell = row.createCell(cell_index)
|
166
|
-
if column.sql_type =~ /date/ then
|
167
|
-
millis = item.send(column.name).to_f * 1000
|
168
|
-
cell.setCellValue(Date.new(millis))
|
169
|
-
cell.setCellStyle(dateStyle);
|
170
|
-
elsif column.sql_type =~ /int/ then
|
171
|
-
cell.setCellValue(item.send(column.name).to_i)
|
172
|
-
else
|
173
|
-
value = item.send(column.name)
|
174
|
-
cell.setCellValue(item.send(column.name)) unless value.nil?
|
175
|
-
end
|
176
|
-
cell_index += 1
|
177
|
-
end
|
178
|
-
row_index += 1
|
179
|
-
end
|
180
|
-
@excel.to_s
|
181
|
-
end
|
182
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
# Copyright:: (c) Autotelik Media Ltd 2011
|
2
|
-
# Author :: Tom Statter
|
3
|
-
# Date :: Jan 2011
|
4
|
-
# License:: MIT
|
5
|
-
#
|
6
|
-
# JAVA SPECIFIC LOAD
|
7
|
-
require 'java'
|
8
|
-
require 'rubygems'
|
9
|
-
require 'jexcel_file'
|
10
|
-
require 'method_mapper'
|
11
|
-
|
12
|
-
class MethodMapperExcel < MethodMapper
|
13
|
-
|
14
|
-
attr_accessor :excel, :sheet
|
15
|
-
|
16
|
-
# Read the headers from a spreadsheet and map to ActiveRecord members/associations
|
17
|
-
|
18
|
-
def initialize( file_name, klass, sheet_number = 0 )
|
19
|
-
super()
|
20
|
-
|
21
|
-
@excel = JExcelFile.new
|
22
|
-
|
23
|
-
@excel.open(file_name)
|
24
|
-
|
25
|
-
@sheet = @excel.sheet( sheet_number )
|
26
|
-
|
27
|
-
@header_row = @sheet.getRow(0)
|
28
|
-
|
29
|
-
raise "ERROR: No headers found - Check Sheet #{@sheet} is completed sheet and Row 1 contains headers" unless @header_row
|
30
|
-
|
31
|
-
@headers = []
|
32
|
-
(0..JExcelFile::MAX_COLUMNS).each do |i|
|
33
|
-
cell = @header_row.getCell(i)
|
34
|
-
break unless cell
|
35
|
-
@headers << "#{@excel.cell_value(cell).to_s}".strip
|
36
|
-
end
|
37
|
-
|
38
|
-
# Gather list of all possible 'setter' methods on AR class (instance variables and associations)
|
39
|
-
MethodMapperExcel.find_operators( klass )
|
40
|
-
|
41
|
-
# Convert the list of headers into suitable calls on the Active Record class
|
42
|
-
find_method_details( klass, @headers )
|
43
|
-
end
|
44
|
-
end
|
data/lib/engine/method_detail.rb
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
# Copyright:: (c) Autotelik Media Ltd 2011
|
2
|
-
# Author :: Tom Statter
|
3
|
-
# Date :: Aug 2010
|
4
|
-
# License:: MIT
|
5
|
-
#
|
6
|
-
# Details:: This class provides information and access to the individual methods
|
7
|
-
# on an AR model. Populated by, and coupled with MethodMapper,
|
8
|
-
# which does the model interrogation work.
|
9
|
-
# Enables 'loaders' to iterate over the MethodMapper results set,
|
10
|
-
# and assign values to AR object, without knowing anything about that receiving object.
|
11
|
-
#
|
12
|
-
# =>
|
13
|
-
require 'to_b'
|
14
|
-
|
15
|
-
class MethodDetail
|
16
|
-
|
17
|
-
# When looking up an association, try each of these in turn till a match
|
18
|
-
# i.e find_by_name .. find_by_title and so on
|
19
|
-
@@insistent_find_by_list ||= [:id, :name, :title]
|
20
|
-
|
21
|
-
attr_accessor :klass, :name, :assignment, :col_type
|
22
|
-
attr_accessor :has_many, :has_many_class_name, :has_many_class
|
23
|
-
attr_accessor :belongs_to, :belongs_to_class_name, :belongs_to_class
|
24
|
-
|
25
|
-
@@default_values = {}
|
26
|
-
@@prefixes = {}
|
27
|
-
|
28
|
-
|
29
|
-
def initialize(klass, name, assignment, belongs_to, has_many, col_type = nil)
|
30
|
-
@klass, @name, @assignment, @has_many, @belongs_to, @col_type = klass, name, assignment, has_many, belongs_to, col_type
|
31
|
-
|
32
|
-
if(@has_many)
|
33
|
-
begin
|
34
|
-
@has_many_class = Kernel.const_get(@has_many.classify)
|
35
|
-
@has_many_class_name = @has_many.classify
|
36
|
-
rescue
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
if(@belongs_to)
|
41
|
-
begin
|
42
|
-
@belongs_to_class = Kernel.const_get(@belongs_to.classify)
|
43
|
-
@belongs_to_class_name = @belongs_to.classify
|
44
|
-
rescue
|
45
|
-
# TODO - try other forms of the name, set to nil, or bomb out ?
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def assign( record, value )
|
51
|
-
#puts "DEBUG: assign: [#{@name}]"
|
52
|
-
|
53
|
-
data = value
|
54
|
-
|
55
|
-
if(@@default_values[@name])
|
56
|
-
puts "WARNING nil value supplied for [#{@name}] - Using default : [#{@@default_values[@name]}]"
|
57
|
-
data = @@default_values[@name]
|
58
|
-
else
|
59
|
-
puts "WARNING nil value supplied for [#{@name}] - No default"
|
60
|
-
end if(data.nil?)
|
61
|
-
|
62
|
-
data = "#{@@prefixes[@name]}#{data}" if(@@prefixes[@name])
|
63
|
-
|
64
|
-
if( @belongs_to )
|
65
|
-
|
66
|
-
#puts "DEBUG : BELONGS_TO #{@belongs_to} - Lookup #{data} in DB"
|
67
|
-
insistent_belongs_to(record, data)
|
68
|
-
|
69
|
-
elsif( @assignment && @col_type )
|
70
|
-
puts "DEBUG : COl TYPE defined for #{@name} : #{@assignment} => #{data} #{@col_type.inspect}"
|
71
|
-
record.send( @assignment, @col_type.type_cast( data ) )
|
72
|
-
|
73
|
-
elsif( @assignment )
|
74
|
-
puts "DEBUG : No COL TYPE found for #{@name} : #{@assignment} => #{data}"
|
75
|
-
insistent_assignment(record, data)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# Attempt to find the associated object via id, name, title ....
|
80
|
-
def insistent_belongs_to( record, value )
|
81
|
-
|
82
|
-
@@insistent_find_by_list.each do |x|
|
83
|
-
begin
|
84
|
-
item = @belongs_to_class.send( "find_by_#{x}", value)
|
85
|
-
if(item)
|
86
|
-
record.send("#{@belongs_to}=", item)
|
87
|
-
break
|
88
|
-
end
|
89
|
-
rescue => e
|
90
|
-
puts "ERROR: #{e.inspect}"
|
91
|
-
if(x == @@insistent_method_list.last)
|
92
|
-
raise "I'm sorry I have failed to assign [#{value}] to #{@assignment}" unless value.nil?
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
def insistent_assignment( record, value )
|
99
|
-
puts "DEBUG: RECORD CLASS #{record.class}"
|
100
|
-
@@insistent_method_list ||= [:to_s, :to_i, :to_f, :to_b]
|
101
|
-
begin
|
102
|
-
record.send(@assignment, value)
|
103
|
-
rescue => e
|
104
|
-
puts e.inspect
|
105
|
-
@@insistent_method_list.each do |f|
|
106
|
-
begin
|
107
|
-
|
108
|
-
record.send(@assignment, value.send( f) )
|
109
|
-
break
|
110
|
-
rescue => e
|
111
|
-
#puts "DEBUG: insistent_assignment: #{e.inspect}"
|
112
|
-
if f == @@insistent_method_list.last
|
113
|
-
puts "I'm sorry I have failed to assign [#{value}] to #{@assignment}"
|
114
|
-
raise "I'm sorry I have failed to assign [#{value}] to #{@assignment}" unless value.nil?
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
def self.set_default_value( name, value )
|
122
|
-
@@default_values[name] = value
|
123
|
-
end
|
124
|
-
|
125
|
-
def self.default_value(name)
|
126
|
-
@@default_values[name]
|
127
|
-
end
|
128
|
-
|
129
|
-
def self.set_prefix( name, value )
|
130
|
-
@@prefixes[name] = value
|
131
|
-
end
|
132
|
-
|
133
|
-
def self.default_value(name)
|
134
|
-
@@prefixes[name]
|
135
|
-
end
|
136
|
-
|
137
|
-
def pp
|
138
|
-
"#{@name} => #{@assignment} : #{@has_many}"
|
139
|
-
end
|
140
|
-
end
|