dao 5.5.0 → 8.0.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.
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