garden 0.0.1 → 0.0.2.pre
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/lib/garden/mediators.rb +77 -32
- data/lib/garden/version.rb +1 -1
- metadata +7 -7
data/lib/garden/mediators.rb
CHANGED
@@ -5,23 +5,33 @@ module Garden
|
|
5
5
|
def self.parse_table_name namish
|
6
6
|
namish.parameterize.underscore
|
7
7
|
end
|
8
|
-
def self.get_instance
|
8
|
+
def self.get_instance table, id
|
9
9
|
|
10
|
+
model_name = table.is_a?(ActiveRecord::Reflection::AssociationReflection) ? table.class_name : table.to_s.classify
|
11
|
+
|
10
12
|
# puts "Find #{id} from #{table_name}"
|
11
13
|
# puts id.class.to_s
|
12
14
|
|
13
15
|
begin
|
14
|
-
clazz =
|
16
|
+
clazz = model_name.constantize
|
15
17
|
raise "Class #{clazz.to_s} is not an ActiveRecord subclass." unless clazz.new.is_a?(ActiveRecord::Base)
|
16
|
-
instance = clazz.find
|
18
|
+
instance = clazz.find(id.to_s)
|
19
|
+
|
20
|
+
# puts "!! Created clazz #{clazz.to_s} from model_name. No problem. #{instance.class.to_s} #{instance.to_param}"
|
21
|
+
|
22
|
+
return instance
|
23
|
+
rescue ActiveRecord::RecordNotFound => e
|
24
|
+
|
25
|
+
instance = clazz.find_by_name(id.to_s) if instance.nil? && clazz.respond_to?(:find_by_name)
|
26
|
+
# puts "++Find #{clazz.to_s} by title: #{id}" if instance.nil? && clazz.respond_to?(:find_by_title)
|
27
|
+
instance = clazz.find_by_title(id.to_s) if instance.nil? && clazz.respond_to?(:find_by_title)
|
28
|
+
# puts "++#{instance}" if instance
|
17
29
|
return instance
|
18
30
|
rescue Exception => e
|
19
|
-
puts "Could not find #{id} from table #{
|
31
|
+
puts "Could not find #{id} from table #{model_name}: #{e.message}"
|
20
32
|
return nil
|
21
33
|
end
|
22
34
|
end
|
23
|
-
|
24
|
-
|
25
35
|
|
26
36
|
def initialize namish
|
27
37
|
|
@@ -45,31 +55,34 @@ module Garden
|
|
45
55
|
|
46
56
|
def parse_headers array
|
47
57
|
@headers = array.map { |header| header.to_s.parameterize.underscore }
|
48
|
-
@relationships = []
|
49
|
-
|
50
|
-
@headers.each do |header|
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
|
56
|
-
def relationships
|
57
|
-
@relationships
|
58
|
+
# @relationships = []
|
59
|
+
#
|
60
|
+
# @headers.each do |header|
|
61
|
+
# @relationships.push header if @clazz.reflections.keys.include?(header.to_sym)
|
62
|
+
# end
|
58
63
|
end
|
59
64
|
|
65
|
+
# def relationships
|
66
|
+
# @relationships
|
67
|
+
# end
|
68
|
+
#
|
60
69
|
def create_instance attributes
|
61
|
-
relationships = @relationships
|
70
|
+
# relationships = @relationships
|
62
71
|
|
63
|
-
|
64
|
-
attributes = parse_row_relationships attributes, relationships
|
72
|
+
all_keys = attributes.keys
|
65
73
|
|
66
74
|
instance = @clazz.new
|
75
|
+
parse_row_relationships instance, attributes#, relationships
|
67
76
|
|
68
|
-
|
69
|
-
attributes.each_key do |key|
|
70
|
-
rejected[key] = attributes.delete(key) if !instance.attributes.include?(key.to_s) && !relationships.include?(key.to_s)
|
71
|
-
end
|
77
|
+
# puts "A: #{attributes.keys}"
|
72
78
|
|
79
|
+
# rejected = {}
|
80
|
+
# attributes.each_key do |key|
|
81
|
+
# rejected[key] = attributes.delete(key) if !instance.attributes.include?(key.to_s)# && !relationships.include?(key.to_s)
|
82
|
+
# end
|
83
|
+
|
84
|
+
|
85
|
+
attributes.delete_if do |key, value| !instance.attributes.include?(key.to_s) end
|
73
86
|
instance.attributes = attributes
|
74
87
|
|
75
88
|
# instance.id = rejected[:id] if rejected.key?(:id)
|
@@ -86,21 +99,53 @@ module Garden
|
|
86
99
|
puts "Invalid instance."
|
87
100
|
puts "#{@name}:"
|
88
101
|
puts " - Valid attributes: #{attributes.keys}"
|
89
|
-
puts " -
|
90
|
-
puts " -
|
102
|
+
puts " - Excel sheet keys: #{all_keys}"
|
103
|
+
# puts " - Invalid attributes: #{rejected.keys}"
|
104
|
+
# puts " - Association attributes: #{relationships}"
|
91
105
|
puts " - #{instance.errors}"
|
92
106
|
end
|
93
107
|
end
|
94
108
|
|
95
|
-
def parse_row_relationships
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
hash
|
109
|
+
def parse_row_relationships instance, hash#, relationships
|
110
|
+
@clazz.reflections.each_value do |r|
|
111
|
+
next unless hash.has_key?(r.name)
|
112
|
+
# Remove the value from the hash.
|
113
|
+
value = hash.delete(r.name.to_sym)
|
114
|
+
case r.macro
|
115
|
+
when :has_many
|
116
|
+
parse_has_many(instance, r, value)
|
117
|
+
when :belongs_to
|
118
|
+
parse_belongs_to(instance, r, value)
|
119
|
+
end
|
100
120
|
end
|
101
|
-
|
121
|
+
|
122
|
+
# relationships.each do |r|
|
123
|
+
# # puts "Parsing row relationship: #{hash[r.to_sym]}"
|
124
|
+
# instance = get_instance r, hash[r.to_sym]
|
125
|
+
# hash[r.to_sym] = instance
|
126
|
+
# end
|
127
|
+
# hash
|
128
|
+
end
|
129
|
+
|
130
|
+
|
131
|
+
def parse_has_many instance, r, value
|
132
|
+
# puts " // Parsing #{r.name}, #{value}"
|
133
|
+
ids = value.split(/\s*,\s*/)
|
134
|
+
ids.each do |id|
|
135
|
+
related_instance = Table.get_instance r.class_name, id
|
136
|
+
# puts ">> Creating a has-many relationship. #{id}, #{related_instance}"
|
137
|
+
unless related_instance.nil?
|
138
|
+
instance.send(r.name.to_sym) << related_instance
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def parse_belongs_to instance, r, value
|
144
|
+
ri = Table.get_instance(r, value)
|
145
|
+
instance.attributes = { r.name.to_sym => ri }
|
146
|
+
|
147
|
+
# puts "Parsing Belongs_To. #{instance.class} #{instance.to_param} --- #{r.name.to_sym} --- #{ri.class} #{ri.to_param}"
|
102
148
|
end
|
103
|
-
|
104
149
|
|
105
150
|
end
|
106
151
|
end
|
data/lib/garden/version.rb
CHANGED
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: garden
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.2.pre
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- amoslanka
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-08-
|
12
|
+
date: 2011-08-29 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: spreadsheet
|
16
|
-
requirement: &
|
16
|
+
requirement: &70239804122580 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70239804122580
|
25
25
|
description: ! 'Allows you to organize your seeds in different formats. Typical seeds.rb,
|
26
26
|
yaml fixtures, and a variety of spreadsheet formats. '
|
27
27
|
email:
|
@@ -54,9 +54,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
54
54
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
55
|
none: false
|
56
56
|
requirements:
|
57
|
-
- - ! '
|
57
|
+
- - ! '>'
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version:
|
59
|
+
version: 1.3.1
|
60
60
|
requirements: []
|
61
61
|
rubyforge_project: garden
|
62
62
|
rubygems_version: 1.8.6
|