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
@@ -0,0 +1,31 @@
1
+ ## coerce.gemspec
2
+ #
3
+
4
+ Gem::Specification::new do |spec|
5
+ spec.name = "coerce"
6
+ spec.version = "0.0.8"
7
+ spec.platform = Gem::Platform::RUBY
8
+ spec.summary = "coerce"
9
+ spec.description = "description: coerce kicks the ass"
10
+ spec.license = "same as ruby's"
11
+
12
+ spec.files =
13
+ ["README", "Rakefile", "coerce.gemspec", "lib", "lib/coerce.rb"]
14
+
15
+ spec.executables = []
16
+
17
+ spec.require_path = "lib"
18
+
19
+ spec.test_files = nil
20
+
21
+
22
+ spec.add_dependency(*["chronic", ">= 0.6.2"])
23
+
24
+
25
+ spec.extensions.push(*[])
26
+
27
+ spec.rubyforge_project = "codeforpeople"
28
+ spec.author = "Ara T. Howard"
29
+ spec.email = "ara.t.howard@gmail.com"
30
+ spec.homepage = "https://github.com/ahoward/coerce"
31
+ end
@@ -0,0 +1,210 @@
1
+ module Coerce
2
+ ## built-in
3
+ #
4
+ require 'uri'
5
+ require 'time'
6
+ require 'date'
7
+ require 'pathname'
8
+ require 'chronic'
9
+
10
+ ## version
11
+ #
12
+ Coerce::Version = '0.0.8'
13
+
14
+ def self.version
15
+ Coerce::Version
16
+ end
17
+
18
+ ## dependencies
19
+ #
20
+ def self.dependencies
21
+ {
22
+ 'chronic' => [ 'chronic' , '>= 0.6.2' ]
23
+ }
24
+ end
25
+
26
+ begin
27
+ require 'rubygems'
28
+ rescue LoadError
29
+ nil
30
+ end
31
+
32
+ if defined?(gem)
33
+ self.dependencies.each do |lib, dependency|
34
+ gem(*dependency)
35
+ require(lib)
36
+ end
37
+ end
38
+
39
+ ##
40
+ #
41
+ def self.export m
42
+ module_function m
43
+ public m
44
+ end
45
+
46
+ List = []
47
+
48
+ def self.coerce m, &b
49
+ define_method m, &b
50
+ export m
51
+ List << m.to_s
52
+ end
53
+
54
+ coerce :boolean do |obj|
55
+ case obj.to_s
56
+ when %r/^(true|t|1|yes|y|on)$/i
57
+ true
58
+ when %r/^(false|f|0|no|n|off)$/i
59
+ false
60
+ else
61
+ !!obj
62
+ end
63
+ end
64
+
65
+ coerce :integer do |obj|
66
+ Float(obj).to_i
67
+ end
68
+
69
+ coerce :float do |obj|
70
+ Float obj
71
+ end
72
+
73
+ coerce :number do |obj|
74
+ Float obj rescue Integer obj
75
+ end
76
+
77
+ coerce :string do |obj|
78
+ String obj
79
+ end
80
+
81
+ coerce :symbol do |obj|
82
+ String(obj).to_sym
83
+ end
84
+
85
+ coerce :uri do |obj|
86
+ ::URI.parse obj.to_s
87
+ end
88
+
89
+ coerce :url do |obj|
90
+ ::URI.parse(obj.to_s).to_s
91
+ end
92
+
93
+ coerce :time do |obj|
94
+ ::Chronic.parse(obj.to_s)
95
+ end
96
+
97
+ coerce :date do |obj|
98
+ begin
99
+ ::Date.parse(::Chronic.parse(obj.to_s).to_s)
100
+ rescue
101
+ ::Date.parse(obj.to_s)
102
+ end
103
+ end
104
+
105
+ coerce :pathname do |obj|
106
+ Pathname.new(obj.to_s)
107
+ end
108
+
109
+ coerce :path do |obj|
110
+ File.expand_path(obj.to_s)
111
+ end
112
+
113
+ coerce :input do |obj|
114
+ case obj.to_s
115
+ when '-'
116
+ io = STDIN.dup
117
+ io.fattr(:path){ '/dev/stdin' }
118
+ io
119
+ else
120
+ io = open(obj.to_s, 'r+')
121
+ at_exit{ io.close }
122
+ io
123
+ end
124
+ end
125
+
126
+ coerce :output do |obj|
127
+ case obj.to_s
128
+ when '-'
129
+ io = STDOUT.dup
130
+ io.fattr(:path){ '/dev/stdout' }
131
+ io
132
+ else
133
+ io = open(obj.to_s, 'w+')
134
+ at_exit{ io.close }
135
+ io
136
+ end
137
+ end
138
+
139
+ coerce :slug do |obj|
140
+ string = [obj].flatten.compact.join('-')
141
+ words = string.to_s.scan(%r/\w+/)
142
+ words.map!{|word| word.gsub %r/[^0-9a-zA-Z_-]/, ''}
143
+ words.delete_if{|word| word.nil? or word.strip.empty?}
144
+ String(words.join('-').downcase)
145
+ end
146
+
147
+ coerce :list do |*objs|
148
+ [*objs].flatten.join(',').split(/[\n,]/).map{|item| item.strip}.delete_if{|item| item.strip.empty?}
149
+ end
150
+
151
+ coerce :array do |*objs|
152
+ [*objs].flatten.join(',').split(/[\n,]/).map{|item| item.strip}.delete_if{|item| item.strip.empty?}
153
+ end
154
+
155
+ coerce :hash do |*objs|
156
+ list = Coerce.list(*objs)
157
+ hash = Hash.new
158
+ list.each do |pair|
159
+ k, v = pair.split(/[=:]+/, 2)
160
+ key = k.to_s.strip
161
+ val = v.to_s.strip
162
+ hash[key] = val
163
+ end
164
+ hash
165
+ end
166
+
167
+ # add list_of_xxx methods
168
+ #
169
+ List.dup.each do |type|
170
+ next if type.to_s =~ %r/list/
171
+ %W" list_of_#{ type } list_of_#{ type }s ".each do |m|
172
+ define_method m do |*objs|
173
+ list(*objs).map{|obj| send type, obj}
174
+ end
175
+ export m
176
+ List << m
177
+ end
178
+ end
179
+
180
+ # add list_of_xxx_from_file
181
+ #
182
+ List.dup.each do |type|
183
+ next if type.to_s =~ %r/list/
184
+ %W" list_of_#{ type }_from_file list_of_#{ type }s_from_file ".each do |m|
185
+ define_method m do |*args|
186
+ buf = nil
187
+ if args.size == 1 and args.first.respond_to?(:read)
188
+ buf = args.first.read
189
+ else
190
+ open(*args){|io| buf = io.read}
191
+ end
192
+ send(m.sub(/_from_file/, ''), buf)
193
+ end
194
+ export m
195
+ List << m
196
+ end
197
+ end
198
+
199
+ def self.[] sym
200
+ prefix = sym.to_s.downcase.to_sym
201
+ candidates = List.select{|m| m =~ %r/^#{ prefix }/i}
202
+ m = candidates.shift
203
+ raise ArgumentError, "unsupported coercion: #{ sym.inspect } (#{ List.join ',' })" unless
204
+ m
205
+ raise ArgumentError, "ambiguous coercion: #{ sym.inspect } (#{ List.join ',' })" unless
206
+ candidates.empty? or m.to_s == sym.to_s
207
+ this = self
208
+ lambda{|obj| method(m).call obj}
209
+ end
210
+ end
@@ -3,21 +3,26 @@
3
3
 
4
4
  Gem::Specification::new do |spec|
5
5
  spec.name = "dao"
6
- spec.version = "5.5.0"
6
+ spec.version = "8.0.0"
7
7
  spec.platform = Gem::Platform::RUBY
8
8
  spec.summary = "dao"
9
- spec.description = "presenter, conducer, api, and better form objects for you rails' pleasure"
10
- spec.license = "same as ruby's"
9
+ spec.description = "presenter, conductor, api, and better form objects for you rails' pleasure"
10
+ spec.license = "Ruby"
11
11
 
12
12
  spec.files =
13
- ["Gemfile",
14
- "Gemfile.lock",
15
- "README",
13
+ ["README.md",
16
14
  "Rakefile",
15
+ "coerce-0.0.8",
16
+ "coerce-0.0.8/README",
17
+ "coerce-0.0.8/Rakefile",
18
+ "coerce-0.0.8/coerce.gemspec",
19
+ "coerce-0.0.8/lib",
20
+ "coerce-0.0.8/lib/coerce.rb",
17
21
  "dao.gemspec",
18
22
  "lib",
19
23
  "lib/dao",
20
24
  "lib/dao.rb",
25
+ "lib/dao/_lib.rb",
21
26
  "lib/dao/active_record.rb",
22
27
  "lib/dao/api",
23
28
  "lib/dao/api.rb",
@@ -28,6 +33,7 @@ Gem::Specification::new do |spec|
28
33
  "lib/dao/api/modes.rb",
29
34
  "lib/dao/api/routes.rb",
30
35
  "lib/dao/blankslate.rb",
36
+ "lib/dao/coerce.rb",
31
37
  "lib/dao/conducer",
32
38
  "lib/dao/conducer.rb",
33
39
  "lib/dao/conducer/active_model.rb",
@@ -42,6 +48,7 @@ Gem::Specification::new do |spec|
42
48
  "lib/dao/endpoint.rb",
43
49
  "lib/dao/engine.rb",
44
50
  "lib/dao/errors.rb",
51
+ "lib/dao/errors2html.rb",
45
52
  "lib/dao/exceptions.rb",
46
53
  "lib/dao/extractor.rb",
47
54
  "lib/dao/form.rb",
@@ -85,6 +92,13 @@ Gem::Specification::new do |spec|
85
92
  "lib/dao/validations/common.rb",
86
93
  "lib/dao/validations/instance.rb",
87
94
  "lib/dao/validations/validator.rb",
95
+ "lib/dao/wrap.rb",
96
+ "public",
97
+ "public/system",
98
+ "public/system/uploads",
99
+ "tasks",
100
+ "tasks/default.rake",
101
+ "tasks/this.rb",
88
102
  "test",
89
103
  "test/active_model_conducer_lint_test.rb",
90
104
  "test/api_test.rb",
@@ -93,11 +107,21 @@ Gem::Specification::new do |spec|
93
107
  "test/data/han-solo.jpg",
94
108
  "test/errors_test.rb",
95
109
  "test/form_test.rb",
96
- "test/helper.rb",
97
110
  "test/leak.rb",
111
+ "test/rake_rerun_reporter.rb",
98
112
  "test/support_test.rb",
99
- "test/testing.rb",
100
- "test/validations_test.rb"]
113
+ "test/test_helper.rb",
114
+ "test/util.rb",
115
+ "test/validations_test.rb",
116
+ "wrap-1.5.2",
117
+ "wrap-1.5.2/README",
118
+ "wrap-1.5.2/Rakefile",
119
+ "wrap-1.5.2/lib",
120
+ "wrap-1.5.2/lib/wrap.rb",
121
+ "wrap-1.5.2/test",
122
+ "wrap-1.5.2/test/testing.rb",
123
+ "wrap-1.5.2/test/wrap_test.rb",
124
+ "wrap-1.5.2/wrap.gemspec"]
101
125
 
102
126
  spec.executables = []
103
127
 
@@ -106,30 +130,19 @@ Gem::Specification::new do |spec|
106
130
  spec.test_files = nil
107
131
 
108
132
 
109
- spec.add_dependency(*["rails", " ~> 3.1"])
133
+ spec.add_dependency(*["rails", " ~> 6.0"])
110
134
 
111
- spec.add_dependency(*["map", " >= 6.0.0"])
135
+ spec.add_dependency(*["map", " ~> 6.6"])
112
136
 
113
- spec.add_dependency(*["fattr", " >= 2.2"])
137
+ spec.add_dependency(*["fattr", " ~> 2.4"])
114
138
 
115
- spec.add_dependency(*["coerce", " >= 0.0.3"])
139
+ spec.add_dependency(*["tagz", " ~> 9.10"])
116
140
 
117
- spec.add_dependency(*["tagz", " >= 9.9.2"])
118
-
119
- spec.add_dependency(*["multi_json", " >= 1.0.3"])
120
-
121
- spec.add_dependency(*["uuidtools", " >= 2.1.2"])
122
-
123
- spec.add_dependency(*["wrap", " >= 1.5.0"])
124
-
125
- spec.add_dependency(*["rails_current", " >= 1.8.0"])
126
-
127
- spec.add_dependency(*["rails_errors2html", " >= 1.3.0"])
141
+ spec.add_dependency(*["rails_current", " ~> 2.2"])
128
142
 
129
143
 
130
144
  spec.extensions.push(*[])
131
145
 
132
- spec.rubyforge_project = "codeforpeople"
133
146
  spec.author = "Ara T. Howard"
134
147
  spec.email = "ara.t.howard@gmail.com"
135
148
  spec.homepage = "https://github.com/ahoward/dao"
data/lib/dao.rb CHANGED
@@ -7,86 +7,42 @@
7
7
  require 'cgi'
8
8
  require 'tmpdir'
9
9
  require 'yaml'
10
+ require 'securerandom'
11
+ require 'json'
10
12
 
11
13
  # dao libs
12
14
  #
13
- module Dao
14
- Version = '5.5.0' unless defined?(Version)
15
+ require 'map'
16
+ require 'fattr'
17
+ require 'tagz'
18
+ require 'rails_current'
15
19
 
16
- def version
17
- Dao::Version
18
- end
19
-
20
- def dependencies
21
- {
22
- 'rails' => [ 'rails' , ' ~> 3.1' ] ,
23
- 'map' => [ 'map' , ' >= 6.0.0' ] ,
24
- 'fattr' => [ 'fattr' , ' >= 2.2' ] ,
25
- 'coerce' => [ 'coerce' , ' >= 0.0.3' ] ,
26
- 'tagz' => [ 'tagz' , ' >= 9.9.2' ] ,
27
- 'multi_json' => [ 'multi_json' , ' >= 1.0.3' ] ,
28
- 'uuidtools' => [ 'uuidtools' , ' >= 2.1.2' ] ,
29
- 'wrap' => [ 'wrap' , ' >= 1.5.0' ] ,
30
- 'rails_current' => [ 'rails_current' , ' >= 1.8.0' ] ,
31
- 'rails_errors2html' => [ 'rails_errors2html' , ' >= 1.3.0' ] ,
32
- }
33
- end
34
-
35
- def description
36
- "presenter, conducer, api, and better form objects for you rails' pleasure"
37
- end
38
-
39
- def libdir(*args, &block)
40
- @libdir ||= File.expand_path(__FILE__).sub(/\.rb$/,'')
41
- args.empty? ? @libdir : File.join(@libdir, *args)
42
- ensure
43
- if block
44
- begin
45
- $LOAD_PATH.unshift(@libdir)
46
- block.call()
47
- ensure
48
- $LOAD_PATH.shift()
49
- end
50
- end
51
- end
52
-
53
- def load(*libs)
54
- libs = libs.join(' ').scan(/[^\s+]+/)
55
- Dao.libdir{ libs.each{|lib| Kernel.load(lib) } }
56
- end
57
-
58
- extend(Dao)
59
- end
60
-
61
- # gems
62
20
  #
63
- begin
64
- require 'rubygems'
65
- rescue LoadError
66
- nil
67
- end
68
-
69
- if defined?(gem)
70
- Dao.dependencies.each do |lib, dependency|
71
- gem(*dependency)
72
- require(lib)
73
- end
74
- end
21
+ require_relative 'dao/_lib.rb'
75
22
 
23
+ #
76
24
  %w[
77
25
  action_controller
78
- active_resource
79
26
  active_support
27
+ active_model
80
28
  ].each do |framework|
81
29
  begin
82
30
  require "#{ framework }/railtie"
83
31
  rescue LoadError
32
+ begin
33
+ require "#{ framework }"
34
+ rescue LoadError
35
+ raise
36
+ end
84
37
  end
85
38
  end
86
39
 
87
40
 
41
+ #
88
42
  Dao.load %w[
89
43
  blankslate.rb
44
+ coerce.rb
45
+ wrap.rb
90
46
  instance_exec.rb
91
47
  extractor.rb
92
48
  exceptions.rb
@@ -97,6 +53,7 @@
97
53
  name.rb
98
54
  status.rb
99
55
  path_map.rb
56
+ errors2html.rb
100
57
  errors.rb
101
58
  messages.rb
102
59
  form.rb
@@ -120,23 +77,3 @@
120
77
  conducer.rb
121
78
  upload.rb
122
79
  ]
123
-
124
-
125
- unless defined?(::UUIDTools::Config)
126
- ::UUIDTools.module_eval do
127
- Config = ::RbConfig # shuts up warnings...
128
- end
129
- end
130
-
131
- # protect against rails' too clever reloading
132
- #
133
- =begin
134
- if defined?(Rails)
135
- unless defined?(unloadable)
136
- require 'active_support'
137
- require 'active_support/dependencies'
138
- end
139
- unloadable(Dao)
140
- end
141
- BEGIN{ Object.send(:remove_const, :Dao) if defined?(Dao) }
142
- =end