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.
@@ -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
+