ffi-geos 0.0.3 → 0.0.4

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.
data/Rakefile CHANGED
@@ -2,9 +2,20 @@
2
2
  # -*- ruby -*-
3
3
 
4
4
  require 'rubygems'
5
+
6
+ gem 'rdoc', '~> 3.12'
7
+
5
8
  require 'rubygems/package_task'
6
9
  require 'rake/testtask'
7
- require 'rake/rdoctask'
10
+ require 'rdoc/task'
11
+
12
+ if RUBY_VERSION >= '1.9'
13
+ begin
14
+ gem 'psych'
15
+ rescue Exception => e
16
+ # it's okay, fall back on the bundled psych
17
+ end
18
+ end
8
19
 
9
20
  $:.push 'lib'
10
21
 
@@ -19,6 +30,7 @@ begin
19
30
  gem.email = "dark.panda@gmail.com"
20
31
  gem.homepage = "http://github.com/dark-panda/ffi-geos"
21
32
  gem.authors = [ "J Smith" ]
33
+ gem.add_dependency "ffi", "~> 1.0.0"
22
34
  end
23
35
  Jeweler::GemcutterTasks.new
24
36
  rescue LoadError
@@ -27,13 +39,12 @@ end
27
39
 
28
40
  desc 'Test GEOS interface'
29
41
  Rake::TestTask.new(:test) do |t|
30
- t.pattern = 'test/**/*_tests.rb'
42
+ t.test_files = FileList['test/**/*_tests.rb']
31
43
  t.verbose = !!ENV['VERBOSE_TESTS']
32
44
  end
33
45
 
34
46
  desc 'Build docs'
35
47
  Rake::RDocTask.new do |t|
36
- require 'rdoc'
37
48
  t.title = "ffi-geos #{version}"
38
49
  t.main = 'README.rdoc'
39
50
  t.rdoc_dir = 'doc'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/ffi-geos.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ffi-geos}
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{J Smith}]
12
- s.date = %q{2011-08-22}
12
+ s.date = %q{2012-02-28}
13
13
  s.description = %q{An ffi wrapper for GEOS, a C++ port of the Java Topology Suite (JTS).}
14
14
  s.email = %q{dark.panda@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -56,16 +56,19 @@ Gem::Specification.new do |s|
56
56
  ]
57
57
  s.homepage = %q{http://github.com/dark-panda/ffi-geos}
58
58
  s.require_paths = [%q{lib}]
59
- s.rubygems_version = %q{1.8.8}
59
+ s.rubygems_version = %q{1.8.9}
60
60
  s.summary = %q{An ffi wrapper for GEOS, a C++ port of the Java Topology Suite (JTS).}
61
61
 
62
62
  if s.respond_to? :specification_version then
63
63
  s.specification_version = 3
64
64
 
65
65
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
66
+ s.add_runtime_dependency(%q<ffi>, ["~> 1.0.0"])
66
67
  else
68
+ s.add_dependency(%q<ffi>, ["~> 1.0.0"])
67
69
  end
68
70
  else
71
+ s.add_dependency(%q<ffi>, ["~> 1.0.0"])
69
72
  end
70
73
  end
71
74
 
data/lib/ffi-geos.rb CHANGED
@@ -58,24 +58,27 @@ module Geos
58
58
  end
59
59
 
60
60
  def self.find_lib(lib)
61
- search_paths.inject(Array.new) { |array, path|
62
- file_name = File.expand_path(File.join(path, "#{lib}.#{FFI::Platform::LIBSUFFIX}"))
63
- array << Dir.glob(file_name)
64
- }.flatten.sort.compact.first
61
+ Dir.glob(search_paths.map { |path|
62
+ File.expand_path(File.join(path, "#{lib}.#{FFI::Platform::LIBSUFFIX}"))
63
+ }).first
65
64
  end
66
65
 
67
- def self.geos_library_paths
68
- @geos_library_paths ||= begin
66
+ def self.geos_library_path
67
+ @geos_library_path ||= begin
69
68
  # On MingW the libraries have version numbers
70
- [ 'libgeos_c{,-?}', 'libgeos{,-?-?-?}' ].map { |lib|
71
- find_lib(lib)
72
- }.compact
69
+ find_lib('libgeos_c{,-?}')
73
70
  end
74
71
  end
75
72
 
73
+ # For backwards compatibility with older ffi-geos versions where this
74
+ # used to return an Array.
75
+ def self.geos_library_paths
76
+ [ self.geos_library_path ]
77
+ end
78
+
76
79
  extend ::FFI::Library
77
80
 
78
- ffi_lib(*geos_library_paths)
81
+ ffi_lib(geos_library_path)
79
82
 
80
83
  Geos::DimensionTypes = enum(:dimension_type, [
81
84
  :dontcare, -3,
@@ -1004,6 +1007,7 @@ module Geos
1004
1007
  create_empty_multi_polygon
1005
1008
  create_empty_geometry_collection
1006
1009
  create_empty_collection
1010
+ create_empty_linear_ring
1007
1011
  }.each do |m|
1008
1012
  self.class_eval <<-EOF
1009
1013
  def #{m}(*args)
@@ -16,5 +16,11 @@ module Geos
16
16
  def exterior_ring
17
17
  cast_geometry_ptr(FFIGeos.GEOSGetExteriorRing_r(Geos.current_handle, self.ptr), false)
18
18
  end
19
+
20
+ def interior_rings
21
+ self.num_interior_rings.times.collect do |n|
22
+ self.interior_ring_n(n)
23
+ end
24
+ end
19
25
  end
20
26
  end
@@ -113,6 +113,10 @@ module Geos
113
113
  create_empty_collection(:geometry_collection)
114
114
  end
115
115
 
116
+ def create_empty_linear_ring
117
+ Geos::WktReader.new.read('LINEARRING EMPTY')
118
+ end
119
+
116
120
  def create_collection(t, *geoms)
117
121
  check_enum_value(Geos::GeometryTypes, t)
118
122
 
@@ -1005,6 +1005,41 @@ class GeometryTests < Test::Unit::TestCase
1005
1005
  end
1006
1006
  end
1007
1007
 
1008
+ def test_interior_rings
1009
+ tester = lambda { |expected, g|
1010
+ geom = read(g)
1011
+ result = geom.interior_rings
1012
+
1013
+ if expected.nil?
1014
+ assert_nil(result)
1015
+ else
1016
+ assert_equal(expected, result.collect { |r| write(r) } )
1017
+ end
1018
+ }
1019
+
1020
+ writer.trim = true
1021
+
1022
+ tester[
1023
+ [ 'LINEARRING (11 11, 11 12, 12 12, 12 11, 11 11)' ],
1024
+ 'POLYGON(
1025
+ (10 10, 10 14, 14 14, 14 10, 10 10),
1026
+ (11 11, 11 12, 12 12, 12 11, 11 11)
1027
+ )'
1028
+ ]
1029
+
1030
+ tester[
1031
+ [
1032
+ 'LINEARRING (11 11, 11 12, 12 12, 12 11, 11 11)',
1033
+ 'LINEARRING (13 11, 13 12, 13.5 12, 13.5 11, 13 11)'
1034
+ ],
1035
+ 'POLYGON (
1036
+ (10 10, 10 14, 14 14, 14 10, 10 10),
1037
+ (11 11, 11 12, 12 12, 12 11, 11 11),
1038
+ (13 11, 13 12, 13.5 12, 13.5 11, 13 11)
1039
+ )'
1040
+ ]
1041
+ end
1042
+
1008
1043
  if ENV['FORCE_TESTS'] || Geos::Geometry.method_defined?(:num_coordinates)
