dao 5.5.0 → 8.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +6 -14
  2. data/README.md +258 -0
  3. data/Rakefile +4 -5
  4. data/coerce-0.0.8/README +28 -0
  5. data/coerce-0.0.8/Rakefile +392 -0
  6. data/coerce-0.0.8/coerce.gemspec +31 -0
  7. data/coerce-0.0.8/lib/coerce.rb +210 -0
  8. data/dao.gemspec +38 -25
  9. data/lib/dao.rb +18 -81
  10. data/lib/dao/_lib.rb +42 -0
  11. data/lib/dao/active_record.rb +8 -8
  12. data/lib/dao/api/call.rb +19 -4
  13. data/lib/dao/api/dsl.rb +1 -1
  14. data/lib/dao/coerce.rb +211 -0
  15. data/lib/dao/conducer.rb +10 -14
  16. data/lib/dao/conducer/controller_support.rb +5 -0
  17. data/lib/dao/conducer/view_support.rb +0 -2
  18. data/lib/dao/db.rb +0 -1
  19. data/lib/dao/errors.rb +17 -11
  20. data/lib/dao/errors2html.rb +128 -0
  21. data/lib/dao/form.rb +13 -16
  22. data/lib/dao/messages.rb +0 -4
  23. data/lib/dao/path.rb +1 -1
  24. data/lib/dao/route.rb +2 -2
  25. data/lib/dao/status.rb +3 -4
  26. data/lib/dao/support.rb +26 -19
  27. data/lib/dao/upload.rb +0 -1
  28. data/lib/dao/validations/common.rb +6 -6
  29. data/lib/dao/validations/validator.rb +3 -3
  30. data/lib/dao/wrap.rb +259 -0
  31. data/tasks/default.rake +207 -0
  32. data/tasks/this.rb +207 -0
  33. data/test/active_model_conducer_lint_test.rb +3 -11
  34. data/test/api_test.rb +24 -35
  35. data/test/conducer_test.rb +37 -47
  36. data/test/errors_test.rb +29 -13
  37. data/test/form_test.rb +24 -34
  38. data/test/rake_rerun_reporter.rb +74 -0
  39. data/test/support_test.rb +9 -14
  40. data/test/test_helper.rb +220 -0
  41. data/test/{helper.rb → util.rb} +0 -0
  42. data/test/validations_test.rb +14 -28
  43. data/wrap-1.5.2/README +57 -0
  44. data/wrap-1.5.2/Rakefile +394 -0
  45. data/wrap-1.5.2/lib/wrap.rb +295 -0
  46. data/{test → wrap-1.5.2/test}/testing.rb +0 -1
  47. data/wrap-1.5.2/test/wrap_test.rb +397 -0
  48. data/wrap-1.5.2/wrap.gemspec +38 -0
  49. metadata +47 -103
  50. data/Gemfile +0 -16
  51. data/Gemfile.lock +0 -118
  52. data/README +0 -256
@@ -1,7 +1,22 @@
1
1
  # -*- encoding : utf-8 -*-
2
- Testing Dao::Errors do
2
+ require_relative 'test_helper'
3
+ class DaoErrorsTest < Dao::TestCase
3
4
 
4
- testing 'that conducer-less error objects scopes keys in a generic fashion' do
5
+ test 'that errors have #to_html' do
6
+ e = Dao::Errors.new
7
+
8
+ e.add 'is fucked'
9
+ e.add 'foo is fucked'
10
+
11
+ actual = e.to_html
12
+
13
+ expected = <<-__
14
+ __
15
+
16
+ assert compress(actual) == compress(expected)
17
+ end
18
+
19
+ test 'that conducer-less error objects scopes keys in a generic fashion' do
5
20
  e = Dao::Errors.new
6
21
 
7
22
  e.add 'is fucked'
@@ -19,7 +34,7 @@ Testing Dao::Errors do
19
34
  assert compress(actual) == compress(expected)
20
35
  end
21
36
 
22
- testing 'that conducer-based error objects scope keys in a model_name based fashion' do
37
+ test 'that conducer-based error objects scope keys in a model_name based fashion' do
23
38
  c = new_foo_conducer
24
39
 
25
40
  e = c.errors
