cutest-cj 1.7.1 → 1.8.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/bin/cutest CHANGED
@@ -34,9 +34,11 @@ if files.any?
34
34
  env = '.env'
35
35
  rack_env = "#{env}.#{ENV['RACK_ENV']}"
36
36
 
37
- File.foreach env do |line|
38
- key, value = line.split "=", 2
39
- ENV[key] = value.gsub('\n', '').strip
37
+ if File.file? env
38
+ File.foreach env do |line|
39
+ key, value = line.split "=", 2
40
+ ENV[key] = value.gsub('\n', '').strip
41
+ end
40
42
  end
41
43
 
42
44
  if File.file? rack_env
@@ -7,7 +7,7 @@ class Cutest
7
7
  autoload :Database, 'cutest/database'
8
8
 
9
9
  unless defined?(VERSION)
10
- VERSION = "1.7.1"
10
+ VERSION = "1.8.0"
11
11
  FILTER = %r[/(ruby|jruby|rbx)[-/]([0-9\.])+]
12
12
  CACHE = Hash.new { |h, k| h[k] = File.readlines(k) }
13
13
  end
@@ -1,79 +1,6 @@
1
- class Cutest
2
- module Database
3
- extend self
4
-
5
- module Helper
6
- require 'active_record'
7
-
8
- extend ActiveSupport::Concern
9
-
10
- private
11
-
12
- def factory *attrs
13
- attrs.each do |key, value|
14
- if key.is_a? Hash
15
- key.each do |k, v|
16
- send("#{k}=", v) unless send("#{k}").present?
17
- end
18
- else
19
- send("#{key}=", value) unless send("#{key}").present?
20
- end
21
- end
22
-
23
- if respond_to?(:creator_id) and not creator_id
24
- self.creator_id = Cutest.config.creator_id
25
- end
26
-
27
- if respond_to?(:updater_id) and not updater_id
28
- self.updater_id = Cutest.config.updater_id
29
- end
30
- end
31
- end
32
-
33
- def reset database = false, options = {}
34
- connect database
35
-
36
- c = config.merge options
37
-
38
- ignore_tables = %w(schema_migrations)
39
-
40
- if c.key? :ignore_tables
41
- ignore_tables.concat c[:ignore_tables]
42
- end
43
-
44
- conn = ActiveRecord::Base.connection
45
- tables = conn.execute("show tables").map { |r| r[0] }
46
-
47
- tables.each do |t|
48
- unless ignore_tables.include? t
49
- conn.execute("SET FOREIGN_KEY_CHECKS = 0")
50
- conn.execute("TRUNCATE #{t}")
51
- conn.execute("SET FOREIGN_KEY_CHECKS = 1")
52
- end
53
- end
54
- end
55
-
56
- def connect database = false
57
- ActiveRecord::Base.default_timezone = Time.zone
58
-
59
- db = URI.parse database || config[:url]
60
-
61
- ActiveRecord::Base.establish_connection(
62
- adapter: db.scheme == 'postgres' ? 'postgresql' : db.scheme,
63
- encoding: 'utf8',
64
- reconnect: true,
65
- database: db.path[1..-1],
66
- host: db.host,
67
- port: db.port,
68
- username: db.user,
69
- password: db.password,
70
- )
71
- end
72
-
73
- def config
74
- Cutest.config.database.clone
75
- end
76
- end
1
+ if defined? Sequel
2
+ require_relative 'database/sequel_driver'
3
+ require_relative 'database/sequel_factories'
4
+ elsif defined? ActiveRecord
5
+ require_relative 'database/activerecord_driver'
77
6
  end
