amalgalite 1.3.0 → 1.4.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.
@@ -28,7 +28,7 @@ typedef struct sqlite3_api_routines sqlite3_api_routines;
28
28
  ** WARNING: In order to maintain backwards compatibility, add new
29
29
  ** interfaces to the end of this structure only. If you insert new
30
30
  ** interfaces in the middle of this structure, then older different
31
- ** versions of SQLite will not be able to load each others' shared
31
+ ** versions of SQLite will not be able to load each other's shared
32
32
  ** libraries!
33
33
  */
34
34
  struct sqlite3_api_routines {
@@ -236,11 +236,42 @@ struct sqlite3_api_routines {
236
236
  int (*blob_reopen)(sqlite3_blob*,sqlite3_int64);
237
237
  int (*vtab_config)(sqlite3*,int op,...);
238
238
  int (*vtab_on_conflict)(sqlite3*);
239
+ /* Version 3.7.16 and later */
240
+ int (*close_v2)(sqlite3*);
241
+ const char *(*db_filename)(sqlite3*,const char*);
242
+ int (*db_readonly)(sqlite3*,const char*);
243
+ int (*db_release_memory)(sqlite3*);
244
+ const char *(*errstr)(int);
245
+ int (*stmt_busy)(sqlite3_stmt*);
246
+ int (*stmt_readonly)(sqlite3_stmt*);
247
+ int (*stricmp)(const char*,const char*);
248
+ int (*uri_boolean)(const char*,const char*,int);
249
+ sqlite3_int64 (*uri_int64)(const char*,const char*,sqlite3_int64);
250
+ const char *(*uri_parameter)(const char*,const char*);
251
+ char *(*vsnprintf)(int,char*,const char*,va_list);
252
+ int (*wal_checkpoint_v2)(sqlite3*,const char*,int,int*,int*);
253
+ /* Version 3.8.7 and later */
254
+ int (*auto_extension)(void(*)(void));
255
+ int (*bind_blob64)(sqlite3_stmt*,int,const void*,sqlite3_uint64,
256
+ void(*)(void*));
257
+ int (*bind_text64)(sqlite3_stmt*,int,const char*,sqlite3_uint64,
258
+ void(*)(void*),unsigned char);
259
+ int (*cancel_auto_extension)(void(*)(void));
260
+ int (*load_extension)(sqlite3*,const char*,const char*,char**);
261
+ void *(*malloc64)(sqlite3_uint64);
262
+ sqlite3_uint64 (*msize)(void*);
263
+ void *(*realloc64)(void*,sqlite3_uint64);
264
+ void (*reset_auto_extension)(void);
265
+ void (*result_blob64)(sqlite3_context*,const void*,sqlite3_uint64,
266
+ void(*)(void*));
267
+ void (*result_text64)(sqlite3_context*,const char*,sqlite3_uint64,
268
+ void(*)(void*), unsigned char);
269
+ int (*strglob)(const char*,const char*);
239
270
  };
240
271
 
241
272
  /*
242
273
  ** The following macros redefine the API routines so that they are
243
- ** redirected throught the global sqlite3_api structure.
274
+ ** redirected through the global sqlite3_api structure.
244
275
  **
245
276
  ** This header file is also used by the loadext.c source file
246
277
  ** (part of the main SQLite library - not an extension) so that
@@ -439,9 +470,48 @@ struct sqlite3_api_routines {
439
470
  #define sqlite3_blob_reopen sqlite3_api->blob_reopen
440
471
  #define sqlite3_vtab_config sqlite3_api->vtab_config
441
472
  #define sqlite3_vtab_on_conflict sqlite3_api->vtab_on_conflict
473
+ /* Version 3.7.16 and later */
474
+ #define sqlite3_close_v2 sqlite3_api->close_v2
475
+ #define sqlite3_db_filename sqlite3_api->db_filename
476
+ #define sqlite3_db_readonly sqlite3_api->db_readonly
477
+ #define sqlite3_db_release_memory sqlite3_api->db_release_memory
478
+ #define sqlite3_errstr sqlite3_api->errstr
479
+ #define sqlite3_stmt_busy sqlite3_api->stmt_busy
480
+ #define sqlite3_stmt_readonly sqlite3_api->stmt_readonly
481
+ #define sqlite3_stricmp sqlite3_api->stricmp
482
+ #define sqlite3_uri_boolean sqlite3_api->uri_boolean
483
+ #define sqlite3_uri_int64 sqlite3_api->uri_int64
484
+ #define sqlite3_uri_parameter sqlite3_api->uri_parameter
485
+ #define sqlite3_uri_vsnprintf sqlite3_api->vsnprintf
486
+ #define sqlite3_wal_checkpoint_v2 sqlite3_api->wal_checkpoint_v2
487
+ /* Version 3.8.7 and later */
488
+ #define sqlite3_auto_extension sqlite3_api->auto_extension
489
+ #define sqlite3_bind_blob64 sqlite3_api->bind_blob64
490
+ #define sqlite3_bind_text64 sqlite3_api->bind_text64
491
+ #define sqlite3_cancel_auto_extension sqlite3_api->cancel_auto_extension
492
+ #define sqlite3_load_extension sqlite3_api->load_extension
493
+ #define sqlite3_malloc64 sqlite3_api->malloc64
494
+ #define sqlite3_msize sqlite3_api->msize
495
+ #define sqlite3_realloc64 sqlite3_api->realloc64
496
+ #define sqlite3_reset_auto_extension sqlite3_api->reset_auto_extension
497
+ #define sqlite3_result_blob64 sqlite3_api->result_blob64
498
+ #define sqlite3_result_text64 sqlite3_api->result_text64
499
+ #define sqlite3_strglob sqlite3_api->strglob
442
500
  #endif /* SQLITE_CORE */
443
501
 
444
- #define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api = 0;
445
- #define SQLITE_EXTENSION_INIT2(v) sqlite3_api = v;
502
+ #ifndef SQLITE_CORE
503
+ /* This case when the file really is being compiled as a loadable
504
+ ** extension */
505
+ # define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api=0;
506
+ # define SQLITE_EXTENSION_INIT2(v) sqlite3_api=v;
507
+ # define SQLITE_EXTENSION_INIT3 \
508
+ extern const sqlite3_api_routines *sqlite3_api;
509
+ #else
510
+ /* This case when the file is being statically linked into the
511
+ ** application */
512
+ # define SQLITE_EXTENSION_INIT1 /*no-op*/
513
+ # define SQLITE_EXTENSION_INIT2(v) (void)v; /* unused parameter */
514
+ # define SQLITE_EXTENSION_INIT3 /*no-op*/
515
+ #endif
446
516
 
447
517
  #endif /* _SQLITE3EXT_H_ */
@@ -4,5 +4,5 @@
4
4
  #++
5
5
 
6
6
  module Amalgalite
7
- VERSION = "1.3.0"
7
+ VERSION = "1.4.0"
8
8
  end
@@ -59,7 +59,7 @@ describe Amalgalite::Database do
59
59
 
60
60
  it "closes normally" do
61
61
  db = Amalgalite::Database.new( SpecInfo.test_db )
62
- lambda { db.close }.should_not raise_error( Amalgalite::SQLite3::Error )
62
+ expect { db.close }.not_to raise_error
63
63
  end
64
64
 
65
65
  it "returns the id of the last inserted row" do
@@ -255,7 +255,7 @@ describe Amalgalite::Database do
255
255
  rescue MyExceptionTest
256
256
  db.transaction("EXCLUSIVE") { }
257
257
  end
258
- }.should_not raise_error( MyExceptionTest )
258
+ }.should_not raise_error
259
259
  end