@@ -29,7 +44,7 @@ Testing Dao::Errors do
29
44
  e.add :first_name, 'is fucked'
30
45
  e.add :last_name, 'is fucked'
31
46
 
32
- actual = e.to_text
47
+ actual = e.to_text
33
48
 
34
49
  expected = <<-__
35
50
  ---
@@ -45,6 +60,16 @@ Testing Dao::Errors do
45
60
  assert compress(actual) == compress(expected)
46
61
  end
47
62
 
63
+ =begin
64
+ test 'that `nested` errors `nest`' do
65
+ e = Dao::Errors.new
66
+
67
+ e.relay 'foo.bar' => 'is fucked'
68
+
69
+ p e.to_hash
70
+ assert e.to_hash == {'foo' => {'bar' => 'is fucked'}}
71
+ end
72
+ =end
48
73
 
49
74
 
50
75
  protected
@@ -70,12 +95,3 @@ protected
70
95
  end
71
96
  alias_method :new_conducer, :new_foo_conducer
72
97
  end
73
-
74
- BEGIN {
75
- testdir = File.dirname(File.expand_path(__FILE__))
76
- rootdir = File.dirname(testdir)
77
- libdir = File.join(rootdir, 'lib')
78
- require File.join(libdir, 'dao')
79
- require File.join(testdir, 'testing')
80
- require 'stringio'
81
- }
@@ -1,25 +1,26 @@
1
1
  # -*- encoding : utf-8 -*-
2
- Testing Dao::Form do
3
- testing '.new' do
4
- form = new_form()
5
- form = new_named_form()
2
+ require_relative 'test_helper'
3
+ class DaoFormTest < ::Dao::TestCase
4
+ test '.new' do
5
+ _ = new_form()
6
+ _ = new_named_form()
6
7
  end
7
8
 
8
- testing 'name_for' do
9
+ test 'name_for' do
9
10
  assert{ Dao::Form.name_for(:foo, :a, :b) == 'dao[foo][a.b]' }
10
11
  assert{ new_form.name_for(:a, :b) == 'dao[form][a.b]' }
11
12
  assert{ new_named_form.name_for(:a, :b) == 'dao[name][a.b]' }
12
13
  assert{ new_named_form(:foo).name_for(:a, :b) == 'dao[foo][a.b]' }
13
14
  end
14
15
 
15
- testing 'scope_for' do
16
+ test 'scope_for' do
16
17
  form = new_form()
17
18
 
18
19
  assert do
19
20
  html = form.input(:bar)
20
21
  scmp(
21
22
  html,
22
- '<input type="text" name="dao[form][bar]" class="dao" id="form_bar"/>'
23
+ '<input type="text" name="dao[form][bar]" class="dao" id="form--bar"/>'
23
24
  )
24
25
  end
25
26
 
@@ -28,7 +29,7 @@ Testing Dao::Form do
28
29
  html = form.input(:bar)
29
30
  scmp(
30
31
  html,
31
- '<input type="text" name="dao[form][foo.bar]" class="dao" id="form_foo-bar"/>'
32
+ '<input type="text" name="dao[form][foo.bar]" class="dao" id="form--foo-bar"/>'
32
33
  )
33
34
  end
34
35
  end
@@ -37,12 +38,12 @@ Testing Dao::Form do
37
38
  html = form.input(:bar)
38
39
  scmp(
39
40
  html,
40
- '<input type="text" name="dao[form][bar]" class="dao" id="form_bar"/>'
41
+ '<input type="text" name="dao[form][bar]" class="dao" id="form--bar"/>'
41
42
  )
42
43
  end
43
44
  end
44
45
 
45
- testing 'Form#select' do
46
+ test 'Form#select' do
46
47
  #
47
48
  form = new_form()
48
49
  form.attributes.set :key => 42
@@ -52,7 +53,7 @@ Testing Dao::Form do
52
53
  assert do
53
54
  scmp(
54
55
  html,
55
- '<select name="dao[form][key]" class="dao" id="form_key"/>'
56
+ '<select name="dao[form][key]" class="dao" id="form--key"> </select>'
56
57
  )
57
58
  end
58
59
 
@@ -61,7 +62,7 @@ Testing Dao::Form do
61
62
  assert do
