deferring 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.
@@ -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: