lazy_observers 0.0.1

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/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ rvm:
2
+ - ree
3
+ - 1.9.2
4
+ - 1.9.3
data/Appraisals ADDED
@@ -0,0 +1,12 @@
1
+ appraise "rails-2.3" do
2
+ gem "activerecord", "~> 2.3.6", :require => "active_record"
3
+ end
4
+
5
+ appraise "rails-3.0" do
6
+ gem "activerecord", "~> 3.0.15", :require => "active_record"
7
+ end
8
+
9
+ appraise "rails-3.2" do
10
+ gem "activerecord", "~> 3.2.6", :require => "active_record"
11
+ end
12
+
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+ gemspec
3
+
4
+ gem 'rake'
5
+ gem 'rspec', '~>2'
6
+ gem 'sqlite3'
7
+ gem 'appraisal'
data/Gemfile.lock ADDED
@@ -0,0 +1,49 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ lazy_observers (0.0.1)
5
+ activerecord
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ activemodel (3.2.6)
11
+ activesupport (= 3.2.6)
12
+ builder (~> 3.0.0)
13
+ activerecord (3.2.6)
14
+ activemodel (= 3.2.6)
15
+ activesupport (= 3.2.6)
16
+ arel (~> 3.0.2)
17
+ tzinfo (~> 0.3.29)
18
+ activesupport (3.2.6)
19
+ i18n (~> 0.6)
20
+ multi_json (~> 1.0)
21
+ appraisal (0.4.1)
22
+ bundler
23
+ rake
24
+ arel (3.0.2)
25
+ builder (3.0.0)
26
+ diff-lcs (1.1.3)
27
+ i18n (0.6.0)
28
+ multi_json (1.3.6)
29
+ rake (0.9.2)
30
+ rspec (2.6.0)
31
+ rspec-core (~> 2.6.0)
32
+ rspec-expectations (~> 2.6.0)
33
+ rspec-mocks (~> 2.6.0)
34
+ rspec-core (2.6.4)
35
+ rspec-expectations (2.6.0)
36
+ diff-lcs (~> 1.1.2)
37
+ rspec-mocks (2.6.0)
38
+ sqlite3 (1.3.6)
39
+ tzinfo (0.3.33)
40
+
41
+ PLATFORMS
42
+ ruby
43
+
44
+ DEPENDENCIES
45
+ appraisal
46
+ lazy_observers!
47
+ rake
48
+ rspec (~> 2)
49
+ sqlite3
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'appraisal'
3
+
4
+ task :spec do
5
+ sh "rspec spec/"
6
+ end
7
+
8
+ # extracted from https://github.com/grosser/project_template
9
+ rule /^version:bump:.*/ do |t|
10
+ sh "git status | grep 'nothing to commit'" # ensure we are not dirty
11
+ index = ['major', 'minor','patch'].index(t.name.split(':').last)
12
+ file = 'lib/lazy_observers/version.rb'
13
+
14
+ version_file = File.read(file)
15
+ old_version, *version_parts = version_file.match(/(\d+)\.(\d+)\.(\d+)/).to_a
16
+ version_parts[index] = version_parts[index].to_i + 1
17
+ version_parts[2] = 0 if index < 2 # remove patch for minor
18
+ version_parts[1] = 0 if index < 1 # remove minor for major
19
+ new_version = version_parts * '.'
20
+ File.open(file,'w'){|f| f.write(version_file.sub(old_version, new_version)) }
21
+
22
+ sh "bundle && git add #{file} Gemfile.lock && git commit -m 'bump version to #{new_version}'"
23
+ end
24
+
25
+ task :default do
26
+ sh "bundle exec rake appraisal:install && bundle exec rake appraisal spec"
27
+ end
data/Readme.md ADDED
@@ -0,0 +1,52 @@
1
+ Make Activerecord Observers not load observed models -> faster/safer environment boot.
2
+ - faster tests + console
3
+ - able to boot environment without/with empty/with old database
4
+
5
+ Works on rails 2.3 + 3.0 (not 3.2)
6
+
7
+ Install
8
+ =======
9
+
10
+ gem install lazy_observers
11
+
12
+ Usage
13
+ =====
14
+
15
+ class FooObserver < ActiveRecord::Observer
16
+ lazy_observe "User", "Foo::Bar"
17
+
18
+ ...
19
+ end
20
+
21
+ ### Extend models from gems after they are loaded
22
+
23
+ LazyObservers.on_load("Arturo::Feature") do |klass|
24
+ Arturo::Feature.class_eval do
25
+ ... funky hacks ...
26
+ end
27
+ end
28
+
29
+ ### Catch models that are loaded in application startup.
30
+
31
+ LazyObservers.debug_active_record_loading
32
+
33
+ `script/console` or `rails c`
34
+
35
+ ### Verify you did not misspell
36
+ Loads all classes registered via observers, to make sure you did not misspell</br>
37
+ (negates the effect of lazyness, so only use for debugging)
38
+
39
+
40
+ LazyObservers.check_classes
41
+
42
+
43
+ # TODO
44
+ - Rails 3.0: does not work for models that are loaded before the observers
45
+ - Rails 3.2: blows up
46
+
47
+ Author
48
+ ======
49
+ [Michael Grosser](http://grosser.it)<br/>
50
+ michael@grosser.it<br/>
51
+ License: MIT<br/>
52
+ [![Build Status](https://secure.travis-ci.org/grosser/lazy_observers.png)](http://travis-ci.org/grosser/lazy_observers)
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source :rubygems
4
+
5
+ gem "rake"
6
+ gem "rspec", "~>2"
7
+ gem "sqlite3"
8
+ gem "appraisal"
9
+ gem "activerecord", "~> 2.3.6", :require=>"active_record"
10
+
11
+ gemspec :path=>"../"
@@ -0,0 +1,37 @@
1
+ PATH
2
+ remote: /Users/mgrosser/code/tools/lazy_observers
3
+ specs:
4
+ lazy_observers (0.0.0)
5
+ activerecord
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ activerecord (2.3.14)
11
+ activesupport (= 2.3.14)
12
+ activesupport (2.3.14)
13
+ appraisal (0.4.1)
14
+ bundler
15
+ rake
16
+ diff-lcs (1.1.3)
17
+ rake (0.9.2.2)
18
+ rspec (2.10.0)
19
+ rspec-core (~> 2.10.0)
20
+ rspec-expectations (~> 2.10.0)
21
+ rspec-mocks (~> 2.10.0)
22
+ rspec-core (2.10.1)
23
+ rspec-expectations (2.10.0)
24
+ diff-lcs (~> 1.1.3)
25
+ rspec-mocks (2.10.1)
26
+ sqlite3 (1.3.6)
27
+
28
+ PLATFORMS
29
+ ruby
30
+
31
+ DEPENDENCIES
32
+ activerecord (~> 2.3.6)
33
+ appraisal
34
+ lazy_observers!
35
+ rake
36
+ rspec (~> 2)
37
+ sqlite3
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source :rubygems
4
+
5
+ gem "rake"
6
+ gem "rspec", "~>2"
7
+ gem "sqlite3"
8
+ gem "appraisal"
9
+ gem "activerecord", "~> 3.0.15", :require=>"active_record"
10
+
11
+ gemspec :path=>"../"
@@ -0,0 +1,48 @@
1
+ PATH
2
+ remote: /Users/mgrosser/code/tools/lazy_observers
3
+ specs:
4
+ lazy_observers (0.0.0)
5
+ activerecord
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ activemodel (3.0.15)
11
+ activesupport (= 3.0.15)
12
+ builder (~> 2.1.2)
13
+ i18n (~> 0.5.0)
14
+ activerecord (3.0.15)
15
+ activemodel (= 3.0.15)
16
+ activesupport (= 3.0.15)
17
+ arel (~> 2.0.10)
18
+ tzinfo (~> 0.3.23)
19
+ activesupport (3.0.15)
20
+ appraisal (0.4.1)
21
+ bundler
22
+ rake
23
+ arel (2.0.10)
24
+ builder (2.1.2)
25
+ diff-lcs (1.1.3)
26
+ i18n (0.5.0)
27
+ rake (0.9.2.2)
28
+ rspec (2.10.0)
29
+ rspec-core (~> 2.10.0)
30
+ rspec-expectations (~> 2.10.0)
31
+ rspec-mocks (~> 2.10.0)
32
+ rspec-core (2.10.1)
33
+ rspec-expectations (2.10.0)
34
+ diff-lcs (~> 1.1.3)
35
+ rspec-mocks (2.10.1)
36
+ sqlite3 (1.3.6)
37
+ tzinfo (0.3.33)
38
+
39
+ PLATFORMS
40
+ ruby
41
+
42
+ DEPENDENCIES
43
+ activerecord (~> 3.0.15)
44
+ appraisal
45
+ lazy_observers!
46
+ rake
47
+ rspec (~> 2)
48
+ sqlite3
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source :rubygems
4
+
5
+ gem "rake"
6
+ gem "rspec", "~>2"
7
+ gem "sqlite3"
8
+ gem "appraisal"
9
+ gem "activerecord", "~> 3.2.6", :require=>"active_record"
10
+
11
+ gemspec :path=>"../"
@@ -0,0 +1,50 @@
1
+ PATH
2
+ remote: /Users/mgrosser/code/tools/lazy_observers
3
+ specs:
4
+ lazy_observers (0.0.0)
5
+ activerecord
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ activemodel (3.2.6)
11
+ activesupport (= 3.2.6)
12
+ builder (~> 3.0.0)
13
+ activerecord (3.2.6)
14
+ activemodel (= 3.2.6)
15
+ activesupport (= 3.2.6)
16
+ arel (~> 3.0.2)
17
+ tzinfo (~> 0.3.29)
18
+ activesupport (3.2.6)
19
+ i18n (~> 0.6)
20
+ multi_json (~> 1.0)
21
+ appraisal (0.4.1)
22
+ bundler
23
+ rake
24
+ arel (3.0.2)
25
+ builder (3.0.0)
26
+ diff-lcs (1.1.3)
27
+ i18n (0.6.0)
28
+ multi_json (1.3.6)
29
+ rake (0.9.2.2)
30
+ rspec (2.10.0)
31
+ rspec-core (~> 2.10.0)
32
+ rspec-expectations (~> 2.10.0)
33
+ rspec-mocks (~> 2.10.0)
34
+ rspec-core (2.10.1)
35
+ rspec-expectations (2.10.0)
36
+ diff-lcs (~> 1.1.3)
37
+ rspec-mocks (2.10.1)
38
+ sqlite3 (1.3.6)
39
+ tzinfo (0.3.33)
40
+
41
+ PLATFORMS
42
+ ruby
43
+
44
+ DEPENDENCIES
45
+ activerecord (~> 3.2.6)
46
+ appraisal
47
+ lazy_observers!
48
+ rake
49
+ rspec (~> 2)
50
+ sqlite3
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
2
+ name = "lazy_observers"
3
+ require "#{name}/version"
4
+
5
+ Gem::Specification.new name, LazyObservers::VERSION do |s|
6
+ s.summary = "Makes Activerecord Observers lazy, do not load model on startup and only listen once a model got loaded."
7
+ s.authors = ["Michael Grosser"]
8
+ s.email = "michael@grosser.it"
9
+ s.homepage = "http://github.com/grosser/#{name}"
10
+ s.files = `git ls-files`.split("\n")
11
+ s.license = 'MIT'
12
+ s.add_runtime_dependency "activerecord"
13
+ end
@@ -0,0 +1,83 @@
1
+ require 'lazy_observers/version'
2
+ require 'active_record'
3
+ require 'active_record/observer'
4
+
5
+ module LazyObservers
6
+ def self.register_observed(klass)
7
+ class_name = klass.name
8
+ loaded << [klass, class_name]
9
+ observers.each do |observer, observed|
10
+ connect!(observer, klass) if observed.include?(class_name)
11
+ end
12
+ (on_loads[class_name]||[]).each{|block| block.call(klass) }
13
+ end
14
+
15
+ def self.register_observer(observer, classes)
16
+ observers[observer] = classes
17
+ loaded.each do |klass, name|
18
+ connect!(observer, klass) if classes.include?(name)
19
+ end
20
+ end
21
+
22
+ def self.on_load(class_name, &block)
23
+ on_loads[class_name] ||= []
24
+ on_loads[class_name] << block
25
+ end
26
+
27
+ # to check you did not specify a class that does not exist
28
+ def self.check_classes
29
+ observers.values.flatten.uniq.each { |klass| klass.constantize }
30
+ end
31
+
32
+ def self.debug_active_record_loading
33
+ ActiveRecord::Base.send(:extend, LazyObservers::InheritedDebugger)
34
+ end
35
+
36
+ private
37
+
38
+ def self.on_loads
39
+ @on_loads ||= {}
40
+ end
41
+
42
+ def self.observers
43
+ @observers ||= {}
44
+ end
45
+
46
+ def self.loaded
47
+ @loaded ||= []
48
+ end
49
+
50
+ def self.connect!(observer, klass)
51
+ observer.instance.observed_class_inherited(klass)
52
+ end
53
+ end
54
+
55
+ ActiveRecord::Base.send(:subclasses).each{|klass| LazyObservers.register_observed(klass) }
56
+
57
+ ActiveRecord::Observer.class_eval do
58
+ def self.lazy_observe(*classes)
59
+ raise "pass class names, not classes or symbols!" unless classes.all?{|klass| klass.is_a?(String) }
60
+ define_method(:observed_classes) { Set.new }
61
+ LazyObservers.register_observer self, classes
62
+ end
63
+ end
64
+
65
+ module LazyObservers
66
+ module InheritedNotifier
67
+ def inherited(subclass)
68
+ LazyObservers.register_observed subclass
69
+ super
70
+ end
71
+ end
72
+
73
+ module InheritedDebugger
74
+ def inherited(subclass)
75
+ puts subclass
76
+ puts caller
77
+ puts "-" * 72
78
+ super
79
+ end
80
+ end
81
+ end
82
+
83
+ ActiveRecord::Base.send(:extend, LazyObservers::InheritedNotifier)
@@ -0,0 +1,3 @@
1
+ module LazyObservers
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,5 @@
1
+ class Group < ActiveRecord::Base
2
+ end
3
+
4
+ class InheritedGroup < Group
5
+ end
@@ -0,0 +1,2 @@
1
+ class InheritedMovie < Movie
2
+ end
data/spec/app/movie.rb ADDED
@@ -0,0 +1,2 @@
1
+ class Movie < ActiveRecord::Base
2
+ end
@@ -0,0 +1,19 @@
1
+ class MovieObserver < ActiveRecord::Observer
2
+ lazy_observe "Movie"
3
+
4
+ def called
5
+ @called ||= []
6
+ end
7
+
8
+ def after_update(*args)
9
+ @called << [:after_update, args]
10
+ end
11
+
12
+ def after_save(*args)
13
+ @called << [:after_update, args]
14
+ end
15
+
16
+ def after_create(*args)
17
+ @called << [:after_create, args]
18
+ end
19
+ end
data/spec/app/post.rb ADDED
@@ -0,0 +1,2 @@
1
+ class Post < ActiveRecord::Base
2
+ end
@@ -0,0 +1,19 @@
1
+ class PostObserver < ActiveRecord::Observer
2
+ lazy_observe "Post"
3
+
4
+ def called
5
+ @called ||= []
6
+ end
7
+
8
+ def after_update(*args)
9
+ @called << [:after_update, args]
10
+ end
11
+
12
+ def after_save(*args)
13
+ @called << [:after_update, args]
14
+ end
15
+
16
+ def after_create(*args)
17
+ @called << [:after_create, args]
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ class ProductObserver < ActiveRecord::Observer
2
+ lazy_observe "Product"
3
+
4
+ def called
5
+ @called ||= []
6
+ end
7
+
8
+ def after_update(*args)
9
+ @called << [:after_update, args]
10
+ end
11
+
12
+ def after_save(*args)
13
+ @called << [:after_update, args]
14
+ end
15
+
16
+ def after_create(*args)
17
+ @called << [:after_create, args]
18
+ end
19
+ end
@@ -0,0 +1,5 @@
1
+ class Product < ActiveRecord::Base
2
+ end
3
+
4
+ class InheritedProduct < Product
5
+ end
@@ -0,0 +1,3 @@
1
+ class StupidObserver < ActiveRecord::Observer
2
+ lazy_observe Movie
3
+ end
@@ -0,0 +1,3 @@
1
+ class UserObserver < ActiveRecord::Observer
2
+ lazy_observe "User"
3
+ end
data/spec/database.rb ADDED
@@ -0,0 +1,29 @@
1
+ require "active_record"
2
+
3
+ ActiveRecord::Base.establish_connection(
4
+ :adapter => "sqlite3",
5
+ :database => ":memory:",
6
+ )
7
+
8
+ # create tables
9
+ ActiveRecord::Schema.define(:version => 1) do
10
+ create_table :users do |t|
11
+ t.string :name
12
+ end
13
+
14
+ create_table :posts do |t|
15
+ t.string :title
16
+ end
17
+
18
+ create_table :movies do |t|
19
+ t.string :title
20
+ end
21
+
22
+ create_table :products do |t|
23
+ t.string :title
24
+ end
25
+
26
+ create_table :groups do |t|
27
+ t.string :name
28
+ end
29
+ end
@@ -0,0 +1,72 @@
1
+ require "spec_helper"
2
+ require File.expand_path("../app/user_observer", __FILE__)
3
+ require File.expand_path("../app/post_observer", __FILE__)
4
+ require File.expand_path("../app/product_observer", __FILE__)
5
+
6
+ describe LazyObservers do
7
+ it "has a VERSION" do
8
+ LazyObservers::VERSION.should =~ /^[\.\da-z]+$/
9
+ end
10
+
11
+ it "does not load models when being loaded" do
12
+ defined?(UserObserver).should == "constant"
13
+ UserObserver.instance
14
+ defined?(User).should == nil
15
+ end
16
+
17
+ it "makes the observer observe nothing" do
18
+ PostObserver.instance.observed_classes.should == Set.new
19
+ end
20
+
21
+ it "listens to events after models are loaded" do
22
+ PostObserver.instance.called.should == []
23
+ defined?(Post).should == nil
24
+ require File.expand_path("../app/post", __FILE__)
25
+ post = Post.create!
26
+ PostObserver.instance.called.should == [[:after_create, [post]], [:after_update, [post]]]
27
+ end
28
+
29
+ it "listens to events if models are loaded before observer" do
30
+ defined?(MovieObserver).should == nil
31
+ require File.expand_path("../app/movie_observer", __FILE__)
32
+ MovieObserver.instance.called.should == []
33
+ movie = Movie.create!
34
+ MovieObserver.instance.called.should == [[:after_create, [movie]], [:after_update, [movie]]]
35
+ end
36
+
37
+ it "observes inherited classes" do
38
+ defined?(Product).should == nil
39
+ defined?(InheritedProduct).should == nil
40
+ require File.expand_path("../app/products", __FILE__)
41
+
42
+ # no duplicates (sets are weirdly nested :/ )
43
+ ProductObserver.instance.observed_classes.map{|x| x.is_a?(Set) ? x.to_a : x }.flatten.map{|x| x.is_a?(Set) ? x.to_a : x }.flatten.should == [Product, InheritedProduct]
44
+
45
+ # for inherited
46
+ ProductObserver.instance.called.should == []
47
+ product = InheritedProduct.create!
48
+ ProductObserver.instance.called.should == [[:after_create, [product]], [:after_update, [product]]]
49
+
50
+ ProductObserver.instance.called.clear
51
+
52
+ # for normal
53
+ ProductObserver.instance.called.should == []
54
+ product = Product.create!
55
+ ProductObserver.instance.called.should == [[:after_create, [product]], [:after_update, [product]]]
56
+ end
57
+
58
+ it "blows up when you pass it a class, since this means you did not understand the concept" do
59
+ expect{
60
+ require File.expand_path("../app/stupid_observer", __FILE__)
61
+ }.to raise_error(/not classes or symbols/i)
62
+ end
63
+
64
+ it "calls callback when matching class is loaded" do
65
+ loaded = []
66
+ LazyObservers.on_load("Group") do |klass|
67
+ loaded << klass
68
+ end
69
+ require File.expand_path("../app/groups", __FILE__)
70
+ loaded.should == [Group]
71
+ end
72
+ end
@@ -0,0 +1,10 @@
1
+ require File.expand_path("../database", __FILE__)
2
+
3
+ $LOAD_PATH.unshift 'lib'
4
+
5
+ # movie is used to test that things loaded before lazy_observers also gets observed
6
+ raise if defined?(Movie)
7
+ raise if defined?(LazyObservers.loaded)
8
+ require File.expand_path("../app/movie", __FILE__)
9
+ require "lazy_observers"
10
+ raise unless defined?(LazyObservers.loaded)
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lazy_observers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michael Grosser
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description:
31
+ email: michael@grosser.it
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - .travis.yml
37
+ - Appraisals
38
+ - Gemfile
39
+ - Gemfile.lock
40
+ - Rakefile
41
+ - Readme.md
42
+ - gemfiles/rails-2.3.gemfile
43
+ - gemfiles/rails-2.3.gemfile.lock
44
+ - gemfiles/rails-3.0.gemfile
45
+ - gemfiles/rails-3.0.gemfile.lock
46
+ - gemfiles/rails-3.2.gemfile
47
+ - gemfiles/rails-3.2.gemfile.lock
48
+ - lazy_observers.gemspec
49
+ - lib/lazy_observers.rb
50
+ - lib/lazy_observers/version.rb
51
+ - spec/app/groups.rb
52
+ - spec/app/inherited_movie.rb
53
+ - spec/app/movie.rb
54
+ - spec/app/movie_observer.rb
55
+ - spec/app/post.rb
56
+ - spec/app/post_observer.rb
57
+ - spec/app/product_observer.rb
58
+ - spec/app/products.rb
59
+ - spec/app/stupid_observer.rb
60
+ - spec/app/user_observer.rb
61
+ - spec/database.rb
62
+ - spec/lazy_observers_spec.rb
63
+ - spec/spec_helper.rb
64
+ homepage: http://github.com/grosser/lazy_observers
65
+ licenses:
66
+ - MIT
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ segments:
78
+ - 0
79
+ hash: 3828034774033645633
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ segments:
87
+ - 0
88
+ hash: 3828034774033645633
89
+ requirements: []
90
+ rubyforge_project:
91
+ rubygems_version: 1.8.24
92
+ signing_key:
93
+ specification_version: 3
94
+ summary: Makes Activerecord Observers lazy, do not load model on startup and only
95
+ listen once a model got loaded.
96
+ test_files: []