62
63
  scmp(
63
64
  html,
64
- '<select name="dao[form][key]" class="dao" id="form_key"><option value="a">a</option><option value="b">b</option><option value="c">c</option></select>'
65
+ '<select name="dao[form][key]" class="dao" id="form--key"><option value="a">a</option><option value="b">b</option><option value="c">c</option></select>'
65
66
  )
66
67
  end
67
68
 
@@ -70,7 +71,7 @@ Testing Dao::Form do
70
71
  assert do
71
72
  scmp(
72
73
  html,
73
- '<select name="dao[form][key]" class="dao" id="form_key"><option value="1">A</option><option value="2">B</option><option value="3">C</option></select>'
74
+ '<select name="dao[form][key]" class="dao" id="form--key"><option value="1">A</option><option value="2">B</option><option value="3">C</option></select>'
74
75
  )
75
76
  end
76
77
 
@@ -79,7 +80,7 @@ Testing Dao::Form do
79
80
  assert do
80
81
  scmp(
81
82
  html,
82
- '<select name="dao[form][key]" class="dao" id="form_key"><option></option><option value="a">a</option><option value="b">b</option><option value="c">c</option></select>'
83
+ '<select name="dao[form][key]" class="dao" id="form--key"><option></option><option value="a">a</option><option value="b">b</option><option value="c">c</option></select>'
83
84
  )
84
85
  end
85
86
 
@@ -88,7 +89,7 @@ Testing Dao::Form do
88
89
  assert do
89
90
  scmp(
90
91
  html,
91
- '<select name="dao[form][key]" class="dao" id="form_key"><option></option><option value="a">a</option><option value="b">b</option><option value="c">c</option></select>'
92
+ '<select name="dao[form][key]" class="dao" id="form--key"><option></option><option value="a">a</option><option value="b">b</option><option value="c">c</option></select>'
92
93
  )
93
94
  end
94
95
 
@@ -97,7 +98,7 @@ Testing Dao::Form do
97
98
  assert do
98
99
  scmp(
99
100
  html,
100
- '<select name="dao[form][key]" class="dao" id="form_key"><option value="">42</option><option value="a">a</option><option value="b">b</option><option value="c">c</option></select>'
101
+ '<select name="dao[form][key]" class="dao" id="form--key"><option value="">42</option><option value="a">a</option><option value="b">b</option><option value="c">c</option></select>'
101
102
  )
102
103
  end
103
104
 
@@ -106,7 +107,7 @@ Testing Dao::Form do
106
107
  assert do
107
108
  scmp(
108
109
  html,
109
- '<select name="dao[form][key]" class="dao" id="form_key"><option value="a">a</option><option value="b">b</option><option value="c">c</option></select>'
110
+ '<select name="dao[form][key]" class="dao" id="form--key"><option value="a">a</option><option value="b">b</option><option value="c">c</option></select>'
110
111
  )
111
112
  end
112
113
 
@@ -115,7 +116,7 @@ Testing Dao::Form do
115
116
  assert do
116
117
  scmp(
117
118
  html,
118
- '<select name="dao[form][key]" class="dao" id="form_key"><option value="a">a</option><option value="b" selected>b</option><option value="c">c</option></select>'
119
+ '<select name="dao[form][key]" class="dao" id="form--key"><option value="a">a</option><option value="b" selected>b</option><option value="c">c</option></select>'
119
120
  )
120
121
  end
121
122
 
@@ -130,7 +131,7 @@ Testing Dao::Form do
130
131
  assert do
131
132
  scmp(
132
133
  html,
133
- '<select name="dao[form][key]" class="dao" id="form_key"><option value="41">41</option><option value="42" selected>42</option><option value="43">43</option></select>'
134
+ '<select name="dao[form][key]" class="dao" id="form--key"><option value="41">41</option><option value="42" selected>42</option><option value="43">43</option></select>'
134
135
  )
135
136
  end
136
137
 
@@ -145,7 +146,7 @@ Testing Dao::Form do
145
146
  assert do
146
147
  scmp(
147
148
  html,
148
- '<select name="dao[form][key]" class="dao" id="form_key"><option value="41">41</option><option value="42" selected>42</option><option value="43">43</option></select>'
149
+ '<select name="dao[form][key]" class="dao" id="form--key"><option value="41">41</option><option value="42" selected>42</option><option value="43">43</option></select>'
149
150
  )