260
260
 
261
261
  describe "#define_function" do
@@ -503,7 +503,7 @@ describe Amalgalite::Database do
503
503
 
504
504
  it "imports batch statements" do
505
505
  db = Amalgalite::Database.new(":memory:")
506
- db.import("CREATE TABLE things(stuff TEXT); INSERT INTO things (stuff) VALUES (\"foobar\");").should be_true
506
+ db.import("CREATE TABLE things(stuff TEXT); INSERT INTO things (stuff) VALUES (\"foobar\");").should be_truthy
507
507
  db.first_value_from("SELECT stuff FROM things").should == "foobar"
508
508
  end
509
509
 
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'rspec'
2
+ require 'fileutils'
2
3
 
3
4
  require 'amalgalite'
4
5
  require Amalgalite::Paths.spec_path( "iso_3166_database.rb" )
@@ -20,6 +21,10 @@ class SpecInfo
20
21
  end
21
22
 
22
23
  RSpec.configure do |config|
24
+ config.expect_with :rspec do |c|
25
+ c.syntax = [:should, :expect]
26
+ end
27
+
23
28
  config.before(:all) do
24
29
  SpecInfo.make_master_iso_db
25
30
  end
@@ -3,20 +3,20 @@ require 'amalgalite/sqlite3/version'
3
3
 
4
4
  describe "Amalgalite::SQLite3::Version" do
5
5
  it "should have the sqlite3 version" do
6
- Amalgalite::SQLite3::VERSION.should =~ /\d\.\d\.\d/
7
- Amalgalite::SQLite3::Version.to_s.should =~ /\d\.\d\.\d/
8
- Amalgalite::SQLite3::Version.runtime_version.should =~ /\d\.\d\.\d/
6
+ expect(Amalgalite::SQLite3::VERSION).to match(/\d\.\d\.\d/)
7
+ expect(Amalgalite::SQLite3::Version.to_s).to match( /\d\.\d\.\d/ )
8
+ expect(Amalgalite::SQLite3::Version.runtime_version).to match( /\d\.\d\.\d/ )
9
9
 
10
- Amalgalite::SQLite3::Version.to_i.should eql(3007015)
11
- Amalgalite::SQLite3::Version.runtime_version_number.should eql(3007015)
10
+ Amalgalite::SQLite3::Version.to_i.should eql(3008007)
11
+ Amalgalite::SQLite3::Version.runtime_version_number.should eql(3008007)
12
12
 
13
13
  Amalgalite::SQLite3::Version::MAJOR.should eql(3)
14
- Amalgalite::SQLite3::Version::MINOR.should eql(7)
15
- Amalgalite::SQLite3::Version::RELEASE.should eql(15)
16
- Amalgalite::SQLite3::Version.to_a.should have(3).items
14
+ Amalgalite::SQLite3::Version::MINOR.should eql(8)
15
+ Amalgalite::SQLite3::Version::RELEASE.should eql(7)
16
+ expect(Amalgalite::SQLite3::Version.to_a.size).to eql(3)
17
17
 
18
- Amalgalite::SQLite3::Version.compiled_version.should be == "3.7.15.2"
19
- Amalgalite::SQLite3::Version.compiled_version_number.should be == 3007015
18
+ Amalgalite::SQLite3::Version.compiled_version.should be == "3.8.7.4"
19
+ Amalgalite::SQLite3::Version.compiled_version_number.should be == 3008007
20
20
  Amalgalite::SQLite3::Version.compiled_matches_runtime?.should be == true
21
21
  end
22
22
  end
data/spec/version_spec.rb CHANGED
@@ -3,6 +3,6 @@ require 'amalgalite/version'
3
3
 
4
4
  describe "Amalgalite::VERSION" do
5
5
  it "should have a version string" do
6
- Amalgalite::VERSION.should =~ /\d+\.\d+\.\d+/
6
+ expect(Amalgalite::VERSION).to match( /\d+\.\d+\.\d+/ )
7
7
  end
8
8
  end
data/tasks/custom.rake CHANGED
@@ -56,13 +56,16 @@ namespace :util do
56
56
  puts api_todo.keys.sort.join("\n")
57
57
  end
58
58
 
59
- desc "Download and integrate the next version of sqlite (use VERSION=x.y.z)"
60
- task :update_sqlite do
59
+ desc "Download and integrate a version of sqlite"
60
+ task :update_sqlite, [:version,:year] do |task, args|
61
+ version = args[:version] or abort "A version of SQLite please `rake #{task.name}[version,year]`"
62
+ version_year = args[:year] or abort "The Year #{version} was released please `rake #{task.name}[version,year]`"
63
+
61
64
  require 'uri'
62
- require 'net/http'
65
+ require 'open-uri'
63
66
  require 'zip'
64
67
 
65
- parts = ENV['VERSION'].split(".")
68
+ parts = version.split(".")
66
69
  next_version = [ parts.shift.to_s ]
67
70
  parts.each do |p|
