ocelot 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -56,6 +56,7 @@ module Ocelot
56
56
  else
57
57
  logger.error "Could not write #{target}.#{assoc} adding #{val.class}: #{e.message}"
58
58
  end
59
+ logger.debug e.backtrace
59
60
  end
60
61
  end
61
62
 
@@ -135,8 +135,12 @@ module Ocelot
135
135
  @p = p
136
136
  end
137
137
 
138
+ def inspect_shallow
139
+ @inspect = Rules::INSPECT_SHALLOW
140
+ end
141
+
138
142
  def inspect
139
- @inspect = true
143
+ @inspect = Rules::INSPECT_DEEP
140
144
  end
141
145
 
142
146
  def persist(obj)
@@ -144,7 +148,7 @@ module Ocelot
144
148
  end
145
149
 
146
150
  def save(obj, *args)
147
- @inspect = false
151
+ @inspect = Rules::INSPECT_NONE
148
152
  args = [obj, *args]
149
153
  instance_exec(*args, &@p)
150
154
  return @inspect
@@ -98,32 +98,55 @@ module Ocelot
98
98
  logger.warn "Unrecognised type #{obj.class}"
99
99
  @unrecognised << obj.class
100
100
  end
101
+ Rules::INSPECT_NONE
101
102
  end
102
103
 
103
- def go
104
+ def setup_rules_and_filters
104
105
  default_rule = Rules::DefaultRule.new
105
106
  default_filter = Rules::Filter.new
106
107
 
107
108
  @rules = Hash.new
108
109
  @filters = Hash.new
109
- @saved = Set.new
110
- @inspected = Set.new
111
110
 
112
- array_rule = ArrayRule.new
113
-
114
111
  @classes.each { |c| @rules[c] = default_rule; @filters[c] = default_filter }
112
+
115
113
  @rules.merge! @extra_rules
116
114
  @filters.merge! @extra_filters
117
- seeds = @seeds.collect { |o| [o, "script seed"] }
118
115
 
116
+ [@rules, @filters].each do |p|
117
+ class << p
118
+ alias :old_index :[]
119
+ def [](clazz)
120
+ c = clazz
121
+ while c
122
+ return old_index(c) if old_index(c)
123
+ c = c.superclass
124
+ end
125
+ end
126
+ end
127
+ end
128
+
129
+ debugger
130
+ end
131
+
132
+ def go
133
+ setup_rules_and_filters
134
+
135
+ @saved = Set.new
136
+ @inspected = Set.new
137
+
138
+ array_rule = ArrayRule.new
139
+
140
+ seeds = @seeds.collect { |o| [o, Rules::INSPECT_DEEP, "script seed"] }
119
141
  Graph::Traverser.run(seeds) do |objs, queue|
120
- obj, calller = *objs
142
+ obj, inspect_level, calller = *objs
121
143
 
122
144
  unless in? @saved, obj
123
- @inspected << obj unless process_rule(:obj => obj, :caller => calller)
145
+ inspect_level = process_rule(:obj => obj, :caller => calller)
146
+ @inspected << obj unless inspect_level > Rules::INSPECT_NONE
124
147
  end
125
148
 
126
- unless in? @inspected, obj
149
+ unless in? @inspected, obj and inspect_level > Rules::INSPECT_NONE
127
150
  obj.class.reflect_on_all_associations.each do |assoc|
128
151
  safely obj do
129
152
  connection.use_source = true
@@ -134,16 +157,20 @@ module Ocelot
134
157
  # simple has_one (A->B handling), save B and conditionally inspect
135
158
  if !assoc.collection?
136
159
  unless in? @saved, value
137
- process_rule(:obj => value, :caller => calller) and (queue << [value, obj_to_s(obj, assoc)])
160
+ child_inspect_level = process_rule(:obj => value, :caller => calller)
161
+ if child_inspect_level > Rules::INSPECT_NONE
162
+ queue << [value, child_inspect_level, obj_to_s(obj, assoc)]
163
+ end
138
164
  end
165
+
139
166
  # more complicated has many (A-B* and A-mapobj-B*), saving and inspecting each child
140
167
  # monkeypatching the array_rule must yield B and whether to inspect it
141
168
  # be very very very careful, as it handles saving objects whie yielding results
142
- else
143
- array_rule.save(obj, value, assoc, self) do |child, inspect|
169
+ elsif inspect_level > Rules::INSPECT_SHALLOW
170
+ array_rule.save(obj, value, assoc, self) do |child, child_inspect_level|
144
171
  @saved << child
145
- if inspect
146
- queue << [child, obj_to_s(obj, assoc)]
172
+ if child_inspect_level > Rules::INSPECT_NONE
173
+ queue << [child, child_inspect_level, obj_to_s(obj, assoc)]
147
174
  else
148
175
  @inspected << child
149
176
  end
@@ -164,8 +191,8 @@ module Ocelot
164
191
  c.process_filter(:obj => obj, :collection => array, :name => assoc.name).each do |val|
165
192
  unless in? c.saved, val
166
193
  use_source_db!
167
- inspect = c.process_rule(:obj => val, :caller => obj_to_s(obj))
168
- yield val, inspect
194
+ inspect_level = c.process_rule(:obj => val, :caller => obj_to_s(obj))
195
+ yield val, inspect_level
169
196
  end
170
197
 
171
198
  use_target_db!
@@ -1,5 +1,9 @@
1
1
  module Ocelot
2
2
  module Rules
3
+ INSPECT_NONE = 1
4
+ INSPECT_SHALLOW = 2
5
+ INSPECT_DEEP = 3
6
+
3
7
  class Filter < Ocelot::Base
4
8
  def filter(value)
5
9
  true
@@ -46,7 +50,7 @@ module Ocelot
46
50
  obj.id = id
47
51
  remove_callbacks(obj)
48
52
  save_to_db(obj)
49
- true
53
+ Rules::INSPECT_DEEP
50
54
  end
51
55
  end
52
56
  end
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "ocelot"
6
- s.version = "0.0.3"
6
+ s.version = "0.0.4"
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["spencer p"]
9
9
  s.email = ["exussum@gmail.com"]
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: ocelot
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.3
5
+ version: 0.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - spencer p
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-21 00:00:00 -04:00
13
+ date: 2011-05-03 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies: []
16
16