with_model 1.2.1 → 1.2.2
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.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/.travis.yml +28 -10
- data/CHANGELOG.md +18 -13
- data/Gemfile +17 -3
- data/LICENSE +1 -1
- data/README.md +5 -5
- data/{Rakefile → Rakefile.rb} +0 -0
- data/lib/with_model/model.rb +15 -7
- data/lib/with_model/table.rb +15 -2
- data/lib/with_model/version.rb +1 -1
- data/spec/active_record_behaviors_spec.rb +1 -1
- data/spec/with_model_spec.rb +36 -30
- metadata +4 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e51eac83567f4ff6d4024540c3cb5f19af36d64
|
4
|
+
data.tar.gz: fd75b1167e99cdd310195b67a72bd50b9160dbbf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc55b658c3f4fc470c31d2326a9b3efafa0948a0206d098cba84f1d796e3157e39940e48f509574a6b72b27331b3e4d820481aa60558baefa3e36f8d44a4d889
|
7
|
+
data.tar.gz: b041ee9cfb97ab592330e4a0b3ea75ee06248188c7bca52332e9b8ca9c217e87dcd201d1fa72f1ec82975ad16f01c1e6c14966bc0baadd3f47abad91e326d2c4
|
data/.rspec
CHANGED
data/.travis.yml
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
language: ruby
|
2
|
+
sudo: false
|
2
3
|
|
3
4
|
rvm:
|
4
|
-
- "1
|
5
|
-
- "2.
|
6
|
-
- "2.1"
|
5
|
+
- "2.3.1"
|
6
|
+
- "2.2.5"
|
7
|
+
- "2.1.10"
|
8
|
+
- "2.0.0-p648"
|
9
|
+
- "1.9.3-p551"
|
7
10
|
- jruby-19mode
|
8
11
|
- rbx-2
|
9
12
|
|
@@ -12,20 +15,35 @@ install:
|
|
12
15
|
|
13
16
|
env:
|
14
17
|
- ACTIVE_RECORD_BRANCH="master"
|
15
|
-
- ACTIVE_RECORD_VERSION="~> 4.2.0"
|
16
|
-
- ACTIVE_RECORD_VERSION="~> 4.1.0"
|
17
|
-
- ACTIVE_RECORD_VERSION="~> 4.0.0"
|
18
|
-
- ACTIVE_RECORD_VERSION="~> 3.2.0"
|
19
|
-
- ACTIVE_RECORD_VERSION="~> 3.1.0"
|
20
18
|
- ACTIVE_RECORD_VERSION="~> 3.0.0"
|
19
|
+
- ACTIVE_RECORD_VERSION="~> 3.1.0"
|
20
|
+
- ACTIVE_RECORD_VERSION="~> 3.2.0"
|
21
|
+
- ACTIVE_RECORD_VERSION="~> 4.0.0"
|
22
|
+
- ACTIVE_RECORD_VERSION="~> 4.1.0"
|
23
|
+
- ACTIVE_RECORD_VERSION="~> 4.2.0"
|
24
|
+
- ACTIVE_RECORD_VERSION="~> 5.0.0"
|
21
25
|
|
22
26
|
matrix:
|
23
27
|
allow_failures:
|
24
28
|
- env: ACTIVE_RECORD_BRANCH="master"
|
25
29
|
exclude:
|
26
30
|
- env: ACTIVE_RECORD_BRANCH="master"
|
27
|
-
rvm: "1.9"
|
31
|
+
rvm: "1.9.3-p551"
|
28
32
|
- env: ACTIVE_RECORD_BRANCH="master"
|
29
|
-
rvm: "2.0"
|
33
|
+
rvm: "2.0.0-p648"
|
34
|
+
- env: ACTIVE_RECORD_BRANCH="master"
|
35
|
+
rvm: "2.1.10"
|
36
|
+
- env: ACTIVE_RECORD_BRANCH="master"
|
37
|
+
rvm: jruby-19mode
|
30
38
|
- env: ACTIVE_RECORD_BRANCH="master"
|
39
|
+
rvm: rbx-2
|
40
|
+
- env: ACTIVE_RECORD_VERSION="~> 5.0.0"
|
41
|
+
rvm: "1.9.3-p551"
|
42
|
+
- env: ACTIVE_RECORD_VERSION="~> 5.0.0"
|
43
|
+
rvm: "2.0.0-p648"
|
44
|
+
- env: ACTIVE_RECORD_VERSION="~> 5.0.0"
|
45
|
+
rvm: "2.1.10"
|
46
|
+
- env: ACTIVE_RECORD_VERSION="~> 5.0.0"
|
31
47
|
rvm: jruby-19mode
|
48
|
+
- env: ACTIVE_RECORD_VERSION="~> 5.0.0"
|
49
|
+
rvm: rbx-2
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
### 1.2.2
|
2
|
+
|
3
|
+
- Fix ActiveRecord 5 deprecation warning
|
4
|
+
- Options passed to `with_model` are validated to prevent accidental misuse of API
|
5
|
+
- Improve thread-safety by making table names unique to process and thread ID, instead of just process ID
|
6
|
+
|
7
|
+
### 1.2.1
|
8
|
+
|
9
|
+
- Support ActiveRecord 4.2 (no code change, only dependency requirement bump)
|
10
|
+
|
1
11
|
### 1.2.0
|
2
12
|
|
3
13
|
- Allow specifying scope for before/after blocks (Miks Miķelsons)
|
@@ -33,22 +43,20 @@
|
|
33
43
|
|
34
44
|
### 0.2.6
|
35
45
|
|
36
|
-
-
|
46
|
+
- ActiveRecord 3.2 compatible. (Steven Harman / Brent Wheeldon)
|
37
47
|
|
38
48
|
### 0.2.5
|
39
49
|
|
40
|
-
- Clear
|
41
|
-
- pollution.
|
50
|
+
- Clear ActiveRecord 3.x associations class cache between specs to clean up test pollution.
|
42
51
|
|
43
52
|
### 0.2.4
|
44
53
|
|
45
54
|
- Active Record 3.1 compatible.
|
46
|
-
- Fix bug where column information was being cached incorrectly by
|
47
|
-
- Record.
|
55
|
+
- Fix bug where column information was being cached incorrectly by ActiveRecord.
|
48
56
|
|
49
57
|
### 0.2.3
|
50
58
|
|
51
|
-
- Create a new class each run to prevent test pollution. (
|
59
|
+
- Create a new class each run to prevent test pollution. (Andrew Marshall)
|
52
60
|
- Use :UpperCase in examples.
|
53
61
|
|
54
62
|
### 0.2.2
|
@@ -57,22 +65,19 @@
|
|
57
65
|
|
58
66
|
### 0.2.1
|
59
67
|
|
60
|
-
- Fix a bug when the with_model name contains capital letters. Now you can
|
61
|
-
- safely make calls like `with_model :BlogPost`
|
68
|
+
- Fix a bug when the with_model name contains capital letters. Now you can safely make calls like `with_model :BlogPost`
|
62
69
|
|
63
70
|
### 0.2
|
64
71
|
|
65
|
-
- Remove the buggy attr_accessor method for accessing with_model classes. Now
|
66
|
-
- there is only the constant available in the example group.
|
72
|
+
- Remove the buggy `attr_accessor` method for accessing with_model classes. Now there is only the constant available in the example group.
|
67
73
|
|
68
74
|
### 0.1.5
|
69
75
|
|
70
|
-
- WithModel::Base is now marked as an abstract_class
|
71
|
-
- belongs_to work properly.
|
76
|
+
- `WithModel::Base` is now marked as an `abstract_class,` which makes polymorphic `belongs_to` work properly.
|
72
77
|
|
73
78
|
### 0.1.4
|
74
79
|
|
75
|
-
- Add ability to pass arguments to create_table
|
80
|
+
- Add ability to pass arguments to `create_table`.
|
76
81
|
|
77
82
|
### 0.1.2
|
78
83
|
|
data/Gemfile
CHANGED
@@ -2,8 +2,22 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
gemspec
|
4
4
|
|
5
|
-
gem 'activerecord', :git => 'https://github.com/rails/rails.git', :branch => ENV['ACTIVE_RECORD_BRANCH'] if ENV['ACTIVE_RECORD_BRANCH']
|
6
|
-
gem 'activerecord', ENV['ACTIVE_RECORD_VERSION'] if ENV['ACTIVE_RECORD_VERSION']
|
7
5
|
gem 'activerecord-jdbcsqlite3-adapter', :platforms => :jruby
|
8
6
|
gem 'coveralls', :require => false, :platforms => :mri_20
|
9
|
-
gem '
|
7
|
+
gem 'test-unit', :require => 'test/unit'
|
8
|
+
|
9
|
+
if ar_branch = ENV['ACTIVE_RECORD_BRANCH']
|
10
|
+
gem 'activerecord', :git => 'https://github.com/rails/rails.git', :branch => ENV['ACTIVE_RECORD_BRANCH']
|
11
|
+
gem 'arel', :git => 'https://github.com/rails/arel.git' if ar_branch == 'master'
|
12
|
+
end
|
13
|
+
|
14
|
+
if ENV['ACTIVE_RECORD_VERSION']
|
15
|
+
gem 'activerecord', ENV['ACTIVE_RECORD_VERSION']
|
16
|
+
end
|
17
|
+
|
18
|
+
case RUBY_ENGINE
|
19
|
+
when 'ruby'
|
20
|
+
gem 'sqlite3', '>= 1.3.10', :platforms => :ruby
|
21
|
+
when 'rbx'
|
22
|
+
gem 'sqlite3', '1.3.8', :platforms => :ruby
|
23
|
+
end
|
data/LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2010-
|
1
|
+
Copyright (c) 2010-2016 Case Commons, Inc. <http://casecommons.org>
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
4
|
of this software and associated documentation files (the "Software"), to deal
|
data/README.md
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# [with_model](https://github.com/Casecommons/with_model)
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/with_model)
|
3
4
|
[](https://travis-ci.org/Casecommons/with_model)
|
4
5
|
[](https://codeclimate.com/github/Casecommons/with_model)
|
5
6
|
[](https://coveralls.io/r/Casecommons/with_model)
|
6
|
-
[](https://rubygems.org/gems/with_model)
|
7
7
|
|
8
8
|
`with_model` dynamically builds an ActiveRecord model (with table) before each test in a group and destroys it afterwards.
|
9
9
|
|
@@ -165,9 +165,9 @@ end
|
|
165
165
|
|
166
166
|
## Requirements
|
167
167
|
|
168
|
-
- Ruby 1.9.3
|
168
|
+
- Ruby 1.9.3, 2.x
|
169
169
|
- RSpec or minitest/spec
|
170
|
-
- ActiveRecord 3.
|
170
|
+
- ActiveRecord 3.x, 4.x (for ActiveRecord 2, use with_model 0.2.x)
|
171
171
|
|
172
172
|
## Versioning
|
173
173
|
|
@@ -175,5 +175,5 @@ As of version 1.0.0, with_model uses [Semantic Versioning 2.0.0](http://semver.o
|
|
175
175
|
|
176
176
|
## License
|
177
177
|
|
178
|
-
Copyright © 2010–
|
179
|
-
Licensed under the MIT license,
|
178
|
+
Copyright © 2010–2016 [Case Commons, Inc](http://casecommons.org).
|
179
|
+
Licensed under the MIT license, see [LICENSE](/LICENSE) file.
|
data/{Rakefile → Rakefile.rb}
RENAMED
File without changes
|
data/lib/with_model/model.rb
CHANGED
@@ -6,29 +6,29 @@ require 'with_model/table'
|
|
6
6
|
|
7
7
|
module WithModel
|
8
8
|
class Model
|
9
|
+
OPTIONS = [:superclass].freeze
|
10
|
+
private_constant :OPTIONS
|
11
|
+
|
9
12
|
attr_writer :model_block, :table_block, :table_options
|
10
13
|
|
11
14
|
def initialize name, options = {}
|
15
|
+
validate_options!(options)
|
12
16
|
@name = name.to_sym
|
13
|
-
@options = options
|
14
17
|
@model_block = nil
|
15
18
|
@table_block = nil
|
16
19
|
@table_options = {}
|
20
|
+
@superclass = options.fetch(:superclass, ActiveRecord::Base)
|
17
21
|
end
|
18
22
|
|
19
23
|
def create
|
20
24
|
table.create
|
21
|
-
@model = Class.new(superclass) do
|
25
|
+
@model = Class.new(@superclass) do
|
22
26
|
extend WithModel::Methods
|
23
27
|
end
|
24
28
|
stubber.stub_const @model
|
25
29
|
setup_model
|
26
30
|
end
|
27
31
|
|
28
|
-
def superclass
|
29
|
-
@options.fetch(:superclass, ActiveRecord::Base)
|
30
|
-
end
|
31
|
-
|
32
32
|
def destroy
|
33
33
|
stubber.unstub_const
|
34
34
|
remove_from_superclass_descendants
|
@@ -68,7 +68,15 @@ module WithModel
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def table_name
|
71
|
-
"
|
71
|
+
uid = "#$$_#{Thread.current.object_id}"
|
72
|
+
"with_model_#{@name.to_s.tableize}_#{uid}".freeze
|
73
|
+
end
|
74
|
+
|
75
|
+
def validate_options!(options)
|
76
|
+
unknown_options = options.keys - OPTIONS
|
77
|
+
unless unknown_options.empty?
|
78
|
+
raise ArgumentError, "unknown options: #{unknown_options.inspect}"
|
79
|
+
end
|
72
80
|
end
|
73
81
|
end
|
74
82
|
end
|
data/lib/with_model/table.rb
CHANGED
@@ -9,13 +9,26 @@ module WithModel
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def create
|
12
|
-
connection
|
13
|
-
connection.drop_table(@name) if connection.table_exists?(@name)
|
12
|
+
connection.drop_table(@name) if exists?
|
14
13
|
connection.create_table(@name, @options, &@block)
|
15
14
|
end
|
16
15
|
|
17
16
|
def destroy
|
18
17
|
ActiveRecord::Base.connection.drop_table(@name)
|
19
18
|
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def exists?
|
23
|
+
if connection.respond_to?(:data_source_exists?)
|
24
|
+
connection.data_source_exists?(@name)
|
25
|
+
else
|
26
|
+
connection.table_exists?(@name)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def connection
|
31
|
+
ActiveRecord::Base.connection
|
32
|
+
end
|
20
33
|
end
|
21
34
|
end
|
data/lib/with_model/version.rb
CHANGED
data/spec/with_model_spec.rb
CHANGED
@@ -86,26 +86,27 @@ describe "a temporary ActiveRecord model created with with_model" do
|
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
89
|
-
|
89
|
+
describe "constant restoration" do
|
90
|
+
before { stub_const('MyConst', 1) }
|
91
|
+
shadowing_example_ran = false
|
90
92
|
|
91
|
-
|
93
|
+
context "with the with_model block" do
|
94
|
+
with_model :MyConst
|
92
95
|
|
93
|
-
|
94
|
-
|
96
|
+
after do
|
97
|
+
shadowing_example_ran = true
|
98
|
+
end
|
95
99
|
|
96
|
-
|
97
|
-
|
100
|
+
it "shadows that constant" do
|
101
|
+
expect(MyConst).to be_a(Class)
|
102
|
+
end
|
98
103
|
end
|
99
104
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
context "in later examples" do
|
106
|
-
it "returns the constant to its original value" do
|
107
|
-
expect(shadowing_example_ran).to eq true
|
108
|
-
expect(MyConst).to eq 1
|
105
|
+
context "without the with_model block" do
|
106
|
+
it "returns the constant to its original value" do
|
107
|
+
expect(shadowing_example_ran).to eq true
|
108
|
+
expect(MyConst).to eq 1
|
109
|
+
end
|
109
110
|
end
|
110
111
|
end
|
111
112
|
|
@@ -150,40 +151,41 @@ describe "a temporary ActiveRecord model created with with_model" do
|
|
150
151
|
it "is available" do end
|
151
152
|
end
|
152
153
|
|
153
|
-
|
154
|
-
|
154
|
+
context "with a mixin" do
|
155
|
+
let(:mixin) do
|
156
|
+
Module.new { def foo; end }
|
155
157
|
end
|
156
|
-
|
158
|
+
before { stub_const('AMixin', mixin) }
|
157
159
|
|
158
|
-
context "with a mixin" do
|
159
160
|
with_model :WithAMixin do
|
160
161
|
model do
|
161
162
|
include AMixin
|
162
163
|
end
|
163
164
|
end
|
164
165
|
|
165
|
-
before { ::ModelWithMixin = WithAMixin }
|
166
|
-
|
167
166
|
it "has the mixin" do
|
168
|
-
expect(lambda { ::
|
169
|
-
expect(::
|
167
|
+
expect(lambda { ::WithAMixin.new.foo }).to_not raise_error
|
168
|
+
expect(::WithAMixin.include?(AMixin)).to eq true
|
170
169
|
end
|
171
170
|
end
|
172
171
|
|
173
172
|
context "with a mixin that has a class_eval" do
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
173
|
+
let(:mixin) do
|
174
|
+
Module.new do
|
175
|
+
def self.included(klass)
|
176
|
+
klass.class_eval do
|
177
|
+
after_save { |object| object.my_method }
|
178
|
+
end
|
180
179
|
end
|
181
180
|
end
|
182
181
|
end
|
182
|
+
before { stub_const('AMixin', mixin) }
|
183
|
+
|
184
|
+
subject { WithAClassEval.new }
|
183
185
|
|
184
186
|
with_model :WithAClassEval do
|
185
187
|
model do
|
186
|
-
include
|
188
|
+
include AMixin
|
187
189
|
def my_method; end
|
188
190
|
end
|
189
191
|
end
|
@@ -329,6 +331,10 @@ describe "a temporary ActiveRecord model created with with_model" do
|
|
329
331
|
self.abstract_class = true
|
330
332
|
end
|
331
333
|
|
334
|
+
after(:all) do
|
335
|
+
Object.send(:remove_const, 'BlogPostParent')
|
336
|
+
end
|
337
|
+
|
332
338
|
with_model :BlogPost, superclass: BlogPostParent do
|
333
339
|
table do |t|
|
334
340
|
t.string 'title'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: with_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Case Commons, LLC
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-12-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -83,7 +83,7 @@ files:
|
|
83
83
|
- Gemfile
|
84
84
|
- LICENSE
|
85
85
|
- README.md
|
86
|
-
- Rakefile
|
86
|
+
- Rakefile.rb
|
87
87
|
- lib/with_model.rb
|
88
88
|
- lib/with_model/constant_stubber.rb
|
89
89
|
- lib/with_model/methods.rb
|
@@ -116,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
116
|
version: '0'
|
117
117
|
requirements: []
|
118
118
|
rubyforge_project:
|
119
|
-
rubygems_version: 2.
|
119
|
+
rubygems_version: 2.5.2
|
120
120
|
signing_key:
|
121
121
|
specification_version: 4
|
122
122
|
summary: Dynamically build a model within an RSpec context
|
@@ -125,4 +125,3 @@ test_files:
|
|
125
125
|
- spec/readme_spec.rb
|
126
126
|
- spec/spec_helper.rb
|
127
127
|
- spec/with_model_spec.rb
|
128
|
-
has_rdoc:
|