once-ler 0.0.12 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -58,9 +58,9 @@ once-ler adds two new `before`/`after` scopes, `:record` and `:reset`, in
58
58
  case you need to implement additional logic. `:record` runs in
59
59
  conjunction with once-ler's recording phase (the implicit `before :all`).
60
60
  `:reset` runs in conjunction with its cleanup phase (database rollback,
61
- implicit `after :all`). As oppose to `:all`/`:context` hooks, these ones
61
+ implicit `after :all`). As opposed to `:all`/`:context` hooks, these ones
62
62
  are inherited down, and will run before/after any nested once-ler setup/
63
- teardown.`
63
+ teardown.
64
64
 
65
65
  They can be used globally, or in a particular group. For example:
66
66
 
@@ -98,6 +98,21 @@ module Onceler
98
98
  superclass.onceler
99
99
  end
100
100
 
101
+ # Set this if you have multiple (or different) conns you will be
102
+ # once-ler'ing. Can either be an enumerable, or a proc that returns
103
+ # one. Note that if given a proc, it will only be called once (the
104
+ # first time it's needed) and cached after that.
105
+ #
106
+ # context "Foo" do
107
+ # self.onceler_connections = -> { [Foo.connection] }
108
+ # ...
109
+ attr_writer :onceler_connections
110
+ def onceler_connections
111
+ @onceler_connections ||= [ActiveRecord::Base.connection]
112
+ @onceler_connections = instance_eval(&@onceler_connections) if @onceler_connections.respond_to?(:call)
113
+ @onceler_connections
114
+ end
115
+
101
116
  private
102
117
 
103
118
  def add_onceler_hooks!
@@ -70,9 +70,10 @@ module Onceler
70
70
  # if a nested once block updates an inherited object's associations,
71
71
  # we want to know about it
72
72
  def __associations_equal?(obj1, obj2)
73
- cache1 = obj1.instance_variable_get(:@association_cache)
74
- cache2 = obj2.instance_variable_get(:@association_cache)
75
- cache1.all? { |k, v| __values_equal?(v.target, cache2[k].target) }
73
+ cache1 = obj1.association_cache
74
+ cache2 = obj2.association_cache
75
+ cache1.size == cache2.size &&
76
+ cache1.all? { |k, v| cache2.key?(k) && __values_equal?(v.target, cache2[k].target) }
76
77
  end
77
78
 
78
79
  def __data(inherit = false)
@@ -116,22 +116,20 @@ module Onceler
116
116
  end
117
117
  end
118
118
 
119
- # TODO: configurable transaction fu (say, if you have multiple
120
- # conns)
121
- def transaction_classes
122
- [ActiveRecord::Base]
119
+ def transactional_connections
120
+ @group_class.onceler_connections
123
121
  end
124
122
 
125
123
  def begin_transactions!
126
124
  Onceler.open_transactions += 1
127
- transaction_classes.each do |klass|
128
- begin_transaction(klass.connection)
125
+ transactional_connections.each do |connection|
126
+ begin_transaction(connection)
129
127
  end
130
128
  end
131
129
 
132
130
  def rollback_transactions!
133
- transaction_classes.each do |klass|
134
- rollback_transaction(klass.connection)
131
+ transactional_connections.each do |connection|
132
+ rollback_transaction(connection)
135
133
  end
136
134
  ensure
137
135
  Onceler.open_transactions -= 1
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: once-ler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.13
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-07-04 00:00:00.000000000 Z
12
+ date: 2014-07-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord