datum 4.0.4 → 4.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/MIT-LICENSE +44 -0
- data/README.md +11 -0
- data/Rakefile +32 -0
- data/lib/datum/container.rb +73 -0
- data/lib/datum/datum.rb +60 -0
- data/lib/datum/helpers.rb +61 -0
- data/lib/datum/version.rb +10 -0
- data/lib/datum.rb +37 -0
- data/lib/plan9/structures.rb +74 -0
- data/lib/support/scenario.rb +16 -0
- data/lib/support/test.rb +28 -0
- metadata +14 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 189dfaef662ee5db7f92dea90151f0f808987ac9
|
4
|
+
data.tar.gz: 8ffcc8a0765caac9d1a98e21862e5dd920dc159c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22383aee690483716546ebfc14aa72f4b63181b65f5eacdba1bced66882131a1beb707ca5a7a7e3ca03c25225e2b28384493e783233488ae8d554bdbea84219a
|
7
|
+
data.tar.gz: 1e148954393e12195835fd7625f60d28ae9df0d2d08890ea63177f8ed238433e1ab4df80515aaadccd620852087ab0f0ada7fa1f84b2fdb7137663f5e4c63e96
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
Copyright 2015 Tyemill
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
#### From https://github.com/iconara/immutable_struct/blob/master/LICENSE
|
23
|
+
#### Provided due to use of immutable_struct/blob/master/lib/immutable_struct.rb
|
24
|
+
|
25
|
+
Copyright (c) 2010 Theo Hultberg
|
26
|
+
|
27
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
28
|
+
a copy of this software and associated documentation files (the
|
29
|
+
"Software"), to deal in the Software without restriction, including
|
30
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
31
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
32
|
+
permit persons to whom the Software is furnished to do so, subject to
|
33
|
+
the following conditions:
|
34
|
+
|
35
|
+
The above copyright notice and this permission notice shall be
|
36
|
+
included in all copies or substantial portions of the Software.
|
37
|
+
|
38
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
39
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
40
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
41
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
42
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
43
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
44
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
##### Datum is currently being updated. Hold on.
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
## License
|
6
|
+
|
7
|
+
MIT License. Copyright 2012-2015 Tyemill. http://tyemill.com
|
8
|
+
|
9
|
+
You are not granted rights or licenses to the trademarks of Tyemill, including without limitation the Datum name or logo.
|
10
|
+
|
11
|
+
Datum struct uses ImprovedStruct and ImmutableStruct which are derivitive works based on ImmutableStruct by Theo Hultberg. This great class can be found here: [Immutable Struct](https://github.com/iconara/immutable_struct)
|
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'Datum'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
Bundler::GemHelper.install_tasks
|
21
|
+
|
22
|
+
require 'rake/testtask'
|
23
|
+
|
24
|
+
Rake::TestTask.new(:test) do |t|
|
25
|
+
t.libs << 'lib'
|
26
|
+
t.libs << 'test'
|
27
|
+
t.pattern = 'test/**/*_test.rb'
|
28
|
+
t.verbose = false
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
task default: :test
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require "datum/helpers"
|
2
|
+
|
3
|
+
module Datum
|
4
|
+
# A Container object holds attributes for a single data test.
|
5
|
+
class Container
|
6
|
+
|
7
|
+
# Creates a Hash key formatted for use with a Container.
|
8
|
+
#
|
9
|
+
# @param [TestCase] tst_instance The TestCase instance for the data_test
|
10
|
+
# @param [String] data_method_name The name of the data_test method
|
11
|
+
# @return [String] Container compatible Hash key
|
12
|
+
def self.key tst_instance, data_method_name
|
13
|
+
Helpers.build_key(tst_instance, data_method_name)
|
14
|
+
end
|
15
|
+
|
16
|
+
# @!attribute [r] data_method_name
|
17
|
+
# @return [String] The name of the data test method
|
18
|
+
attr_reader :data_method_name
|
19
|
+
|
20
|
+
# @!attribute [r] test_instance
|
21
|
+
# @return [TestCase] The ActiveSupport::TestCase instance of the data test
|
22
|
+
attr_reader :test_instance
|
23
|
+
|
24
|
+
# @!visibility private
|
25
|
+
# @param [String] data_method_name The name of test method to be called
|
26
|
+
# @param [TestCase] tst_instance The instance containing the data_method_name
|
27
|
+
def initialize(data_method_name, tst_instance)
|
28
|
+
@data_method_name = data_method_name; @test_instance = tst_instance
|
29
|
+
@loaded_data = {}; @invoked_data = {}
|
30
|
+
::Datum.send(:add_container, self,
|
31
|
+
Container.key(@test_instance, @data_method_name))
|
32
|
+
end
|
33
|
+
|
34
|
+
# @!attribute [r] count
|
35
|
+
# @return [int] The total number of tests / data elements / datums
|
36
|
+
def count; @loaded_data.count + @invoked_data.count; end;
|
37
|
+
|
38
|
+
# @!attribute [r] data
|
39
|
+
# A Hash of data elements, datum structs for the test case
|
40
|
+
#
|
41
|
+
# @return [Hash] A Hash of data elements, datum structs for the test case
|
42
|
+
def data; @loaded_data.merge(@invoked_data); end
|
43
|
+
|
44
|
+
alias_method :length, :count
|
45
|
+
alias_method :size, :count
|
46
|
+
alias_method :test_count, :count
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def add_datum datum
|
51
|
+
test_name = Helpers.build_test_name(data_method_name, test_count + 1)
|
52
|
+
@loaded_data[Datum.key(test_instance, test_name)] = datum
|
53
|
+
add_data_test test_name
|
54
|
+
[count, test_name]
|
55
|
+
end
|
56
|
+
|
57
|
+
def invoke_datum key, tst_case
|
58
|
+
@invoked_data[key] = datum = @loaded_data.delete(key)
|
59
|
+
tst_case.instance_variable_set :@datum, datum
|
60
|
+
tst_case.send datum.container.data_method_name
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_data_test test_name
|
64
|
+
test_instance.send(:define_method, test_name) do
|
65
|
+
datum_key = Datum.key(nm = self.class.to_s, __method__)
|
66
|
+
container_key = Container.key(nm,
|
67
|
+
Helpers.data_method_from_test_name(__method__))
|
68
|
+
::Datum.containers[container_key].send(:invoke_datum, datum_key, self)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
data/lib/datum/datum.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require "datum/container"
|
2
|
+
require "datum/helpers"
|
3
|
+
require "plan9/structures"
|
4
|
+
|
5
|
+
module Datum
|
6
|
+
# Datum ImmutableStruct to be extended by data_test test cases
|
7
|
+
class Datum < Plan9::ImmutableStruct
|
8
|
+
# Creates a Hash key formatted for use with a Datum
|
9
|
+
#
|
10
|
+
# @param [TestCase] test_instance The TestCase instance for the test
|
11
|
+
# @param [String] test_name The name of the test
|
12
|
+
# @return [String] Datum compatible Hash key
|
13
|
+
def self.key test_instance, test_name
|
14
|
+
Helpers.build_key(test_instance, test_name)
|
15
|
+
end
|
16
|
+
|
17
|
+
# @!visibility private
|
18
|
+
def self.new(*attrs, &block)
|
19
|
+
attrs.push "datum_id"
|
20
|
+
super(*attrs, &block)
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def self.init_new(struct)
|
26
|
+
super(struct)
|
27
|
+
datumize_constructor!(struct)
|
28
|
+
struct
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
def self.datumize_constructor! struct
|
33
|
+
|
34
|
+
struct.class_eval do
|
35
|
+
alias_method :datum_initialize, :initialize
|
36
|
+
|
37
|
+
# @!attribute [r] test_method_name
|
38
|
+
# @return [String] The name of the test method
|
39
|
+
attr_reader :test_method_name
|
40
|
+
|
41
|
+
# @!attribute [r] container
|
42
|
+
# @return [Container] A reference to the Container of this Datum
|
43
|
+
attr_reader :container
|
44
|
+
|
45
|
+
# @!visibility private
|
46
|
+
def initialize(*atrs)
|
47
|
+
dtm_id = configure_attributes
|
48
|
+
is_hash_case?(*atrs) ? atrs.first[:datum_id] = dtm_id : atrs.push(dtm_id)
|
49
|
+
datum_initialize(*atrs)
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def configure_attributes
|
54
|
+
@container = ::Datum.send(:current_container)
|
55
|
+
(dtm_id, @test_method_name = @container.send(:add_datum, self))[0]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Datum
|
2
|
+
|
3
|
+
# @!visibility private
|
4
|
+
# Various helper functions
|
5
|
+
class Helpers
|
6
|
+
class << self
|
7
|
+
|
8
|
+
# @param [String] test_name Test case name generated from data_test usage
|
9
|
+
# @return [int] The index of the data_test / datum_id
|
10
|
+
def index_from_test_name test_name
|
11
|
+
((test_name.to_s.split('_')[-1]).to_i)
|
12
|
+
end
|
13
|
+
|
14
|
+
# @param [String] test_name Test case name generated from data_test usage
|
15
|
+
# @return [String] Name of the data_test method which generated the test
|
16
|
+
def data_method_from_test_name test_name
|
17
|
+
test_name.slice(/(?<=_).*(?=_)/)
|
18
|
+
end
|
19
|
+
|
20
|
+
# @param [String] data_method_name The name of the data_test method
|
21
|
+
# @param [int] counter The index / datum_id of the current test case
|
22
|
+
# @return [String] Test name for current test case, index, data_test method
|
23
|
+
def build_test_name data_method_name, counter
|
24
|
+
"test_#{data_method_name}_#{counter}"
|
25
|
+
end
|
26
|
+
|
27
|
+
# @param [TestCase] test_instance The ActiveSupport::TestCase instance
|
28
|
+
# @param [String] method The name of the method
|
29
|
+
# @return [String] A key for usage in Datum-compatible Hash instances
|
30
|
+
def build_key test_instance, method
|
31
|
+
"#{test_instance}_#{method}"
|
32
|
+
end
|
33
|
+
|
34
|
+
# @param [String] file_name The name of the file to read
|
35
|
+
# @param [Pathname] directory A Pathname representing the file's directory
|
36
|
+
# @param [String] ext Optional extention of the file (default: '.rb')
|
37
|
+
# @return [String] The file's contents
|
38
|
+
def read_file file_name, directory, ext = ".rb"
|
39
|
+
File.read directory.join("#{file_name}#{ext}")
|
40
|
+
end
|
41
|
+
|
42
|
+
# Reads a ruby file and eval's it's contents at the current code location
|
43
|
+
#
|
44
|
+
# @param [String] file_name The name of the file to import
|
45
|
+
# @param [Pathname] directory A Pathname representing the file's directory
|
46
|
+
# @param [Binding] current_binding Context at a particular code location
|
47
|
+
def import_file file_name, directory, current_binding
|
48
|
+
eval(read_file(file_name, directory), current_binding)
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param [ActiveRecord::Base] resource An ActiveRecord Model instance
|
52
|
+
# @param [Hash] override_hash Hash of attributes / values to override from
|
53
|
+
# @return [Hash] Hash of attributes from provided resource
|
54
|
+
def clone_resource resource, override_hash = nil
|
55
|
+
override_hash.nil? ? resource.dup.attributes.with_indifferent_access :
|
56
|
+
resource.dup.attributes.merge(
|
57
|
+
override_hash.with_indifferent_access).with_indifferent_access
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/datum.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
require "datum/helpers"
|
3
|
+
require "datum/datum"
|
4
|
+
require "datum/container"
|
5
|
+
require "support/test"
|
6
|
+
require "support/scenario"
|
7
|
+
|
8
|
+
# Datum is a flexible data-driven test solution for Rails
|
9
|
+
module Datum
|
10
|
+
@@all_containers, @@scenario_path, @@data_path, @@datum_path = nil
|
11
|
+
|
12
|
+
class << self
|
13
|
+
|
14
|
+
# @!attribute [r] path
|
15
|
+
# @return [Pathname] Fully qualified path for the root of datum directory
|
16
|
+
def path; @@datum_path ||= Rails.root.join('test', 'datum'); end
|
17
|
+
|
18
|
+
# @!attribute [r] data_path
|
19
|
+
# @return [Pathname] Fully qualified path for the datum/data directory
|
20
|
+
def data_path; @@data_path ||= ::Datum.path.join('data'); end
|
21
|
+
|
22
|
+
# @!attribute [r] scenario_path
|
23
|
+
# @return [Pathname] Fully qualified path for the datum/scenarios directory
|
24
|
+
def scenario_path; @@scenario_path ||= ::Datum.path.join('scenarios'); end
|
25
|
+
|
26
|
+
# @!attribute [r] containers
|
27
|
+
# @return [Hash] Hash of all loaded Containers
|
28
|
+
def containers; @@all_containers ||= {}; end
|
29
|
+
|
30
|
+
private
|
31
|
+
def add_container container, key
|
32
|
+
::Datum.containers[key] = container
|
33
|
+
::Datum.instance_variable_set(:"@current_container", container)
|
34
|
+
end
|
35
|
+
def current_container; @current_container; end;
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# @!visibility private
|
2
|
+
module Plan9 # Module for simple code reuse between various projects.
|
3
|
+
|
4
|
+
class ImprovedStruct # A few improvements to a Ruby Struct
|
5
|
+
#
|
6
|
+
# Re-organized slightly, this code is reused from 'ImmutableStruct'
|
7
|
+
# by Theo Hultberg. See https://github.com/iconara/immutable_struct
|
8
|
+
# Copyright notice mentioned in the LICENSE file.
|
9
|
+
#
|
10
|
+
def self.new(*attrs, &block)
|
11
|
+
init_new(Struct.new(*attrs, &block))
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
def self.init_new(struct)
|
16
|
+
optionalize_constructor!(struct)
|
17
|
+
extend_dup!(struct)
|
18
|
+
struct
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def self.optionalize_constructor!(struct)
|
23
|
+
struct.class_eval do
|
24
|
+
alias_method :struct_initialize, :initialize
|
25
|
+
|
26
|
+
def initialize(*attrs)
|
27
|
+
if is_hash_case?(*attrs)
|
28
|
+
struct_initialize(*members.map { |m| attrs.first[m.to_sym] })
|
29
|
+
else
|
30
|
+
struct_initialize(*attrs)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
def is_hash_case?(*a)
|
36
|
+
# @return (bool) true if attrs are Hash, false otherwise
|
37
|
+
members.size > 1 && a && a.size == 1 && a.first.instance_of?(Hash)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.extend_dup!(struct)
|
43
|
+
struct.class_eval do
|
44
|
+
def dup(overrides={})
|
45
|
+
self.class.new(to_h.merge(overrides))
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class ImmutableStruct < ImprovedStruct # A read-only Struct
|
52
|
+
# Re-organized slightly, this code is reused from 'ImmutableStruct'
|
53
|
+
# by Theo Hultberg. See https://github.com/iconara/immutable_struct
|
54
|
+
# Copyright notice mentioned in the LICENSE file.
|
55
|
+
|
56
|
+
protected
|
57
|
+
|
58
|
+
def self.init_new(struct)
|
59
|
+
make_immutable!(struct)
|
60
|
+
super(struct)
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def self.make_immutable!(struct)
|
66
|
+
# removes the member= method, to prevent write
|
67
|
+
struct.send(:undef_method, "[]=".to_sym)
|
68
|
+
struct.members.each do |member|
|
69
|
+
struct.send(:undef_method, "#{member}=".to_sym)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
# For use in a scenario file, imports an existing scenario's code and objects
|
3
|
+
#
|
4
|
+
# @param [symbol, String] scenario_name The name of a scenario file
|
5
|
+
def __import scenario_name
|
6
|
+
::Datum::Helpers.import_file scenario_name, ::Datum.scenario_path, binding
|
7
|
+
end
|
8
|
+
|
9
|
+
# For use in a scenario file, clones the attributes of an existing instance
|
10
|
+
#
|
11
|
+
# @param [ActiveRecord::Base] resource An ActiveRecord Model instance
|
12
|
+
# @param [Hash] override_hash Hash of attributes / values to override from
|
13
|
+
# @return [Hash] Hash of attributes from provided resource
|
14
|
+
def __clone resource, override_hash = nil
|
15
|
+
::Datum::Helpers.clone_resource resource, override_hash
|
16
|
+
end
|
data/lib/support/test.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require "datum/helpers"
|
2
|
+
require "datum/container"
|
3
|
+
require "datum/datum"
|
4
|
+
|
5
|
+
# Extends ActiveSupport::Test with the process_scenario method and includes
|
6
|
+
# the Datum module
|
7
|
+
#
|
8
|
+
# @note Supports most extending test types (functional, integration, etc)
|
9
|
+
class ActiveSupport::TestCase
|
10
|
+
include Datum
|
11
|
+
# Imports a scenario file into the execution context of the current test
|
12
|
+
#
|
13
|
+
# @param [symbol, String] scenario_name The name of a scenario file
|
14
|
+
def process_scenario scenario_name
|
15
|
+
__import(scenario_name)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# Defines a test to work in conjuction with Datum struct extensions found in
|
20
|
+
# a file with the same name in the test/datum/data directory
|
21
|
+
#
|
22
|
+
# @param [String] name Name of the file in the datum/data directory
|
23
|
+
# @param [Block] block A block of Ruby code
|
24
|
+
def data_test name, &block
|
25
|
+
::Datum::Container.new(name, self)
|
26
|
+
self.send(:define_method, name, &block)
|
27
|
+
self.class_eval(::Datum::Helpers.read_file(name, ::Datum.data_path))
|
28
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyemill
|
@@ -9,42 +9,25 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2015-02-15 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rails
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 4.1.7
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 4.1.7
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: pg
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
12
|
+
dependencies: []
|
41
13
|
description: Flexible data-driven test solution for Rails
|
42
14
|
email:
|
43
15
|
- datum@tyemill.com
|
44
16
|
executables: []
|
45
17
|
extensions: []
|
46
18
|
extra_rdoc_files: []
|
47
|
-
files:
|
19
|
+
files:
|
20
|
+
- MIT-LICENSE
|
21
|
+
- README.md
|
22
|
+
- Rakefile
|
23
|
+
- lib/datum.rb
|
24
|
+
- lib/datum/container.rb
|
25
|
+
- lib/datum/datum.rb
|
26
|
+
- lib/datum/helpers.rb
|
27
|
+
- lib/datum/version.rb
|
28
|
+
- lib/plan9/structures.rb
|
29
|
+
- lib/support/scenario.rb
|
30
|
+
- lib/support/test.rb
|
48
31
|
homepage: https://github.com/tyemill/datum
|
49
32
|
licenses:
|
50
33
|
- MIT
|