78
-
79
- ActiveRecord::Base.send :include, Cutest::Database::Helper
@@ -0,0 +1,79 @@
1
+ class Cutest
2
+ module Database
3
+ extend self
4
+
5
+ module Helper
6
+ require 'active_record'
7
+
8
+ extend ActiveSupport::Concern
9
+
10
+ private
11
+
12
+ def factory *attrs
13
+ attrs.each do |key, value|
14
+ if key.is_a? Hash
15
+ key.each do |k, v|
16
+ send("#{k}=", v) unless send("#{k}").present?
17
+ end
18
+ else
19
+ send("#{key}=", value) unless send("#{key}").present?
20
+ end
21
+ end
22
+
23
+ if respond_to?(:creator_id) and not creator_id
24
+ self.creator_id = Cutest.config.creator_id
25
+ end
26
+
27
+ if respond_to?(:updater_id) and not updater_id
28
+ self.updater_id = Cutest.config.updater_id
29
+ end
30
+ end
31
+ end
32
+
33
+ def reset database = false, options = {}
34
+ connect database
35
+
36
+ c = config.merge options
37
+
38
+ ignore_tables = %w(schema_migrations)
39
+
40
+ if c.key? :ignore_tables
41
+ ignore_tables.concat c[:ignore_tables]
42
+ end
43
+
44
+ conn = ActiveRecord::Base.connection
45
+ tables = conn.execute("show tables").map { |r| r[0] }
46
+
47
+ tables.each do |t|
48
+ unless ignore_tables.include? t
49
+ conn.execute("SET FOREIGN_KEY_CHECKS = 0")
50
+ conn.execute("TRUNCATE #{t}")
51
+ conn.execute("SET FOREIGN_KEY_CHECKS = 1")
52
+ end
53
+ end
54
+ end
55
+
56
+ def connect database = false
57
+ ActiveRecord::Base.default_timezone = Time.zone
58
+
59
+ db = URI.parse database || config[:url]
60
+
61
+ ActiveRecord::Base.establish_connection(
62
+ adapter: db.scheme == 'postgres' ? 'postgresql' : db.scheme,
63
+ encoding: 'utf8',
64
+ reconnect: true,
65
+ database: db.path[1..-1],
66
+ host: db.host,
67
+ port: db.port,
68
+ username: db.user,
69
+ password: db.password,
70
+ )
71
+ end
72
+
73
+ def config
74
+ Cutest.config.database.clone
75
+ end
76
+ end
77
+ end
78
+
79
+ ActiveRecord::Base.send :include, Cutest::Database::Helper
@@ -0,0 +1,33 @@
1
+ class Cutest
2
+ module Database
3
+ extend self
4
+
5
+ def reset database = false, options = {}
6
+ db = connect database
7
+
8
+ c = config.merge options
9
+
10
+ ignore_tables = %w(schema_migrations)
11
+
12
+ if c.key? :ignore_tables
13
+ ignore_tables.concat c[:ignore_tables]
14
+ end
15
+
16
+ db.tables.each do |t|
17
+ unless ignore_tables.include? t
18
+ db.run("SET FOREIGN_KEY_CHECKS = 0")
19
+ db.run("TRUNCATE #{t}")
20
+ db.run("SET FOREIGN_KEY_CHECKS = 1")
21
+ end
22
+ end
23
+ end
24
+
25
+ def connect database = false
26
+ @db ||= Sequel.connect database || config[:url]
27
+ end
28
+
29
+ def config
30
+ Cutest.config.database.clone
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,128 @@
1
+ require 'sequel'
2
+
3
+ module Sequel
4
+ class Factory
5
+ def initialize(values_proc)
6
+ @values_proc = values_proc
7
+ end
8
+
9
+ # The Proc this factory uses to generate a new set of values.
10
+ attr_reader :values_proc
11
+
12
+ # Merges all key/value pairs generated by this factory into the
13
+ # given +values+ hash.
14
+ def apply_values(values={})
15
+ @values = values
16
+ instance_eval(&values_proc)
17
+ @values
18
+ end
19
+
20
+ # Merges all key/value pairs that are generated by the given +factory+ into
21
+ # the values currently being generated by this factory. Should be called
22
+ # inside a values Proc to include values from some higher-level factory.
23
+ #
24
+ # User.factory do
25
+ # name Randgen.name
26
+ # end
27
+ #
28
+ # User.factory(:with_url) do
29
+ # include_factory User.factory
30
+ # url "http://www.example.com"
31
+ # end
32
+ #
33
+ # User.make # Has only a name property
34
+ # User.make(:with_url) # Has both name *and* url properties
35
+ def include_factory(factory)
36
+ factory.apply_values(@values)
37
+ end
38
+
39
+ alias_method :include, :include_factory
40
+
41
+ # Gets/sets the value of the given +key+. If any +args+ are provided, the
42
+ # value is set to the first one. Otherwise, if a block is given it will be
43
+ # called with a number unique to the given +key+ (like a sequence) and the
44
+ # return value of the block is used as the value.
45
+ def method_missing(key, *args)
46
+ if args.any?
47
+ @values[key] = args.first
48
+ elsif block_given?
49
+ @counts ||= {}
50
+ @counts[key] ||= 0
51
+ @counts[key] += 1
52
+ @values[key] = yield(@counts[key])
53
+ end
54
+
55
+ @values[key]
56
+ end
57
+ end
58
+
59
+ class Model
60
+ class << self
61
+ attr_writer :factory_method
62
+ end
63
+
64
+ # Returns the name of the Sequel::Model class method that this factory uses
65
+ # to make new instances. Defaults to +:create+. Other useful methods are
66
+ # +:new+ (to prevent saving to the database) and +:find_or_create+ (to avoid
67
+ # uniqueness constraints in the database).
68
+ def self.factory_method
69
+ return @factory_method unless @factory_method.nil?
70
+ return superclass.factory_method if superclass.respond_to?(:factory_method)
71
+ :create
72
+ end
73
+
74
+ # A Hash of factories for this model, keyed by factory name.
75
+ def self.factories
76
+ @factories ||= {}
77
+ end
78
+
79
+ # Gets/sets the factory with the given +name+. If a block is given, uses that
80
+ # block to create a new factory.
81
+ def self.factory(name=:default)
82
+ factories[name] = Factory.new(Proc.new) if block_given?
83
+ factories[name]
84
+ end
85
+
86
+ def self.has_factory?(name)
87
+ not factory(name).nil?
88
+ end
89
+
90
+ # Makes an instance of this model using the factories with the given
91
+ # +factory_names+. Any +values+ given to this method will override
92
+ # factory-produced values with the same name after all factory values have
93
+ # been generated. The default factory is used if no factory names are given.
94
+ #
95
+ # Note: If +values+ is not a Hash, it will be used as a factory name.
96
+ def self.make(values={}, *factory_names)
97
+ unless Hash === values
98
+ factory_names.unshift(values)
99
+ values = {}
100
+ end
101
+
102
+ factory_names << :default if factory_names.empty?
103
+
104
+ factory_values = factory_names.inject({}) do |memo, name|
105
+ fac = factory(name) or raise "Unknown #{self} factory: #{name}"
106
+ fac.apply_values(memo)
107
+ end
108
+
109
+ send factory_method, factory_values.merge(values)
110
+ end
111
+
112
+ # Forces the #factory_method to be the given +method+ temporarily while an
113
+ # instance is made, then reverts to the old factory method.
114
+ def self.make_with(method, *args)
115
+ tmp = @factory_method
116
+ @factory_method = method
117
+ obj = make(*args)
118
+ @factory_method = tmp
119
+ obj
120
+ end
121
+
122
+ # Sugar for +make_with(:new, *args)+. Useful when the #factory_method is
123
+ # something other than +:new+ but you still want to use it.
124
+ def self.build(*args)
125
+ make_with(:new, *args)
126
+ end
127
+ end
128
+ end
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  test "output of successful run" do
2
4
  expected = "•"
