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