rspec-active_record_mocks 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e7d77ac47d5cbc287abb32c9174b72ab2e57d5d7
4
+ data.tar.gz: 858bfe8e0a51048aa981c2eb4e01136f6adb6f84
5
+ SHA512:
6
+ metadata.gz: 8d94b117f61a69f4b85d4a6ad6f894bb500d5264e56e134f0e967fbf5b79a520e16d1bc6842e09180d9ca02f9eece02dd08f76bccadddc4c8f672848ba8a9d1d
7
+ data.tar.gz: ad982662ca497971c46d27cbca472ab1e526768e91cac818451e70333d46bd11f8d795fc93564fc6265239c7f5e340a6d8f4da838c2fceaa7693b5ff40ad8594
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "https://rubygems.org"
2
+ gemspec
3
+
4
+ group :development do
5
+ unless ENV["CI"]
6
+ gem "pry"
7
+ end
8
+
9
+ gem "mysql2"
10
+ gem "pg"
11
+ gem "rake"
12
+ gem "envygeeks-coveralls"
13
+ gem "luna-rspec-formatters"
14
+ end
data/License ADDED
@@ -0,0 +1,11 @@
1
+ Copyright 2013 Jordon Bedwell
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not
4
+ use this file except in compliance with the License. You may obtain a copy of
5
+ the License at: http://www.apache.org/licenses/LICENSE-2.0
6
+
7
+ Unless required by applicable law or agreed to in writing, software
8
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10
+ License for the specific language governing permissions and limitations under
11
+ the License.
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require "rspec/core/rake_task"
2
+
3
+ task :default => [:spec]
4
+ task :test => :spec
5
+ RSpec::Core::RakeTask.new :spec
data/Readme.md ADDED
@@ -0,0 +1,92 @@
1
+ # RSpec Active Record Mocks.
2
+
3
+ [![Build Status](https://travis-ci.org/envygeeks/rspec-active_record_mocks.png?branch=master)](https://travis-ci.org/envygeeks/rspec-active_record_mocks) [![Coverage Status](https://coveralls.io/repos/envygeeks/rspec-active_record_mocks/badge.png?branch=master)](https://coveralls.io/r/envygeeks/rspec-active_record_mocks) [![Code Climate](https://codeclimate.com/github/envygeeks/rspec-active_record_mocks.png)](https://codeclimate.com/github/envygeeks/rspec-active_record_mocks) [![Dependency Status](https://gemnasium.com/envygeeks/rspec-active_record_mocks.png)](https://gemnasium.com/envygeeks/rspec-active_record_mocks)
4
+
5
+ ActiveRecord Mocks is designed to aide you in testing your ActiveRecord
6
+ concerns by creating random models (or even named models) that are removed
7
+ after each test.
8
+
9
+ ## Installing
10
+
11
+ ```ruby
12
+ gem "rspec-active_record_mocks"
13
+ ```
14
+
15
+ ## Using
16
+
17
+ `RSpec::ActiveRecordMocks` supports `before` with `:all` or `:each`, it can
18
+ also be used directly inside the it. It's designed to try and be a little
19
+ bit flexible in how you try to use it.
20
+
21
+ ```ruby
22
+
23
+ # ----------------------------------------------------------------------------
24
+ # One Line Usage.
25
+ # ----------------------------------------------------------------------------
26
+
27
+ describe TestConcern do
28
+ it 'should work as expected' do
29
+ expect(mock_active_record_model(:include => TestConcern).test_column).to eq "value"
30
+ end
31
+ end
32
+ ```
33
+
34
+ ```ruby
35
+
36
+ # ----------------------------------------------------------------------------
37
+ # Before :all example with :include and a migration.
38
+ # Also works with `before :each`
39
+ # ----------------------------------------------------------------------------
40
+
41
+ describe TestConcern do
42
+ before :all do
43
+ @test_model = mock_active_record_model(:include => TestConcern) do
44
+ table.string(:test_column)
45
+ end
46
+ end
47
+
48
+ it "should have the concerns method" do
49
+ expect(@test_model.new).to respond_to :test_method
50
+ end
51
+ end
52
+ ```
53
+
54
+ ```ruby
55
+
56
+ # ----------------------------------------------------------------------------
57
+ # Before :all example that does a class_eval to include.
58
+ # Also works with `before :each`
59
+ # ----------------------------------------------------------------------------
60
+
61
+ describe TestConcern do
62
+ before :all do
63
+ @model = mock_active_record_model.class_eval do
64
+ include MyActiveRecordConcern
65
+ end
66
+ end
67
+
68
+ it "should work" do
69
+ expect(@model.concern_method).to eq "concern_value"
70
+ end
71
+ end
72
+ ```
73
+
74
+ ```ruby
75
+
76
+ # ----------------------------------------------------------------------------
77
+ # Completely random example in a before :all.
78
+ # Also works with `before :each`
79
+ # ----------------------------------------------------------------------------
80
+
81
+ describe MyActiveRecordConcern do
82
+ before :all do
83
+ @model = mock_active_record_model do |table|
84
+ table.string(:column)
85
+ end
86
+
87
+ @model.class_eval do
88
+ include MyActiveRecordConcern
89
+ end
90
+ end
91
+ end
92
+ ```
@@ -0,0 +1,5 @@
1
+ module RSpec
2
+ module ActiveRecordMocks
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,75 @@
1
+ require "active_support/core_ext/string/inflections"
2
+ require "active_record"
3
+
4
+ module RSpec
5
+ module ActiveRecordMocks
6
+
7
+ # ------------------------------------------------------------------------
8
+ # Allow people to mock ActiveRecord while giving them the flexibility.
9
+ # ------------------------------------------------------------------------
10
+
11
+ def mock_active_record_model(opts = {}, &block)
12
+ tbl = create_active_record_table_for_mocking(opts.delete(:name), &block)
13
+ Object.const_set(tbl.camelize, Class.new(ActiveRecord::Base)).class_eval do
14
+ include opts.delete(:include) if opts[:include]
15
+ self.table_name = tbl and self
16
+ end
17
+ end
18
+
19
+ # ------------------------------------------------------------------------
20
+ # Roll through each one of the created tables and destroy them.
21
+ # ------------------------------------------------------------------------
22
+
23
+ def clean_tables_for_active_record_mocking
24
+ if mocked_active_record_options[:mocked_active_record_tables]
25
+ mocked_active_record_options.delete(:mocked_active_record_tables).each do |tbl|
26
+ Object.send(:remove_const, tbl.camelize)
27
+ ActiveRecord::Base.connection.drop_table(tbl)
28
+ end
29
+ end
30
+ end
31
+
32
+ private
33
+ def mocked_active_record_options
34
+ (example.nil?) ? (@mocked_active_record_options ||= {}) : example.options
35
+ end
36
+
37
+ # ------------------------------------------------------------------------
38
+ # Creates a temporary table inside of the database using ActiveRecord.
39
+ # ------------------------------------------------------------------------
40
+
41
+ private
42
+ def create_active_record_table_for_mocking(tbl = nil, &block)
43
+ tbl = (tbl || SecureRandom.hex(30).tr('^a-z', '')).to_s
44
+ setup_active_record_mocking_table(tbl, &block)
45
+ tbl
46
+ end
47
+
48
+ # ------------------------------------------------------------------------
49
+ # Sets up the table using an ActiveRecord migration.
50
+ # ------------------------------------------------------------------------
51
+
52
+ private
53
+ def setup_active_record_mocking_table(tbl, &block)
54
+ (mocked_active_record_options[:mocked_active_record_tables] ||= []).push(tbl)
55
+ ActiveRecord::Migration.suppress_messages do
56
+ ActiveRecord::Migration.create_table tbl do |obj|
57
+ block.call(obj) if block_given?
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ # ----------------------------------------------------------------------------
65
+ # Add ourself to the win list so they can use the methods.
66
+ # ----------------------------------------------------------------------------
67
+
68
+ RSpec.configure do |config|
69
+ config.include RSpec::ActiveRecordMocks
70
+ [:all, :each].each do |type|
71
+ config.after(type) do
72
+ clean_tables_for_active_record_mocking
73
+ end
74
+ end
75
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rspec-active_record_mocks
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jordon Bedwell
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-08-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '2.14'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '2.14'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '3.2'
34
+ - - <=
35
+ - !ruby/object:Gem::Version
36
+ version: '4.0'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '3.2'
44
+ - - <=
45
+ - !ruby/object:Gem::Version
46
+ version: '4.0'
47
+ description: Mock ActiveRecord tables to test concerns and other code.
48
+ email: envygeeks@gmail.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - Readme.md
54
+ - License
55
+ - Rakefile
56
+ - Gemfile
57
+ - lib/rspec/active_record_mocks/version.rb
58
+ - lib/rspec/active_record_mocks.rb
59
+ homepage: https://github.com/envygeeks/rspec-active_record_mocks
60
+ licenses:
61
+ - Apache 2.0
62
+ metadata: {}
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 2.0.3
80
+ signing_key:
81
+ specification_version: 4
82
+ summary: Mock ActiveRecord tables to test.
83
+ test_files: []