aiwilliams-dataset 1.2.0
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.
- 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
|
+
|