68
71
  next_version << "#{"%02d" % p }"
@@ -71,14 +74,14 @@ namespace :util do
71
74
 
72
75
  next_version = next_version.join('')
73
76
 
74
- raise "VERSION env variable must be set" unless next_version
75
- url = ::URI.parse("http://sqlite.org/sqlite-amalgamation-#{next_version}.zip")
77
+ url = ::URI.parse("http://sqlite.org/#{version_year}/sqlite-amalgamation-#{next_version}.zip")
76
78
  puts "downloading #{url.to_s} ..."
77
79
  file = "tmp/#{File.basename( url.path ) }"
78
80
  FileUtils.mkdir "tmp" unless File.directory?( "tmp" )
79
81
  File.open( file, "wb+") do |f|
80
- res = Net::HTTP.get_response( url )
81
- f.write( res.body )
82
+ open(url) do |input|
83
+ f.write( input.read )
84
+ end
82
85
  end
83
86
 
84
87
  puts "extracting..."
data/tasks/default.rake CHANGED
@@ -1,5 +1,6 @@
1
1
  # vim: syntax=ruby
2
2
  require 'rake/clean'
3
+ require 'digest'
3
4
  #------------------------------------------------------------------------------
4
5
  # If you want to Develop on this project just run 'rake develop' and you'll
5
6
  # have all you need to get going. If you want to use bundler for development,
@@ -9,39 +10,24 @@ namespace :develop do
9
10
 
10
11
  # Install all the development and runtime dependencies of this gem using the
11
12
  # gemspec.
12
- task :default do
13
+ task :default => 'Gemfile' do
13
14
  require 'rubygems/dependency_installer'
14
- installer = Gem::DependencyInstaller.new
15
-
16
- This.set_coverage_gem
17
-
18
- puts "Installing gem depedencies needed for development"
19
- This.platform_gemspec.dependencies.each do |dep|
20
- if dep.matching_specs.empty? then
21
- puts "Installing : #{dep}"
22
- installer.install dep
23
- else
24
- puts "Skipping : #{dep} -> already installed #{dep.matching_specs.first.full_name}"
25
- end
26
- end
15
+ installer = ::Gem::DependencyInstaller.new
16
+ puts "Installing bundler..."
17
+ installer.install 'bundler'
18
+ sh 'bundle install'
27
19
  puts "\n\nNow run 'rake test'"
28
20
  end
29
21
 
30
22
  # Create a Gemfile that just references the gemspec
31
23
  file 'Gemfile' => :gemspec do
32
24
  File.open( "Gemfile", "w+" ) do |f|
33
- f.puts 'source :rubygems'
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/"'
34
28
  f.puts 'gemspec'
35
29
  end
36
30
  end
37
-
38
- desc "Create a bundler Gemfile"
39
- task :using_bundler => 'Gemfile' do
40
- puts "Now you can 'bundle'"
41
- end
42
-
43
- # Gemfiles are build artifacts
44
- CLOBBER << FileList['Gemfile*']
45
31
  end
46
32
  desc "Boostrap development"
47
33
  task :develop => "develop:default"
@@ -50,19 +36,18 @@ task :develop => "develop:default"
50
36
  # Minitest - standard TestTask
51
37
  #------------------------------------------------------------------------------
52
38
  begin
39
+ require 'rake/testtask'
40
+ Rake::TestTask.new( :test ) do |t|
41
+ t.ruby_opts = %w[ -w -rubygems ]
42
+ t.libs = %w[ lib spec test ]
43
+ t.pattern = "{test,spec}/**/{test_*,*_spec}.rb"
44
+ end
45
+
53
46
  require 'rspec/core/rake_task'
54
- RSpec::Core::RakeTask.new( :test ) do |t|
47
+ RSpec::Core::RakeTask.new( :spec ) do |t|
55
48
  t.ruby_opts = %w[ -w ]
56
49
  t.rspec_opts = %w[ --color --format documentation ]
57
50
  end
58
-
59
- # require 'rake/testtask'
60
- # Rake::TestTask.new( :test ) do |t|
61
- # t.ruby_opts = %w[ -w -rubygems ]
62
- # t.libs = %w[ lib spec ]
63
- # t.pattern = "spec/**/*_spec.rb"
64
- # end
65
- #
66
51
  task :test_requirements