150
151
  end
151
152
 
@@ -160,14 +161,15 @@ Testing Dao::Form do
160
161
  assert do
161
162
  scmp(
162
163
  html,
163
- '<select name="dao[form][key]" class="dao" id="form_key"><option value="41">41</option><option value="42" selected>42</option><option value="43">43</option></select>'
164
+ '<select name="dao[form][key]" class="dao" id="form--key"><option value="41">41</option><option value="42" selected>42</option><option value="43">43</option></select>'
164
165
  )
165
166
  end
166
167
  end
167
168
 
168
169
  protected
169
170
  def new_form
170
- assert{ Dao::Form.new }
171
+ #assert{ Dao::Form.new }
172
+ Dao::Form.new
171
173
  end
172
174
 
173
175
  def new_named_form(name = 'name')
@@ -182,15 +184,3 @@ protected
182
184
  assert{ Dao::Form.new(object) }
183
185
  end
184
186
  end
185
-
186
-
187
-
188
- BEGIN {
189
- testdir = File.dirname(File.expand_path(__FILE__))
190
- rootdir = File.dirname(testdir)
191
- libdir = File.join(rootdir, 'lib')
192
-
193
- require File.join(libdir, 'dao')
194
- require File.join(testdir, 'testing')
195
- require File.join(testdir, 'helper')
196
- }
@@ -0,0 +1,74 @@
1
+ require "minitest/reporters"
2
+
3
+ module Minitest
4
+ module Reporters
5
+ class RakeRerunReporter < Minitest::Reporters::DefaultReporter
6
+
7
+ def initialize(options = {})
8
+ @rerun_user_prefix=options.fetch(:rerun_prefix, "")
9
+ super
10
+ end
11
+
12
+ def report
13
+ super
14
+
15
+ puts
16
+
17
+ unless @fast_fail
18
+ #print rerun commands
19
+ failed_or_error_tests=(tests.select {|t| t.failure && !t.skipped? })
20
+
21
+ unless failed_or_error_tests.empty?
22
+ puts red("You can rerun failed/error test by commands (you can add rerun prefix with 'rerun_prefix' option):")
23
+
24
+ failed_or_error_tests.each do |test|
25
+ print_rerun_command(test)
26
+ end
27
+ end
28
+ end
29
+
30
+ #summary for all suite again
31
+ puts
32
+ print colored_for(suite_result, result_line)
33
+ puts
34
+
35
+ end
36
+
37
+ private
38
+
39
+ def print_rerun_command(test)
40
+ message = rerun_message_for(test)
41
+ unless message.nil? || message.strip == ''
42
+ puts
43
+ puts colored_for(result(test), message)
44
+ end
45
+ end
46
+
47
+ def rerun_message_for(test)
48
+ file_path=location(test.failure).gsub(/(\:\d*)\z/,"")
49
+ msg="#{@rerun_user_prefix} rake test TEST=#{file_path} TESTOPTS=\"--name=#{test.name} -v\""
50
+ if test.skipped?
51
+ "Skipped: \n#{msg}"
52
+ elsif test.error?
53
+ "Error:\n#{msg}"
54
+ else
55
+ "Failure:\n#{msg}"
56
+ end
57
+ end
58
+
59
+ def location(exception)
60
+ last_before_assertion = ''
61
+
62
+ exception.backtrace.reverse_each do |ss|
63
+ break if ss =~ /in .(assert|refute|flunk|pass|fail|raise|must|wont)/
64
+ last_before_assertion = ss
65
+ break if ss=~ /_test.rb\:/
66
+ end
67
+
68
+ last_before_assertion.sub(/:in .*$/, '')
69
+ end
70
+
71
+ end
72
+ end
73
+ end
74
+
@@ -1,20 +1,22 @@
1
1
  # -*- encoding : utf-8 -*-
2
- Testing Dao::Conducer do
3
- testing 'that dao has a root' do
2
+ require_relative 'test_helper'
3
+
4
+ class Dao::ModuleTest < Dao::TestCase
5
+ test 'that dao has a root' do
4
6
  assert{ Dao.respond_to?(:root) }
5
7
  assert{ Dao.root }
6
8
  end
7
9
 