1009
1044
  def test_num_coordinates
1010
1045
  tester = lambda { |expected, g|
@@ -1033,7 +1068,7 @@ class GeometryTests < Test::Unit::TestCase
1033
1068
  POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0)),
1034
1069
  MULTILINESTRING ((0 0, 2 3), (10 10, 3 4)),
1035
1070
  LINESTRING (0 0, 2 3),
1036
- MULTIPOINT (0 0, 2 3),
1071
+ MULTIPOINT ((0 0), (2 3)),
1037
1072
  POINT (9 0)
1038
1073
  )']
1039
1074
  end
data/test/test_helper.rb CHANGED
@@ -9,10 +9,11 @@ else
9
9
  end
10
10
 
11
11
  puts "Ruby version #{RUBY_VERSION} - #{RbConfig::CONFIG['RUBY_INSTALL_NAME']}"
12
+ puts "ffi version #{Gem.loaded_specs['ffi'].version}" if Gem.loaded_specs['ffi']
12
13
  puts "GEOS version #{Geos::GEOS_VERSION}"
13
14
  puts "ffi-geos version #{Geos::VERSION}" if defined?(Geos::VERSION)
14
15
  if defined?(Geos::FFIGeos)
15
- puts "Using #{Geos::FFIGeos.geos_library_paths.join(', ')}"
16
+ puts "Using #{Geos::FFIGeos.geos_library_path}"
16
17
  end
17
18
 
18
19
  module TestHelper
data/test/utils_tests.rb CHANGED
@@ -340,4 +340,10 @@ class UtilsTests < Test::Unit::TestCase
340
340
  assert_equal('GEOMETRYCOLLECTION EMPTY', write(Geos.create_empty_geometry_collection))
341
341
  end
342
342
  end
343
+
344
+ if ENV['FORCE_TESTS'] || Geos.respond_to?(:create_empty_linear_ring)
345
+ def test_create_empty_linear_ring
346
+ assert_equal('LINEARRING EMPTY', write(Geos.create_empty_linear_ring))
347
+ end
348
+ end
343
349
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-geos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,19 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-22 00:00:00.000000000Z
13
- dependencies: []
12
+ date: 2012-02-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ffi
16
+ requirement: &2169057720 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2169057720
14
25
  description: An ffi wrapper for GEOS, a C++ port of the Java Topology Suite (JTS).
15
26
  email: dark.panda@gmail.com
16
27
  executables: []
@@ -75,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
86
  version: '0'
76
87
  requirements: []
77
88
  rubyforge_project:
78
- rubygems_version: 1.8.8
89
+ rubygems_version: 1.8.16
79
90
  signing_key:
80
91
  specification_version: 3
81
92
  summary: An ffi wrapper for GEOS, a C++ port of the Java Topology Suite (JTS).