gosu 0.9.1 → 0.9.2.pre1

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: 24d8b4cb59cd150e013929d06574a638adc974ed
4
- data.tar.gz: 50d21db20505f458779832fed214310ce34e93e8
3
+ metadata.gz: 1a1c34fd00bf80dda03420c2469ba363f09790e5
4
+ data.tar.gz: eb1a0080a88b5aae6a77731cf7f9b0d5a7ddc221
5
5
  SHA512:
6
- metadata.gz: baba7811f1734093a264106c78ced29908d9427fd12074939d56ae564b7918dec836f52de90dedbe13573bdf5a09159282ffc4151a3784fd5a888c287332c532
7
- data.tar.gz: 761a1bac7809eaf3fc6bd61e58af3521a221638fa783504f01a4fce89b4b62cb6508affaf63778aab885f9e879b08fb72f16ee0c6d48255ab45258880c192cfc
6
+ metadata.gz: c7ebb942e9dd669d8cfb8efd51a1f1e796b042067b88beee7d62a3997c550d1fe0794afd1c82026a5d1ce4a71970b5c67611fd1e24a062dd7b1cc8e451745af3
7
+ data.tar.gz: d227fec88ceb822dcd120923e338e49cee87897b0be3e21eeefa1d0355c050bb4c0ec53ef8867394b2c2e30535ff6a332ea1fc2fdca1b221660b527fd40de3c9
@@ -89,7 +89,7 @@ namespace Gosu
89
89
  Input(void* view, float updateInterval);
90
90
  void feedTouchEvent(int type, void* touches);
91
91
  #else
92
- Input();
92
+ Input(void* window);
93
93
  bool feedSDLEvent(void* event);
94
94
  #endif
95
95
 
@@ -3,8 +3,8 @@
3
3
 
4
4
  #define GOSU_MAJOR_VERSION 0
5
5
  #define GOSU_MINOR_VERSION 9
6
- #define GOSU_POINT_VERSION 1
7
- #define GOSU_VERSION "0.9.1"
6
+ #define GOSU_POINT_VERSION 2
7
+ #define GOSU_VERSION "0.9.2.pre1"
8
8
 
9
9
  #define GOSU_COPYRIGHT_NOTICE \
10
10
  "This software uses the following third-party libraries:\n" \
@@ -8,10 +8,6 @@
8
8
  * interface file instead.
9
9
  * ----------------------------------------------------------------------------- */
10
10
 
11
- // This file was afterwards patched using the following instructions:
12
- // http://sourceforge.net/tracker/index.php?func=detail&aid=2034216&group_id=1645&atid=101645
13
- // (Many thanks to Kevin Burge for that.)
14
-
15
11
  #define SWIGRUBY
16
12
  #define SWIG_DIRECTORS
17
13
 
@@ -848,7 +844,6 @@ SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
848
844
 
849
845
 
850
846
  #include <ruby.h>
851
- #include <map>
852
847
 
853
848
  /* Ruby 1.9.1 has a "memoisation optimisation" when compiling with GCC which
854
849
  * breaks using rb_intern as an lvalue, as SWIG does. We work around this
@@ -1189,7 +1184,7 @@ extern "C" {
1189
1184
  /* Global Ruby hash table to store Trackings from C/C++
1190
1185
  structs to Ruby Objects.
1191
1186
  */
1192
- static std::map<void*, VALUE> swig_ruby_trackings;
1187
+ static VALUE swig_ruby_trackings = Qnil;
1193
1188
 
1194
1189
  /* Global variable that stores a reference to the ruby
1195
1190
  hash table delete function. */
@@ -1206,18 +1201,34 @@ SWIGRUNTIME void SWIG_RubyInitializeTrackings(void) {
1206
1201
  This is done to allow multiple DSOs to share the same
1207
1202
  tracking table.
1208
1203
  */
1204
+ ID trackings_id = rb_intern( "@__trackings__" );
1209
1205
  VALUE verbose = rb_gv_get("VERBOSE");
1210
1206
  rb_gv_set("VERBOSE", Qfalse);
1207
+ swig_ruby_trackings = rb_ivar_get( _mSWIG, trackings_id );
1211
1208
  rb_gv_set("VERBOSE", verbose);
1212
1209
 
1213
1210
  /* No, it hasn't. Create one ourselves */
1214
- swig_ruby_trackings.clear();
1211
+ if ( swig_ruby_trackings == Qnil )
1212
+ {
1213
+ swig_ruby_trackings = rb_hash_new();
1214
+ rb_ivar_set( _mSWIG, trackings_id, swig_ruby_trackings );
1215
+ }
1215
1216
 
1216
1217
  /* Now store a reference to the hash table delete function
1217
1218
  so that we only have to look it up once.*/
1218
1219
  swig_ruby_hash_delete = rb_intern("delete");
1219
1220
  }
1220
1221
 
1222
+ /* Get a Ruby number to reference a pointer */
1223
+ SWIGRUNTIME VALUE SWIG_RubyPtrToReference(void* ptr) {
1224
+ /* We cast the pointer to an unsigned long
1225
+ and then store a reference to it using
1226
+ a Ruby number object. */
1227
+
1228
+ /* Convert the pointer to a Ruby number */
1229
+ return SWIG2NUM(ptr);
1230
+ }
1231
+
1221
1232
  /* Get a Ruby number to reference an object */
1222
1233
  SWIGRUNTIME VALUE SWIG_RubyObjectToReference(VALUE object) {
1223
1234
  /* We cast the object to an unsigned long
@@ -1239,16 +1250,39 @@ SWIGRUNTIME VALUE SWIG_RubyReferenceToObject(VALUE reference) {
1239
1250
 
1240
1251
  /* Add a Tracking from a C/C++ struct to a Ruby object */
1241
1252
  SWIGRUNTIME void SWIG_RubyAddTracking(void* ptr, VALUE object) {
1253
+ /* In a Ruby hash table we store the pointer and
1254
+ the associated Ruby object. The trick here is
1255
+ that we cannot store the Ruby object directly - if
1256
+ we do then it cannot be garbage collected. So
1257
+ instead we typecast it as a unsigned long and
1258
+ convert it to a Ruby number object.*/
1259
+
1260
+ /* Get a reference to the pointer as a Ruby number */
1261
+ VALUE key = SWIG_RubyPtrToReference(ptr);
1262
+
1263
+ /* Get a reference to the Ruby object as a Ruby number */
1264
+ VALUE value = SWIG_RubyObjectToReference(object);
1265
+
1242
1266
  /* Store the mapping to the global hash table. */
1243
- swig_ruby_trackings[ptr] = object;
1267
+ rb_hash_aset(swig_ruby_trackings, key, value);
1244
1268
  }
1245
1269
 
1246
1270
  /* Get the Ruby object that owns the specified C/C++ struct */
1247
1271
  SWIGRUNTIME VALUE SWIG_RubyInstanceFor(void* ptr) {
1248
- if (swig_ruby_trackings.count(ptr) == 0)
1272
+ /* Get a reference to the pointer as a Ruby number */
1273
+ VALUE key = SWIG_RubyPtrToReference(ptr);
1274
+
1275
+ /* Now lookup the value stored in the global hash table */
1276
+ VALUE value = rb_hash_aref(swig_ruby_trackings, key);
1277
+
1278
+ if (value == Qnil) {
1279
+ /* No object exists - return nil. */
1249
1280
  return Qnil;
1250
- else
1251
- return swig_ruby_trackings[ptr];
1281
+ }
1282
+ else {
1283
+ /* Convert this value to Ruby object */
1284
+ return SWIG_RubyReferenceToObject(value);
1285
+ }
1252
1286
  }
1253
1287
 
1254
1288
  /* Remove a Tracking from a C/C++ struct to a Ruby object. It
@@ -1256,7 +1290,12 @@ SWIGRUNTIME VALUE SWIG_RubyInstanceFor(void* ptr) {
1256
1290
  since the same memory address may be reused later to create
1257
1291
  a new object. */
1258
1292
  SWIGRUNTIME void SWIG_RubyRemoveTracking(void* ptr) {
1259
- swig_ruby_trackings.erase(ptr);
1293
+ /* Get a reference to the pointer as a Ruby number */
1294
+ VALUE key = SWIG_RubyPtrToReference(ptr);
1295
+
1296
+ /* Delete the object from the hash table by calling Ruby's
1297
+ do this we need to call the Hash.delete method.*/
1298
+ rb_funcall(swig_ruby_trackings, swig_ruby_hash_delete, 1, key);
1260
1299
  }
1261
1300
 
1262
1301
  /* This is a helper method that unlinks a Ruby object from its
@@ -3062,14 +3101,14 @@ SwigDirector_Window::~SwigDirector_Window() {
3062
3101
  void SwigDirector_Window::update() {
3063
3102
  VALUE result;
3064
3103
 
3065
- result = rb_funcall(swig_get_self(), rb_intern("protected_update"), 0, NULL);
3104
+ result = rb_funcall(swig_get_self(), rb_intern("update"), 0, NULL);
3066
3105
  }
3067
3106
 
3068
3107
 
3069
3108
  void SwigDirector_Window::draw() {
3070
3109
  VALUE result;
3071
3110
 
3072
- result = rb_funcall(swig_get_self(), rb_intern("protected_draw_2"), 0, NULL);
3111
+ result = rb_funcall(swig_get_self(), rb_intern("draw"), 0, NULL);
3073
3112
  }
3074
3113
 
3075
3114
 
@@ -3077,7 +3116,7 @@ bool SwigDirector_Window::needsRedraw() const {
3077
3116
  bool c_result ;
3078
3117
  VALUE result;
3079
3118
 
3080
- result = rb_funcall(swig_get_self(), rb_intern("protected_needs_redraw?"), 0, NULL);
3119
+ result = rb_funcall(swig_get_self(), rb_intern("needs_redraw?"), 0, NULL);
3081
3120
  bool swig_val;
3082
3121
  int swig_res = SWIG_AsVal_bool(result, &swig_val);
3083
3122
  if (!SWIG_IsOK(swig_res)) {
@@ -3092,7 +3131,7 @@ bool SwigDirector_Window::needsCursor() const {
3092
3131
  bool c_result ;
3093
3132
  VALUE result;
3094
3133
 
3095
- result = rb_funcall(swig_get_self(), rb_intern("protected_needs_cursor?"), 0, NULL);
3134
+ result = rb_funcall(swig_get_self(), rb_intern("needs_cursor?"), 0, NULL);
3096
3135
  bool swig_val;
3097
3136
  int swig_res = SWIG_AsVal_bool(result, &swig_val);
3098
3137
  if (!SWIG_IsOK(swig_res)) {
@@ -3106,7 +3145,7 @@ bool SwigDirector_Window::needsCursor() const {
3106
3145
  void SwigDirector_Window::loseFocus() {
3107
3146
  VALUE result;
3108
3147
 
3109
- result = rb_funcall(swig_get_self(), rb_intern("protected_lose_focus"), 0, NULL);
3148
+ result = rb_funcall(swig_get_self(), rb_intern("lose_focus"), 0, NULL);
3110
3149
  }
3111
3150
 
3112
3151
 
@@ -3127,7 +3166,7 @@ void SwigDirector_Window::buttonDown(Gosu::Button arg0) {
3127
3166
  else
3128
3167
  obj0 = LONG2NUM((&arg0)->id());
3129
3168
  }
3130
- result = rb_funcall(swig_get_self(), rb_intern("protected_button_down"), 1,obj0);
3169
+ result = rb_funcall(swig_get_self(), rb_intern("button_down"), 1,obj0);
3131
3170
  }
3132
3171
 
3133
3172
 
@@ -3141,7 +3180,7 @@ void SwigDirector_Window::buttonUp(Gosu::Button arg0) {
3141
3180
  else
3142
3181
  obj0 = LONG2NUM((&arg0)->id());
3143
3182
  }
3144
- result = rb_funcall(swig_get_self(), rb_intern("protected_button_up"), 1,obj0);
3183
+ result = rb_funcall(swig_get_self(), rb_intern("button_up"), 1,obj0);
3145
3184
  }
3146
3185
 
3147
3186
 
@@ -11095,8 +11134,8 @@ SWIGEXPORT void Init_gosu(void) {
11095
11134
  SWIG_RubyInitializeTrackings();
11096
11135
  rb_define_const(mGosu, "MAJOR_VERSION", SWIG_From_int(static_cast< int >(0)));
11097
11136
  rb_define_const(mGosu, "MINOR_VERSION", SWIG_From_int(static_cast< int >(9)));
11098
- rb_define_const(mGosu, "POINT_VERSION", SWIG_From_int(static_cast< int >(1)));
11099
- rb_define_const(mGosu, "VERSION", SWIG_FromCharPtr("0.9.1"));
11137
+ rb_define_const(mGosu, "POINT_VERSION", SWIG_From_int(static_cast< int >(2)));
11138
+ rb_define_const(mGosu, "VERSION", SWIG_FromCharPtr("0.9.2.pre1"));
11100
11139
  rb_define_const(mGosu, "GOSU_COPYRIGHT_NOTICE", SWIG_FromCharPtr("This software uses the following third-party libraries:\n\nGosu, http://www.libgosu.org, MIT License, http://opensource.org/licenses/MIT\nSDL 2, http://www.libsdl.org, MIT License, http://opensource.org/licenses/MIT\nFreeImage, http://freeimage.sourceforge.net, FreeImage Public License\nlibogg & libvorbis, http://www.xiph.org, BSD License, 3-Clause Version, http://www.xiph.org/licenses/bsd\nlibsndfile, http://www.mega-nerd.com/libsndfile, GNU LGPL 3, http://www.gnu.org/copyleft/lesser.html\nOpenAL Soft, http://kcat.strangesoft.net/openal.html, GNU LGPL 2, http://www.gnu.org/licenses/old-licenses/lgpl-2.0.html\n"));
11101
11140
  rb_define_module_function(mGosu, "milliseconds", VALUEFUNC(_wrap_milliseconds), -1);
11102
11141
  rb_define_module_function(mGosu, "random", VALUEFUNC(_wrap_random), -1);
@@ -676,28 +676,27 @@ module Gosu
676
676
  # Gosu application. Manages initialization of all of Gosu's core components
677
677
  # and provides timing functionality.
678
678
  #
679
- # Note that all coordinates, even the mouse position, are in client
680
- # coordinates relative to the window. This means that the mouse position
681
- # can be negative or larger than the window size.
679
+ # Note that all coordinates, even the mouse position, are in client coordinates, relative to the window’s top left corner.
680
+ # This means that the mouse position can be negative or larger than the window size.
682
681
  #
683
- # @note There should really only be one instance of this class at a time. This may or may not change later, but for right now, having two or more windows and loading samples or songs on both of them will result in an exception.
682
+ # @note There should really only be one instance of this class at a time. This may or may not change later.
684
683
  class Window
685
684
  ##
686
685
  # @return [String] the window's caption, usually dispalyed in the title bar.
687
686
  attr_accessor :caption
688
687
 
689
688
  ##
690
- # @return [Fixnum] the mouse pointer's window-based X coordinate.
689
+ # @return [Float] the mouse pointer's window-based X coordinate.
691
690
  attr_accessor :mouse_x
692
691
 
693
692
  ##
694
- # @return [Fixnum] the mouse pointer's window-based Y coordinate.
693
+ # @return [Float] the mouse pointer's window-based Y coordinate.
695
694
  attr_accessor :mouse_y
696
695
 
697
696
  ##
698
697
  # The currently active {TextInput}. If not nil, all keyboard input will be handled by this object.
699
698
  #
700
- # @return [TextInput?] the currently active text input.
699
+ # @return [TextInput?] the currently active text input, if any.
701
700
  attr_accessor :text_input
702
701
 
703
702
  ##
@@ -9,30 +9,38 @@
9
9
 
10
10
  namespace
11
11
  {
12
+ void cleanup();
13
+
12
14
  void requireSDLVideo()
13
15
  {
14
- static bool initializedSDLVideo = false;
15
- if (!initializedSDLVideo)
16
+ static bool initialized = false;
17
+ if (!initialized)
16
18
  {
17
- SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER);
18
- std::atexit(SDL_Quit);
19
- initializedSDLVideo = true;
19
+ SDL_InitSubSystem(SDL_INIT_VIDEO);
20
+ initialized = true;
21
+ std::atexit(cleanup);
20
22
  }
21
23
  }
22
24
 
25
+ void cleanup()
26
+ {
27
+ SDL_QuitSubSystem(SDL_INIT_VIDEO);
28
+ }
29
+
23
30
  std::tr1::array<bool, Gosu::numButtons> buttonStates = { { false } };
24
31
  }
25
32
 
26
33
  struct Gosu::Input::Impl
27
34
  {
28
35
  Input& input;
36
+ SDL_Window* window;
29
37
  TextInput* textInput;
30
38
  double mouseX, mouseY;
31
39
  double mouseFactorX, mouseFactorY;
32
40
  double mouseOffsetX, mouseOffsetY;
33
41
 
34
- Impl(Input& input)
35
- : input(input), textInput(NULL)
42
+ Impl(Input& input, SDL_Window* window)
43
+ : input(input), window(window), textInput(NULL)
36
44
  {
37
45
  mouseFactorX = mouseFactorY = 1;
38
46
  mouseOffsetX = mouseOffsetY = 0;
@@ -40,9 +48,16 @@ struct Gosu::Input::Impl
40
48
 
41
49
  void updateMousePosition()
42
50
  {
51
+ #if SDL_VERSION_ATLEAST(2, 0, 4)
52
+ int x, y, windowX, windowY;
53
+ SDL_GetWindowPosition(window, &windowX, &windowY);
54
+ SDL_GetGlobalMouseState(&x, &y);
55
+ mouseX = x - windowX, mouseY = y - windowY;
56
+ #else
43
57
  int x, y;
44
58
  SDL_GetMouseState(&x, &y);
45
59
  mouseX = x, mouseY = y;
60
+ #endif
46
61
  }
47
62
 
48
63
  void enqueueEvent(int id, bool down)
@@ -70,6 +85,8 @@ struct Gosu::Input::Impl
70
85
 
71
86
  void initializeGamepads()
72
87
  {
88
+ SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER);
89
+
73
90
  int numGamepads = std::min<int>(Gosu::numGamepads, SDL_NumJoysticks());
74
91
 
75
92
  for (int i = 0; i < numGamepads; ++i) {
@@ -95,6 +112,8 @@ struct Gosu::Input::Impl
95
112
  joysticks.clear();
96
113
  std::for_each(gameControllers.begin(), gameControllers.end(), &SDL_GameControllerClose);
97
114
  gameControllers.clear();
115
+
116
+ SDL_QuitSubSystem(SDL_INIT_GAMECONTROLLER);
98
117
  }
99
118
 
100
119
  typedef std::tr1::array<bool, gpNumPerGamepad> GamepadBuffer;
@@ -236,8 +255,8 @@ private:
236
255
  }
237
256
  };
238
257
 
239
- Gosu::Input::Input()
240
- : pimpl(new Impl(*this))
258
+ Gosu::Input::Input(void* window)
259
+ : pimpl(new Impl(*this, (SDL_Window*)window))
241
260
  {
242
261
  requireSDLVideo();
243
262
 
@@ -359,8 +378,7 @@ double Gosu::Input::mouseY() const
359
378
 
360
379
  void Gosu::Input::setMousePosition(double x, double y)
361
380
  {
362
- // TODO - Input needs SDL Window handle to pass into this
363
- SDL_WarpMouseInWindow(NULL,
381
+ SDL_WarpMouseInWindow(pimpl->window,
364
382
  (x - pimpl->mouseOffsetX) / pimpl->mouseFactorX,
365
383
  (y - pimpl->mouseOffsetY) / pimpl->mouseFactorY);
366
384
  }
@@ -4,29 +4,11 @@
4
4
 
5
5
  void Gosu::sleep(unsigned milliseconds)
6
6
  {
7
- ::Sleep(milliseconds);
8
- }
9
-
10
- namespace
11
- {
12
- void resetTGT()
13
- {
14
- ::timeEndPeriod(1);
15
- }
7
+ Sleep(milliseconds);
16
8
  }
17
9
 
18
10
  unsigned long Gosu::milliseconds()
19
11
  {
20
- static unsigned long start = 0;
21
-
22
- if (!start)
23
- {
24
- if (::timeBeginPeriod(1) != TIMERR_NOERROR)
25
- std::atexit(resetTGT);
26
- start = ::timeGetTime();
27
- }
28
- // Truncate to 2^30, C++ users shouldn't mind and Ruby users will
29
- // have a happy GC on 32-bit systems.
30
- // No, don't ask why this is an unsigned long then :)
31
- return (::timeGetTime() - start) & 0x1fffffff;
12
+ static unsigned long start = (timeBeginPeriod(1), timeGetTime());
13
+ return timeGetTime() - start;
32
14
  }
@@ -19,7 +19,9 @@ namespace Gosu
19
19
  const char *error = SDL_GetError();
20
20
  throw std::runtime_error(operation + ": " + (error ? error : "(unknown error)"));
21
21
  }
22
-
22
+
23
+ void cleanup();
24
+
23
25
  SDL_Window* sharedWindow()
24
26
  {
25
27
  static SDL_Window *window = 0;
@@ -27,9 +29,9 @@ namespace Gosu
27
29
  {
28
30
  if (SDL_Init(SDL_INIT_VIDEO) < 0)
29
31
  throwSDLError("Could not initialize SDL Video");
30
-
31
- atexit(SDL_Quit);
32
-
32
+
33
+ std::atexit(cleanup);
34
+
33
35
  Uint32 flags = SDL_WINDOW_OPENGL | SDL_WINDOW_HIDDEN;
34
36
 
35
37
  #if SDL_VERSION_ATLEAST(2, 0, 1)
@@ -65,6 +67,13 @@ namespace Gosu
65
67
  {
66
68
  SDL_GL_MakeCurrent(sharedWindow(), sharedGLContext());
67
69
  }
70
+
71
+ void cleanup()
72
+ {
73
+ SDL_GL_DeleteContext(sharedGLContext());
74
+ SDL_DestroyWindow(sharedWindow());
75
+ SDL_QuitSubSystem(SDL_INIT_VIDEO);
76
+ }
68
77
  }
69
78
 
70
79
  struct Gosu::Window::Impl
@@ -78,7 +87,6 @@ struct Gosu::Window::Impl
78
87
  Gosu::Window::Window(unsigned width, unsigned height, bool fullscreen, double updateInterval)
79
88
  : pimpl(new Impl)
80
89
  {
81
-
82
90
  int actualWidth = width;
83
91
  int actualHeight = height;
84
92
  double scaleFactor = 1.0;
@@ -131,7 +139,7 @@ Gosu::Window::Window(unsigned width, unsigned height, bool fullscreen, double up
131
139
 
132
140
  pimpl->graphics.reset(new Graphics(actualWidth, actualHeight, fullscreen));
133
141
  pimpl->graphics->setResolution(width, height, blackBarWidth, blackBarHeight);
134
- pimpl->input.reset(new Input());
142
+ pimpl->input.reset(new Input(sharedWindow()));
135
143
  pimpl->input->setMouseFactors(1 / scaleFactor, 1 / scaleFactor, blackBarWidth, blackBarHeight);
136
144
  input().onButtonDown = std::tr1::bind(&Window::buttonDown, this, _1);
137
145
  input().onButtonUp = std::tr1::bind(&Window::buttonUp, this, _1);
@@ -208,6 +216,8 @@ void Gosu::Window::show()
208
216
  sleep(pimpl->updateInterval - frameTime);
209
217
  }
210
218
  }
219
+
220
+ SDL_HideWindow(sharedWindow());
211
221
  }
212
222
 
213
223
  void Gosu::Window::close()
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gosu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.2.pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Raschke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-17 00:00:00.000000000 Z
11
+ date: 2015-05-23 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
  2D game development library.
@@ -162,9 +162,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
162
162
  version: 1.8.2
163
163
  required_rubygems_version: !ruby/object:Gem::Requirement
164
164
  requirements:
165
- - - '>='
165
+ - - '>'
166
166
  - !ruby/object:Gem::Version
167
- version: '0'
167
+ version: 1.3.1
168
168
  requirements: []
169
169
  rubyforge_project:
170
170
  rubygems_version: 2.0.14