dao 5.6.1 → 7.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.
- checksums.yaml +7 -0
- data/README.md +258 -0
- data/Rakefile +6 -6
- data/dao.gemspec +25 -18
- data/lib/dao.rb +18 -74
- data/lib/dao/_lib.rb +46 -0
- data/lib/dao/active_record.rb +6 -6
- data/lib/dao/api/call.rb +14 -3
- data/lib/dao/api/dsl.rb +1 -1
- data/lib/dao/conducer.rb +4 -4
- data/lib/dao/conducer/view_support.rb +0 -2
- data/lib/dao/db.rb +0 -1
- data/lib/dao/errors.rb +9 -11
- data/lib/dao/errors2html.rb +128 -0
- data/lib/dao/form.rb +12 -15
- data/lib/dao/messages.rb +0 -4
- data/lib/dao/path.rb +1 -1
- data/lib/dao/route.rb +2 -2
- data/lib/dao/status.rb +3 -4
- data/lib/dao/support.rb +2 -2
- data/lib/dao/upload.rb +0 -1
- data/lib/dao/validations/common.rb +6 -6
- data/lib/dao/validations/validator.rb +3 -3
- data/notes/ara.txt +15 -0
- data/tasks/default.rake +207 -0
- data/tasks/this.rb +207 -0
- data/test/active_model_conducer_lint_test.rb +3 -11
- data/test/api_test.rb +24 -35
- data/test/conducer_test.rb +33 -43
- data/test/errors_test.rb +20 -14
- data/test/form_test.rb +22 -32
- data/test/rake_rerun_reporter.rb +74 -0
- data/test/support_test.rb +7 -14
- data/test/{testing.rb → test_helper.rb} +73 -49
- data/test/{helper.rb → util.rb} +0 -0
- data/test/validations_test.rb +12 -26
- metadata +51 -84
- data/Gemfile +0 -16
- data/Gemfile.lock +0 -118
- data/README +0 -256
data/lib/dao/messages.rb
CHANGED
data/lib/dao/path.rb
CHANGED
data/lib/dao/route.rb
CHANGED
@@ -54,7 +54,7 @@ module Dao
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def match(path)
|
57
|
-
|
57
|
+
pattern.match(path).to_a
|
58
58
|
end
|
59
59
|
|
60
60
|
def params_for(path)
|
@@ -62,7 +62,7 @@ module Dao
|
|
62
62
|
|
63
63
|
unless match.empty?
|
64
64
|
map = Map.new
|
65
|
-
|
65
|
+
_ = match.shift
|
66
66
|
@keys.each_with_index do |key, index|
|
67
67
|
map[key] = match[index]
|
68
68
|
end
|
data/lib/dao/status.rb
CHANGED
@@ -181,7 +181,6 @@ module Dao
|
|
181
181
|
arg = args.shift
|
182
182
|
case arg
|
183
183
|
when Result
|
184
|
-
result = arg
|
185
184
|
if arg.errors.nil? or arg.errors.empty? or arg.valid?
|
186
185
|
new(200)
|
187
186
|
else
|
@@ -189,7 +188,7 @@ module Dao
|
|
189
188
|
end
|
190
189
|
when Status
|
191
190
|
arg
|
192
|
-
when
|
191
|
+
when Integer
|
193
192
|
code = arg
|
194
193
|
message = Code2Message[code]
|
195
194
|
new(code, message)
|
@@ -276,7 +275,7 @@ module Dao
|
|
276
275
|
end
|
277
276
|
|
278
277
|
Groups.each do |code, group|
|
279
|
-
module_eval
|
278
|
+
module_eval(<<-__, __FILE__, __LINE__ - 1)
|
280
279
|
def Status.#{ group }
|
281
280
|
@status_group_#{ group } ||= Status.for(#{ code })
|
282
281
|
end
|
@@ -316,7 +315,7 @@ module Dao
|
|
316
315
|
end
|
317
316
|
|
318
317
|
def clone
|
319
|
-
|
318
|
+
Status.for(code)
|
320
319
|
end
|
321
320
|
|
322
321
|
def to_json(*args, &block)
|
data/lib/dao/support.rb
CHANGED
@@ -150,7 +150,7 @@ module Dao
|
|
150
150
|
last_number_index = nil
|
151
151
|
|
152
152
|
keys.each_with_index do |k, i|
|
153
|
-
if k.is_a?(
|
153
|
+
if k.is_a?(Numeric)
|
154
154
|
last_number_index = i
|
155
155
|
end
|
156
156
|
end
|
@@ -188,7 +188,7 @@ module Dao
|
|
188
188
|
|
189
189
|
begin
|
190
190
|
MultiJson.dump(object, options)
|
191
|
-
rescue Object =>
|
191
|
+
rescue Object => _
|
192
192
|
YAML.load( object.to_yaml ).to_json
|
193
193
|
end
|
194
194
|
end
|
data/lib/dao/upload.rb
CHANGED
@@ -364,9 +364,9 @@ module Dao
|
|
364
364
|
options = Map.options_for!(args)
|
365
365
|
list = args + Array(options.delete(:keys)) + Array(options.delete(:or))
|
366
366
|
|
367
|
-
list.each do |
|
367
|
+
list.each do |_args|
|
368
368
|
candidates = list.dup
|
369
|
-
candidates.delete(
|
369
|
+
candidates.delete(_args)
|
370
370
|
|
371
371
|
message = options[:message] || "(or #{ candidates.map{|candidate| Array(candidate).join('.')}.join(', ') } ) is blank or missing"
|
372
372
|
allow_nil = options[:allow_nil]
|
@@ -424,7 +424,7 @@ module Dao
|
|
424
424
|
|
425
425
|
m
|
426
426
|
end
|
427
|
-
validates(*
|
427
|
+
validates(*_args, &block)
|
428
428
|
end
|
429
429
|
end
|
430
430
|
|
@@ -432,9 +432,9 @@ module Dao
|
|
432
432
|
options = Map.options_for!(args)
|
433
433
|
list = args + Array(options.delete(:keys)) + Array(options.delete(:or))
|
434
434
|
|
435
|
-
list.each do |
|
435
|
+
list.each do |_args|
|
436
436
|
candidates = list.dup
|
437
|
-
candidates.delete(
|
437
|
+
candidates.delete(_args)
|
438
438
|
|
439
439
|
message = options[:message] || "(and #{ candidates.map{|candidate| Array(candidate).join('.')}.join(', ') } ) is blank or missing"
|
440
440
|
allow_nil = options[:allow_nil]
|
@@ -492,7 +492,7 @@ module Dao
|
|
492
492
|
|
493
493
|
m
|
494
494
|
end
|
495
|
-
validates(*
|
495
|
+
validates(*_args, &block)
|
496
496
|
end
|
497
497
|
end
|
498
498
|
|
@@ -101,7 +101,7 @@ module Dao
|
|
101
101
|
block = args.pop if args.last.respond_to?(:call)
|
102
102
|
block ||= NotBlank
|
103
103
|
callback = Callback.new(options, &block)
|
104
|
-
|
104
|
+
Map.options_for!(args)
|
105
105
|
key = key_for(args)
|
106
106
|
validations = stack.validations.last || self.validations
|
107
107
|
validations[key] ||= Callback::Chain.new
|
@@ -112,7 +112,7 @@ module Dao
|
|
112
112
|
|
113
113
|
def validates_each(*args, &block)
|
114
114
|
options = Map.options_for!(args)
|
115
|
-
|
115
|
+
key_for(args)
|
116
116
|
|
117
117
|
args.push(options)
|
118
118
|
|
@@ -299,7 +299,7 @@ module Dao
|
|
299
299
|
if forcing_validity?
|
300
300
|
true
|
301
301
|
else
|
302
|
-
|
302
|
+
Map.options_for!(args)
|
303
303
|
run_validations
|
304
304
|
errors.empty? and status.ok?
|
305
305
|
end
|
data/notes/ara.txt
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
todo:
|
2
|
+
|
3
|
+
- minimize deps
|
4
|
+
|
5
|
+
- inlined test/rails-app/ ?
|
6
|
+
- look at use of rails_current, etc
|
7
|
+
- exclude from gem
|
8
|
+
- wrap/callback support
|
9
|
+
- kill validations?
|
10
|
+
- kill hooks?
|
11
|
+
- simplify lifecycle/initialize
|
12
|
+
- simpler prepare cycle
|
13
|
+
- api
|
14
|
+
|
15
|
+
done:
|
data/tasks/default.rake
ADDED
@@ -0,0 +1,207 @@
|
|
1
|
+
# vim: syntax=ruby
|
2
|
+
require 'rake/clean'
|
3
|
+
require 'digest'
|
4
|
+
#------------------------------------------------------------------------------
|
5
|
+
# If you want to Develop on this project just run 'rake develop' and you'll
|
6
|
+
# have all you need to get going. If you want to use bundler for development,
|
7
|
+
# then run 'rake develop:using_bundler'
|
8
|
+
#------------------------------------------------------------------------------
|
9
|
+
namespace :develop do
|
10
|
+
|
11
|
+
# Install all the development and runtime dependencies of this gem using the
|
12
|
+
# gemspec.
|
13
|
+
task :default => 'Gemfile' do
|
14
|
+
require 'rubygems/dependency_installer'
|
15
|
+
installer = ::Gem::DependencyInstaller.new
|
16
|
+
puts "Installing bundler..."
|
17
|
+
installer.install 'bundler'
|
18
|
+
sh 'bundle install'
|
19
|
+
puts "\n\nNow run 'rake test'"
|
20
|
+
end
|
21
|
+
|
22
|
+
# Create a Gemfile that just references the gemspec
|
23
|
+
file 'Gemfile' => :gemspec do
|
24
|
+
File.open( "Gemfile", "w+" ) do |f|
|
25
|
+
f.puts "# DO NOT EDIT - This file is automatically generated"
|
26
|
+
f.puts "# Make changes to Manifest.txt and/or Rakefile and regenerate"
|
27
|
+
f.puts 'source "https://rubygems.org/"'
|
28
|
+
f.puts 'gemspec'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
desc "Boostrap development"
|
33
|
+
task :develop => "develop:default"
|
34
|
+
|
35
|
+
#------------------------------------------------------------------------------
|
36
|
+
# Minitest - standard TestTask
|
37
|
+
#------------------------------------------------------------------------------
|
38
|
+
begin
|
39
|
+
require 'rake/testtask'
|
40
|
+
Rake::TestTask.new( :test ) do |t|
|
41
|
+
t.libs = %w[ lib spec test ]
|
42
|
+
t.pattern = "{test,spec}/**/{test_*,*_spec,*_test}.rb"
|
43
|
+
end
|
44
|
+
|
45
|
+
task :test_requirements
|
46
|
+
task :test => :test_requirements
|
47
|
+
task :default => :test
|
48
|
+
rescue LoadError
|
49
|
+
This.task_warning( 'test' )
|
50
|
+
end
|
51
|
+
|
52
|
+
#------------------------------------------------------------------------------
|
53
|
+
# Manifest - We want an explicit list of thos files that are to be packaged in
|
54
|
+
# the gem. Most of this is from Hoe.
|
55
|
+
#------------------------------------------------------------------------------
|
56
|
+
namespace 'manifest' do
|
57
|
+
desc "Check the manifest"
|
58
|
+
task :check => :clean do
|
59
|
+
files = FileList["**/*", ".*"].exclude( This.exclude_from_manifest ).to_a.sort
|
60
|
+
files = files.select{ |f| File.file?( f ) }
|
61
|
+
|
62
|
+
tmp = "Manifest.tmp"
|
63
|
+
File.open( tmp, 'w' ) do |f|
|
64
|
+
f.puts files.join("\n")
|
65
|
+
end
|
66
|
+
|
67
|
+
begin
|
68
|
+
sh "diff -du Manifest.txt #{tmp}"
|
69
|
+
ensure
|
70
|
+
rm tmp
|
71
|
+
end
|
72
|
+
puts "Manifest looks good"
|
73
|
+
end
|
74
|
+
|
75
|
+
desc "Generate the manifest"
|
76
|
+
task :generate => :clean do
|
77
|
+
files = %x[ git ls-files ].split("\n").sort
|
78
|
+
files.reject! { |f| f =~ This.exclude_from_manifest }
|
79
|
+
File.open( "Manifest.txt", "w" ) do |f|
|
80
|
+
f.puts files.join("\n")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
#------------------------------------------------------------------------------
|
86
|
+
# Fixme - look for fixmes and report them
|
87
|
+
#------------------------------------------------------------------------------
|
88
|
+
namespace :fixme do
|
89
|
+
task :default => 'manifest:check' do
|
90
|
+
This.manifest.each do |file|
|
91
|
+
next if file == __FILE__
|
92
|
+
next unless file =~ %r/(txt|rb|md|rdoc|css|html|xml|css)\Z/
|
93
|
+
puts "FIXME: Rename #{file}" if file =~ /fixme/i
|
94
|
+
IO.readlines( file ).each_with_index do |line, idx|
|
95
|
+
prefix = "FIXME: #{file}:#{idx+1}".ljust(42)
|
96
|
+
puts "#{prefix} => #{line.strip}" if line =~ /fixme/i
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def fixme_project_root
|
102
|
+
This.project_path( '../fixme' )
|
103
|
+
end
|
104
|
+
|
105
|
+
def fixme_project_path( subtree )
|
106
|
+
fixme_project_root.join( subtree )
|
107
|
+
end
|
108
|
+
|
109
|
+
def local_fixme_files
|
110
|
+
This.manifest.select { |p| p =~ %r|^tasks/| }
|
111
|
+
end
|
112
|
+
|
113
|
+
def outdated_fixme_files
|
114
|
+
local_fixme_files.select do |local|
|
115
|
+
upstream = fixme_project_path( local )
|
116
|
+
upstream.exist? &&
|
117
|
+
( Digest::SHA256.file( local ) != Digest::SHA256.file( upstream ) )
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def fixme_up_to_date?
|
122
|
+
outdated_fixme_files.empty?
|
123
|
+
end
|
124
|
+
|
125
|
+
desc "See if the fixme tools are outdated"
|
126
|
+
task :outdated => :release_check do
|
127
|
+
if fixme_up_to_date? then
|
128
|
+
puts "Fixme files are up to date."
|
129
|
+
else
|
130
|
+
outdated_fixme_files.each do |f|
|
131
|
+
puts "#{f} is outdated"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
desc "Update outdated fixme files"
|
137
|
+
task :update => :release_check do
|
138
|
+
if fixme_up_to_date? then
|
139
|
+
puts "Fixme files are already up to date."
|
140
|
+
else
|
141
|
+
puts "Updating fixme files:"
|
142
|
+
outdated_fixme_files.each do |local|
|
143
|
+
upstream = fixme_project_path( local )
|
144
|
+
puts " * #{local}"
|
145
|
+
FileUtils.cp( upstream, local )
|
146
|
+
end
|
147
|
+
puts "Use your git commands as appropriate."
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
desc "Look for fixmes and report them"
|
152
|
+
task :fixme => "fixme:default"
|
153
|
+
|
154
|
+
#------------------------------------------------------------------------------
|
155
|
+
# Gem Specification
|
156
|
+
#------------------------------------------------------------------------------
|
157
|
+
# Really this is only here to support those who use bundler
|
158
|
+
desc "Build the #{This.name}.gemspec file"
|
159
|
+
task :gemspec do
|
160
|
+
File.open( This.gemspec_file, "wb+" ) do |f|
|
161
|
+
f.puts "# DO NOT EDIT - This file is automatically generated"
|
162
|
+
f.puts "# Make changes to Manifest.txt and/or Rakefile and regenerate"
|
163
|
+
f.write This.platform_gemspec.to_ruby
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
# .rbc files from ruby 2.0
|
168
|
+
CLOBBER << FileList["**/*.rbc"]
|
169
|
+
|
170
|
+
# The standard gem packaging task, everyone has it.
|
171
|
+
require 'rubygems/package_task'
|
172
|
+
::Gem::PackageTask.new( This.platform_gemspec ) do
|
173
|
+
# nothing
|
174
|
+
end
|
175
|
+
|
176
|
+
#------------------------------------------------------------------------------
|
177
|
+
# Release - the steps we go through to do a final release, this is pulled from
|
178
|
+
# a compbination of mojombo's rakegem, hoe and hoe-git
|
179
|
+
#
|
180
|
+
# 1) make sure we are on the master branch
|
181
|
+
# 2) make sure there are no uncommitted items
|
182
|
+
# 3) check the manifest and make sure all looks good
|
183
|
+
# 4) build the gem
|
184
|
+
# 5) do an empty commit to have the commit message of the version
|
185
|
+
# 6) tag that commit as the version
|
186
|
+
# 7) push master
|
187
|
+
# 8) push the tag
|
188
|
+
# 7) pus the gem
|
189
|
+
#------------------------------------------------------------------------------
|
190
|
+
task :release_check do
|
191
|
+
unless `git branch` =~ /^\* master$/
|
192
|
+
abort "You must be on the master branch to release!"
|
193
|
+
end
|
194
|
+
unless `git status` =~ /^nothing to commit/m
|
195
|
+
abort "Nope, sorry, you have unfinished business"
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
desc "Create tag v#{This.version}, build and push #{This.platform_gemspec.full_name} to rubygems.org"
|
200
|
+
task :release => [ :release_check, 'manifest:check', :gem ] do
|
201
|
+
sh "git commit --allow-empty -a -m 'Release #{This.version}'"
|
202
|
+
sh "git tag -a -m 'v#{This.version}' v#{This.version}"
|
203
|
+
sh "git push origin master"
|
204
|
+
sh "git push origin v#{This.version}"
|
205
|
+
sh "gem push pkg/#{This.platform_gemspec.full_name}.gem"
|
206
|
+
end
|
207
|
+
|
data/tasks/this.rb
ADDED
@@ -0,0 +1,207 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
# Public: A Class containing all the metadata and utilities needed to manage a
|
4
|
+
# ruby project.
|
5
|
+
class ThisProject
|
6
|
+
# The name of this project
|
7
|
+
attr_accessor :name
|
8
|
+
|
9
|
+
# The author's name
|
10
|
+
attr_accessor :author
|
11
|
+
|
12
|
+
# The email address of the author(s)
|
13
|
+
attr_accessor :email
|
14
|
+
|
15
|
+
# The homepage of this project
|
16
|
+
attr_accessor :homepage
|
17
|
+
|
18
|
+
# The regex of files to exclude from the manifest
|
19
|
+
attr_accessor :exclude_from_manifest
|
20
|
+
|
21
|
+
# The hash of Gem::Specifications keyed' by platform
|
22
|
+
attr_accessor :gemspecs
|
23
|
+
|
24
|
+
# Public: Initialize ThisProject
|
25
|
+
#
|
26
|
+
# Yields self
|
27
|
+
def initialize(&block)
|
28
|
+
@exclude_from_manifest = Regexp.union(/\.(git|DS_Store)/,
|
29
|
+
/^(doc|coverage|pkg|tmp|Gemfile(\.lock)?)/,
|
30
|
+
/^[^\/]+\.gemspec/,
|
31
|
+
/\.(swp|jar|bundle|so|rvmrc|travis.yml)$/,
|
32
|
+
/~$/)
|
33
|
+
@gemspecs = Hash.new
|
34
|
+
yield self if block_given?
|
35
|
+
end
|
36
|
+
|
37
|
+
# Public: return the version of ThisProject
|
38
|
+
#
|
39
|
+
# Search the ruby files in the project looking for the one that has the
|
40
|
+
# version string in it. This does not eval any code in the project, it parses
|
41
|
+
# the source code looking for the string.
|
42
|
+
#
|
43
|
+
# Returns a String version
|
44
|
+
def version
|
45
|
+
[ "lib/#{ name }.rb", "lib/#{ name }/version.rb" ].each do |v|
|
46
|
+
path = project_path( v )
|
47
|
+
next unless path.exist?
|
48
|
+
line = path.read[/^\s*VERSION\s*=\s*.*/i]
|
49
|
+
if line then
|
50
|
+
return line.match(/.*VERSION\s*=\s*['"](.*)['"]/i)[1]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Internal: Return a section of an RDoc file with the given section name
|
56
|
+
#
|
57
|
+
# path - the relative path in the project of the file to parse
|
58
|
+
# section_name - the section out of the file from which to parse data
|
59
|
+
#
|
60
|
+
# Retuns the text of the section as an array of paragrphs.
|
61
|
+
def section_of( file, section_name )
|
62
|
+
re = /^[=#]+ (.*)$/
|
63
|
+
sectional = project_path( file )
|
64
|
+
parts = sectional.read.split( re )[1..-1]
|
65
|
+
parts.map! { |p| p.strip }
|
66
|
+
|
67
|
+
sections = Hash.new
|
68
|
+
Hash[*parts].each do |k,v|
|
69
|
+
sections[k] = v.split("\n\n")
|
70
|
+
end
|
71
|
+
return sections[section_name]
|
72
|
+
end
|
73
|
+
|
74
|
+
# Internal: print out a warning about the give task
|
75
|
+
def task_warning( task )
|
76
|
+
warn "WARNING: '#{task}' tasks are not defined. Please run 'rake develop'"
|
77
|
+
end
|
78
|
+
|
79
|
+
# Internal: Return the full path to the file that is relative to the project
|
80
|
+
# root.
|
81
|
+
#
|
82
|
+
# path - the relative path of the file from the project root
|
83
|
+
#
|
84
|
+
# Returns the Pathname of the file
|
85
|
+
def project_path( *relative_path )
|
86
|
+
project_root.join( *relative_path )
|
87
|
+
end
|
88
|
+
|
89
|
+
# Internal: The absolute path of this file
|
90
|
+
#
|
91
|
+
# Returns the Pathname of this file.
|
92
|
+
def this_file_path
|
93
|
+
Pathname.new( __FILE__ ).expand_path
|
94
|
+
end
|
95
|
+
|
96
|
+
# Internal: The root directory of this project
|
97
|
+
#
|
98
|
+
# This is defined as being the directory that is in the path of this project
|
99
|
+
# that has the first Rakefile
|
100
|
+
#
|
101
|
+
# Returns the Pathname of the directory
|
102
|
+
def project_root
|
103
|
+
this_file_path.ascend do |p|
|
104
|
+
rakefile = p.join( 'Rakefile' )
|
105
|
+
return p if rakefile.exist?
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
# Internal: Returns the contents of the Manifest.txt file as an array
|
110
|
+
#
|
111
|
+
# Returns an Array of strings
|
112
|
+
def manifest
|
113
|
+
manifest_file = project_path( "Manifest.txt" )
|
114
|
+
abort "You need a Manifest.txt" unless manifest_file.readable?
|
115
|
+
manifest_file.readlines.map { |l| l.strip }
|
116
|
+
end
|
117
|
+
|
118
|
+
# Internal: Return the files that define the extensions
|
119
|
+
#
|
120
|
+
# Returns an Array
|
121
|
+
def extension_conf_files
|
122
|
+
manifest.grep( /extconf.rb\Z/ )
|
123
|
+
end
|
124
|
+
|
125
|
+
# Internal: Returns the gemspace associated with the current ruby platform
|
126
|
+
def platform_gemspec
|
127
|
+
gemspecs.fetch(platform) { This.ruby_gemspec }
|
128
|
+
end
|
129
|
+
|
130
|
+
def core_gemspec
|
131
|
+
Gem::Specification.new do |spec|
|
132
|
+
spec.name = name
|
133
|
+
spec.version = version
|
134
|
+
spec.author = author
|
135
|
+
spec.email = email
|
136
|
+
spec.homepage = homepage
|
137
|
+
|
138
|
+
spec.summary = summary
|
139
|
+
spec.description = description
|
140
|
+
spec.license = license
|
141
|
+
|
142
|
+
spec.files = manifest
|
143
|
+
spec.executables = spec.files.grep(/^bin/) { |f| File.basename(f) }
|
144
|
+
spec.test_files = spec.files.grep(/^spec/)
|
145
|
+
|
146
|
+
spec.extra_rdoc_files += spec.files.grep(/(txt|rdoc|md)$/)
|
147
|
+
spec.rdoc_options = [ "--main" , 'README.md',
|
148
|
+
"--markup", "tomdoc" ]
|
149
|
+
|
150
|
+
spec.required_ruby_version = '>= 2.2.0'
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
# Internal: Return the gemspec for the ruby platform
|
155
|
+
def ruby_gemspec( core = core_gemspec, &block )
|
156
|
+
yielding_gemspec( 'ruby', core, &block )
|
157
|
+
end
|
158
|
+
|
159
|
+
# Internal: Return the gemspec for the jruby platform
|
160
|
+
def java_gemspec( core = core_gemspec, &block )
|
161
|
+
yielding_gemspec( 'java', core, &block )
|
162
|
+
end
|
163
|
+
|
164
|
+
# Internal: give an initial spec and a key, create a new gemspec based off of
|
165
|
+
# it.
|
166
|
+
#
|
167
|
+
# This will force the new gemspecs 'platform' to be that of the key, since the
|
168
|
+
# only reason you would have multiple gemspecs at this point is to deal with
|
169
|
+
# different platforms.
|
170
|
+
def yielding_gemspec( key, core )
|
171
|
+
spec = gemspecs[key] ||= core.dup
|
172
|
+
spec.platform = key
|
173
|
+
yield spec if block_given?
|
174
|
+
return spec
|
175
|
+
end
|
176
|
+
|
177
|
+
# Internal: Return the platform of ThisProject at the current moment in time.
|
178
|
+
def platform
|
179
|
+
(RUBY_PLATFORM == "java") ? 'java' : Gem::Platform::RUBY
|
180
|
+
end
|
181
|
+
|
182
|
+
# Internal: Return the DESCRIPTION section of the README.rdoc file
|
183
|
+
def description_section
|
184
|
+
section_of( 'README.md', 'DESCRIPTION')
|
185
|
+
end
|
186
|
+
|
187
|
+
# Internal: Return the summary text from the README
|
188
|
+
def summary
|
189
|
+
description_section.first
|
190
|
+
end
|
191
|
+
|
192
|
+
# Internal: Return the full description text from the README
|
193
|
+
def description
|
194
|
+
description_section.join(" ").tr("\n", ' ').gsub(/[{}]/,'').gsub(/\[[^\]]+\]/,'') # strip rdoc
|
195
|
+
end
|
196
|
+
|
197
|
+
def license
|
198
|
+
"ISC"
|
199
|
+
end
|
200
|
+
|
201
|
+
# Internal: The path to the gemspec file
|
202
|
+
def gemspec_file
|
203
|
+
project_path( "#{ name }.gemspec" )
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
This = ThisProject.new
|