aiwilliams-dataset 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ module Dataset
2
+ module VERSION #:nodoc:
3
+ MAJOR = 1
4
+ MINOR = 0
5
+ TINY = 0
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join('.')
8
+ end
9
+ end
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
@@ -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
+