67
52
  task :test => :test_requirements
68
53
  task :default => :test
@@ -85,7 +70,7 @@ begin
85
70
  t.rdoc_files.include( FileList['*.{rdoc,md,txt}'], FileList['ext/**/*.c'],
86
71
  FileList['lib/**/*.rb'] )
87
72
  end
88
- rescue LoadError => le
73
+ rescue StandardError, LoadError
89
74
  This.task_warning( 'rdoc' )
90
75
  end
91
76
 
@@ -93,31 +78,16 @@ end
93
78
  # Coverage - optional code coverage, rcov for 1.8 and simplecov for 1.9, so
94
79
  # for the moment only rcov is listed.
95
80
  #------------------------------------------------------------------------------
96
- if RUBY_VERSION < "1.9.0"
97
- begin
98
- require 'rcov/rcovtask'
99
- Rcov::RcovTask.new( 'coverage' ) do |t|
100
- t.libs << 'spec'
101
- t.pattern = 'spec/**/*_spec.rb'
102
- t.verbose = true
103
- t.rcov_opts << "-x ^/" # remove all the global files
104
- t.rcov_opts << "--sort coverage" # so we see the worst files at the top
105
- end
106
- rescue LoadError
107
- This.task_warning( 'rcov' )
108
- end
109
- else
110
- begin
111
- require 'simplecov'
112
- desc 'Run tests with code coverage'
113
- task :coverage do
114
- ENV['COVERAGE'] = 'true'
115
- Rake::Task[:test].execute
116
- end
117
- CLOBBER << FileList["coverage"]
118
- rescue LoadError
119
- This.task_warning( 'simplecov' )
81
+ begin
82
+ require 'simplecov'
83
+ desc 'Run tests with code coverage'
84
+ task :coverage do
85
+ ENV['COVERAGE'] = 'true'
86
+ Rake::Task[:test].execute
120
87
  end
88
+ CLOBBER << 'coverage' if File.directory?( 'coverage' )
89
+ rescue LoadError
90
+ This.task_warning( 'simplecov' )
121
91
  end
122
92
 
123
93
  #------------------------------------------------------------------------------
@@ -182,9 +152,10 @@ namespace :fixme do
182
152
  end
183
153
 
184
154
  def outdated_fixme_files
185
- local_fixme_files.reject do |local|
155
+ local_fixme_files.select do |local|
186
156
  upstream = fixme_project_path( local )
187
- Digest::SHA256.file( local ) == Digest::SHA256.file( upstream )
157
+ upstream.exist? &&
158
+ ( Digest::SHA256.file( local ) != Digest::SHA256.file( upstream ) )
188
159
  end
189
160
  end
190
161
 
@@ -228,19 +199,18 @@ task :fixme => "fixme:default"
228
199
  desc "Build the #{This.name}.gemspec file"
229
200
  task :gemspec do
230
201
  File.open( This.gemspec_file, "wb+" ) do |f|
202
+ f.puts "# DO NOT EDIT - This file is automatically generated"
203
+ f.puts "# Make changes to Manifest.txt and/or Rakefile and regenerate"
231
204
  f.write This.platform_gemspec.to_ruby
232
205
  end
233
206
  end
234
207
 
235
- # the gemspec is also a dev artifact and should not be kept around.
236
- CLOBBER << This.gemspec_file.to_s
237
-
238
208
  # .rbc files from ruby 2.0
239
209
  CLOBBER << FileList["**/*.rbc"]
240
210
 
241
211
  # The standard gem packaging task, everyone has it.
242
212
  require 'rubygems/package_task'
243
- Gem::PackageTask.new( This.platform_gemspec ) do
213
+ ::Gem::PackageTask.new( This.platform_gemspec ) do
244
214
  # nothing
245
215
  end
246
216
 
data/tasks/extension.rake CHANGED
@@ -24,7 +24,7 @@ begin
24
24
  ext.gem_spec = This.ruby_gemspec
25
25
 
26
26
  ext.cross_compile = true # enable cross compilation (requires cross compile toolchain)
27
- ext.cross_platform = 'i386-mswin32' # forces the Windows platform instead of the default one
27
+ ext.cross_platform = 'i386-mingw32' # forces the Windows platform instead of the default one
28
28
  # configure options only for cross compile
