aiwilliams-dataset 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +54 -0
- data/LICENSE +19 -0
- data/README +111 -0
- data/Rakefile +28 -0
- data/TODO +15 -0
- data/VERSION.yml +4 -0
- data/lib/dataset/base.rb +157 -0
- data/lib/dataset/collection.rb +19 -0
- data/lib/dataset/database/base.rb +30 -0
- data/lib/dataset/database/mysql.rb +34 -0
- data/lib/dataset/database/postgresql.rb +34 -0
- data/lib/dataset/database/sqlite3.rb +32 -0
- data/lib/dataset/extensions/cucumber.rb +20 -0
- data/lib/dataset/extensions/rspec.rb +21 -0
- data/lib/dataset/extensions/test_unit.rb +60 -0
- data/lib/dataset/instance_methods.rb +10 -0
- data/lib/dataset/load.rb +47 -0
- data/lib/dataset/record/fixture.rb +73 -0
- data/lib/dataset/record/meta.rb +58 -0
- data/lib/dataset/record/model.rb +50 -0
- data/lib/dataset/resolver.rb +110 -0
- data/lib/dataset/session.rb +51 -0
- data/lib/dataset/session_binding.rb +317 -0
- data/lib/dataset/version.rb +9 -0
- data/lib/dataset.rb +125 -0
- data/plugit/descriptor.rb +25 -0
- data/tasks/dataset.rake +19 -0
- metadata +83 -0
data/lib/dataset.rb
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'dataset/version'
|
2
|
+
require 'dataset/instance_methods'
|
3
|
+
require 'dataset/base'
|
4
|
+
require 'dataset/database/base'
|
5
|
+
require 'dataset/database/mysql'
|
6
|
+
require 'dataset/database/sqlite3'
|
7
|
+
require 'dataset/database/postgresql'
|
8
|
+
require 'dataset/collection'
|
9
|
+
require 'dataset/load'
|
10
|
+
require 'dataset/resolver'
|
11
|
+
require 'dataset/session'
|
12
|
+
require 'dataset/session_binding'
|
13
|
+
require 'dataset/record/meta'
|
14
|
+
require 'dataset/record/fixture'
|
15
|
+
require 'dataset/record/model'
|
16
|
+
|
17
|
+
# == Quick Start
|
18
|
+
#
|
19
|
+
# Write a test. If you want some data in your database, create a dataset.
|
20
|
+
# Start simple.
|
21
|
+
#
|
22
|
+
# describe States do
|
23
|
+
# dataset do
|
24
|
+
# [%w(Colorado CO), %w(North\ Carolina NC), %w(South\ Carolina SC)].each do |name,abbrev|
|
25
|
+
# create_record :state, abbrev.downcase, :name => name, :abbrev => abbrev
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
# it 'should have an abbreviated name'
|
30
|
+
# states(:nc).abbrev.should be('NC')
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# it 'should have a name'
|
34
|
+
# states(:nc).name.should be('North Carolin')
|
35
|
+
# end
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# Notice that you won't be using _find_id_ or _find_model_ in your tests. You
|
39
|
+
# use methods like _states_ and _state_id_, as in the example above.
|
40
|
+
#
|
41
|
+
# When you find that you're seeing patterns in the data you are creating, pull it into a class.
|
42
|
+
#
|
43
|
+
# spec/datasets/states.rb
|
44
|
+
# class StatesDataset < Dataset::Base
|
45
|
+
# def load
|
46
|
+
# # create useful data
|
47
|
+
# end
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
# spec/models/state.rb
|
51
|
+
# describe State do
|
52
|
+
# dataset :states
|
53
|
+
# end
|
54
|
+
#
|
55
|
+
# == Installation
|
56
|
+
#
|
57
|
+
# Dataset is installed into your testing environment by requiring the library,
|
58
|
+
# then including it into the class that will be the context of your test
|
59
|
+
# methods.
|
60
|
+
#
|
61
|
+
# require 'dataset'
|
62
|
+
# class Test::Unit::TestCase
|
63
|
+
# include Dataset
|
64
|
+
# datasets_directory "#{RAILS_ROOT}/test/datasets"
|
65
|
+
# end
|
66
|
+
#
|
67
|
+
# Note that should you desire your Dataset::Base subclasses be
|
68
|
+
# auto-discovered, you can set the _datasets_directory_.
|
69
|
+
#
|
70
|
+
module Dataset
|
71
|
+
def self.included(test_context) # :nodoc:
|
72
|
+
if test_context.name =~ /World\Z/
|
73
|
+
require 'dataset/extensions/cucumber'
|
74
|
+
elsif test_context.name =~ /TestCase\Z/
|
75
|
+
require 'dataset/extensions/test_unit'
|
76
|
+
elsif test_context.name =~ /ExampleGroup\Z/
|
77
|
+
require 'dataset/extensions/rspec'
|
78
|
+
else
|
79
|
+
raise "I don't understand your test framework"
|
80
|
+
end
|
81
|
+
|
82
|
+
test_context.extend ContextClassMethods
|
83
|
+
end
|
84
|
+
|
85
|
+
# Methods that are added to the class that Dataset is included in (the test
|
86
|
+
# context class).
|
87
|
+
#
|
88
|
+
module ContextClassMethods
|
89
|
+
def self.extended(context_class) # :nodoc:
|
90
|
+
context_class.module_eval do
|
91
|
+
include InstanceMethods
|
92
|
+
superclass_delegating_accessor :dataset_session
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
mattr_accessor :datasets_database_dump_path
|
97
|
+
self.datasets_database_dump_path = File.expand_path(RAILS_ROOT + '/tmp/dataset') if defined?(RAILS_ROOT)
|
98
|
+
|
99
|
+
# Replaces the default Dataset::Resolver with one that will look for
|
100
|
+
# dataset class definitions in the specified directory. Captures of the
|
101
|
+
# database will be stored in a subdirectory 'tmp' (see
|
102
|
+
# Dataset::Database::Base).
|
103
|
+
def datasets_directory(path)
|
104
|
+
Dataset::Resolver.default = Dataset::DirectoryResolver.new(path)
|
105
|
+
Dataset::ContextClassMethods.datasets_database_dump_path = File.join(path, '/tmp/dataset')
|
106
|
+
end
|
107
|
+
|
108
|
+
def add_dataset(*datasets, &block) # :nodoc:
|
109
|
+
dataset_session = dataset_session_in_hierarchy
|
110
|
+
datasets.each { |dataset| dataset_session.add_dataset(self, dataset) }
|
111
|
+
dataset_session.add_dataset(self, Class.new(Dataset::Block) {
|
112
|
+
define_method :doload, block
|
113
|
+
}) unless block.nil?
|
114
|
+
end
|
115
|
+
|
116
|
+
def dataset_session_in_hierarchy # :nodoc:
|
117
|
+
self.dataset_session ||= begin
|
118
|
+
database_spec = ActiveRecord::Base.configurations['test'].with_indifferent_access
|
119
|
+
database_class = Dataset::Database.const_get(database_spec[:adapter].classify)
|
120
|
+
database = database_class.new(database_spec, Dataset::ContextClassMethods.datasets_database_dump_path)
|
121
|
+
Dataset::Session.new(database)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'plugit'
|
3
|
+
|
4
|
+
PLUGIT_ROOT = File.expand_path(File.dirname(__FILE__))
|
5
|
+
|
6
|
+
Plugit.describe do |dataset|
|
7
|
+
dataset.environments_root_path = "#{PLUGIT_ROOT}/environments"
|
8
|
+
vendor_directory = "#{PLUGIT_ROOT}/../vendor/plugins"
|
9
|
+
|
10
|
+
dataset.environment :default, 'Released versions of Rails and RSpec' do |env|
|
11
|
+
env.library :rails, :export => "git clone git://github.com/rails/rails.git" do |rails|
|
12
|
+
rails.after_update { `git fetch origin 2-2-stable:2-2-stable; git checkout 2-2-stable` }
|
13
|
+
rails.load_paths = %w{/activesupport/lib /activerecord/lib /actionpack/lib}
|
14
|
+
rails.requires = %w{active_support active_record active_record/fixtures action_controller action_view}
|
15
|
+
end
|
16
|
+
env.library :rspec, :export => "git clone git://github.com/dchelimsky/rspec.git" do |rspec|
|
17
|
+
rspec.after_update { `git checkout -b rspecrelease 1.1.11 && mkdir -p #{vendor_directory} && ln -nsf #{File.expand_path('.')} #{vendor_directory + '/rspec'}` }
|
18
|
+
rspec.requires = %w{spec}
|
19
|
+
end
|
20
|
+
env.library :cucumber, :export => "git clone git://github.com/aslakhellesoy/cucumber.git" do |cukes|
|
21
|
+
cukes.after_update { `git fetch origin master; git checkout v0.2.3.1` }
|
22
|
+
cukes.requires = %w{cucumber}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/tasks/dataset.rake
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
namespace :db do
|
2
|
+
namespace :dataset do
|
3
|
+
desc "Load one or more datasets into the current environment's database using DATASETS=name,name"
|
4
|
+
task :load => :environment do
|
5
|
+
require 'dataset'
|
6
|
+
dataset_names = (ENV['DATASETS'] || 'default').split(',')
|
7
|
+
|
8
|
+
context = Class.new do
|
9
|
+
extend Dataset::ContextClassMethods
|
10
|
+
datasets_directory [
|
11
|
+
"#{RAILS_ROOT}/spec/datasets",
|
12
|
+
"#{RAILS_ROOT}/test/datasets"
|
13
|
+
].detect {|path| File.directory?(path)}
|
14
|
+
add_dataset *dataset_names
|
15
|
+
dataset_session.load_datasets_for self
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: aiwilliams-dataset
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Adam Williams
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-04-08 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: A simple API for creating and finding sets of data in your database, built on ActiveRecord.
|
17
|
+
email: adam@thewilliams.ws
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- CHANGELOG
|
26
|
+
- LICENSE
|
27
|
+
- Rakefile
|
28
|
+
- README
|
29
|
+
- TODO
|
30
|
+
- VERSION.yml
|
31
|
+
- lib/dataset
|
32
|
+
- lib/dataset/base.rb
|
33
|
+
- lib/dataset/collection.rb
|
34
|
+
- lib/dataset/database
|
35
|
+
- lib/dataset/database/base.rb
|
36
|
+
- lib/dataset/database/mysql.rb
|
37
|
+
- lib/dataset/database/postgresql.rb
|
38
|
+
- lib/dataset/database/sqlite3.rb
|
39
|
+
- lib/dataset/extensions
|
40
|
+
- lib/dataset/extensions/cucumber.rb
|
41
|
+
- lib/dataset/extensions/rspec.rb
|
42
|
+
- lib/dataset/extensions/test_unit.rb
|
43
|
+
- lib/dataset/instance_methods.rb
|
44
|
+
- lib/dataset/load.rb
|
45
|
+
- lib/dataset/record
|
46
|
+
- lib/dataset/record/fixture.rb
|
47
|
+
- lib/dataset/record/meta.rb
|
48
|
+
- lib/dataset/record/model.rb
|
49
|
+
- lib/dataset/resolver.rb
|
50
|
+
- lib/dataset/session.rb
|
51
|
+
- lib/dataset/session_binding.rb
|
52
|
+
- lib/dataset/version.rb
|
53
|
+
- lib/dataset.rb
|
54
|
+
- tasks/dataset.rake
|
55
|
+
- plugit/descriptor.rb
|
56
|
+
has_rdoc: false
|
57
|
+
homepage: http://github.com/aiwilliams/dataset
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: "0"
|
74
|
+
version:
|
75
|
+
requirements: []
|
76
|
+
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 1.2.0
|
79
|
+
signing_key:
|
80
|
+
specification_version: 2
|
81
|
+
summary: A simple API for creating and finding sets of data in your database, built on ActiveRecord.
|
82
|
+
test_files: []
|
83
|
+
|