ruby-vips 2.0.7 → 2.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 778544294cf437d6ec6b1e98451846c0a3d6f529
4
- data.tar.gz: da2043e2d35d9ecb2186baafd8b4fdd0191d90ee
3
+ metadata.gz: 3053302bf9707cbd283b0b8c1cf7add20cbe94bf
4
+ data.tar.gz: fc1c109a20fbd505a2e97227d02b8274c7385571
5
5
  SHA512:
6
- metadata.gz: 9c0e6b38cf8210d107113133c6d326f79b1acc12a393c30a094f5625a510081d4f444875d19836cabfd89aa09fe7f1d15b2bd633c9a29ed0ae3c3b09138ea524
7
- data.tar.gz: 40017a9f53fb333671758bac8dfd0c1beae876b811962fe1d188044b404bbbfb91070404807fdd5b8327a37cb1aef92d1a3c48bea44b4d87eeec72bdf4a4e06d
6
+ metadata.gz: b7a50b059950e254e5743d193e565296721cd35d23278ec2480f86a6e049770eb1a06ee670d2f2e4163611d29442d4c3080b5b7352caeb10bcaa84e661202ce0
7
+ data.tar.gz: 0626521b21f79c42fe423a373cbfb67eb36296f6b692f039a9a0c997af142e7d2ffd65cdfe66fffcc952d4a9d95d0e4c7b1566e279e83f00cc407e82620a00b3
@@ -2,6 +2,13 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## Version 2.0.8 (2017-09-14)
6
+
7
+ * add `thumb.rb` example, and verify we run stably and in constant memory
8
+ * cleanups and polish [Nakilon]
9
+ * add `composite` convenience method
10
+ * add `Vips::concurrency_set` and `Vips::vector_set`
11
+
5
12
  ## Version 2.0.7 (2017-09-08)
6
13
 
7
14
  * disable the logging for now, it could deadlock
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.7
1
+ 2.0.8
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # batch-process a lot of files
4
+ #
5
+ # this should run in constant memory -- if it doesn't, something has broken
6
+
7
+ require 'vips'
8
+
9
+ # benchmark thumbnail via a memory buffer
10
+ def via_memory(filename, thumbnail_width)
11
+ data = IO.binread(filename)
12
+
13
+ thumb = Vips::Image.thumbnail_buffer data, thumbnail_width, crop: 'centre'
14
+
15
+ thumb.write_to_buffer '.jpg'
16
+ end
17
+
18
+ # benchmark thumbnail via files
19
+ def via_files(filename, thumbnail_width)
20
+ thumb = Vips::Image.thumbnail filename, thumbnail_width, crop: 'centre'
21
+
22
+ thumb.write_to_buffer '.jpg'
23
+ end
24
+
25
+ ARGV.each do |filename|
26
+ puts "processing #{filename} ..."
27
+ thumb = via_memory(filename, 500)
28
+ # thumb = via_files(filename, 500)
29
+ end
30
+
31
+
@@ -71,7 +71,7 @@ module GLib
71
71
  end
72
72
 
73
73
  def self.remove_log_handler
74
- if @glib_log_handler_id != 0 and @glib_log_domain
74
+ if @glib_log_handler_id != 0 && @glib_log_domain
75
75
  g_log_remove_handler @glib_log_domain, @glib_log_handler_id
76
76
  @glib_log_handler_id = nil
77
77
  end
@@ -510,6 +510,8 @@ module Vips
510
510
  # in any case libvips does this for us
511
511
 
512
512
  attach_function :vips_leak_set, [:int], :void
513
+ attach_function :vips_vector_set_enabled, [:int], :void
514
+ attach_function :vips_concurrency_set, [:int], :void
513
515
 
514
516
  # Turn libvips leak testing on and off. Handy for debugging ruby-vips, not
515
517
  # very useful for user code.
@@ -540,6 +542,19 @@ module Vips
540
542
  vips_cache_set_max_files size
541
543
  end
542
544
 
545
+ # Set the size of the libvips worker pool. This defaults to the number of
546
+ # hardware threads on your computer. Set to 1 to disable threading.
547
+ def self.concurrency_set n
548
+ vips_concurrency_set n
549
+ end
550
+
551
+ # Enable or disable SIMD and the run-time compiler. This can give a nice
552
+ # speed-up, but can also be unstable on some systems or with some versions
553
+ # of the run-time compiler.
554
+ def self.vector_set enabled
555
+ vips_vector_set_enabled(enabled ? 1 : 0)
556
+ end
557
+
543
558
  # Deprecated compatibility function.
544
559
  #
545
560
  # Don't use this, instead change {GLib::logger.level}.
@@ -557,7 +572,7 @@ module Vips
557
572
  major = version(0)
558
573
  minor = version(1)
559
574
 
560
- major > x or (major == x and minor >= y)
575
+ major > x || (major == x && minor >= y)
561
576
  end
562
577
 
563
578
  LIBRARY_VERSION = Vips::version_string
@@ -23,6 +23,30 @@ module GObject
23
23
  layout :gtype, :GType,
24
24
  :data, [:ulong_long, 2]
25
25
 
26
+ # convert an enum value (str/symb/int) into an int ready for libvips
27
+ def self.from_nick(gtype, value)
28
+ value = value.to_s if value.is_a? Symbol
29
+
30
+ if value.is_a? String
31
+ value = Vips::vips_enum_from_nick "ruby-vips", gtype, value
32
+ if value == -1
33
+ raise Vips::Error
34
+ end
35
+ end
36
+
37
+ value
38
+ end
39
+
40
+ # convert an int enum back into a symbol
41
+ def self.to_nick(gtype, enum_value)
42
+ enum_name = Vips::vips_enum_nick gtype, enum_value
43
+ if enum_name == nil
44
+ raise Vips::Error
45
+ end
46
+
47
+ enum_name.to_sym
48
+ end
49
+
26
50
  def self.release ptr
27
51
  # GLib::logger.debug("GObject::GValue::release") {"ptr = #{ptr}"}
28
52
  ::GObject::g_value_unset ptr
@@ -82,14 +106,14 @@ module GObject
82
106
  ::Vips::vips_value_set_ref_string self, value
83
107
 
84
108
  when Vips::ARRAY_INT_TYPE
85
- value = [value] if not value.is_a? Array
109
+ value = [value] unless value.is_a? Array
86
110
 
87
111
  Vips::vips_value_set_array_int self, nil, value.length
88
112
  ptr = Vips::vips_value_get_array_int self, nil
89
113
  ptr.write_array_of_int32 value
90
114
 
91
115
  when Vips::ARRAY_DOUBLE_TYPE
92
- value = [value] if not value.is_a? Array
116
+ value = [value] unless value.is_a? Array
93
117
 
94
118
  # this will allocate an array in the gvalue
95
119
  Vips::vips_value_set_array_double self, nil, value.length
@@ -100,7 +124,7 @@ module GObject
100
124
  ptr.write_array_of_double value
101
125
 
102
126
  when Vips::ARRAY_IMAGE_TYPE
103
- value = [value] if not value.is_a? Array
127
+ value = [value] unless value.is_a? Array
104
128
 
105
129
  Vips::vips_value_set_array_image self, value.length
106
130
  ptr = Vips::vips_value_get_array_image self, nil
@@ -121,17 +145,8 @@ module GObject
121
145
  ::GObject::g_value_set_flags self, value
122
146
 
123
147
  when GENUM_TYPE
124
- value = value.to_s if value.is_a? Symbol
125
-
126
- if value.is_a? String
127
- value = Vips::vips_enum_from_nick "ruby-vips",
128
- self[:gtype], value
129
- if value == -1
130
- raise Vips::Error
131
- end
132
- end
133
-
134
- ::GObject::g_value_set_enum self, value
148
+ enum_value = GValue.from_nick(self[:gtype], value)
149
+ ::GObject::g_value_set_enum self, enum_value
135
150
 
136
151
  when GOBJECT_TYPE
137
152
  ::GObject::g_value_set_object self, value
@@ -200,14 +215,8 @@ module GObject
200
215
  result = ::GObject::g_value_get_flags self
201
216
 
202
217
  when GENUM_TYPE
203
- enum_value = ::GObject::g_value_get_enum self
204
- # this returns a static string, no need to worry about
205
- # lifetime
206
- enum_name = Vips::vips_enum_nick self[:gtype], enum_value
207
- if enum_name == nil
208
- raise Vips::Error
209
- end
210
- result = enum_name.to_sym
218
+ enum_value = ::GObject::g_value_get_enum(self)
219
+ result = GValue.to_nick self[:gtype], enum_value
211
220
 
