datashift 0.13.0 → 0.14.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.
- data/README.markdown +36 -66
- data/VERSION +1 -1
- data/lib/applications/jexcel_file.rb +12 -5
- data/lib/datashift.rb +18 -13
- data/lib/datashift/delimiters.rb +0 -1
- data/lib/{guards.rb → datashift/guards.rb} +0 -0
- data/lib/datashift/method_detail.rb +4 -67
- data/lib/datashift/method_details_manager.rb +18 -6
- data/lib/datashift/method_dictionary.rb +55 -38
- data/lib/datashift/method_mapper.rb +18 -14
- data/lib/datashift/populator.rb +259 -6
- data/lib/exporters/csv_exporter.rb +28 -19
- data/lib/exporters/excel_exporter.rb +18 -5
- data/lib/generators/excel_generator.rb +2 -0
- data/lib/loaders/excel_loader.rb +2 -1
- data/lib/loaders/loader_base.rb +53 -142
- data/lib/loaders/paperclip/attachment_loader.rb +1 -1
- data/lib/loaders/paperclip/datashift_paperclip.rb +51 -44
- data/lib/thor/export.thor +65 -0
- data/lib/thor/generate.thor +68 -4
- data/spec/Gemfile +12 -8
- data/spec/Gemfile.lock +93 -93
- data/spec/csv_exporter_spec.rb +50 -12
- data/spec/excel_exporter_spec.rb +35 -3
- data/spec/excel_loader_spec.rb +9 -7
- data/spec/excel_spec.rb +26 -5
- data/spec/{loader_spec.rb → loader_base_spec.rb} +13 -1
- data/spec/method_dictionary_spec.rb +77 -70
- data/spec/paperclip_loader_spec.rb +1 -1
- data/spec/populator_spec.rb +94 -0
- data/spec/thor_spec.rb +1 -1
- metadata +70 -68
data/spec/excel_exporter_spec.rb
CHANGED
@@ -25,7 +25,6 @@ describe 'Excel Exporter' do
|
|
25
25
|
# handle migration changes or reset of test DB
|
26
26
|
migrate_up
|
27
27
|
|
28
|
-
db_clear() # todo read up about proper transactional fixtures
|
29
28
|
results_clear()
|
30
29
|
|
31
30
|
@klazz = Project
|
@@ -36,6 +35,13 @@ describe 'Excel Exporter' do
|
|
36
35
|
MethodDictionary.clear
|
37
36
|
MethodDictionary.find_operators( @klazz )
|
38
37
|
MethodDictionary.find_operators( @assoc_klazz )
|
38
|
+
|
39
|
+
db_clear() # todo read up about proper transactional fixtures
|
40
|
+
|
41
|
+
Project.create( :value_as_string => 'Value as String', :value_as_boolean => true, :value_as_double => 75.672)
|
42
|
+
Project.create( :value_as_string => 'Another Value as String', :value_as_boolean => false, :value_as_double => 12)
|
43
|
+
|
44
|
+
|
39
45
|
end
|
40
46
|
|
41
47
|
it "should be able to create a new excel exporter" do
|
@@ -44,7 +50,33 @@ describe 'Excel Exporter' do
|
|
44
50
|
generator.should_not be_nil
|
45
51
|
end
|
46
52
|
|
47
|
-
it "should
|
53
|
+
it "should handle bad params to export" do
|
54
|
+
|
55
|
+
expect = result_file('project_first_export_spec.csv')
|
56
|
+
|
57
|
+
exporter = DataShift::ExcelExporter.new( expect )
|
58
|
+
|
59
|
+
expect{ exporter.export(nil) }.not_to raise_error
|
60
|
+
|
61
|
+
expect{ exporter.export([]) }.not_to raise_error
|
62
|
+
|
63
|
+
puts "Can manually check file @ #{expect}"
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should export model object to .xls file" do
|
67
|
+
|
68
|
+
expect = result_file('project_first_export_spec.xls')
|
69
|
+
|
70
|
+
gen = ExcelExporter.new( expect )
|
71
|
+
|
72
|
+
gen.export(Project.all.first)
|
73
|
+
|
74
|
+
File.exists?(expect).should be_true
|
75
|
+
|
76
|
+
puts "Can manually check file @ #{expect}"
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should export collection of model objects to .xls file" do
|
48
80
|
|
49
81
|
expect = result_file('project_export_spec.xls')
|
50
82
|
|
@@ -56,7 +88,7 @@ describe 'Excel Exporter' do
|
|
56
88
|
|
57
89
|
puts "Can manually check file @ #{expect}"
|
58
90
|
end
|
59
|
-
|
91
|
+
|
60
92
|
it "should export a model and associations to .xls file" do
|
61
93
|
|
62
94
|
Project.create( :value_as_string => 'Value as Text', :value_as_boolean => true, :value_as_double => 75.672)
|
data/spec/excel_loader_spec.rb
CHANGED
@@ -28,7 +28,7 @@ describe 'Excel Loader' do
|
|
28
28
|
before(:each) do
|
29
29
|
|
30
30
|
%w{category_001 category_002 category_003 category_004 category_005}.each do |cat|
|
31
|
-
Category.
|
31
|
+
Category.find_or_create_by(reference: cat)
|
32
32
|
end
|
33
33
|
|
34
34
|
|
@@ -136,13 +136,15 @@ describe 'Excel Loader' do
|
|
136
136
|
it "should provide facility to set default values", :focus => true do
|
137
137
|
loader = ExcelLoader.new(Project)
|
138
138
|
|
139
|
-
loader.
|
140
|
-
|
141
|
-
|
139
|
+
populator = loader.populator
|
140
|
+
|
141
|
+
populator.set_default_value('value_as_string', 'some default text' )
|
142
|
+
populator.set_default_value('value_as_double', 45.467 )
|
143
|
+
populator.set_default_value('value_as_boolean', true )
|
142
144
|
|
143
145
|
texpected = Time.now.to_s(:db)
|
144
146
|
|
145
|
-
|
147
|
+
populator.set_default_value('value_as_datetime', texpected )
|
146
148
|
|
147
149
|
#value_as_string Value as Text value as datetime value_as_boolean value_as_double category
|
148
150
|
|
@@ -171,8 +173,8 @@ describe 'Excel Loader' do
|
|
171
173
|
it "should provide facility to set pre and post fix values" do
|
172
174
|
loader = ExcelLoader.new(Project)
|
173
175
|
|
174
|
-
loader.set_prefix('value_as_string', 'myprefix' )
|
175
|
-
loader.set_postfix('value_as_string', 'my post fix' )
|
176
|
+
loader.populator.set_prefix('value_as_string', 'myprefix' )
|
177
|
+
loader.populator.set_postfix('value_as_string', 'my post fix' )
|
176
178
|
|
177
179
|
#value_as_string Value as Text value as datetime value_as_boolean value_as_double category
|
178
180
|
|
data/spec/excel_spec.rb
CHANGED
@@ -39,13 +39,34 @@ describe 'Excel Proxy' do
|
|
39
39
|
sheet2 = @excel.create_worksheet( :name => "underworld")
|
40
40
|
sheet2.name.should == "underworld"
|
41
41
|
end
|
42
|
+
|
43
|
+
it "can sanitize worksheet names as per Excel spec" do
|
44
|
+
|
45
|
+
include ExcelBase
|
46
|
+
extend ExcelBase
|
47
|
+
|
48
|
+
# name.gsub(/[\[\]:\*\/\\\?]/, '
|
49
|
+
|
50
|
+
sanitize_sheet_name("aute?chre").should == "autechre"
|
51
|
+
sanitize_sheet_name("?autechre").should == "autechre"
|
52
|
+
sanitize_sheet_name("aute?chre?").should == "autechre"
|
53
|
+
|
54
|
+
sanitize_sheet_name("daft: ?punk").should == "daft punk"
|
55
|
+
sanitize_sheet_name("guy call[]ed *Gerald").should == "guy called Gerald"
|
56
|
+
|
57
|
+
sanitize_sheet_name("guy called */Gerald").should == "guy called Gerald"
|
58
|
+
end
|
42
59
|
|
43
|
-
|
44
|
-
|
45
|
-
|
60
|
+
# Pending - inject create_worksheet method into Spreadsheet gem
|
61
|
+
if(DataShift::Guards.jruby?)
|
62
|
+
it "ensures name of worksheet sanitized" do
|
46
63
|
|
47
|
-
|
48
|
-
|
64
|
+
sheet = @excel.create_worksheet( :name => "daft: ?punk")
|
65
|
+
sheet.name.should == "daft punk"
|
66
|
+
|
67
|
+
sheet = @excel.create_worksheet( :name => "under[]world")
|
68
|
+
sheet.name.should == "underworld"
|
69
|
+
end
|
49
70
|
end
|
50
71
|
|
51
72
|
it "can create multiple named worksheets" do
|
@@ -9,7 +9,7 @@ require File.dirname(__FILE__) + '/spec_helper'
|
|
9
9
|
|
10
10
|
require 'erb'
|
11
11
|
|
12
|
-
describe '
|
12
|
+
describe 'LoaderBase' do
|
13
13
|
|
14
14
|
include_context "ActiveRecordTestModelsConnected"
|
15
15
|
|
@@ -111,4 +111,16 @@ describe 'Basic Loader' do
|
|
111
111
|
|
112
112
|
end
|
113
113
|
|
114
|
+
it "should be able to mark a load attempt as a failure" do
|
115
|
+
|
116
|
+
failed_count = @loader.failed_count
|
117
|
+
@loader.load_object.new_record?.should be_true
|
118
|
+
|
119
|
+
@loader.load_object.save!
|
120
|
+
|
121
|
+
@loader.failure
|
122
|
+
|
123
|
+
@loader.failed_count.should == failed_count + 1
|
124
|
+
end
|
125
|
+
|
114
126
|
end
|
@@ -13,72 +13,69 @@ require 'method_dictionary'
|
|
13
13
|
|
14
14
|
describe 'Method Dictionary' do
|
15
15
|
|
16
|
-
|
17
16
|
include_context "ActiveRecordTestModelsConnected"
|
18
17
|
|
19
|
-
include DataShift
|
20
|
-
|
21
18
|
before(:each) do
|
22
|
-
MethodDictionary.clear
|
19
|
+
DataShift::MethodDictionary.clear
|
23
20
|
end
|
24
21
|
|
25
22
|
it "should store dictionary for multiple AR models" do
|
26
23
|
|
27
|
-
MethodDictionary.find_operators( Project )
|
28
|
-
MethodDictionary.find_operators( Milestone )
|
24
|
+
DataShift::MethodDictionary.find_operators( Project )
|
25
|
+
DataShift::MethodDictionary.find_operators( Milestone )
|
29
26
|
|
30
|
-
MethodDictionary.assignments.size.should == 2
|
31
|
-
MethodDictionary.has_many.size.should == 2
|
27
|
+
DataShift::MethodDictionary.assignments.size.should == 2
|
28
|
+
DataShift::MethodDictionary.has_many.size.should == 2
|
32
29
|
end
|
33
30
|
|
34
31
|
it "should populate method dictionary for a given AR model" do
|
35
32
|
|
36
|
-
MethodDictionary.find_operators( Project )
|
37
|
-
MethodDictionary.find_operators( Milestone )
|
33
|
+
DataShift::MethodDictionary.find_operators( Project )
|
34
|
+
DataShift::MethodDictionary.find_operators( Milestone )
|
38
35
|
|
39
|
-
MethodDictionary.has_many.should_not be_empty
|
40
|
-
MethodDictionary.has_many[Project].should include('milestones')
|
36
|
+
DataShift::MethodDictionary.has_many.should_not be_empty
|
37
|
+
DataShift::MethodDictionary.has_many[Project].should include('milestones')
|
41
38
|
|
42
|
-
MethodDictionary.assignments.should_not be_empty
|
43
|
-
MethodDictionary.assignments[Project].should include('id')
|
44
|
-
MethodDictionary.assignments[Project].should include('value_as_string')
|
45
|
-
MethodDictionary.assignments[Project].should include('value_as_text')
|
39
|
+
DataShift::MethodDictionary.assignments.should_not be_empty
|
40
|
+
DataShift::MethodDictionary.assignments[Project].should include('id')
|
41
|
+
DataShift::MethodDictionary.assignments[Project].should include('value_as_string')
|
42
|
+
DataShift::MethodDictionary.assignments[Project].should include('value_as_text')
|
46
43
|
|
47
|
-
MethodDictionary.belongs_to.should_not be_empty
|
48
|
-
MethodDictionary.belongs_to[Project].should be_empty
|
44
|
+
DataShift::MethodDictionary.belongs_to.should_not be_empty
|
45
|
+
DataShift::MethodDictionary.belongs_to[Project].should be_empty
|
49
46
|
|
50
47
|
|
51
|
-
MethodDictionary.column_types.should be_is_a(Hash)
|
52
|
-
MethodDictionary.column_types.should_not be_empty
|
53
|
-
MethodDictionary.column_types[Project].size.should == Project.columns.size
|
48
|
+
DataShift::MethodDictionary.column_types.should be_is_a(Hash)
|
49
|
+
DataShift::MethodDictionary.column_types.should_not be_empty
|
50
|
+
DataShift::MethodDictionary.column_types[Project].size.should == Project.columns.size
|
54
51
|
|
55
52
|
|
56
53
|
end
|
57
54
|
|
58
55
|
it "should populate assigment members without the equivalent association names" do
|
59
56
|
|
60
|
-
MethodDictionary.find_operators( Project )
|
57
|
+
DataShift::MethodDictionary.find_operators( Project )
|
61
58
|
|
62
59
|
# we should remove has-many & belongs_to from basic assignment set as they require a DB lookup
|
63
60
|
# or a Model.create call, not a simple assignment
|
64
61
|
|
65
|
-
MethodDictionary.assignments_for(Project).should_not include( MethodDictionary.belongs_to_for(Project) )
|
66
|
-
MethodDictionary.assignments_for(Project).should_not include( MethodDictionary.has_many_for(Project) )
|
62
|
+
DataShift::MethodDictionary.assignments_for(Project).should_not include( DataShift::MethodDictionary.belongs_to_for(Project) )
|
63
|
+
DataShift::MethodDictionary.assignments_for(Project).should_not include( DataShift::MethodDictionary.has_many_for(Project) )
|
67
64
|
end
|
68
65
|
|
69
66
|
|
70
67
|
it "should populate assignment operators for method details for different forms of a column name" do
|
71
68
|
|
72
|
-
MethodDictionary.find_operators( Project )
|
73
|
-
MethodDictionary.find_operators( Milestone )
|
69
|
+
DataShift::MethodDictionary.find_operators( Project )
|
70
|
+
DataShift::MethodDictionary.find_operators( Milestone )
|
74
71
|
|
75
|
-
MethodDictionary.build_method_details( Project )
|
72
|
+
DataShift::MethodDictionary.build_method_details( Project )
|
76
73
|
|
77
74
|
[:value_as_string, 'value_as_string', "VALUE as_STRING", "value as string"].each do |format|
|
78
75
|
|
79
|
-
method_details = MethodDictionary.find_method_detail( Project, format )
|
76
|
+
method_details = DataShift::MethodDictionary.find_method_detail( Project, format )
|
80
77
|
|
81
|
-
method_details.class.should == MethodDetail
|
78
|
+
method_details.class.should == DataShift::MethodDetail
|
82
79
|
|
83
80
|
method_details.operator.should == 'value_as_string'
|
84
81
|
method_details.operator_for(:assignment).should == 'value_as_string'
|
@@ -97,15 +94,15 @@ describe 'Method Dictionary' do
|
|
97
94
|
|
98
95
|
it "should populate column types for assignment operators in method details" do
|
99
96
|
|
100
|
-
MethodDictionary.find_operators( Project )
|
97
|
+
DataShift::MethodDictionary.find_operators( Project )
|
101
98
|
|
102
|
-
MethodDictionary.build_method_details( Project )
|
99
|
+
DataShift::MethodDictionary.build_method_details( Project )
|
103
100
|
|
104
101
|
[:value_as_string, 'value_as_string', "VALUE as_STRING", "value as string"].each do |format|
|
105
102
|
|
106
|
-
method_details = MethodDictionary.find_method_detail( Project, format )
|
103
|
+
method_details = DataShift::MethodDictionary.find_method_detail( Project, format )
|
107
104
|
|
108
|
-
method_details.class.should == MethodDetail
|
105
|
+
method_details.class.should == DataShift::MethodDetail
|
109
106
|
|
110
107
|
method_details.col_type.should_not be_nil
|
111
108
|
method_details.col_type.name.should == 'value_as_string'
|
@@ -117,13 +114,13 @@ describe 'Method Dictionary' do
|
|
117
114
|
|
118
115
|
it "should populate required Class for assignment operators based on column type" do
|
119
116
|
|
120
|
-
MethodDictionary.find_operators( Project )
|
117
|
+
DataShift::MethodDictionary.find_operators( Project )
|
121
118
|
|
122
|
-
MethodDictionary.build_method_details( Project )
|
119
|
+
DataShift::MethodDictionary.build_method_details( Project )
|
123
120
|
|
124
121
|
[:value_as_string, 'value_as_string', "VALUE as_STRING", "value as string"].each do |format|
|
125
122
|
|
126
|
-
method_details = MethodDictionary.find_method_detail( Project, format )
|
123
|
+
method_details = DataShift::MethodDictionary.find_method_detail( Project, format )
|
127
124
|
|
128
125
|
method_details.operator_class_name.should == 'String'
|
129
126
|
method_details.operator_class.should be_is_a(Class)
|
@@ -134,16 +131,16 @@ describe 'Method Dictionary' do
|
|
134
131
|
|
135
132
|
it "should populate belongs_to operator for method details for different forms of a column name" do
|
136
133
|
|
137
|
-
MethodDictionary.find_operators( Project )
|
138
|
-
MethodDictionary.find_operators( Milestone )
|
134
|
+
DataShift::MethodDictionary.find_operators( Project )
|
135
|
+
DataShift::MethodDictionary.find_operators( Milestone )
|
139
136
|
|
140
|
-
MethodDictionary.build_method_details( Project )
|
141
|
-
MethodDictionary.build_method_details( Milestone )
|
137
|
+
DataShift::MethodDictionary.build_method_details( Project )
|
138
|
+
DataShift::MethodDictionary.build_method_details( Milestone )
|
142
139
|
|
143
140
|
# milestone.project = project.id
|
144
141
|
[:project, 'project', "PROJECT", "prOJECt"].each do |format|
|
145
142
|
|
146
|
-
method_details = MethodDictionary.find_method_detail( Milestone, format )
|
143
|
+
method_details = DataShift::MethodDictionary.find_method_detail( Milestone, format )
|
147
144
|
|
148
145
|
method_details.should_not be_nil
|
149
146
|
|
@@ -158,17 +155,17 @@ describe 'Method Dictionary' do
|
|
158
155
|
|
159
156
|
it "should populate required Class for belongs_to operator method details" do
|
160
157
|
|
161
|
-
MethodDictionary.find_operators( LoaderRelease )
|
162
|
-
MethodDictionary.find_operators( LongAndComplexTableLinkedToVersion )
|
158
|
+
DataShift::MethodDictionary.find_operators( LoaderRelease )
|
159
|
+
DataShift::MethodDictionary.find_operators( LongAndComplexTableLinkedToVersion )
|
163
160
|
|
164
|
-
MethodDictionary.build_method_details( LoaderRelease )
|
165
|
-
MethodDictionary.build_method_details( LongAndComplexTableLinkedToVersion )
|
161
|
+
DataShift::MethodDictionary.build_method_details( LoaderRelease )
|
162
|
+
DataShift::MethodDictionary.build_method_details( LongAndComplexTableLinkedToVersion )
|
166
163
|
|
167
164
|
|
168
165
|
# release.project = project.id
|
169
166
|
[:project, 'project', "PROJECT", "prOJECt"].each do |format|
|
170
167
|
|
171
|
-
method_details = MethodDictionary.find_method_detail( LoaderRelease, format )
|
168
|
+
method_details = DataShift::MethodDictionary.find_method_detail( LoaderRelease, format )
|
172
169
|
|
173
170
|
method_details.operator_class_name.should == 'Project'
|
174
171
|
method_details.operator_class.should == Project
|
@@ -176,7 +173,7 @@ describe 'Method Dictionary' do
|
|
176
173
|
|
177
174
|
|
178
175
|
[:version, "Version", "verSION"].each do |format|
|
179
|
-
method_details = MethodDictionary.find_method_detail( LongAndComplexTableLinkedToVersion, format )
|
176
|
+
method_details = DataShift::MethodDictionary.find_method_detail( LongAndComplexTableLinkedToVersion, format )
|
180
177
|
|
181
178
|
method_details.operator_type.should == :belongs_to
|
182
179
|
|
@@ -187,13 +184,13 @@ describe 'Method Dictionary' do
|
|
187
184
|
|
188
185
|
it "should populate required Class for has_one operator method details" do
|
189
186
|
|
190
|
-
MethodDictionary.find_operators( Version )
|
191
|
-
MethodDictionary.build_method_details( Version )
|
187
|
+
DataShift::MethodDictionary.find_operators( Version )
|
188
|
+
DataShift::MethodDictionary.build_method_details( Version )
|
192
189
|
|
193
190
|
# version.long_and_complex_table_linked_to_version = LongAndComplexTableLinkedToVersion.create()
|
194
191
|
|
195
192
|
[:long_and_complex_table_linked_to_version, 'LongAndComplexTableLinkedToVersion', "Long And Complex_Table_Linked To Version", "Long_And_Complex_Table_Linked_To_Version"].each do |format|
|
196
|
-
method_details = MethodDictionary.find_method_detail( Version, format )
|
193
|
+
method_details = DataShift::MethodDictionary.find_method_detail( Version, format )
|
197
194
|
|
198
195
|
method_details.should_not be_nil
|
199
196
|
|
@@ -207,29 +204,29 @@ describe 'Method Dictionary' do
|
|
207
204
|
end
|
208
205
|
|
209
206
|
it "should return false on for?(klass) if find_operators hasn't been called for klass" do
|
210
|
-
MethodDictionary.clear
|
211
|
-
MethodDictionary::for?(Project).should == false
|
212
|
-
MethodDictionary::find_operators(Project)
|
213
|
-
MethodDictionary::for?(Project).should == true
|
207
|
+
DataShift::MethodDictionary.clear
|
208
|
+
DataShift::MethodDictionary::for?(Project).should == false
|
209
|
+
DataShift::MethodDictionary::find_operators(Project)
|
210
|
+
DataShift::MethodDictionary::for?(Project).should == true
|
214
211
|
|
215
212
|
end
|
216
213
|
|
217
214
|
it "should return false on for?(klass) if find_operators hasn't been called for klass" do
|
218
|
-
MethodDictionary.clear
|
219
|
-
MethodDictionary::for?(Project).should == false
|
215
|
+
DataShift::MethodDictionary.clear
|
216
|
+
DataShift::MethodDictionary::for?(Project).should == false
|
220
217
|
end
|
221
218
|
|
222
219
|
it "should find has_many operator for method details" do
|
223
220
|
|
224
|
-
MethodDictionary.find_operators( Project )
|
221
|
+
DataShift::MethodDictionary.find_operators( Project )
|
225
222
|
|
226
|
-
MethodDictionary.build_method_details( Project )
|
223
|
+
DataShift::MethodDictionary.build_method_details( Project )
|
227
224
|
|
228
225
|
[:milestones, "Mile Stones", 'mileSTONES', 'MileStones'].each do |format|
|
229
226
|
|
230
|
-
method_details = MethodDictionary.find_method_detail( Project, format )
|
227
|
+
method_details = DataShift::MethodDictionary.find_method_detail( Project, format )
|
231
228
|
|
232
|
-
method_details.class.should == MethodDetail
|
229
|
+
method_details.class.should == DataShift::MethodDetail
|
233
230
|
|
234
231
|
result = 'milestones'
|
235
232
|
method_details.operator.should == result
|
@@ -244,10 +241,10 @@ describe 'Method Dictionary' do
|
|
244
241
|
|
245
242
|
it "should return nil when non existent column name" do
|
246
243
|
|
247
|
-
MethodDictionary.find_operators( Project )
|
244
|
+
DataShift::MethodDictionary.find_operators( Project )
|
248
245
|
|
249
246
|
["On sale", 'on_sale'].each do |format|
|
250
|
-
detail = MethodDictionary.find_method_detail( Project, format )
|
247
|
+
detail = DataShift::MethodDictionary.find_method_detail( Project, format )
|
251
248
|
|
252
249
|
detail.should be_nil
|
253
250
|
end
|
@@ -259,22 +256,32 @@ describe 'Method Dictionary' do
|
|
259
256
|
end
|
260
257
|
|
261
258
|
it "should not by default map setter methods" do
|
262
|
-
MethodDictionary.find_operators( Milestone )
|
259
|
+
DataShift::MethodDictionary.find_operators( Milestone )
|
260
|
+
|
261
|
+
DataShift::MethodDictionary.assignments[Milestone].should_not include('title')
|
262
|
+
end
|
263
|
+
|
264
|
+
it "should support inclusion of setter methods" do
|
265
|
+
|
266
|
+
Milestone.new.respond_to?('title=').should == true
|
267
|
+
Milestone.new.respond_to?('milestone_setter=').should == true
|
263
268
|
|
264
|
-
MethodDictionary.
|
269
|
+
DataShift::MethodDictionary.setters( Milestone ).should include('title=') # delegate
|
270
|
+
DataShift::MethodDictionary.setters( Milestone ).should include('milestone_setter=') # normal method
|
265
271
|
end
|
266
272
|
|
267
273
|
it "should support reload and inclusion of setter methods" do
|
268
274
|
|
269
|
-
MethodDictionary.find_operators( Project )
|
270
|
-
MethodDictionary.find_operators( Milestone )
|
275
|
+
DataShift::MethodDictionary.find_operators( Project )
|
276
|
+
DataShift::MethodDictionary.find_operators( Milestone )
|
271
277
|
|
272
|
-
MethodDictionary.assignments[Milestone].should_not include('title')
|
273
|
-
|
274
|
-
MethodDictionary.find_operators( Milestone, :reload => true, :instance_methods => true )
|
278
|
+
DataShift::MethodDictionary.assignments[Milestone].should_not include('title')
|
279
|
+
|
280
|
+
DataShift::MethodDictionary.find_operators( Milestone, :reload => true, :instance_methods => true )
|
275
281
|
|
276
282
|
# Milestone delegates :title to Project
|
277
|
-
MethodDictionary.assignments[Milestone].should include('title')
|
283
|
+
DataShift::MethodDictionary.assignments[Milestone].should include('title')
|
284
|
+
DataShift::MethodDictionary.assignments[Milestone].should include('milestone_setter')
|
278
285
|
end
|
279
286
|
|
280
287
|
end
|