8
- testing 'that dao can build a mock controller' do
10
+ test 'that dao can build a mock controller' do
9
11
  controller = assert{ Dao.mock_controller }
10
12
  assert{ controller.url_for '/' }
11
13
  end
12
14
 
13
- testing 'that dao can mark the current_controller' do
15
+ test 'that dao can mark the current_controller' do
14
16
  assert{ Dao.current_controller = Dao.mock_controller }
15
17
  end
16
18
 
17
- testing 'that dao can pre-process parameters' do
19
+ test 'that dao can pre-process parameters' do
18
20
  params = Map.new(
19
21
  'dao' => {
20
22
  'foos' => {
@@ -33,6 +35,8 @@ Testing Dao::Conducer do
33
35
 
34
36
  assert{ Dao.normalize_parameters(params) }
35
37
 
38
+ #require 'pry'
39
+ #binding.pry
36
40
  assert{ params[:foos].is_a?(Hash) }
37
41
  assert{ params[:foos][:k] == 'v' }
38
42
  assert{ params[:foos][:array] == %w( 0 1 ) }
@@ -43,12 +47,3 @@ Testing Dao::Conducer do
43
47
  assert{ params[:bars]['42'] == 'foobar' }
44
48
  end
45
49
  end
46
-
47
-
48
- BEGIN {
49
- testdir = File.dirname(File.expand_path(__FILE__))
50
- rootdir = File.dirname(testdir)
51
- libdir = File.join(rootdir, 'lib')
52
- require File.join(libdir, 'dao')
53
- require File.join(testdir, 'testing')
54
- }
@@ -0,0 +1,220 @@
1
+ # -*- encoding : utf-8 -*-
2
+ gem "minitest"
3
+ #require "minitest/autorun"
4
+ #require "minitest/reporters"
5
+
6
+ #require 'rake_rerun_reporter'
7
+ #reporter_options = { color: true, slow_count: 5, verbose: false, rerun_prefix: "bundle exec" }
8
+ #Minitest::Reporters.use! [Minitest::Reporters::RakeRerunReporter.new(reporter_options)]
9
+
10
+ require "dao"
11
+ require_relative "util"
12
+
13
+ class Dao::TestCase < ActiveSupport::TestCase
14
+ class << self
15
+ def context(*args, &block)
16
+ return contexts.last if(args.empty? and block.nil?)
17
+ block.call
18
+ end
19
+ end
20
+
21
+
22
+ Missing = Object.new.freeze
23
+
24
+ alias_method('__assert__', 'assert')
25
+
26
+ def missing
27
+ Dao::TestCase::Missing
28
+ end
29
+
30
+ def assert(*args, &block)
31
+ if args.size == 1 and args.first.is_a?(Hash)
32
+ options = args.first
33
+ expected = getopt(:expected, options){ missing }
34
+ actual = getopt(:actual, options){ missing }
35
+ if expected == missing and actual == missing
36
+ actual, expected, *_ = options.to_a.flatten
37
+ end
38
+ expected = expected.call() if expected.respond_to?(:call)
39
+ actual = actual.call() if actual.respond_to?(:call)
40
+ assert_equal(expected, actual)
41
+ end
42
+
43
+ if block
44
+ label = "assert(#{ args.join(' ') })"
45
+ result = nil
46
+ result = block.call
47
+ __assert__(result, label)
48
+ result
49
+ else
50
+ result = args.shift
51
+ label = "assert(#{ args.join(' ') })"
52
+ __assert__(result, label)
53
+ result
54
+ end
55
+ end
56
+
57
+ def getopt(opt, hash, options = nil, &block)
58
+ [opt.to_s, opt.to_s.to_sym].each do |key|
59
+ return hash[key] if hash.has_key?(key)
60
+ end
61
+ default =
62
+ if block
63
+ block.call
64
+ else
65
+ options.is_a?(Hash) ? options[:default] : nil
66
+ end
67
+ return default
68
+ end
69
+
70
+ end
71
+
72
+ __END__
73
+ def Testing(*args, &block)
74
+ Class.new(::MiniTest::Test) do
75
+
76
+ ## class methods
77
+ #
78
+ class << self
79
+ def contexts
80
+ @contexts ||= []
81
+ end
82
+
83
+ def context(*args, &block)
84
+ return contexts.last if(args.empty? and block.nil?)
85
+
86
+ context = Testing::Context.new(*args)
87
+ contexts.push(context)
88
+
89
+ begin
90
+ block.call(context)
91
+ ensure
92
+ contexts.pop
93
+ end
94
+ end
95
+
96
+ def slug_for(*args)
97
+ string = [context, args].flatten.compact.join('-')
98
+ words = string.to_s.scan(%r/\w+/)
99
+ words.map!{|word| word.gsub %r/[^0-9a-zA-Z_-]/, ''}
100
+ words.delete_if{|word| word.nil? or word.strip.empty?}
101
+ words.join('-').downcase.sub(/_$/, '')
102
+ end
103
+
104
+ def name() const_get(:Name) end
105
+
106
+ def testno()
107
+ '%05d' % (@testno ||= 0)
108
+ ensure
109
+ @testno += 1
110
+ end
111
+
112
+ def testing(*args, &block)
113
+ method = ["test", testno, slug_for(*args)].delete_if{|part| part.empty?}.join('_')
114
+ define_method(method, &block)
115
+ end
116
+
117
+ def test(*args, &block)
118
+ testing(*args, &block)
119
+ end
120
+
121
+ def setup(&block)
122
+ define_method(:setup, &block) if block
123
+ end
124
+
125
+ def teardown(&block)
126
+ define_method(:teardown, &block) if block
127
+ end
128
+
129
+ def prepare(&block)
130
+ @prepare ||= []
131
+ @prepare.push(block) if block
132
+ @prepare
133
+ end
134
+
135
+ def cleanup(&block)
136
+ @cleanup ||= []
137
+ @cleanup.push(block) if block
138
+ @cleanup
139
+ end
140
+ end
141
+
142
+ ## configure the subclass!
143
+ #
144
+ const_set(:Testno, '0')
145
+ slug = slug_for(*args).gsub(%r/-/,'_')
146
+ name = ['TESTING', '%03d' % const_get(:Testno), slug].delete_if{|part| part.empty?}.join('_')
147
+ name = name.upcase!
148
+ const_set(:Name, name)
149
+ const_set(:Missing, Object.new.freeze)
150
+
151
+ ## instance methods
152
+ #
153
+ alias_method('__assert__', 'assert')
154
+
155
+ def assert(*args, &block)
156
+ if args.size == 1 and args.first.is_a?(Hash)
157
+ options = args.first
158
+ expected = getopt(:expected, options){ missing }
159
+ actual = getopt(:actual, options){ missing }
160
+ if expected == missing and actual == missing
161
+ actual, expected, *_ = options.to_a.flatten
162
+ end
163
+ expected = expected.call() if expected.respond_to?(:call)
164
+ actual = actual.call() if actual.respond_to?(:call)
165
+ assert_equal(expected, actual)
166
+ end
167
+
168
+ if block
169
+ label = "assert(#{ args.join(' ') })"
170
+ result = nil
171
+ result = block.call
172
+ __assert__(result, label)
173
+ result
174
+ else
175
+ result = args.shift
176
+ label = "assert(#{ args.join(' ') })"
177
+ __assert__(result, label)
178
+ result
179
+ end
180
+ end
181
+
182
+ def missing
183
+ self.class.const_get(:Missing)
184
+ end
185
+
186
+ def getopt(opt, hash, options = nil, &block)
187
+ [opt.to_s, opt.to_s.to_sym].each do |key|
188
+ return hash[key] if hash.has_key?(key)
189
+ end
190
+ default =
191
+ if block
192
+ block.call
193
+ else
194
+ options.is_a?(Hash) ? options[:default] : nil
195
+ end
196
+ return default
197
+ end
198
+
199
+ def subclass_of exception
200
+ class << exception
201
+ def ==(other) super or self > other end
202
+ end
203
+ exception
204
+ end
205
+
206
+ ##
207
+ #
208
+ module_eval(&block)
209
+
210
+ self.setup()
211
+ self.prepare.each{|b| b.call()}
212
+
213
+ at_exit{
214
+ self.teardown()
215
+ self.cleanup.each{|b| b.call()}
216
+ }
217
+
218
+ self
219
+ end
220
+ end