gamera-sequel-fixture 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +21 -0
- data/.travis.yml +5 -0
- data/Gemfile +12 -0
- data/LICENSE +14 -0
- data/README.md +133 -0
- data/Rakefile +10 -0
- data/lib/sequel-fixture.rb +194 -0
- data/lib/sequel-fixture/exceptions.rb +18 -0
- data/lib/sequel-fixture/table.rb +40 -0
- data/lib/sequel-fixture/util.rb +22 -0
- data/lib/sequel-fixture/version.rb +5 -0
- data/sequel-fixture.gemspec +23 -0
- data/spec/sequel/fixture_spec.rb +462 -0
- data/spec/sequel/fixtures/another/users.yaml +2 -0
- data/spec/sequel/fixtures/invalid/users.yaml +4 -0
- data/spec/sequel/fixtures/processed/users.yaml +4 -0
- data/spec/sequel/fixtures/test/actions.yaml +4 -0
- data/spec/sequel/fixtures/test/users.yaml +3 -0
- data/spec/sequel/util_spec.rb +54 -0
- metadata +131 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5ad175fb0feeef3d7e4fa04a58ffaee472d3bb50
|
4
|
+
data.tar.gz: 5bb282e8f9f34cef02086c064a5978c7b2bcc443
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0c8f74bb95113cc35b25440eb5780c421fc18d2891bef2b9658a63552c988a4b43ba178764a2ff8db306497ea116d2d5834b03e9aed91ded64a8d55f0fc6d053
|
7
|
+
data.tar.gz: d574389e41b423fc029cc74f1d74a9923b0809d8897d85ff0606c57fd65fae37c152336fca6baa8ff84a3c7e3dfa40e1f8307ecb981cfd319ae70753e862a2d4
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Copyright (C) 2012 Fetcher
|
2
|
+
|
3
|
+
This program is free software: you can redistribute it and/or modify
|
4
|
+
it under the terms of the GNU General Public License as published by
|
5
|
+
the Free Software Foundation, either version 3 of the License, or
|
6
|
+
(at your option) any later version.
|
7
|
+
|
8
|
+
This program is distributed in the hope that it will be useful,
|
9
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
GNU General Public License for more details.
|
12
|
+
|
13
|
+
You should have received a copy of the GNU General Public License
|
14
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
data/README.md
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
_This is a (hopefully temporary) fork of https://github.com/whitepages/sequel-fixture which incorporates some changes from @diminish7 that we need for https://github.com/gamera-team/gamera_
|
2
|
+
|
3
|
+
Sequel::Fixture
|
4
|
+
===============
|
5
|
+
|
6
|
+
Just like Rails fixtures, but for Sequel.
|
7
|
+
|
8
|
+
This version includes support for defining the fixture schemas
|
9
|
+
and uses sqlite3 adapter to inject data into memory.
|
10
|
+
|
11
|
+
Usage
|
12
|
+
=====
|
13
|
+
Each fixture file defines the schema and data for a single table which
|
14
|
+
is named after the file name.
|
15
|
+
|
16
|
+
Schema definition is optional, but note that db inserts will fail if the tables do
|
17
|
+
not exist.
|
18
|
+
|
19
|
+
Assuming you have a fixture for the table users with:
|
20
|
+
```yaml
|
21
|
+
# fixtures/simple/users.yaml
|
22
|
+
schema:
|
23
|
+
- name: name
|
24
|
+
type: string
|
25
|
+
primary_key: true
|
26
|
+
- name: last_name
|
27
|
+
type: string
|
28
|
+
- name: empty
|
29
|
+
type: string
|
30
|
+
data:
|
31
|
+
- name: John
|
32
|
+
last_name: Doe
|
33
|
+
email: john@doe.com
|
34
|
+
- name: Jane
|
35
|
+
last_name: Doe
|
36
|
+
email: jane@doe.com
|
37
|
+
```
|
38
|
+
|
39
|
+
and for messages:
|
40
|
+
```yaml
|
41
|
+
# fixtures/simple/messages.yaml
|
42
|
+
schema:
|
43
|
+
- name: sender_id
|
44
|
+
type: integer
|
45
|
+
primary_key: true
|
46
|
+
- name: receiver_id
|
47
|
+
type: integer
|
48
|
+
- name: text
|
49
|
+
type: string
|
50
|
+
data:
|
51
|
+
- sender_id: 1
|
52
|
+
receiver_id: 2
|
53
|
+
text: Hi Jane! Long time no see.
|
54
|
+
- sender_id: 2
|
55
|
+
receiver_id: 1
|
56
|
+
text: John! Long time indeed. How are you doing?
|
57
|
+
```
|
58
|
+
|
59
|
+
and the ruby script
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
# script.rb
|
63
|
+
require "sequel-fixture"
|
64
|
+
|
65
|
+
DB = Sequel.sqlite # Just a simple example, needs sqlite3 gem
|
66
|
+
|
67
|
+
## Set the path of the fixture yaml files to be [script.rb]/fixtures/
|
68
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
69
|
+
|
70
|
+
fixture = Sequel::Fixture.new :simple, DB # Will load all the data in the fixture into the database
|
71
|
+
|
72
|
+
fixture.users # == fixture[:users]
|
73
|
+
fixture.users[0].name # => "John"
|
74
|
+
# The YAML files are parsed into a SymbolMatrix
|
75
|
+
# http://github.com/Fetcher/symbolmatrix
|
76
|
+
# Each table contains an array of Rows.
|
77
|
+
# Within each row the columns can be accessed by name (.name)
|
78
|
+
|
79
|
+
fixture.rollback # returns users and messages to pristine status ('TRUNCATE')
|
80
|
+
|
81
|
+
|
82
|
+
fixture = Sequel::Fixture.new :simple, DB, false # The `false` flag prevent the constructor to automatically push
|
83
|
+
# the fixture into the database
|
84
|
+
|
85
|
+
fixture.check # Will fail if the user or messages table
|
86
|
+
# were already occupied with something
|
87
|
+
|
88
|
+
fixture.push # Inserts the fixture in the database
|
89
|
+
|
90
|
+
fixture.rollback # Don't forget to rollback
|
91
|
+
|
92
|
+
```
|
93
|
+
|
94
|
+
...naturally, `sequel-fixture` makes a lot more sense within some testing framework.
|
95
|
+
|
96
|
+
|
97
|
+
Contributing
|
98
|
+
------------
|
99
|
+
|
100
|
+
```
|
101
|
+
bundle install --binstubs .bin --path vendor/bundle
|
102
|
+
```
|
103
|
+
|
104
|
+
Installation
|
105
|
+
------------
|
106
|
+
|
107
|
+
gem install sequel-fixture
|
108
|
+
|
109
|
+
### Or using Bundler
|
110
|
+
|
111
|
+
gem 'sequel-fixture'
|
112
|
+
|
113
|
+
And then execute:
|
114
|
+
|
115
|
+
bundle
|
116
|
+
|
117
|
+
|
118
|
+
## License
|
119
|
+
|
120
|
+
Copyright (C) 2012 Whitepages
|
121
|
+
|
122
|
+
This program is free software: you can redistribute it and/or modify
|
123
|
+
it under the terms of the GNU General Public License as published by
|
124
|
+
the Free Software Foundation, either version 3 of the License, or
|
125
|
+
(at your option) any later version.
|
126
|
+
|
127
|
+
This program is distributed in the hope that it will be useful,
|
128
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
129
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
130
|
+
GNU General Public License for more details.
|
131
|
+
|
132
|
+
You should have received a copy of the GNU General Public License
|
133
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
data/Rakefile
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
require "sequel"
|
2
|
+
require "symbolmatrix"
|
3
|
+
require "fast"
|
4
|
+
|
5
|
+
require "sequel-fixture/version"
|
6
|
+
require "sequel-fixture/exceptions"
|
7
|
+
require "sequel-fixture/util"
|
8
|
+
require "sequel-fixture/table"
|
9
|
+
|
10
|
+
module Sequel; end
|
11
|
+
|
12
|
+
class Sequel::Fixture
|
13
|
+
|
14
|
+
# === Description
|
15
|
+
# Returns the current path to the fixtures folder
|
16
|
+
#
|
17
|
+
def self.path
|
18
|
+
@@path ||= "test/fixtures"
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
# === Description
|
23
|
+
# Set the current path of the fixtures folder
|
24
|
+
#
|
25
|
+
def self.path=(path)
|
26
|
+
@@path = path
|
27
|
+
end
|
28
|
+
|
29
|
+
# === Description
|
30
|
+
# Initializes the fixture handler
|
31
|
+
# Accepts optionally a symbol as a reference to the fixture
|
32
|
+
# and a Sequel::Database connection
|
33
|
+
def initialize(fixture = nil, connection = nil, option_push = true)
|
34
|
+
@schema = {}
|
35
|
+
@data = {}
|
36
|
+
|
37
|
+
load(fixture) if fixture
|
38
|
+
|
39
|
+
@connection = connection if connection
|
40
|
+
push if fixture && connection && option_push
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
# === Description
|
45
|
+
# Loads the fixture files into this instance
|
46
|
+
#
|
47
|
+
def load(fixture)
|
48
|
+
raise LoadingFixtureIllegal, "A check has already been made, loading a different fixture is illegal" if @checked
|
49
|
+
|
50
|
+
Fast.dir("#{fixtures_path}/#{fixture}").files.each do |file|
|
51
|
+
key = file.split('.').first.to_sym
|
52
|
+
@data ||= {}
|
53
|
+
@schema ||= {}
|
54
|
+
|
55
|
+
file_data = SymbolMatrix.new "#{fixtures_path}/#{fixture}/#{file}"
|
56
|
+
|
57
|
+
if file_data
|
58
|
+
@data[key] = Table.new(file_data[:data]) if file_data.key?(:data)
|
59
|
+
@schema[key] = file_data[:schema] if file_data.key?(:schema)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# === Description
|
65
|
+
# Returns the current fixtures path where Sequel::Fixture looks for fixture folders
|
66
|
+
#
|
67
|
+
def fixtures_path
|
68
|
+
Sequel::Fixture.path
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
# === Description
|
73
|
+
# For enabling discovery of tables
|
74
|
+
#
|
75
|
+
def method_missing(key, *args)
|
76
|
+
return @data[key] if @data && @data.has_key?(key)
|
77
|
+
return super
|
78
|
+
end
|
79
|
+
|
80
|
+
# === Description
|
81
|
+
# Returns the SymbolMatrix with the data referring to that table
|
82
|
+
#
|
83
|
+
def [](reference)
|
84
|
+
@data[reference]
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
# === Description
|
89
|
+
# Forces the check to pass. Dangerous!
|
90
|
+
#
|
91
|
+
def force_checked!
|
92
|
+
@checked = true
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
# === Description
|
97
|
+
# Assures that the tables are empty before proceeding
|
98
|
+
#
|
99
|
+
def check
|
100
|
+
return @checked if @checked # If already checked, it's alright
|
101
|
+
|
102
|
+
raise MissingFixtureError, "No fixture has been loaded, nothing to check" unless @data.length > 0
|
103
|
+
raise MissingConnectionError, "No connection has been provided, impossible to check" unless @connection
|
104
|
+
|
105
|
+
return @checked = true
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
# === Description
|
110
|
+
# Initializes fixture schema and Inserts the fixture data into the corresponding
|
111
|
+
# tables
|
112
|
+
#
|
113
|
+
def push
|
114
|
+
check
|
115
|
+
|
116
|
+
@schema.each do |table, matrix|
|
117
|
+
push_schema(table, matrix)
|
118
|
+
end
|
119
|
+
|
120
|
+
@data.each do |table_name, table_data|
|
121
|
+
table_data.rows.each do |values|
|
122
|
+
begin
|
123
|
+
@connection[table_name].insert(simplify(values.to_h))
|
124
|
+
rescue MissingProcessedValueError => m
|
125
|
+
rollback
|
126
|
+
raise MissingProcessedValueError, "In record '#{values.to_h}' to be inserted into '#{table_name}', the processed value of field '#{m.field}' is missing, aborting."
|
127
|
+
rescue NoMethodError => e
|
128
|
+
raise IllegalFixtureFormat, "In record '#{values}', data must be formatted as arrays of hashes. Check 'data' section in '#{table_name}.yaml'"
|
129
|
+
rescue Sequel::DatabaseError => sde
|
130
|
+
raise Sequel::Fixture::DatabaseError, "DB table: #{table_name}, #{sde.message}"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
|
137
|
+
# === Description
|
138
|
+
# Create the schema in our DB connection based on the schema values
|
139
|
+
#
|
140
|
+
def push_schema(table, values)
|
141
|
+
## Lets passively ignore the schema if the table already exists
|
142
|
+
return if @connection.table_exists?(table.to_sym)
|
143
|
+
|
144
|
+
## Find the primary key
|
145
|
+
pkey_data = nil
|
146
|
+
values.each do |column_def|
|
147
|
+
pkey_data = column_def if column_def["primary_key"]
|
148
|
+
end
|
149
|
+
|
150
|
+
## Create the table with the primary key
|
151
|
+
@connection.create_table(table) do
|
152
|
+
column(pkey_data["name"].to_sym, pkey_data["type"].to_sym)
|
153
|
+
end
|
154
|
+
|
155
|
+
## Add the rest of the columns
|
156
|
+
values.each do |column_def|
|
157
|
+
unless column_def["primary_key"]
|
158
|
+
@connection.alter_table(table) { add_column(column_def["name"].to_sym, column_def["type"].to_sym) }
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
|
164
|
+
# === Description
|
165
|
+
# Empties the tables, only if they were empty to begin with
|
166
|
+
#
|
167
|
+
def rollback
|
168
|
+
begin
|
169
|
+
check
|
170
|
+
|
171
|
+
@data.each_key do |table|
|
172
|
+
@connection[table].truncate
|
173
|
+
end
|
174
|
+
rescue TablesNotEmptyError => e
|
175
|
+
raise RollbackIllegalError, "The tables weren't empty to begin with, rollback aborted."
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
|
180
|
+
# === Description
|
181
|
+
# Sets the connection. Raises an ChangingConnectionIllegal exception if this fixture has
|
182
|
+
# already been checked
|
183
|
+
#
|
184
|
+
def connection=(the_connection)
|
185
|
+
if @checked
|
186
|
+
raise ChangingConnectionIllegal, "Illegal to change connection after check has already been performed"
|
187
|
+
end
|
188
|
+
@connection = the_connection
|
189
|
+
end
|
190
|
+
|
191
|
+
attr_reader :connection
|
192
|
+
attr_reader :data
|
193
|
+
attr_reader :schema
|
194
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Sequel::Fixture
|
2
|
+
class IllegalFixtureFormat < StandardError; end
|
3
|
+
class TablesNotEmptyError < StandardError; end
|
4
|
+
class RollbackIllegalError < StandardError; end
|
5
|
+
class MissingFixtureError < StandardError; end
|
6
|
+
class MissingConnectionError < StandardError; end
|
7
|
+
class LoadingFixtureIllegal < StandardError; end
|
8
|
+
class ChangingConnectionIllegal < StandardError; end
|
9
|
+
class DatabaseError < StandardError; end
|
10
|
+
|
11
|
+
class MissingProcessedValueError < StandardError
|
12
|
+
attr_accessor :field
|
13
|
+
def initialize message, field = nil
|
14
|
+
@field = field
|
15
|
+
super message
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Sequel; end
|
2
|
+
|
3
|
+
class Sequel::Fixture
|
4
|
+
|
5
|
+
# === Description
|
6
|
+
# Class which represents the actual fixture data in a table
|
7
|
+
#
|
8
|
+
class Table
|
9
|
+
def initialize(data)
|
10
|
+
@data = data
|
11
|
+
end
|
12
|
+
|
13
|
+
def [](row)
|
14
|
+
Sequel::Fixture::Row.new(@data[row])
|
15
|
+
end
|
16
|
+
|
17
|
+
def rows
|
18
|
+
@data
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
# === Description
|
24
|
+
# Class which represents a single row in a fixture table.
|
25
|
+
#
|
26
|
+
class Row
|
27
|
+
def initialize(row)
|
28
|
+
@data = row
|
29
|
+
end
|
30
|
+
|
31
|
+
# === Description
|
32
|
+
# Method missing, for enabling discovery of columns within a row
|
33
|
+
#
|
34
|
+
def method_missing(s, *args)
|
35
|
+
key = s.to_s
|
36
|
+
return @data[key] if @data && @data.has_key?(key)
|
37
|
+
return super
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Sequel::Fixture
|
2
|
+
|
3
|
+
# === Description
|
4
|
+
# Simplifies the hash in order to insert it into the database
|
5
|
+
# (Note: I'm well aware that this functionality belongs in a dependency)
|
6
|
+
#
|
7
|
+
def simplify(the_hash)
|
8
|
+
the_returned_hash = {}
|
9
|
+
|
10
|
+
the_hash.each do |key, value|
|
11
|
+
if value.is_a? Hash
|
12
|
+
unless value.has_key?("processed") || value.has_key?(:processed)
|
13
|
+
raise MissingProcessedValueError.new "The processed value to insert into the db is missing from the field '#{key}', aborting", key
|
14
|
+
end
|
15
|
+
the_returned_hash[key] = value["processed"] || value[:processed]
|
16
|
+
else
|
17
|
+
the_returned_hash[key] = value
|
18
|
+
end
|
19
|
+
end
|
20
|
+
return the_returned_hash
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/sequel-fixture/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = 'gamera-sequel-fixture'
|
6
|
+
gem.authors = ['Eric Dobbs', 'Glen Aultman-Bettridge', 'Jillian Rosile']
|
7
|
+
gem.email = ['eric@dobbse.net', 'glenab@koansolutions.net', 'jillian.rosile@gmail.com']
|
8
|
+
gem.description = %q{Flexible fixtures for the Sequel Gem inspired in Rails 2 fixtures}
|
9
|
+
gem.summary = %q{Flexible fixtures for the Sequel Gem inspired in Rails 2 fixtures. Temporary fork of https://github.com/whitepages/sequel-fixture to add ERB support}
|
10
|
+
gem.homepage = "http://github.com/gamera-team/sequel-fixture"
|
11
|
+
|
12
|
+
gem.add_dependency "sequel" # Stating the obvious
|
13
|
+
gem.add_dependency "gamera-symbolmatrix" # Because its easy to use
|
14
|
+
gem.add_dependency "fast" # Fast was needed. This is a testing gem, there's no problem with extra load
|
15
|
+
|
16
|
+
gem.add_development_dependency "rspec"
|
17
|
+
|
18
|
+
gem.files = `git ls-files`.split($\)
|
19
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
20
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
21
|
+
gem.require_paths = ["lib"]
|
22
|
+
gem.version = Sequel::Fixture::VERSION
|
23
|
+
end
|
@@ -0,0 +1,462 @@
|
|
1
|
+
require "sequel-fixture"
|
2
|
+
require "fast"
|
3
|
+
require "sequel/exceptions"
|
4
|
+
|
5
|
+
describe Sequel::Fixture do
|
6
|
+
describe ".path" do
|
7
|
+
it "returns 'test/fixtures'" do
|
8
|
+
expect(Sequel::Fixture.path).to eq "test/fixtures"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "is configurable" do
|
12
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
13
|
+
expect(Sequel::Fixture.path).to eq File.join(File.dirname(__FILE__), "fixtures")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe ".new" do
|
18
|
+
context "return a DatabaseError" do
|
19
|
+
it "calls load_fixture" do
|
20
|
+
expect_any_instance_of(Sequel::Fixture).to receive(:simplify).and_raise(Sequel::DatabaseError.new(StandardError.new("created_at: cannot be null")))
|
21
|
+
|
22
|
+
table = double
|
23
|
+
database = double :[] => @table
|
24
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
25
|
+
expect {
|
26
|
+
Sequel::Fixture.new(:test, database, true)
|
27
|
+
}.to raise_error Sequel::Fixture::DatabaseError,
|
28
|
+
"DB table: actions, created_at: cannot be null"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "a symbol is sent representing a fixture" do
|
33
|
+
it "calls load_fixture" do
|
34
|
+
expect_any_instance_of(Sequel::Fixture).to receive(:load).with :test
|
35
|
+
Sequel::Fixture.new :test
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "a database connection is passed" do
|
40
|
+
it "calls push" do
|
41
|
+
allow(Sequel).to receive(:connect).and_return Sequel::Database.new
|
42
|
+
allow_any_instance_of(Sequel::Fixture).to receive :load
|
43
|
+
expect_any_instance_of(Sequel::Fixture).to receive :push
|
44
|
+
Sequel::Fixture.new :test, Sequel.connect
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "a database is provided but no fixture" do
|
49
|
+
it "does not call push" do
|
50
|
+
database = double 'database'
|
51
|
+
expect_any_instance_of(Sequel::Fixture).to_not receive :push
|
52
|
+
Sequel::Fixture.new nil, database
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "a database connection and a valid fixture are passed but a false flag is passed at the end" do
|
57
|
+
it "does not push" do
|
58
|
+
database = double 'database'
|
59
|
+
allow_any_instance_of(Sequel::Fixture).to receive :load
|
60
|
+
expect_any_instance_of(Sequel::Fixture).to_not receive :push
|
61
|
+
Sequel::Fixture.new :test, database, false
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "#load" do
|
67
|
+
context "there is a valid fixture folder setup" do
|
68
|
+
shared_examples_for "valid fixture folder setup" do
|
69
|
+
|
70
|
+
around do |example|
|
71
|
+
Sequel::Fixture.path = "test/fixtures"
|
72
|
+
Fast.file! file1
|
73
|
+
Fast.file! file2
|
74
|
+
|
75
|
+
example.run
|
76
|
+
|
77
|
+
Fast.dir.remove! :test
|
78
|
+
end
|
79
|
+
|
80
|
+
it "loads the fixture YAML files using SymbolMatrix (third-party)" do
|
81
|
+
fix = Sequel::Fixture.new
|
82
|
+
allow(fix).to receive :check
|
83
|
+
expect(SymbolMatrix).to receive(:new).with file1
|
84
|
+
expect(SymbolMatrix).to receive(:new).with file2
|
85
|
+
fix.load :test
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context "with files having a .yaml extension" do
|
90
|
+
let(:file1) { "test/fixtures/test/users.yaml" }
|
91
|
+
let(:file2) { "test/fixtures/test/actions.yaml" }
|
92
|
+
|
93
|
+
it_behaves_like "valid fixture folder setup"
|
94
|
+
end
|
95
|
+
|
96
|
+
context "with files having a .yml extension" do
|
97
|
+
let(:file1) { "test/fixtures/test/users.yml" }
|
98
|
+
let(:file2) { "test/fixtures/test/actions.yml" }
|
99
|
+
|
100
|
+
it_behaves_like "valid fixture folder setup"
|
101
|
+
end
|
102
|
+
|
103
|
+
context "with files having a .erb extension" do
|
104
|
+
let(:file1) { "test/fixtures/test/users.yml.erb" }
|
105
|
+
let(:file2) { "test/fixtures/test/actions.yml.erb" }
|
106
|
+
|
107
|
+
it_behaves_like "valid fixture folder setup"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context "the check has been performed and I attempt to load another fixture" do
|
112
|
+
before do
|
113
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
114
|
+
end
|
115
|
+
|
116
|
+
it "fails" do
|
117
|
+
allow_any_instance_of(Sequel::Fixture).to receive :push
|
118
|
+
database = double 'database'
|
119
|
+
allow(database).to receive(:[]).and_return double(:count => 0 )
|
120
|
+
fix = Sequel::Fixture.new :test, database
|
121
|
+
fix.check
|
122
|
+
expect { fix.load :another
|
123
|
+
}.to raise_error Sequel::Fixture::LoadingFixtureIllegal,
|
124
|
+
"A check has already been made, loading a different fixture is illegal"
|
125
|
+
end
|
126
|
+
|
127
|
+
after do
|
128
|
+
Fast.dir.remove! :test
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe "#force_checked!" do
|
134
|
+
it "check returns true and does not call [] in the passed database" do
|
135
|
+
database = double 'database'
|
136
|
+
expect(database).to_not receive :[]
|
137
|
+
|
138
|
+
allow_any_instance_of(Sequel::Fixture).to receive :load
|
139
|
+
fix = Sequel::Fixture.new :anything, database, false
|
140
|
+
expect(fix.force_checked!).to eq true
|
141
|
+
expect(fix.check).to be_truthy
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe "#[]" do
|
146
|
+
context "a valid fixture has been loaded" do
|
147
|
+
before do
|
148
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
149
|
+
|
150
|
+
@fix = Sequel::Fixture.new
|
151
|
+
allow(@fix).to receive :check
|
152
|
+
@fix.load :test
|
153
|
+
end
|
154
|
+
|
155
|
+
context "a table key is passed" do
|
156
|
+
it "returns the Fixture::Table containing the same info as in the matching YAML file" do
|
157
|
+
expect(@fix[:users]).to be_a Sequel::Fixture::Table
|
158
|
+
expect(@fix[:users][0].name).to eq "John Doe"
|
159
|
+
expect(@fix[:users][0].last_name).to eq "Wayne"
|
160
|
+
expect(@fix[:actions][0].action).to eq "Walks"
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
after do
|
165
|
+
Fast.dir.remove! :test
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
describe "#method_missing" do
|
171
|
+
context "a valid fixture has been loaded" do
|
172
|
+
context "a table key is passed" do
|
173
|
+
before do
|
174
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
175
|
+
@fix = Sequel::Fixture.new
|
176
|
+
allow(@fix).to receive :check
|
177
|
+
@fix.load :test
|
178
|
+
end
|
179
|
+
|
180
|
+
it "returns the SymbolMatrix containing the same info as in the matching YAML file" do
|
181
|
+
expect(@fix.users).to be_a Sequel::Fixture::Table
|
182
|
+
expect(@fix.users[0].name).to eq "John Doe"
|
183
|
+
expect(@fix.users[0].last_name).to eq "Wayne"
|
184
|
+
expect(@fix.actions[0].action).to eq "Walks"
|
185
|
+
end
|
186
|
+
|
187
|
+
after do
|
188
|
+
Fast.dir.remove! :test
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
it "raises no method error if matches nothing" do
|
194
|
+
expect { Sequel::Fixture.new.nothing = "hola"
|
195
|
+
}.to raise_error NoMethodError
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
describe "#fixtures_path" do
|
200
|
+
it "calls Sequel::Fixture.path" do
|
201
|
+
expect(Sequel::Fixture).to receive :path
|
202
|
+
Sequel::Fixture.new.fixtures_path
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
describe "#check" do
|
207
|
+
|
208
|
+
context "the check has been done and it passed before" do
|
209
|
+
it "returns true even if now tables don't pass" do
|
210
|
+
allow_any_instance_of(Sequel::Fixture).to receive :push
|
211
|
+
|
212
|
+
@counter = double 'counter'
|
213
|
+
allow(@counter).to receive :count do
|
214
|
+
@amount ||= 0
|
215
|
+
@amount += 1
|
216
|
+
0 unless @amount > 5
|
217
|
+
end
|
218
|
+
|
219
|
+
@database = double 'database'
|
220
|
+
allow(@database).to receive(:[]).and_return @counter
|
221
|
+
|
222
|
+
@fix = Sequel::Fixture.new nil, @database
|
223
|
+
def @fix.stub_data
|
224
|
+
@data = { :users => nil, :tables => nil, :actions => nil, :schemas => nil }
|
225
|
+
end
|
226
|
+
@fix.stub_data
|
227
|
+
expect(@fix.check).to be_truthy
|
228
|
+
expect(@fix.check).to be_truthy # This looks confusing: let's explain. The #count method as defined for the mock
|
229
|
+
# runs 4 times in the first check. In the second check, it runs 4 times again.
|
230
|
+
# After time 6 it returns a large amount, making the check fail.
|
231
|
+
# Of course, the fourth time is never reached since the second check is skipped
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
context "no fixture has been loaded" do
|
236
|
+
it "fails with a missing fixture exception" do
|
237
|
+
fix = Sequel::Fixture.new
|
238
|
+
expect { fix.check
|
239
|
+
}.to raise_error Sequel::Fixture::MissingFixtureError,
|
240
|
+
"No fixture has been loaded, nothing to check"
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
context "a valid fixture has been loaded but no connection has been provided" do
|
245
|
+
before do
|
246
|
+
Fast.file.write "test/fixtures/test/users.yaml", "jane { name: Jane Doe }"
|
247
|
+
end
|
248
|
+
it "fails with a missing database connection exception" do
|
249
|
+
fix = Sequel::Fixture.new :test
|
250
|
+
expect { fix.check
|
251
|
+
}.to raise_error Sequel::Fixture::MissingConnectionError,
|
252
|
+
"No connection has been provided, impossible to check"
|
253
|
+
end
|
254
|
+
|
255
|
+
after do
|
256
|
+
Fast.dir.remove! :test
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
context "a database is provided but no fixture" do
|
261
|
+
it "fails with a missing fixture exception" do
|
262
|
+
database = double 'database'
|
263
|
+
fix = Sequel::Fixture.new nil, database
|
264
|
+
expect {fix.check
|
265
|
+
}.to raise_error Sequel::Fixture::MissingFixtureError,
|
266
|
+
"No fixture has been loaded, nothing to check"
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
describe "#connection" do
|
272
|
+
it "returns the Sequel connection passed as argument to the constructor" do
|
273
|
+
allow_any_instance_of(Sequel::Fixture).to receive :push
|
274
|
+
connection = double
|
275
|
+
fix = Sequel::Fixture.new nil, connection
|
276
|
+
expect(fix.connection).to eq connection
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
describe "#connection=" do
|
281
|
+
it "sets the connection" do
|
282
|
+
fix = Sequel::Fixture.new
|
283
|
+
connection = double
|
284
|
+
fix.connection = connection
|
285
|
+
expect(fix.connection).to eq connection
|
286
|
+
end
|
287
|
+
|
288
|
+
context "a check has been performed and I attempt to change the connection" do
|
289
|
+
before do
|
290
|
+
Fast.file.write "test/fixtures/test/users.yaml", "jane { name: Secret }"
|
291
|
+
end
|
292
|
+
|
293
|
+
it "fails" do
|
294
|
+
database = double 'database'
|
295
|
+
allow(database).to receive(:[]).and_return double(:count => 0)
|
296
|
+
allow_any_instance_of(Sequel::Fixture).to receive :push
|
297
|
+
fix = Sequel::Fixture.new :test, database
|
298
|
+
fix.check
|
299
|
+
expect { fix.connection = double 'database'
|
300
|
+
}.to raise_error Sequel::Fixture::ChangingConnectionIllegal,
|
301
|
+
"Illegal to change connection after check has already been performed"
|
302
|
+
end
|
303
|
+
|
304
|
+
after do
|
305
|
+
Fast.dir.remove! :test
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
describe "#data" do
|
311
|
+
context "a fixture has been loaded" do
|
312
|
+
before do
|
313
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
314
|
+
end
|
315
|
+
|
316
|
+
it "returns the fixture data" do
|
317
|
+
fix = Sequel::Fixture.new :test
|
318
|
+
expect(fix.data).to have_key :users
|
319
|
+
expect(fix.data[:users]).to be_a Sequel::Fixture::Table
|
320
|
+
end
|
321
|
+
|
322
|
+
after do
|
323
|
+
Fast.dir.remove! :test
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
context "no fixture has been loaded" do
|
328
|
+
it "returns nil" do
|
329
|
+
fix = Sequel::Fixture.new
|
330
|
+
expect(fix.data).to be {}
|
331
|
+
end
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
describe "#push" do
|
336
|
+
it "calls #check" do
|
337
|
+
fix = Sequel::Fixture.new
|
338
|
+
def fix.stub_data
|
339
|
+
@data = {}
|
340
|
+
end
|
341
|
+
fix.stub_data
|
342
|
+
expect(fix).to receive :check
|
343
|
+
fix.push
|
344
|
+
end
|
345
|
+
|
346
|
+
context "a valid fixture and a database connection are provided" do
|
347
|
+
before do
|
348
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
349
|
+
|
350
|
+
@table = double
|
351
|
+
@database = double :[] => @table
|
352
|
+
@fix = Sequel::Fixture.new
|
353
|
+
@fix.load :test
|
354
|
+
@fix.connection = @database
|
355
|
+
end
|
356
|
+
|
357
|
+
it "attempts to insert the data into the database" do
|
358
|
+
allow(@table).to receive(:count).and_return(0)
|
359
|
+
expect(@table).to receive(:insert).with "name" => "John Doe", "last_name" => "Wayne"
|
360
|
+
expect(@table).to receive(:insert).with "user_id" => 1, "action" => "Walks"
|
361
|
+
@fix.push
|
362
|
+
end
|
363
|
+
|
364
|
+
after do
|
365
|
+
Fast.dir.remove! :test
|
366
|
+
end
|
367
|
+
end
|
368
|
+
|
369
|
+
context "a fixture with a field with a <raw> and a <processed> alternative" do
|
370
|
+
before do
|
371
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
372
|
+
end
|
373
|
+
|
374
|
+
it "inserts the <processed> alternative" do
|
375
|
+
database = double 'database'
|
376
|
+
insertable = double 'table'
|
377
|
+
allow(insertable).to receive(:count).and_return(0)
|
378
|
+
expect(insertable).to receive(:insert).with "password" => '35ferwt352'
|
379
|
+
allow(database).to receive(:[]).and_return insertable
|
380
|
+
|
381
|
+
fix = Sequel::Fixture.new :processed, database, false
|
382
|
+
|
383
|
+
fix.push
|
384
|
+
end
|
385
|
+
|
386
|
+
after do
|
387
|
+
Fast.dir.remove! :test
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
context "a fixture with a field with alternatives yet missing the <processed> one" do
|
392
|
+
before do
|
393
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
394
|
+
end
|
395
|
+
|
396
|
+
it "fails" do
|
397
|
+
database = double 'database', :[] => double( 'table', :count => 0, :truncate => nil )
|
398
|
+
fix = Sequel::Fixture.new :invalid, database, false
|
399
|
+
|
400
|
+
expect { fix.push }.to raise_error Sequel::Fixture::MissingProcessedValueError
|
401
|
+
end
|
402
|
+
|
403
|
+
|
404
|
+
it "calls the rollback" do
|
405
|
+
database = double 'database', :[] => double( 'table', :count => 0, :truncate => nil )
|
406
|
+
fix = Sequel::Fixture.new :invalid, database, false
|
407
|
+
expect(fix).to receive :rollback
|
408
|
+
expect { fix.push }.to raise_error Sequel::Fixture::MissingProcessedValueError
|
409
|
+
end
|
410
|
+
|
411
|
+
after do
|
412
|
+
Fast.dir.remove! :test
|
413
|
+
end
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
|
418
|
+
describe "#rollback" do
|
419
|
+
it "checks" do
|
420
|
+
fix = Sequel::Fixture.new
|
421
|
+
def fix.stub_data
|
422
|
+
@data = {}
|
423
|
+
end
|
424
|
+
fix.stub_data
|
425
|
+
expect(fix).to receive :check
|
426
|
+
fix.rollback
|
427
|
+
end
|
428
|
+
|
429
|
+
context "the check is failing" do
|
430
|
+
it "raises a custom error for the rollback" do
|
431
|
+
fix = Sequel::Fixture.new
|
432
|
+
allow(fix).to receive(:check).and_raise Sequel::Fixture::TablesNotEmptyError
|
433
|
+
expect { fix.rollback
|
434
|
+
}.to raise_error Sequel::Fixture::RollbackIllegalError,
|
435
|
+
"The tables weren't empty to begin with, rollback aborted."
|
436
|
+
end
|
437
|
+
end
|
438
|
+
|
439
|
+
context "a check has been done and is passing" do
|
440
|
+
before do
|
441
|
+
@database = double
|
442
|
+
@truncable = double
|
443
|
+
allow(@truncable).to receive(:count).and_return(0)
|
444
|
+
allow(@database).to receive(:[]).and_return @truncable
|
445
|
+
|
446
|
+
@fix = Sequel::Fixture.new
|
447
|
+
@fix.connection = @database
|
448
|
+
def @fix.stub_data
|
449
|
+
@data = { :users => nil, :actions => nil, :extras => nil }
|
450
|
+
end
|
451
|
+
@fix.stub_data
|
452
|
+
|
453
|
+
expect(@fix.check).to be_truthy
|
454
|
+
end
|
455
|
+
|
456
|
+
it "calls truncate on each of the used tables" do
|
457
|
+
expect(@truncable).to receive(:truncate).exactly(3).times
|
458
|
+
@fix.rollback
|
459
|
+
end
|
460
|
+
end
|
461
|
+
end
|
462
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require "sequel-fixture"
|
2
|
+
require "fast"
|
3
|
+
|
4
|
+
describe Sequel::Fixture do
|
5
|
+
# This should go in a dependency, pending refactoring TODO
|
6
|
+
describe "#simplify" do
|
7
|
+
context "when receiving a multidimensional hash containing a field with raw and processed" do
|
8
|
+
it "converts it in a simple hash using the processed value as replacement" do
|
9
|
+
base_hash = {
|
10
|
+
:name => "Jane",
|
11
|
+
:band => "Witherspoons",
|
12
|
+
:pass => {
|
13
|
+
:raw => "secret",
|
14
|
+
:processed => "53oih7fhjdgj3f8="
|
15
|
+
},
|
16
|
+
:email => {
|
17
|
+
:raw => "Jane@gmail.com ",
|
18
|
+
:processed => "jane@gmail.com"
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
fix = Sequel::Fixture.new
|
23
|
+
simplified = fix.simplify(base_hash)
|
24
|
+
expect(simplified).to eq({
|
25
|
+
:name => "Jane",
|
26
|
+
:band => "Witherspoons",
|
27
|
+
:pass => "53oih7fhjdgj3f8=",
|
28
|
+
:email => "jane@gmail.com"
|
29
|
+
})
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "the multidimensional array is missing the processed part of the field" do
|
34
|
+
it "raises an exception" do
|
35
|
+
base_hash = {
|
36
|
+
:name => "Jane",
|
37
|
+
:pass => {
|
38
|
+
:raw => "secret",
|
39
|
+
:not_processed => "53oih7fhjdgj3f8="
|
40
|
+
},
|
41
|
+
:email => {
|
42
|
+
:raw => "Jane@gmail.com ",
|
43
|
+
:processed => "jane@gmail.com"
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
fix = Sequel::Fixture.new
|
48
|
+
expect { fix.simplify(base_hash)
|
49
|
+
}.to raise_error Sequel::Fixture::MissingProcessedValueError,
|
50
|
+
"The processed value to insert into the db is missing from the field 'pass', aborting"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
metadata
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gamera-sequel-fixture
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Eric Dobbs
|
8
|
+
- Glen Aultman-Bettridge
|
9
|
+
- Jillian Rosile
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2015-06-15 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: sequel
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
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
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: gamera-symbolmatrix
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: fast
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: rspec
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
description: Flexible fixtures for the Sequel Gem inspired in Rails 2 fixtures
|
72
|
+
email:
|
73
|
+
- eric@dobbse.net
|
74
|
+
- glenab@koansolutions.net
|
75
|
+
- jillian.rosile@gmail.com
|
76
|
+
executables: []
|
77
|
+
extensions: []
|
78
|
+
extra_rdoc_files: []
|
79
|
+
files:
|
80
|
+
- ".gitignore"
|
81
|
+
- ".travis.yml"
|
82
|
+
- Gemfile
|
83
|
+
- LICENSE
|
84
|
+
- README.md
|
85
|
+
- Rakefile
|
86
|
+
- lib/sequel-fixture.rb
|
87
|
+
- lib/sequel-fixture/exceptions.rb
|
88
|
+
- lib/sequel-fixture/table.rb
|
89
|
+
- lib/sequel-fixture/util.rb
|
90
|
+
- lib/sequel-fixture/version.rb
|
91
|
+
- sequel-fixture.gemspec
|
92
|
+
- spec/sequel/fixture_spec.rb
|
93
|
+
- spec/sequel/fixtures/another/users.yaml
|
94
|
+
- spec/sequel/fixtures/invalid/users.yaml
|
95
|
+
- spec/sequel/fixtures/processed/users.yaml
|
96
|
+
- spec/sequel/fixtures/test/actions.yaml
|
97
|
+
- spec/sequel/fixtures/test/users.yaml
|
98
|
+
- spec/sequel/util_spec.rb
|
99
|
+
homepage: http://github.com/gamera-team/sequel-fixture
|
100
|
+
licenses: []
|
101
|
+
metadata: {}
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options: []
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
requirements: []
|
117
|
+
rubyforge_project:
|
118
|
+
rubygems_version: 2.2.2
|
119
|
+
signing_key:
|
120
|
+
specification_version: 4
|
121
|
+
summary: Flexible fixtures for the Sequel Gem inspired in Rails 2 fixtures. Temporary
|
122
|
+
fork of https://github.com/whitepages/sequel-fixture to add ERB support
|
123
|
+
test_files:
|
124
|
+
- spec/sequel/fixture_spec.rb
|
125
|
+
- spec/sequel/fixtures/another/users.yaml
|
126
|
+
- spec/sequel/fixtures/invalid/users.yaml
|
127
|
+
- spec/sequel/fixtures/processed/users.yaml
|
128
|
+
- spec/sequel/fixtures/test/actions.yaml
|
129
|
+
- spec/sequel/fixtures/test/users.yaml
|
130
|
+
- spec/sequel/util_spec.rb
|
131
|
+
has_rdoc:
|