212
221
  when GOBJECT_TYPE
213
222
  obj = ::GObject::g_value_get_object self
@@ -82,14 +82,12 @@ module Vips
82
82
  end
83
83
 
84
84
  def self.complex? format
85
- format_number = Vips::vips_enum_from_nick "complex?",
86
- BAND_FORMAT_TYPE, format.to_s
85
+ format_number = GObject::GValue.from_nick BAND_FORMAT_TYPE, format
87
86
  Vips::vips_band_format_iscomplex(format_number) != 0
88
87
  end
89
88
 
90
89
  def self.float? format
91
- format_number = Vips::vips_enum_from_nick "float?",
92
- BAND_FORMAT_TYPE, format.to_s
90
+ format_number = GObject::GValue.from_nick BAND_FORMAT_TYPE, format
93
91
  Vips::vips_band_format_isfloat(format_number) != 0
94
92
  end
95
93
 
@@ -99,12 +97,12 @@ module Vips
99
97
  def self.run_cmplx image, &block
100
98
  original_format = image.format
101
99
 
102
- if not Image::complex? image.format
100
+ unless Image::complex? image.format
103
101
  if image.bands % 2 != 0
104
102
  raise Error, "not an even number of bands"
105
103
  end
106
104
 
107
- if not Image::float? image.format
105
+ unless Image::float? image.format
108
106
  image = image.cast :float
109
107
  end
110
108
 
@@ -114,7 +112,7 @@ module Vips
114
112
 
115
113
  image = block.(image)
116
114
 
117
- if not Image::complex? original_format
115
+ unless Image::complex? original_format
118
116
  new_format = image.format == :dpcomplex ? :double : :float
119
117
  image = image.copy format: new_format, bands: image.bands * 2
120
118
  end
@@ -324,17 +322,17 @@ module Vips
324
322
  def self.new_from_array array, scale = 1, offset = 0
325
323
  # we accept a 1D array and assume height == 1, or a 2D array
326
324
  # and check all lines are the same length
327
- if not array.is_a? Array
325
+ unless array.is_a? Array
328
326
  raise Vips::Error, "Argument is not an array."
329
327
  end
330
328
 
331
329
  if array[0].is_a? Array
332
330
  height = array.length
333
331
  width = array[0].length
334
- if not array.all? {|x| x.is_a? Array}
332
+ unless array.all? {|x| x.is_a? Array}
335
333
  raise Vips::Error, "Not a 2D array."
336
334
  end
337
- if not array.all? {|x| x.length == width}
335
+ unless array.all? {|x| x.length == width}
338
336
  raise Vips::Error, "Array not rectangular."
339
337
  end
340
338
  array = array.flatten
@@ -343,7 +341,7 @@ module Vips
343
341
  width = array.length
344
342
  end
345
343
 
346
- if not array.all? {|x| x.is_a? Numeric}
344
+ unless array.all? {|x| x.is_a? Numeric}
347
345
  raise Vips::Error, "Not all array elements are Numeric."
348
346
  end
349
347
 
@@ -477,7 +475,7 @@ module Vips
477
475
  def get_typeof name
478
476
  # on libvips before 8.5, property types must be searched first,
479
477
  # since vips_image_get_typeof returned built-in enums as int
480
- if not Vips::at_least_libvips?(8, 5)
478
+ unless Vips::at_least_libvips?(8, 5)
481
479
  gtype = parent_get_typeof name
482
480
  return gtype if gtype != 0
483
481
  end
@@ -501,7 +499,7 @@ module Vips
501
499
  def get name
502
500
  # with old libvips, we must fetch properties (as opposed to
503
501
  # metadata) via VipsObject
504
- if not Vips::at_least_libvips?(8, 5)
502
+ unless Vips::at_least_libvips?(8, 5)
505
503
  return super if parent_get_typeof(name) != 0
506
504
  end
507
505
 
@@ -518,7 +516,7 @@ module Vips
518
516
  # @return [[String]] array of field names
519
517
  def get_fields
520
518
  # vips_image_get_fields() was added in libvips 8.5
521
- return [] if not Vips.respond_to? :vips_image_get_fields
519
+ return [] unless Vips.respond_to? :vips_image_get_fields
522
520
 
523
521
  array = Vips::vips_image_get_fields self
524
522
 
@@ -885,8 +883,7 @@ module Vips
885
883
  # @return [Image] extracted band(s)
886
884
  def [] index
887
885
  if index.is_a? Range
888
- n = index.end - index.begin
889
- n += 1 if not index.exclude_end?
886
+ n = index.size
890
887
  extract_band index.begin, n: n
891
888
  elsif index.is_a? Numeric
892
889
  extract_band index
@@ -921,12 +918,10 @@ module Vips
921
918
  array = memory.unpack(template)
922
919
 
923
920
  # gather band elements together
924
- pixel_array = []
925
- array.each_slice(bands) {|pixel| pixel_array << pixel}
921
+ pixel_array = array.each_slice(bands).to_a
926
922
 
927
923
  # build rows
928
- row_array = []
929
- pixel_array.each_slice(width) {|row| row_array << row}
924
+ row_array = pixel_array.each_slice(width).to_a
930
925
 
931
926
  return row_array
932
927
  end
@@ -977,7 +972,7 @@ module Vips
977
972
  #
978
973
  # @return [Array<Image>] Array of n one-band images
979
974
  def bandsplit
980
- (0...bands).map {|i| extract_band(i)}
975
+ (0...bands).map {|i| extract_band i}
981
976
  end
982
977
 
983
978
  # Join a set of images bandwise.
@@ -985,20 +980,39 @@ module Vips
985
980
  # @param other [Image, Array<Image>, Real, Array<Real>] bands to append
986
981
  # @return [Image] many band image
987
982
  def bandjoin other
988
- if not other.is_a? Array
983
+ unless other.is_a? Array
989
984
  other = [other]
990
985
  end
991
986
 
992
987
  # if other is just Numeric, we can use bandjoin_const
993
- not_all_real = (other.map {|x| not x.is_a?(Numeric)}).include?(true)
988
+ not_all_real = !other.all?{|x| x.is_a? Numeric}
994
989
 
995
990
  if not_all_real
996
991
  Vips::Image.bandjoin([self] + other)
997
992
  else
998
- bandjoin_const(other)
993
+ bandjoin_const other
999
994
  end
1000
995
  end
1001
996
 
997
+ # Composite a set of images with a set of blend modes.
998
+ #
999
+ # @param other [Image, Array<Image>, Real, Array<Real>] bands to append
1000
+ # @return [Image] many band image
1001
+ def composite other, mode, opts = {}
1002
+ unless other.is_a? Array
1003
+ other = [other]
1004
+ end
1005
+ unless mode.is_a? Array
1006
+ mode = [mode]
1007
+ end
1008
+
1009
+ mode = mode.map do |x|
1010
+ GObject::GValue.from_nick Vips::BLEND_MODE_TYPE, x
1011
+ end
1012
+
1013
+ Vips::Image.composite([self] + other, mode, opts)
1014
+ end
1015
+
1002
1016
  # Return the coordinates of the image maximum.
1003
1017
  #
1004
1018
  # @return [Real, Real, Real] maximum value, x coordinate of maximum, y
@@ -1244,10 +1258,10 @@ module Vips
1244
1258
  def ifthenelse(th, el, opts = {})
1245
1259
  match_image = [th, el, self].find {|x| x.is_a? Vips::Image}
1246
1260
 
1247
- if not th.is_a? Vips::Image
1261
+ unless th.is_a? Vips::Image
1248
1262
  th = Operation.imageize match_image, th
1249
1263
  end
1250
- if not el.is_a? Vips::Image
1264
+ unless el.is_a? Vips::Image
1251
1265
  el = Operation.imageize match_image, el
1252
1266
  end
1253
1267
 
@@ -1278,7 +1292,7 @@ module Vips
1278
1292
 
1279
1293
  def self.generate_yard
1280
1294
  # these have hand-written methods, see above
1281
- no_generate = ["scale", "bandjoin", "ifthenelse"]
1295
+ no_generate = ["scale", "bandjoin", "composite", "ifthenelse"]
1282
1296
 
1283
1297
  # map gobject's type names to Ruby
1284
1298
  map_go_to_ruby = {
@@ -1312,7 +1326,7 @@ module Vips
1312
1326
  next if (arg_flags & ARGUMENT_CONSTRUCT) == 0
1313
1327
  next if (arg_flags & ARGUMENT_DEPRECATED) != 0
1314
1328
 
1315
- name = pspec[:name].gsub("-", "_")
1329
+ name = pspec[:name].tr("-", "_")
1316
1330
  # 'in' as a param name confuses yard
1317
1331
  name = "im" if name == "in"
1318
1332
  gtype = pspec[:value_type]
@@ -1321,10 +1335,9 @@ module Vips
1321
1335
  if map_go_to_ruby.include? type_name
1322
1336
  type_name = map_go_to_ruby[type_name]
1323
1337
  end
1324
- if fundamental == GObject::GFLAGS_TYPE or
1338
+ if fundamental == GObject::GFLAGS_TYPE ||
1325
1339
  fundamental == GObject::GENUM_TYPE
1326
- type_name =~ /Vips(.*)/
1327
- type_name = "Vips::" + $~[1]
1340
+ type_name = "Vips::" + type_name[/Vips(.*)/, 1]
1328
1341
  end
1329
1342
  blurb = GObject::g_param_spec_get_blurb pspec
1330
1343
  value = {:name => name,
@@ -1337,7 +1350,7 @@ module Vips
1337
1350
  if (arg_flags & ARGUMENT_REQUIRED) != 0
1338
1351
  # note the first required input image, if any ... we
1339
1352
  # will be a method of this instance
1340
- if not member_x and gtype == Vips::IMAGE_TYPE
1353
+ if !member_x && gtype == Vips::IMAGE_TYPE
1341
1354
  member_x = value
1342
1355
  else
1343
1356
  required_input << value
@@ -1348,10 +1361,10 @@ module Vips
1348
1361
  end
1349
1362
 
1350
1363
  # MODIFY INPUT args count as OUTPUT as well
1351
- if (arg_flags & ARGUMENT_OUTPUT) != 0 or
1352
- ((arg_flags & ARGUMENT_INPUT) != 0 and
1364
+ if (arg_flags & ARGUMENT_OUTPUT) != 0 ||
1365
+ ((arg_flags & ARGUMENT_INPUT) != 0 &&
1353
1366
  (arg_flags & ARGUMENT_MODIFY) != 0)
1354
- if (arg_flags & ARGUMENT_REQUIRED) != 0 and
1367
+ if (arg_flags & ARGUMENT_REQUIRED) != 0
1355
1368
  required_output << value
1356
1369
  else
1357
1370
  optional_output << value
@@ -1361,7 +1374,7 @@ module Vips
1361
1374
  end
1362
1375
 
1363
1376
  print "# @!method "
1364
- print "self." if not member_x
1377
+ print "self." unless member_x
1365
1378
  print "#{nickname}("
1366
1379
  print required_input.map{|x| x[:name]}.join(", ")
1367
1380
  print ", " if required_input.length > 0
@@ -32,6 +32,13 @@ module Vips
32
32
  INTERPRETATION_TYPE = Vips::vips_interpretation_get_type
33
33
  CODING_TYPE = Vips::vips_coding_get_type
34
34
 
35
+ if Vips::at_least_libvips?(8, 6)
36
+ attach_function :vips_blend_mode_get_type, [], :GType
37
+ BLEND_MODE_TYPE = Vips::vips_blend_mode_get_type
38
+ else
39
+ BLEND_MODE_TYPE = nil
40
+ end
41
+
35
42
  private
36
43
 
37
44
  attach_function :vips_enum_from_nick, [:string, :GType, :string], :int
@@ -125,7 +132,7 @@ module Vips
125
132
  # return a gtype, raise an error on not found
126
133
  def get_typeof_error name
127
134
  pspec = get_pspec name
128
- raise Vips::Error if not pspec
135
+ raise Vips::Error unless pspec
129
136
 
130
137
  pspec[:value][:value_type]
131
138
  end
@@ -133,7 +140,7 @@ module Vips
133
140
  # return a gtype, 0 on not found
134
141
  def get_typeof name
135
142
  pspec = get_pspec name
136
- if not pspec
143
+ unless pspec
137
144
  Vips::vips_error_clear
138
145
  return 0
139
146
  end
@@ -98,7 +98,7 @@ module Vips
98
98
  if (flags & ARGUMENT_CONSTRUCT) != 0
99
99
  # names can include - as punctuation, but we always use _ in
100
100
  # Ruby
101
- name = pspec[:name].gsub("-", "_")
101
+ name = pspec[:name].tr("-", "_")
102
102
 
103
103
  args << [name, flags]
104
104
  end
@@ -125,7 +125,8 @@ module Vips
125
125
 
126
126
  # 2D array values become tiny 2D images
127
127
  # if there's nothing to match to, we also make a 2D image
128
- if (value.is_a? Array and value[0].is_a? Array) or match_image == nil
128
+ if (value.is_a?(Array) && value[0].is_a?(Array)) ||
129
+ match_image == nil
129
130
  return Image.new_from_array value
130
131
  else
131
132
  # we have a 1D array ... use that as a pixel constant and
@@ -240,7 +241,7 @@ module Vips
240
241
  next if (flags & ARGUMENT_DEPRECATED) != 0
241
242
 
242
243
  if (flags & ARGUMENT_INPUT) != 0
243
- if (flags & ARGUMENT_REQUIRED) != 0 and
244
+ if (flags & ARGUMENT_REQUIRED) != 0
244
245
  required_input << [name, flags]
245
246
  else
246
247
  optional_input[name] = flags
@@ -248,10 +249,10 @@ module Vips
248
249
  end
249
250
 
250
251
  # MODIFY INPUT args count as OUTPUT as well
251
- if (flags & ARGUMENT_OUTPUT) != 0 or
252
- ((flags & ARGUMENT_INPUT) != 0 and
252
+ if (flags & ARGUMENT_OUTPUT) != 0 ||
253
+ ((flags & ARGUMENT_INPUT) != 0 &&
253
254
  (flags & ARGUMENT_MODIFY) != 0)
254
- if (flags & ARGUMENT_REQUIRED) != 0 and
255
+ if (flags & ARGUMENT_REQUIRED) != 0
255
256
  required_output << [name, flags]
256
257
  else
257
258
  optional_output[name] = flags
@@ -262,11 +263,11 @@ module Vips
262
263
 
263
264
  # so we should have been supplied with n_required_input values, or
264
265
  # n_required_input + 1 if there's a hash of options at the end
265
- if not supplied.is_a? Array
266
+ unless supplied.is_a? Array
266
267
  raise Vips::Error, "unable to call #{name}: " +
267
268
  "argument array is not an array"
268
269
  end
269
- if not optional.is_a? Hash
270
+ unless optional.is_a? Hash
270
271
  raise Vips::Error, "unable to call #{name}: " +
271
272
  "optional arguments are not a hash"
272
273
  end
@@ -281,8 +282,8 @@ module Vips
281
282
  optional.each do |key, value|
282
283
  arg_name = key.to_s
283
284
 
284
- if not optional_input.has_key? arg_name and
285
- not optional_output.has_key? arg_name
285
+ unless optional_input.has_key?(arg_name) ||
286
+ optional_output.has_key?(arg_name)
286
287
  raise Vips::Error, "unable to call #{name}: " +
287
288
  "unknown option #{arg_name}"
288
289
  end
@@ -1,4 +1,4 @@
1
1
  module Vips
2
- VERSION = "2.0.7"
2
+ VERSION = "2.0.8"
3
3
  end
4
4
 
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.add_development_dependency "rake", ["~> 11.0"]
32
32
  spec.add_development_dependency "rspec", ["~> 3.3"]
33
- spec.add_development_dependency "yard", ["~> 0.8"]
33
+ spec.add_development_dependency "yard", ["~> 0.9.11"]
34
34
  spec.add_development_dependency "redcarpet", ["~> 3.3"]
35
35
  spec.add_development_dependency "github-markup", ["~> 1.4"]
36
36
  spec.add_development_dependency "bundler", ["~> 1.0"]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-vips
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.7
4
+ version: 2.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Cupitt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-08 00:00:00.000000000 Z
11
+ date: 2017-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.8'
61
+ version: 0.9.11
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.8'
68
+ version: 0.9.11
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: redcarpet
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +136,7 @@ files:
136
136
  - example/example4.rb
137
137
  - example/example5.rb
138
138
  - example/inheritance_with_refcount.rb
139
+ - example/thumb.rb
139
140
  - example/trim8.rb
140
141
  - example/watermark.rb
141
142
  - example/wobble.rb