datum 4.0.5 → 4.0.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 189dfaef662ee5db7f92dea90151f0f808987ac9
4
- data.tar.gz: 8ffcc8a0765caac9d1a98e21862e5dd920dc159c
3
+ metadata.gz: bd0ab8b68f08c7c3ce0ff9696276bdc83bf10bb6
4
+ data.tar.gz: 5b5d2a2e7ef9e75f35372c1e857e8b36438ac784
5
5
  SHA512:
6
- metadata.gz: 22383aee690483716546ebfc14aa72f4b63181b65f5eacdba1bced66882131a1beb707ca5a7a7e3ca03c25225e2b28384493e783233488ae8d554bdbea84219a
7
- data.tar.gz: 1e148954393e12195835fd7625f60d28ae9df0d2d08890ea63177f8ed238433e1ab4df80515aaadccd620852087ab0f0ada7fa1f84b2fdb7137663f5e4c63e96
6
+ metadata.gz: 0dc8e628d38230f0f6a5165119a334c282dad89d9a684105ed38baa63111d0731b85d39f9a40b7cc0fb399385774cc0a1dd64cef92f5ce591869f6573ec490fc
7
+ data.tar.gz: f6a92f4847a45bf59e91fa3def51b9f9f6577ab7bb98f51c40ffd7925d5860cb69f05927ee1f475e0fe0fbcbaac8dc7ab1ddcdd3772bde99701bbf439c3efc7b
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datum
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.5
4
+ version: 4.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyemill
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-15 00:00:00.000000000 Z
11
+ date: 2015-04-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Flexible data-driven test solution for Rails
14
14
  email:
@@ -16,18 +16,7 @@ email:
16
16
  executables: []
17
17
  extensions: []
18
18
  extra_rdoc_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
19
+ files: []
31
20
  homepage: https://github.com/tyemill/datum
32
21
  licenses:
33
22
  - MIT
@@ -48,7 +37,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
48
37
  version: '0'
49
38
  requirements: []
50
39
  rubyforge_project:
51
- rubygems_version: 2.2.2
40
+ rubygems_version: 2.4.5
52
41
  signing_key:
53
42
  specification_version: 4
54
43
  summary: Flexible data-driven test solution for Rails
data/MIT-LICENSE DELETED
@@ -1,44 +0,0 @@
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 DELETED
@@ -1,11 +0,0 @@
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 DELETED
@@ -1,32 +0,0 @@
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
@@ -1,73 +0,0 @@
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 DELETED
@@ -1,60 +0,0 @@
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
data/lib/datum/helpers.rb DELETED
@@ -1,61 +0,0 @@
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/version.rb DELETED
@@ -1,10 +0,0 @@
1
- module Datum
2
- VERSION = "4.0.5"
3
- end
4
-
5
-
6
- ## 0.8.1 - 0.9.2
7
- ## Original datum, proof-of-concept
8
- ##
9
- ## 4.0.0
10
- ## Full rewrite, updated with latest concepts and code -- Still in Testing
data/lib/datum.rb DELETED
@@ -1,37 +0,0 @@
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
@@ -1,74 +0,0 @@
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
@@ -1,16 +0,0 @@
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 DELETED
@@ -1,28 +0,0 @@
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