29
29
  end
30
30
  end
@@ -35,4 +35,4 @@ rescue LoadError
35
35
  end
36
36
 
37
37
  CLOBBER << FileList["lib/**/*.{jar,so,bundle}"]
38
- CLOBBER << FileList["lib/#{This.name}/{1.8,1.9,2.0}/"]
38
+ CLOBBER << FileList["lib/#{This.name}/{1.8,1.9,2.0,2.1,2.2}/"]
data/tasks/this.rb CHANGED
@@ -13,7 +13,7 @@ class ThisProject
13
13
  attr_accessor :email
14
14
 
15
15
  # The homepage of this project
16
- attr_accessor :homepage
16
+ attr_accessor :homepage
17
17
 
18
18
  # The regex of files to exclude from the manifest
19
19
  attr_accessor :exclude_from_manifest
@@ -25,7 +25,11 @@ class ThisProject
25
25
  #
26
26
  # Yields self
27
27
  def initialize(&block)
28
- @exclude_from_manifest = %r/\.(git|DS_Store)|^(doc|coverage|pkg|tmp)|Gemfile*|\.(gemspec|swp|jar|bundle|so|rvmrc)$|~$/
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
+ /~$/)
29
33
  @gemspecs = Hash.new
30
34
  yield self if block_given?
31
35
  end
@@ -119,7 +123,7 @@ class ThisProject
119
123
 
120
124
  # Internal: Returns the gemspace associated with the current ruby platform
121
125
  def platform_gemspec
122
- gemspecs[platform]
126
+ gemspecs.fetch(platform) { This.ruby_gemspec }
123
127
  end
124
128
 
125
129
  def core_gemspec
@@ -132,6 +136,7 @@ class ThisProject
132
136
 
133
137
  spec.summary = summary
134
138
  spec.description = description
139
+ spec.license = license
135
140
 
136
141
  spec.files = manifest
137
142
  spec.executables = spec.files.grep(/^bin/) { |f| File.basename(f) }
@@ -140,6 +145,8 @@ class ThisProject
140
145
  spec.extra_rdoc_files += spec.files.grep(/(txt|rdoc|md)$/)
141
146
  spec.rdoc_options = [ "--main" , 'README.md',
142
147
  "--markup", "tomdoc" ]
148
+
149
+ spec.required_ruby_version = '>= 1.9.3'
143
150
  end
144
151
  end
145
152
 
@@ -166,20 +173,6 @@ class ThisProject
166
173
  return spec
167
174
  end
168
175
 
169
- # Internal: Set the recovery gem development dependency
170
- #
171
- # These are dynamically set since they cannot be hard coded as there is
172
- # no way to ship them correctly in the gemspec
173
- #
174
- # Returns nothing.
175
- def set_coverage_gem
176
- if RUBY_VERSION < "1.9.0"
177
- platform_gemspec.add_development_dependency( 'rcov', '~> 1.0.0' )
178
- else
179
- platform_gemspec.add_development_dependency( 'simplecov', '~> 0.7.1' )
180
- end
181
- end
182
-
183
176
  # Internal: Return the platform of ThisProject at the current moment in time.
184
177
  def platform
185
178
  (RUBY_PLATFORM == "java") ? 'java' : Gem::Platform::RUBY
@@ -189,17 +182,21 @@ class ThisProject
189
182
  def description_section
190
183
  section_of( 'README.md', 'DESCRIPTION')
191
184
  end
192
-
193
- # Internal: Return the summary text from the README
185
+
186
+ # Internal: Return the summary text from the README
194
187
  def summary
195
188
  description_section.first
196
189
  end
197
190
 
198
- # Internal: Return the full description text from the READEM
191
+ # Internal: Return the full description text from the README
199
192
  def description
200
193
  description_section.join(" ").tr("\n", ' ').gsub(/[{}]/,'').gsub(/\[[^\]]+\]/,'') # strip rdoc
201
194
  end
202
195
 
196
+ def license
197
+ "ISC"
198
+ end
199
+
203
200
  # Internal: The path to the gemspec file
204
201
  def gemspec_file
205
202
  project_path( "#{ name }.gemspec" )