3
5
 
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cutest-cj
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.1
4
+ version: 1.8.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Damian Janowski
@@ -10,62 +11,70 @@ authors:
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2014-08-18 00:00:00.000000000 Z
14
+ date: 2014-09-10 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: pry
17
18
  requirement: !ruby/object:Gem::Requirement
19
+ none: false
18
20
  requirements:
19
- - - '>='
21
+ - - ! '>='
20
22
  - !ruby/object:Gem::Version
21
23
  version: '0'
22
24
  type: :runtime
23
25
  prerelease: false
24
26
  version_requirements: !ruby/object:Gem::Requirement
27
+ none: false
25
28
  requirements:
26
- - - '>='
29
+ - - ! '>='
27
30
  - !ruby/object:Gem::Version
28
31
  version: '0'
29
32
  - !ruby/object:Gem::Dependency
30
33
  name: awesome_print
31
34
  requirement: !ruby/object:Gem::Requirement
35
+ none: false
32
36
  requirements:
33
- - - '>='
37
+ - - ! '>='
34
38
  - !ruby/object:Gem::Version
35
39
  version: '0'
36
40
  type: :runtime
37
41
  prerelease: false
38
42
  version_requirements: !ruby/object:Gem::Requirement
43
+ none: false
39
44
  requirements:
40
- - - '>='
45
+ - - ! '>='
41
46
  - !ruby/object:Gem::Version
42
47
  version: '0'
43
48
  - !ruby/object:Gem::Dependency
44
49
  name: clap
45
50
  requirement: !ruby/object:Gem::Requirement
51
+ none: false
46
52
  requirements:
47
- - - '>='
53
+ - - ! '>='
48
54
  - !ruby/object:Gem::Version
49
55
  version: '0'
50
56
  type: :runtime
51
57
  prerelease: false
52
58
  version_requirements: !ruby/object:Gem::Requirement
59
+ none: false
53
60
  requirements:
54
- - - '>='
61
+ - - ! '>='
55
62
  - !ruby/object:Gem::Version
56
63
  version: '0'
57
64
  - !ruby/object:Gem::Dependency
58
65
  name: mocoso
59
66
  requirement: !ruby/object:Gem::Requirement
67
+ none: false
60
68
  requirements:
61
- - - '>='
69
+ - - ! '>='
62
70
  - !ruby/object:Gem::Version
63
71
  version: '0'
64
72
  type: :runtime
65
73
  prerelease: false
66
74
  version_requirements: !ruby/object:Gem::Requirement
75
+ none: false
67
76
  requirements:
68
- - - '>='
77
+ - - ! '>='
69
78
  - !ruby/object:Gem::Version
70
79
  version: '0'
71
80
  description: Run tests in separate processes to avoid shared state.
@@ -87,6 +96,9 @@ files:
87
96
  - cutest.gemspec
88
97
  - lib/cutest.rb
89
98
  - lib/cutest/database.rb
99
+ - lib/cutest/database/activerecord_driver.rb
100
+ - lib/cutest/database/sequel_driver.rb
101
+ - lib/cutest/database/sequel_factories.rb
90
102
  - test/assert.rb
91
103
  - test/assert_equal.rb
92
104
  - test/assert_raise.rb
@@ -104,26 +116,26 @@ files:
104
116
  homepage: https://github.com/djanowski/cutest
105
117
  licenses:
106
118
  - MIT
107
- metadata: {}
108
119
  post_install_message:
109
120
  rdoc_options: []
110
121
  require_paths:
111
122
  - lib
112
123
  required_ruby_version: !ruby/object:Gem::Requirement
124
+ none: false
113
125
  requirements:
114
- - - '>='
126
+ - - ! '>='
115
127
  - !ruby/object:Gem::Version
116
128
  version: '0'
117
129
  required_rubygems_version: !ruby/object:Gem::Requirement
130
+ none: false
118
131
  requirements:
119
- - - '>='
132
+ - - ! '>='
120
133
  - !ruby/object:Gem::Version
121
134
  version: '0'
122
135
  requirements: []
123
136
  rubyforge_project:
124
- rubygems_version: 2.0.14
137
+ rubygems_version: 1.8.23
125
138
  signing_key:
126
- specification_version: 4
139
+ specification_version: 3
127
140
  summary: Forking tests.
128
141
  test_files: []
129
- has_rdoc:
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 224cb7bb171191f5c0e9ceeea0299171871c0d8f
4
- data.tar.gz: f8d25e5a5ca28c3fa07d00c3562da48ecb233193
5
- SHA512:
6
- metadata.gz: 09b987489d3e419b21a31d386bfe7fd6a06b67970d8168d6d0914a69816bb83c48fdc14dac566db619c0b552bd0793f618f5abc8e6824d8d4cab14f16ba6ed81
7
- data.tar.gz: 3a439c1113fde62e73b28e297a3d9e2562237dbcc87ec6b4126f53efc267735be90f2a6d4772c8b73ec38e38e7e1812be41ccbf1d41ab50dbb3b46fddb6e173a