deferring 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,26 @@
1
+ require 'support/active_record'
2
+ require 'deferring'
3
+ require 'support/models'
4
+ require 'support/rails_versions'
5
+
6
+ RSpec.configure do |config|
7
+ config.treat_symbols_as_metadata_keys_with_true_values = true
8
+ config.run_all_when_everything_filtered = true
9
+ config.filter_run :focus
10
+
11
+ # Run specs in random order to surface order dependencies. If you find an
12
+ # order dependency and want to debug it, you can fix the order by providing
13
+ # the seed, which is printed after each run.
14
+ # --seed 1234
15
+ config.order = 'random'
16
+
17
+ # Rollback all the database changes after each spec, poor man's
18
+ # DatabaseCleaner :-)
19
+ config.around do |example|
20
+ ActiveRecord::Base.transaction do
21
+ example.run
22
+ raise ActiveRecord::Rollback
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,28 @@
1
+ require 'active_support/all'
2
+ require 'active_record'
3
+
4
+ ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
5
+
6
+ ActiveRecord::Schema.define version: 0 do
7
+ create_table :people do |t|
8
+ t.string :name
9
+ t.timestamps
10
+ end
11
+
12
+ create_table :people_teams, id: false do |t|
13
+ t.integer :person_id
14
+ t.integer :team_id
15
+ end
16
+
17
+ create_table :teams do |t|
18
+ t.string :name
19
+ t.timestamps
20
+ end
21
+
22
+ create_table :issues do |t|
23
+ t.string :subject
24
+ t.integer :person_id
25
+ t.timestamps
26
+ end
27
+ end
28
+ ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + '/debug.log')
@@ -0,0 +1,67 @@
1
+ # encoding: UTF-8
2
+
3
+ class Person < ActiveRecord::Base
4
+
5
+ deferred_has_and_belongs_to_many :teams, before_add: :add_team,
6
+ after_add: :added_team
7
+ set_callback :deferred_team_remove, :before, :before_removing_team
8
+ set_callback :deferred_team_remove, :after, :after_removing_team
9
+
10
+ deferred_accepts_nested_attributes_for :teams, allow_destroy: true
11
+
12
+ deferred_has_many :issues
13
+ set_callback :deferred_issue_remove, :before, :before_removing_issue
14
+ set_callback :deferred_issue_remove, :after, :after_removing_issue
15
+
16
+ validates_presence_of :name
17
+
18
+ def audit_log
19
+ @audit_log ||= []
20
+ end
21
+
22
+ def log(audit_line)
23
+ audit_log << audit_line
24
+ audit_log
25
+ end
26
+
27
+ def add_team(team)
28
+ log("Before adding team #{team.id}")
29
+ end
30
+
31
+ def added_team(team)
32
+ log("After adding team #{team.id}")
33
+ end
34
+
35
+ def before_removing_team
36
+ log("Before removing team #{@deferred_team_remove.id}")
37
+ end
38
+
39
+ def after_removing_team
40
+ log("After removing team #{@deferred_team_remove.id}")
41
+ end
42
+
43
+ def before_adding_issue
44
+ log("Before removing issue #{@deferred_issue_add.id}")
45
+ end
46
+
47
+ def after_adding_issue
48
+ log("After removing issue #{@deferred_issue_add.id}")
49
+ end
50
+ end
51
+
52
+ class Team < ActiveRecord::Base
53
+ has_and_belongs_to_many :people
54
+
55
+ validates :name, presence: true
56
+ validate :no_more_than_two_people_per_team
57
+
58
+ def no_more_than_two_people_per_team
59
+ if people.length > 2
60
+ errors.add(:people, "A maximum of two persons per team is allowed")
61
+ end
62
+ end
63
+ end
64
+
65
+ class Issue < ActiveRecord::Base
66
+ belongs_to :person
67
+ end
@@ -0,0 +1,13 @@
1
+ def rails30
2
+ ActiveRecord::VERSION::MAJOR == 3 &&
3
+ ActiveRecord::VERSION::MINOR == 0
4
+ end
5
+
6
+ def rails32
7
+ ActiveRecord::VERSION::MAJOR == 3 &&
8
+ ActiveRecord::VERSION::MINOR == 2
9
+ end
10
+
11
+ def rails4
12
+ ActiveRecord::VERSION::MAJOR == 4
13
+ end
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: deferring
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Robin Roestenburg
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-05-27 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: '3.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: '3.0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: bundler
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '1.3'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '1.3'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: sqlite3
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: appraisal
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description: ! "\n The Deferring gem makes it possible to defer saving ActiveRecord\n
111
+ \ associations until the parent object is saved.\n "
112
+ email:
113
+ - robin@roestenburg.io
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - .gitignore
119
+ - .rspec
120
+ - Appraisals
121
+ - Gemfile
122
+ - LICENSE.txt
123
+ - README.md
124
+ - Rakefile
125
+ - deferring.gemspec
126
+ - gemfiles/rails_30.gemfile
127
+ - gemfiles/rails_30.gemfile.lock
128
+ - gemfiles/rails_32.gemfile
129
+ - gemfiles/rails_32.gemfile.lock
130
+ - gemfiles/rails_4.gemfile
131
+ - gemfiles/rails_4.gemfile.lock
132
+ - gemfiles/rails_40.gemfile
133
+ - gemfiles/rails_40.gemfile.lock
134
+ - gemfiles/rails_41.gemfile
135
+ - gemfiles/rails_41.gemfile.lock
136
+ - lib/deferring.rb
137
+ - lib/deferring/deferred_association.rb
138
+ - lib/deferring/version.rb
139
+ - spec/lib/deferring_spec.rb
140
+ - spec/spec_helper.rb
141
+ - spec/support/active_record.rb
142
+ - spec/support/models.rb
143
+ - spec/support/rails_versions.rb
144
+ homepage: http://github.com/robinroestenburg/delay_many
145
+ licenses:
146
+ - MIT
147
+ post_install_message:
148
+ rdoc_options: []
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ required_rubygems_version: !ruby/object:Gem::Requirement
158
+ none: false
159
+ requirements:
160
+ - - ! '>='
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ requirements: []
164
+ rubyforge_project:
165
+ rubygems_version: 1.8.23
166
+ signing_key:
167
+ specification_version: 3
168
+ summary: Defer saving ActiveRecord associations until parent is saved
169
+ test_files:
170
+ - spec/lib/deferring_spec.rb
171
+ - spec/spec_helper.rb
172
+ - spec/support/active_record.rb
173
+ - spec/support/models.rb
174
+ - spec/support/rails_versions.rb
175
+ has_rdoc: