riddle 1.3.3 → 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.
@@ -86,3 +86,8 @@ Thanks to the following people who have contributed to Riddle in some shape or f
86
86
  * Paco Guzmán
87
87
  * Greg Weber
88
88
  * Enrico Thierbach
89
+ * Jason Lambert
90
+ * Saberma
91
+ * James Cook
92
+ * Alexey Artamonov
93
+ * Paul Gibler
@@ -1,13 +1,24 @@
1
+ require 'thread'
1
2
  require 'socket'
2
3
  require 'timeout'
3
4
 
4
5
  module Riddle #:nodoc:
5
6
  @@mutex = Mutex.new
6
7
  @@escape_pattern = /[\(\)\|\-!@~"&\/]/
8
+ @@use_encoding = defined?(::Encoding) &&
9
+ ::Encoding.respond_to?(:default_external)
7
10
 
8
11
  class ConnectionError < StandardError #:nodoc:
9
12
  #
10
13
  end
14
+
15
+ def self.encode(data, encoding = defined?(::Encoding) && ::Encoding.default_external)
16
+ if @@use_encoding
17
+ data.force_encoding(encoding)
18
+ else
19
+ data
20
+ end
21
+ end
11
22
 
12
23
  def self.mutex
13
24
  @@mutex
@@ -51,6 +62,7 @@ lines after "require 'riddle'" to avoid this warning.
51
62
 
52
63
  }
53
64
  end
65
+
54
66
  end
55
67
 
56
68
  require 'riddle/auto_version'
@@ -5,16 +5,20 @@ module Riddle
5
5
  set_listen
6
6
  clear_deprecated
7
7
 
8
- !( @listen.nil? || @pid_file.nil? )
8
+ !( @listen.nil? || @listen.empty? || @pid_file.nil? )
9
9
  end
10
10
 
11
11
  private
12
12
 
13
13
  def set_listen
14
- return unless @listen.nil?
14
+ return unless @listen.nil? || @listen.empty?
15
15
 
16
- @listen = @port.to_s if @port && @address.nil?
17
- @listen = "#{@address}:#{@port}" if @address && @port
16
+ @listen = []
17
+ @listen << @port.to_s if @port
18
+ @listen << "9306:mysql41" if @mysql41.is_a?(TrueClass)
19
+ @listen << "#{@mysql41}:mysql41" if @mysql41.is_a?(Fixnum)
20
+
21
+ @listen.each { |l| l.insert(0, "#{@address}:") } if @address
18
22
  end
19
23
 
20
24
  def clear_deprecated
@@ -246,7 +246,7 @@ module Riddle
246
246
  result[:fields] = response.next_array
247
247
 
248
248
  attributes = response.next_int
249
- for i in 0...attributes
249
+ attributes.times do
250
250
  attribute_name = response.next
251
251
  type = response.next_int
252
252
 
@@ -278,7 +278,7 @@ module Riddle
278
278
  result[:time] = ('%.3f' % (response.next_int / 1000.0)).to_f || 0.0
279
279
 
280
280
  words = response.next_int
281
- for i in 0...words
281
+ words.times do
282
282
  word = response.next
283
283
  docs = response.next_int
284
284
  hits = response.next_int
@@ -615,11 +615,7 @@ module Riddle
615
615
  status = -1
616
616
  version = 0
617
617
  length = 0
618
- message = Array(messages).join("")
619
-
620
- if message.respond_to?(:force_encoding)
621
- message = message.force_encoding('ASCII-8BIT')
622
- end
618
+ message = Riddle.encode(Array(messages).join(""), 'ASCII-8BIT')
623
619
 
624
620
  connect do |socket|
625
621
  case command
@@ -642,6 +638,10 @@ module Riddle
642
638
 
643
639
  while response.length < (length || 0)
644
640
  part = socket.recv(length - response.length)
641
+
642
+ # will return 0 bytes if remote side closed TCP connection, e.g, searchd segfaulted.
643
+ break if part.length == 0 && socket.is_a?(TcpSocket)
644
+
645
645
  response << part if part
646
646
  end
647
647
  end
@@ -15,9 +15,7 @@ module Riddle
15
15
 
16
16
  # Append a string's length, then the string itself
17
17
  def append_string(str)
18
- string = str.respond_to?(:force_encoding) ?
19
- str.dup.force_encoding('ASCII-8BIT') : str
20
-
18
+ string = Riddle.encode(str.dup, 'ASCII-8BIT')
21
19
  @message << [string.send(@size_method)].pack('N') + string
22
20
  end
23
21
 
@@ -17,7 +17,7 @@ module Riddle
17
17
  result = @str[@marker, len]
18
18
  @marker += len
19
19
 
20
- return result
20
+ Riddle.encode(result)
21
21
  end
22
22
 
23
23
  # Return the next integer value from the stream
@@ -25,14 +25,14 @@ module Riddle
25
25
  int = @str[@marker, 4].unpack('N*').first
26
26
  @marker += 4
27
27
 
28
- return int
28
+ int
29
29
  end
30
30
 
31
31
  def next_64bit_int
32
32
  high, low = @str[@marker, 8].unpack('N*N*')[0..1]
33
33
  @marker += 8
34
34
 
35
- return (high << 32) + low
35
+ (high << 32) + low
36
36
  end
37
37
 
38
38
  # Return the next float value from the stream
@@ -40,49 +40,49 @@ module Riddle
40
40
  float = @str[@marker, 4].unpack('N*').pack('L').unpack('f*').first
41
41
  @marker += 4
42
42
 
43
- return float
43
+ float
44
44
  end
45
45
 
46
46
  # Returns an array of string items
47
47
  def next_array
48
48
  count = next_int
49
49
  items = []
50
- for i in 0...count
50
+ count.times do
51
51
  items << self.next
52
52
  end
53
53
 
54
- return items
54
+ items
55
55
  end
56
56
 
57
57
  # Returns an array of int items
58
58
  def next_int_array
59
59
  count = next_int
60
60
  items = []
61
- for i in 0...count
61
+ count.times do
62
62
  items << self.next_int
63
63
  end
64
64
 
65
- return items
65
+ items
66
66
  end
67
67
 
68
68
  def next_float_array
69
69
  count = next_int
70
70
  items = []
71
- for i in 0...count
71
+ count.times do
72
72
  items << self.next_float
73
73
  end
74
74
 
75
- return items
75
+ items
76
76
  end
77
77
 
78
78
  def next_64bit_int_array
79
79
  count = next_int
80
80
  items = []
81
- for i in 0...count
81
+ count.times do
82
82
  items << self.next_64bit_int
83
83
  end
84
84
 
85
- return items
85
+ items
86
86
  end
87
87
 
88
88
  # Returns the length of the streamed data
@@ -91,4 +91,4 @@ module Riddle
91
91
  end
92
92
  end
93
93
  end
94
- end
94
+ end
@@ -1,8 +1,12 @@
1
1
  module Riddle
2
2
  class Configuration
3
3
  class DistributedIndex < Riddle::Configuration::Section
4
- self.settings = [:type, :local, :agent, :agent_blackhole,
5
- :agent_connect_timeout, :agent_query_timeout]
4
+ def self.settings
5
+ [
6
+ :type, :local, :agent, :agent_blackhole,
7
+ :agent_connect_timeout, :agent_query_timeout
8
+ ]
9
+ end
6
10
 
7
11
  attr_accessor :name, :local_indexes, :remote_indexes, :agent_blackhole,
8
12
  :agent_connect_timeout, :agent_query_timeout
@@ -46,4 +50,4 @@ module Riddle
46
50
  end
47
51
  end
48
52
  end
49
- end
53
+ end
@@ -1,17 +1,21 @@
1
1
  module Riddle
2
2
  class Configuration
3
3
  class Index < Riddle::Configuration::Section
4
- self.settings = [:type, :source, :path, :docinfo, :mlock, :morphology,
5
- :dict, :index_sp, :index_zones, :min_stemming_len, :stopwords,
6
- :wordforms, :exceptions, :min_word_len, :charset_dictpath,
7
- :charset_type, :charset_table, :ignore_chars, :min_prefix_len,
8
- :min_infix_len, :prefix_fields, :infix_fields, :enable_star,
9
- :expand_keywords, :ngram_len, :ngram_chars, :phrase_boundary,
10
- :phrase_boundary_step, :blend_chars, :blend_mode, :html_strip,
11
- :html_index_attrs, :html_remove_elements, :preopen, :ondisk_dict,
12
- :inplace_enable, :inplace_hit_gap, :inplace_docinfo_gap,
13
- :inplace_reloc_factor, :inplace_write_factor, :index_exact_words,
14
- :overshort_step, :stopwords_step, :hitless_words]
4
+ def self.settings
5
+ [
6
+ :type, :source, :path, :docinfo, :mlock, :morphology,
7
+ :dict, :index_sp, :index_zones, :min_stemming_len, :stopwords,
8
+ :wordforms, :exceptions, :min_word_len, :charset_dictpath,
9
+ :charset_type, :charset_table, :ignore_chars, :min_prefix_len,
10
+ :min_infix_len, :prefix_fields, :infix_fields, :enable_star,
11
+ :expand_keywords, :ngram_len, :ngram_chars, :phrase_boundary,
12
+ :phrase_boundary_step, :blend_chars, :blend_mode, :html_strip,
13
+ :html_index_attrs, :html_remove_elements, :preopen, :ondisk_dict,
14
+ :inplace_enable, :inplace_hit_gap, :inplace_docinfo_gap,
15
+ :inplace_reloc_factor, :inplace_write_factor, :index_exact_words,
16
+ :overshort_step, :stopwords_step, :hitless_words
17
+ ]
18
+ end
15
19
 
16
20
  attr_accessor :name, :parent, :type, :sources, :path, :docinfo, :mlock,
17
21
  :morphologies, :dict, :index_sp, :index_zones, :min_stemming_len,
@@ -149,4 +153,4 @@ module Riddle
149
153
  end
150
154
  end
151
155
  end
152
- end
156
+ end
@@ -1,8 +1,12 @@
1
1
  module Riddle
2
2
  class Configuration
3
3
  class Indexer < Riddle::Configuration::Section
4
- self.settings = [:mem_limit, :max_iops, :max_iosize, :max_xmlpipe2_field,
5
- :write_buffer, :max_file_field_buffer]
4
+ def self.settings
5
+ [
6
+ :mem_limit, :max_iops, :max_iosize, :max_xmlpipe2_field,
7
+ :write_buffer, :max_file_field_buffer
8
+ ]
9
+ end
6
10
 
7
11
  attr_accessor *self.settings
8
12
 
@@ -17,4 +21,4 @@ module Riddle
17
21
  end
18
22
  end
19
23
  end
20
- end
24
+ end
@@ -1,8 +1,12 @@
1
1
  module Riddle
2
2
  class Configuration
3
3
  class RealtimeIndex < Riddle::Configuration::Section
4
- self.settings = [:type, :path, :rt_mem_limit, :rt_field, :rt_attr_uint,
5
- :rt_attr_bigint, :rt_attr_float, :rt_attr_timestamp, :rt_attr_string]
4
+ def self.settings
5
+ [
6
+ :type, :path, :rt_mem_limit, :rt_field, :rt_attr_uint,
7
+ :rt_attr_bigint, :rt_attr_float, :rt_attr_timestamp, :rt_attr_string
8
+ ]
9
+ end
6
10
 
7
11
  attr_accessor :name
8
12
  attr_accessor *self.settings
@@ -1,19 +1,24 @@
1
1
  module Riddle
2
2
  class Configuration
3
3
  class Searchd < Riddle::Configuration::Section
4
- self.settings = [:listen, :address, :port, :log, :query_log,
5
- :query_log_format, :read_timeout, :client_timeout, :max_children,
6
- :pid_file, :max_matches, :seamless_rotate, :preopen_indexes,
7
- :unlink_old, :attr_flush_period, :ondisk_dict_default, :max_packet_size,
8
- :mva_updates_pool, :crash_log_path, :max_filters, :max_filter_values,
9
- :listen_backlog, :read_buffer, :read_unhinted, :max_batch_queries,
10
- :subtree_docs_cache, :subtree_hits_cache, :workers, :dist_threads,
11
- :binlog_path, :binlog_flush, :binlog_max_log_size, :collation_server,
12
- :collation_libc_locale, :plugin_dir, :mysql_version_string,
13
- :rt_flush_period, :thread_stack, :expansion_limit,
14
- :compat_sphinxql_magics, :watchdog, :client_key]
4
+ def self.settings
5
+ [
6
+ :listen, :address, :port, :log, :query_log,
7
+ :query_log_format, :read_timeout, :client_timeout, :max_children,
8
+ :pid_file, :max_matches, :seamless_rotate, :preopen_indexes,
9
+ :unlink_old, :attr_flush_period, :ondisk_dict_default, :max_packet_size,
10
+ :mva_updates_pool, :crash_log_path, :max_filters, :max_filter_values,
11
+ :listen_backlog, :read_buffer, :read_unhinted, :max_batch_queries,
12
+ :subtree_docs_cache, :subtree_hits_cache, :workers, :dist_threads,
13
+ :binlog_path, :binlog_flush, :binlog_max_log_size, :collation_server,
14
+ :collation_libc_locale, :plugin_dir, :mysql_version_string,
15
+ :rt_flush_period, :thread_stack, :expansion_limit,
16
+ :compat_sphinxql_magics, :watchdog, :client_key
17
+ ]
18
+ end
15
19
 
16
20
  attr_accessor *self.settings
21
+ attr_accessor :mysql41
17
22
 
18
23
  def render
19
24
  raise ConfigurationError unless valid?
@@ -1,12 +1,10 @@
1
1
  module Riddle
2
2
  class Configuration
3
3
  class Section
4
- class << self
5
- attr_accessor :settings
4
+ def self.settings
5
+ []
6
6
  end
7
7
 
8
- settings = []
9
-
10
8
  def valid?
11
9
  true
12
10
  end
@@ -1,17 +1,21 @@
1
1
  module Riddle
2
2
  class Configuration
3
3
  class SQLSource < Riddle::Configuration::Source
4
- self.settings = [:type, :sql_host, :sql_user, :sql_pass, :sql_db,
5
- :sql_port, :sql_sock, :mysql_connect_flags, :mysql_ssl_cert,
6
- :mysql_ssl_key, :mysql_ssl_ca, :odbc_dsn, :sql_query_pre, :sql_query,
7
- :sql_joined_field, :sql_file_field, :sql_query_range, :sql_range_step,
8
- :sql_query_killlist, :sql_attr_uint, :sql_attr_bool, :sql_attr_bigint,
9
- :sql_attr_timestamp, :sql_attr_str2ordinal, :sql_attr_float,
10
- :sql_attr_multi, :sql_attr_string, :sql_attr_str2wordcount,
11
- :sql_column_buffers, :sql_field_string, :sql_field_str2wordcount,
12
- :sql_query_post, :sql_query_post_index, :sql_ranged_throttle,
13
- :sql_query_info, :mssql_winauth, :mssql_unicode, :unpack_zlib,
14
- :unpack_mysqlcompress, :unpack_mysqlcompress_maxsize]
4
+ def self.settings
5
+ [
6
+ :type, :sql_host, :sql_user, :sql_pass, :sql_db,
7
+ :sql_port, :sql_sock, :mysql_connect_flags, :mysql_ssl_cert,
8
+ :mysql_ssl_key, :mysql_ssl_ca, :odbc_dsn, :sql_query_pre, :sql_query,
9
+ :sql_joined_field, :sql_file_field, :sql_query_range, :sql_range_step,
10
+ :sql_query_killlist, :sql_attr_uint, :sql_attr_bool, :sql_attr_bigint,
11
+ :sql_attr_timestamp, :sql_attr_str2ordinal, :sql_attr_float,
12
+ :sql_attr_multi, :sql_attr_string, :sql_attr_str2wordcount,
13
+ :sql_column_buffers, :sql_field_string, :sql_field_str2wordcount,
14
+ :sql_query_post, :sql_query_post_index, :sql_ranged_throttle,
15
+ :sql_query_info, :mssql_winauth, :mssql_unicode, :unpack_zlib,
16
+ :unpack_mysqlcompress, :unpack_mysqlcompress_maxsize
17
+ ]
18
+ end
15
19
 
16
20
  attr_accessor *self.settings
17
21
 
@@ -45,4 +49,4 @@ module Riddle
45
49
  end
46
50
  end
47
51
  end
48
- end
52
+ end
@@ -1,10 +1,14 @@
1
1
  module Riddle
2
2
  class Configuration
3
3
  class XMLSource < Riddle::Configuration::Source
4
- self.settings = [:type, :xmlpipe_command, :xmlpipe_field,
5
- :xmlpipe_attr_uint, :xmlpipe_attr_bool, :xmlpipe_attr_timestamp,
6
- :xmlpipe_attr_str2ordinal, :xmlpipe_attr_float, :xmlpipe_attr_multi,
7
- :xmlpipe_fixup_utf8]
4
+ def self.settings
5
+ [
6
+ :type, :xmlpipe_command, :xmlpipe_field,
7
+ :xmlpipe_attr_uint, :xmlpipe_attr_bool, :xmlpipe_attr_timestamp,
8
+ :xmlpipe_attr_str2ordinal, :xmlpipe_attr_float, :xmlpipe_attr_multi,
9
+ :xmlpipe_fixup_utf8
10
+ ]
11
+ end
8
12
 
9
13
  attr_accessor *self.settings
10
14
 
@@ -26,4 +30,4 @@ module Riddle
26
30
  end
27
31
  end
28
32
  end
29
- end
33
+ end
@@ -12,7 +12,7 @@ module Riddle
12
12
  end
13
13
 
14
14
  def sphinx_version
15
- `#{indexer} 2>&1`[/^Sphinx (\d+\.\d+(\.\d+|(?:-dev|(\-id64)?\-beta)))/, 1]
15
+ `#{indexer} 2>&1`[/Sphinx (\d+\.\d+(\.\d+|(?:-dev|(\-id64)?\-beta)))/, 1]
16
16
  rescue
17
17
  nil
18
18
  end
@@ -32,7 +32,7 @@ module Riddle
32
32
 
33
33
  cmd = "#{searchd} --pidfile --config \"#{@path}\""
34
34
 
35
- if RUBY_PLATFORM =~ /mswin/
35
+ if RUBY_PLATFORM =~ /mswin|mingw/
36
36
  system("start /B #{cmd} 1> NUL 2>&1")
37
37
  else
38
38
  `#{cmd}`
@@ -53,7 +53,7 @@ module Riddle
53
53
  stop_flag = 'stop' if Riddle.loaded_version.split('.').first == '0'
54
54
  cmd = %(#{searchd} --pidfile --config "#{@path}" --#{stop_flag})
55
55
 
56
- if RUBY_PLATFORM =~ /mswin/
56
+ if RUBY_PLATFORM =~ /mswin|mingw/
57
57
  system("start /B #{cmd} 1> NUL 2>&1")
58
58
  else
59
59
  `#{cmd}`
@@ -1,5 +1,28 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Riddle::Configuration do
4
- #
4
+ describe Riddle::Configuration::Index do
5
+ describe '#settings' do
6
+ it 'should return array with all settings of index' do
7
+ Riddle::Configuration::Index.settings.should_not be_empty
8
+ end
9
+
10
+ it 'should return array which contains a docinfo' do
11
+ Riddle::Configuration::Index.settings.should be_include :docinfo
12
+ end
13
+ end
14
+ end
15
+
16
+ describe 'class inherited from Riddle::Configuration::Index' do
17
+ before :all do
18
+ class TestIndex < Riddle::Configuration::Index; end
19
+ end
20
+
21
+ describe '#settings' do
22
+ it 'should has same settings as Riddle::Configuration::Index' do
23
+ TestIndex.settings.should == Riddle::Configuration::Index.settings
24
+ end
25
+ end
26
+
27
+ end
5
28
  end
@@ -23,6 +23,10 @@ RSpec.configure do |config|
23
23
  config.after :all do
24
24
  sphinx.stop
25
25
  end
26
+
27
+ # enable filtering for examples
28
+ config.filter_run :wip => true
29
+ config.run_all_when_everything_filtered = true
26
30
  end
27
31
 
28
32
  def query_contents(key)
@@ -37,7 +37,7 @@ class SphinxHelper
37
37
  structure = File.open("spec/fixtures/sql/structure.sql") { |f| f.read }
38
38
  structure.split(/;/).each { |sql| client.query sql }
39
39
  client.query <<-SQL
40
- LOAD DATA LOCAL INFILE '#{@path}/fixtures/sql/data.tsv' INTO TABLE
40
+ LOAD DATA INFILE '#{@path}/fixtures/sql/data.tsv' INTO TABLE
41
41
  `riddle`.`people` FIELDS TERMINATED BY ',' ENCLOSED BY "'" (gender,
42
42
  first_name, middle_initial, last_name, street_address, city, state,
43
43
  postcode, email, birthday)
@@ -5,17 +5,17 @@ describe Riddle::Configuration::Searchd do
5
5
  it "should be invalid without a listen or pid_file" do
6
6
  searchd = Riddle::Configuration::Searchd.new
7
7
  searchd.should_not be_valid
8
-
8
+
9
9
  searchd.port = 3312
10
10
  searchd.should_not be_valid
11
-
11
+
12
12
  searchd.pid_file = "file.pid"
13
13
  searchd.should be_valid
14
-
14
+
15
15
  searchd.port = nil
16
16
  searchd.listen = nil
17
17
  searchd.should_not be_valid
18
-
18
+
19
19
  searchd.listen = "localhost:3312"
20
20
  searchd.should be_valid
21
21
  end
@@ -101,6 +101,84 @@ searchd
101
101
  port = 3312
102
102
  pid_file = file.pid
103
103
  client_key = secret
104
+ }
105
+ SEARCHD
106
+ end
107
+ end
108
+
109
+ if Riddle.loaded_version.to_f >= 0.9
110
+ it "should render with mysql41 on the default port if true" do
111
+ searchd = Riddle::Configuration::Searchd.new
112
+ searchd.mysql41 = true
113
+ searchd.pid_file = 'file.pid'
114
+
115
+ searchd.render.should == <<-SEARCHD
116
+ searchd
117
+ {
118
+ listen = 9306:mysql41
119
+ pid_file = file.pid
120
+ }
121
+ SEARCHD
122
+ end
123
+
124
+ it "should render with mysql41 on a given port" do
125
+ searchd = Riddle::Configuration::Searchd.new
126
+ searchd.mysql41 = 9307
127
+ searchd.pid_file = 'file.pid'
128
+
129
+ searchd.render.should == <<-SEARCHD
130
+ searchd
131
+ {
132
+ listen = 9307:mysql41
133
+ pid_file = file.pid
134
+ }
135
+ SEARCHD
136
+ end
137
+
138
+ it "allows for both normal and mysql41 connections" do
139
+ searchd = Riddle::Configuration::Searchd.new
140
+ searchd.mysql41 = true
141
+ searchd.port = 9312
142
+ searchd.pid_file = 'file.pid'
143
+
144
+ searchd.render.should == <<-SEARCHD
145
+ searchd
146
+ {
147
+ listen = 9312
148
+ listen = 9306:mysql41
149
+ pid_file = file.pid
150
+ }
151
+ SEARCHD
152
+ end
153
+
154
+ it "uses given address for mysql41 connections" do
155
+ searchd = Riddle::Configuration::Searchd.new
156
+ searchd.mysql41 = true
157
+ searchd.address = '127.0.0.1'
158
+ searchd.pid_file = 'file.pid'
159
+
160
+ searchd.render.should == <<-SEARCHD
161
+ searchd
162
+ {
163
+ listen = 127.0.0.1:9306:mysql41
164
+ pid_file = file.pid
165
+ }
166
+ SEARCHD
167
+ end
168
+
169
+ it "applies the given address to both normal and mysql41 connections" do
170
+ searchd = Riddle::Configuration::Searchd.new
171
+ searchd.mysql41 = true
172
+ searchd.port = 9312
173
+ searchd.address = 'sphinx.server.local'
174
+ searchd.pid_file = 'file.pid'
175
+
176
+ searchd.render.should == <<-SEARCHD
177
+ searchd
178
+ {
179
+ listen = sphinx.server.local:9312
180
+ listen = sphinx.server.local:9306:mysql41
181
+ pid_file = file.pid
104
182
  }
105
183
  SEARCHD
106
184
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: riddle
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.3.3
5
+ version: 1.4.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Pat Allan
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-25 00:00:00 +02:00
13
+ date: 2011-08-02 00:00:00 +10:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -144,7 +144,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
144
  requirements:
145
145
  - - ">="
146
146
  - !ruby/object:Gem::Version
147
- hash: -3668127680877211237
147
+ hash: 1550771664451883617
148
148
  segments:
149
149
  - 0
150
150
  version: "0"