ruby_do 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -7,6 +7,7 @@ gem "gtk2"
7
7
  gem "knjrbfw"
8
8
  gem "gettext"
9
9
  gem "sqlite3"
10
+ gem "threadded_enumerator"
10
11
 
11
12
  # Add dependencies to develop your gem here.
12
13
  # Include everything needed to run rake, tests, features, etc.
data/Gemfile.lock CHANGED
@@ -44,6 +44,8 @@ GEM
44
44
  diff-lcs (~> 1.1.2)
45
45
  rspec-mocks (2.8.0)
46
46
  sqlite3 (1.3.6)
47
+ threadded_enumerator (0.0.0)
48
+ tsafe
47
49
  tsafe (0.0.1)
48
50
  wref (0.0.4)
49
51
 
@@ -60,3 +62,4 @@ DEPENDENCIES
60
62
  rdoc (~> 3.12)
61
63
  rspec (~> 2.8.0)
62
64
  sqlite3
65
+ threadded_enumerator
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
data/bin/ruby_do.rb CHANGED
@@ -1,7 +1,15 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "rubygems"
4
- require "knjrbfw"
4
+
5
+
6
+ #Enable local dev-mode.
7
+ if File.exists?("/home/kaspernj/Dev/Ruby/knjrbfw")
8
+ require "/home/kaspernj/Dev/Ruby/knjrbfw/lib/knjrbfw.rb"
9
+ else
10
+ require "knjrbfw"
11
+ end
12
+
5
13
 
6
14
  args = {
7
15
  :path => "#{Knj::Os.homedir}/.ruby_do",
@@ -141,9 +141,10 @@
141
141
  <property name="can_focus">False</property>
142
142
  <property name="spacing">4</property>
143
143
  <child>
144
- <object class="GtkTable" id="table1">
144
+ <object class="GtkTable" id="tablePlugin">
145
145
  <property name="visible">True</property>
146
146
  <property name="can_focus">False</property>
147
+ <property name="n_rows">2</property>
147
148
  <property name="n_columns">2</property>
148
149
  <property name="column_spacing">4</property>
149
150
  <property name="row_spacing">4</property>
@@ -163,6 +164,39 @@
163
164
  <property name="y_options">GTK_FILL</property>
164
165
  </packing>
165
166
  </child>
167
+ <child>
168
+ <object class="GtkLabel" id="label2">
169
+ <property name="visible">True</property>
170
+ <property name="can_focus">False</property>
171
+ <property name="xalign">0</property>
172
+ <property name="label" translatable="yes">Order no.</property>
173
+ </object>
174
+ <packing>
175
+ <property name="top_attach">1</property>
176
+ <property name="bottom_attach">2</property>
177
+ <property name="x_options">GTK_FILL</property>
178
+ <property name="y_options">GTK_FILL</property>
179
+ </packing>
180
+ </child>
181
+ <child>
182
+ <object class="GtkEntry" id="txtPluginOrderNo">
183
+ <property name="visible">True</property>
184
+ <property name="can_focus">True</property>
185
+ <property name="invisible_char">•</property>
186
+ <property name="primary_icon_activatable">False</property>
187
+ <property name="secondary_icon_activatable">False</property>
188
+ <property name="primary_icon_sensitive">True</property>
189
+ <property name="secondary_icon_sensitive">True</property>
190
+ <signal name="changed" handler="on_txtPluginOrderNo_changed" swapped="no"/>
191
+ </object>
192
+ <packing>
193
+ <property name="left_attach">1</property>
194
+ <property name="right_attach">2</property>
195
+ <property name="top_attach">1</property>
196
+ <property name="bottom_attach">2</property>
197
+ <property name="y_options">GTK_FILL</property>
198
+ </packing>
199
+ </child>
166
200
  </object>
167
201
  <packing>
168
202
  <property name="expand">False</property>
data/gui/win_main.rb CHANGED
@@ -37,10 +37,22 @@ class Ruby_do::Gui::Win_main
37
37
 
38
38
  #Updates the icon, title and description to match the current result (if any).
39
39
  def update_res
40
- if @cur_res
41
- @gui["labActionTitle"].markup = @cur_res.title_html!
42
- @gui["labActionDescr"].label = @cur_res.descr_html!
43
- @gui["imgActionIcon"].pixbuf = @cur_res.icon_pixbuf!
40
+ if @results and @enum
41
+ while @results.length <= @result_i
42
+ begin
43
+ @results << @enum.next
44
+ rescue StopIteration
45
+ @result_i -= 1
46
+ end
47
+ end
48
+
49
+ cur_res = @results[@result_i]
50
+ end
51
+
52
+ if cur_res
53
+ @gui["labActionTitle"].markup = "<b>#{@result_i + 1}</b> - " + cur_res.title_html!
54
+ @gui["labActionDescr"].label = cur_res.descr_html!
55
+ @gui["imgActionIcon"].pixbuf = cur_res.icon_pixbuf!
44
56
  else
45
57
  @gui["labActionTitle"].markup = "<b>#{Knj::Web.html(_("Nothing found"))}</b>"
46
58
  @gui["labActionDescr"].label = _("Please enter something in the search text-field to do something.")
@@ -53,6 +65,7 @@ class Ruby_do::Gui::Win_main
53
65
  Gtk.timeout_remove(@timeout) if @timeout
54
66
  @timeout = Gtk.timeout_add(500) do
55
67
  self.on_txtSearch_changed_wait
68
+ @timeout = nil
56
69
  false
57
70
  end
58
71
  end
@@ -61,39 +74,48 @@ class Ruby_do::Gui::Win_main
61
74
  def on_txtSearch_changed_wait
62
75
  return nil if @gui["window"].destroyed?
63
76
 
77
+ @enum = nil
78
+ @result_i = 0
79
+ @results = []
80
+
64
81
  text = @gui["txtSearch"].text
65
82
  words = text.split(/\s+/).map{|ele| ele.downcase}
66
83
 
67
- if words.empty?
68
- @cur_res = nil
69
- else
70
- @enum = @args[:rdo].plugin.send(:text => text, :words => words)
71
-
72
- begin
73
- @cur_res = @enum.next
74
- rescue StopIteration
75
- @cur_res = nil
76
- end
84
+ if !words.empty?
85
+ #Need to use threadded enumerator because of fiber failure otherwise.
86
+ @enum = Threadded_enumerator.new(:enum => @args[:rdo].plugin.send(:text => text, :words => words))
77
87
  end
78
88
 
79
89
  self.update_res
80
90
  end
81
91
 
92
+ def prev_result
93
+ @result_i -= 1 if @result_i > 0
94
+ self.update_res
95
+ end
96
+
97
+ def next_result
98
+ @result_i += 1
99
+ self.update_res
100
+ end
101
+
82
102
  #This happens when <ENTER> is pressed while the search-textfield has focus.
83
103
  def on_txtSearch_activate
84
104
  #If enter was pressed before search was executed, then be sure to execute a search first and disable the timeout, so search wont be done two times.
85
- if @timeout
105
+ if @timeout and !@enum and @result_i == 0
86
106
  Gtk.timeout_remove(@timeout)
87
107
  self.on_txtSearch_changed_wait
88
108
  end
89
109
 
90
- if !@cur_res
110
+ cur_res = @results[@result_i]
111
+
112
+ if !cur_res
91
113
  Knj::Gtk2.msgbox(_("Please search for something in order to activate."))
92
114
  return nil
93
115
  end
94
116
 
95
117
  begin
96
- res = @cur_res.args[:plugin].execute_result(:res => @cur_res)
118
+ res = cur_res.execute
97
119
 
98
120
  if res == :close_win_main
99
121
  @gui["window"].destroy
@@ -105,8 +127,16 @@ class Ruby_do::Gui::Win_main
105
127
 
106
128
  #In order the register <ESCAPE>-presses.
107
129
  def on_txtSearch_key_press_event(entry, eventkey)
108
- if Gdk::Keyval.to_name(eventkey.keyval) == "Escape"
130
+ name = Gdk::Keyval.to_name(eventkey.keyval).to_s.downcase
131
+
132
+ if name == "escape"
109
133
  @gui["window"].destroy
134
+ elsif name == "down"
135
+ self.next_result
136
+ return true
137
+ elsif name == "up"
138
+ self.prev_result
139
+ return true
110
140
  end
111
141
  end
112
142
 
@@ -52,17 +52,31 @@ class Ruby_do::Gui::Win_properties
52
52
  sel = Knj::Gtk2::Tv.sel(@gui["tvPlugins"])
53
53
  model = @args[:rdo].ob.get_by(:Plugin, {"classname" => sel[0]}) if sel
54
54
 
55
- if model and model[:active].to_i == 1
56
- @gui["cbPluginActivate"].active = true
55
+ if model
56
+ @gui["tablePlugin"].show
57
+
58
+ if model[:active].to_i == 1
59
+ @gui["cbPluginActivate"].active = true
60
+ else
61
+ @gui["cbPluginActivate"].active = false
62
+ end
63
+
64
+ @gui["txtPluginOrderNo"].text = model[:order_no].to_s
57
65
  else
58
- @gui["cbPluginActivate"].active = false
66
+ @gui["tablePlugin"].hide
59
67
  end
60
68
 
61
69
  self.load_widget
62
-
63
70
  @gui["boxPluginOptions"].show_all
64
71
  end
65
72
 
73
+ def on_txtPluginOrderNo_changed
74
+ sel = Knj::Gtk2::Tv.sel(@gui["tvPlugins"])
75
+ model = @args[:rdo].ob.get_by(:Plugin, {"classname" => sel[0]}) if sel
76
+ return nil if !model
77
+ model[:order_no] = @gui["txtPluginOrderNo"].text
78
+ end
79
+
66
80
  def load_widget
67
81
  #Remove plugin-widgets.
68
82
  @gui["boxPluginOptions"].children.each do |child|
data/include/database.rb CHANGED
@@ -16,11 +16,31 @@ class Ruby_do::Database
16
16
  {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
17
17
  {"name" => "name", "type" => "varchar"},
18
18
  {"name" => "classname", "type" => "varchar"},
19
+ {"name" => "order_no", "type" => "int"},
19
20
  {"name" => "active", "type" => "enum", "maxlength" => "'0','1'", "default" => 0}
20
21
  ],
21
22
  "indexes" => [
22
23
  "name",
23
- "classname"
24
+ "classname",
25
+ "order_no"
26
+ ]
27
+ },
28
+ "Static_result" => {
29
+ "columns" => [
30
+ {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
31
+ {"name" => "plugin_id", "type" => "int"},
32
+ {"name" => "id_str", "type" => "varchar"},
33
+ {"name" => "title", "type" => "varchar"},
34
+ {"name" => "title_lower", "type" => "varchar"},
35
+ {"name" => "descr", "type" => "text"},
36
+ {"name" => "data", "type" => "text"},
37
+ {"name" => "icon_path", "type" => "text"}
38
+ ],
39
+ "indexes" => [
40
+ "plugin_id",
41
+ "id_str",
42
+ "title",
43
+ "title_lower"
24
44
  ]
25
45
  }
26
46
  }
data/include/models.rb CHANGED
@@ -1,3 +1,6 @@
1
1
  class Ruby_do::Models
2
-
2
+ def self.const_missing(name)
3
+ require "#{File.dirname(__FILE__)}/../models/#{name.to_s.downcase}.rb"
4
+ return const_get(name)
5
+ end
3
6
  end
data/include/plugin.rb CHANGED
@@ -1,8 +1,4 @@
1
1
  class Ruby_do::Plugin
2
- def self.const_missing(name)
3
-
4
- end
5
-
6
2
  attr_reader :plugins
7
3
 
8
4
  def register_plugins
@@ -41,6 +37,8 @@ class Ruby_do::Plugin
41
37
 
42
38
  plugin.model = model
43
39
  model.plugin = plugin
40
+
41
+ plugin.start if plugin.respond_to?(:start)
44
42
  rescue NameError => e
45
43
  $stderr.puts "Cant loading plugin '#{match[1]}' because of the following."
46
44
  $stderr.puts e.inspect
@@ -57,9 +55,44 @@ class Ruby_do::Plugin
57
55
 
58
56
  def send(args)
59
57
  return Enumerator.new do |yielder|
60
- @plugins.each do |name, plugin_instance|
61
- plugin_model = @args[:rdo].ob.get_by(:Plugin, "classname" => plugin_instance.classname)
62
- next if !plugin_model or plugin_model[:active].to_i != 1
58
+ plugins_active = []
59
+ @args[:rdo].ob.list(:Plugin, "active" => 1, "orderby" => "order_no") do |plugin|
60
+ plugins_active << plugin
61
+ end
62
+
63
+ plugins_active_ids = plugins_active.clone.map{|d| d.id.to_i}
64
+ found = []
65
+
66
+ #Search for exact static results.
67
+ @args[:rdo].ob.list(:Static_result, "plugin_id" => plugins_active_ids, "title_lower" => args[:text].to_s.strip.downcase) do |sres|
68
+ yielder << Ruby_do::Plugin::Result.new(
69
+ :title => sres[:title],
70
+ :descr => sres[:descr],
71
+ :icon => sres[:icon_path],
72
+ :static_result => true,
73
+ :sres => sres
74
+ )
75
+
76
+ found << sres.id
77
+ end
78
+
79
+ #Search for close static results.
80
+ @args[:rdo].ob.list(:Static_result, "plugin_id" => plugins_active_ids, "title_lower_search" => args[:text].to_s.strip.downcase, "id_not" => found) do |sres|
81
+ yielder << Ruby_do::Plugin::Result.new(
82
+ :title => sres[:title],
83
+ :descr => sres[:descr],
84
+ :icon => sres[:icon_path],
85
+ :static_result => true,
86
+ :sres => sres
87
+ )
88
+
89
+ found << sres.id
90
+ end
91
+
92
+ #Call plugins to get further results.
93
+ plugins_active.each do |plugin_model|
94
+ plugin_instance = plugin_model.plugin
95
+ next if !plugin_instance.respond_to?(:on_search)
63
96
 
64
97
  begin
65
98
  enum = plugin_instance.on_search(args)
@@ -76,7 +109,6 @@ class Ruby_do::Plugin
76
109
 
77
110
  class Base
78
111
  attr_accessor :model
79
-
80
112
  attr_reader :rdo_plugin_args
81
113
 
82
114
  def initialize(args)
@@ -95,6 +127,48 @@ class Ruby_do::Plugin
95
127
  def title
96
128
  name = Knj::Php.ucwords(self.class.name.to_s[15, 999].gsub("_", " "))
97
129
  end
130
+
131
+ def static_result_exists?(id_str)
132
+ sres = self.static_result_get(id_str)
133
+
134
+ if sres
135
+ return true
136
+ else
137
+ return false
138
+ end
139
+ end
140
+
141
+ def static_result_get(id_str)
142
+ return @rdo_plugin_args[:rdo].ob.get_by(:Static_result, "plugin_id" => self.model.id, "id_str" => id_str)
143
+ end
144
+
145
+ def register_static_result(args)
146
+ raise "Argument was not a hash." if !args.is_a?(Hash)
147
+ raise "':id_str' was empty." if args[:id_str].to_s.strip.empty?
148
+ raise "':title' was empty." if args[:title].to_s.strip.empty?
149
+ raise "':descr' was empty." if args[:descr].to_s.strip.empty?
150
+
151
+ args[:data] = {} if !args[:data]
152
+
153
+ sres_hash = {
154
+ :title => args[:title],
155
+ :title_lower => args[:title].to_s.strip.downcase,
156
+ :id_str => args[:id_str],
157
+ :descr => args[:descr],
158
+ :icon_path => args[:icon_path],
159
+ :data => Marshal.dump(args[:data])
160
+ }
161
+
162
+ if sres = self.static_result_get(args[:id_str])
163
+ sres.update(sres_hash)
164
+ else
165
+ sres = @rdo_plugin_args[:rdo].ob.add(:Static_result, sres_hash.merge(
166
+ :plugin_id => self.model.id,
167
+ ))
168
+ end
169
+
170
+ return {:sres => sres}
171
+ end
98
172
  end
99
173
 
100
174
  class Result
@@ -156,5 +230,14 @@ class Ruby_do::Plugin
156
230
  return "[#{_("no description")}]"
157
231
  end
158
232
  end
233
+
234
+ def execute
235
+ if @args[:static_result]
236
+ plugin = @args[:sres].plugin.plugin
237
+ return plugin.execute_static_result(:sres => @args[:sres])
238
+ else
239
+ return @args[:plugin].execute_result(:res => self)
240
+ end
241
+ end
159
242
  end
160
243
  end
data/lib/ruby_do.rb CHANGED
@@ -10,7 +10,20 @@ class Ruby_do
10
10
  def initialize(args = {})
11
11
  #Require various used libs.
12
12
  require "rubygems"
13
- require "knjrbfw"
13
+
14
+
15
+ #Enable local dev-mode.
16
+ if File.exists?("#{File.dirname(__FILE__)}/../../knjrbfw")
17
+ require "#{File.dirname(__FILE__)}/../../knjrbfw/lib/knjrbfw.rb"
18
+ else
19
+ require "knjrbfw"
20
+ end
21
+
22
+ if File.exists?("#{File.dirname(__FILE__)}/../../threadded_enumerator")
23
+ require "#{File.dirname(__FILE__)}/../../threadded_enumerator/lib/threadded_enumerator.rb"
24
+ else
25
+ require "threadded_enumerator"
26
+ end
14
27
 
15
28
 
16
29
  #Set arguments (config).
data/models/plugin.rb CHANGED
@@ -1,3 +1,7 @@
1
1
  class Ruby_do::Models::Plugin < Knj::Datarow
2
+ has_many [
3
+ {:class => :Static_result, :autodelete => true}
4
+ ]
5
+
2
6
  attr_accessor :plugin
3
7
  end
@@ -0,0 +1,9 @@
1
+ class Ruby_do::Models::Static_result < Knj::Datarow
2
+ has_one [
3
+ {:class => :Plugin, :required => true}
4
+ ]
5
+
6
+ def data
7
+ return Marshal.load(self[:data])
8
+ end
9
+ end
data/ruby_do.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ruby_do}
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kasper Johansen"]
12
- s.date = %q{2012-07-09}
12
+ s.date = %q{2012-07-11}
13
13
  s.default_executable = %q{ruby_do.rb}
14
14
  s.description = %q{A clone of Gnome-Do and Kupfer written in Ruby.}
15
15
  s.email = %q{k@spernj.org}
@@ -40,6 +40,7 @@ Gem::Specification.new do |s|
40
40
  "include/unix_socket.rb",
41
41
  "lib/ruby_do.rb",
42
42
  "models/plugin.rb",
43
+ "models/static_result.rb",
43
44
  "ruby_do.gemspec",
44
45
  "spec/ruby_do_spec.rb",
45
46
  "spec/spec_helper.rb"
@@ -58,6 +59,7 @@ Gem::Specification.new do |s|
58
59
  s.add_runtime_dependency(%q<knjrbfw>, [">= 0"])
59
60
  s.add_runtime_dependency(%q<gettext>, [">= 0"])
60
61
  s.add_runtime_dependency(%q<sqlite3>, [">= 0"])
62
+ s.add_runtime_dependency(%q<threadded_enumerator>, [">= 0"])
61
63
  s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
62
64
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
63
65
  s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
@@ -68,6 +70,7 @@ Gem::Specification.new do |s|
68
70
  s.add_dependency(%q<knjrbfw>, [">= 0"])
69
71
  s.add_dependency(%q<gettext>, [">= 0"])
70
72
  s.add_dependency(%q<sqlite3>, [">= 0"])
73
+ s.add_dependency(%q<threadded_enumerator>, [">= 0"])
71
74
  s.add_dependency(%q<rspec>, ["~> 2.8.0"])
72
75
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
73
76
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
@@ -79,6 +82,7 @@ Gem::Specification.new do |s|
79
82
  s.add_dependency(%q<knjrbfw>, [">= 0"])
80
83
  s.add_dependency(%q<gettext>, [">= 0"])
81
84
  s.add_dependency(%q<sqlite3>, [">= 0"])
85
+ s.add_dependency(%q<threadded_enumerator>, [">= 0"])
82
86
  s.add_dependency(%q<rspec>, ["~> 2.8.0"])
83
87
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
84
88
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: ruby_do
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2
5
+ version: 0.0.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kasper Johansen
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-07-09 00:00:00 +02:00
13
+ date: 2012-07-11 00:00:00 +02:00
14
14
  default_executable: ruby_do.rb
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -58,8 +58,19 @@ dependencies:
58
58
  prerelease: false
59
59
  version_requirements: *id004
60
60
  - !ruby/object:Gem::Dependency
61
- name: rspec
61
+ name: threadded_enumerator
62
62
  requirement: &id005 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: rspec
73
+ requirement: &id006 !ruby/object:Gem::Requirement
63
74
  none: false
64
75
  requirements:
65
76
  - - ~>
@@ -67,10 +78,10 @@ dependencies:
67
78
  version: 2.8.0
68
79
  type: :development
69
80
  prerelease: false
70
- version_requirements: *id005
81
+ version_requirements: *id006
71
82
  - !ruby/object:Gem::Dependency
72
83
  name: rdoc
73
- requirement: &id006 !ruby/object:Gem::Requirement
84
+ requirement: &id007 !ruby/object:Gem::Requirement
74
85
  none: false
75
86
  requirements:
76
87
  - - ~>
@@ -78,10 +89,10 @@ dependencies:
78
89
  version: "3.12"
79
90
  type: :development
80
91
  prerelease: false
81
- version_requirements: *id006
92
+ version_requirements: *id007
82
93
  - !ruby/object:Gem::Dependency
83
94
  name: bundler
84
- requirement: &id007 !ruby/object:Gem::Requirement
95
+ requirement: &id008 !ruby/object:Gem::Requirement
85
96
  none: false
86
97
  requirements:
87
98
  - - ">="
@@ -89,10 +100,10 @@ dependencies:
89
100
  version: 1.0.0
90
101
  type: :development
91
102
  prerelease: false
92
- version_requirements: *id007
103
+ version_requirements: *id008
93
104
  - !ruby/object:Gem::Dependency
94
105
  name: jeweler
95
- requirement: &id008 !ruby/object:Gem::Requirement
106
+ requirement: &id009 !ruby/object:Gem::Requirement
96
107
  none: false
97
108
  requirements:
98
109
  - - ~>
@@ -100,10 +111,10 @@ dependencies:
100
111
  version: 1.8.4
101
112
  type: :development
102
113
  prerelease: false
103
- version_requirements: *id008
114
+ version_requirements: *id009
104
115
  - !ruby/object:Gem::Dependency
105
116
  name: rcov
106
- requirement: &id009 !ruby/object:Gem::Requirement
117
+ requirement: &id010 !ruby/object:Gem::Requirement
107
118
  none: false
108
119
  requirements:
109
120
  - - ">="
@@ -111,7 +122,7 @@ dependencies:
111
122
  version: "0"
112
123
  type: :development
113
124
  prerelease: false
114
- version_requirements: *id009
125
+ version_requirements: *id010
115
126
  description: A clone of Gnome-Do and Kupfer written in Ruby.
116
127
  email: k@spernj.org
117
128
  executables:
@@ -143,6 +154,7 @@ files:
143
154
  - include/unix_socket.rb
144
155
  - lib/ruby_do.rb
145
156
  - models/plugin.rb
157
+ - models/static_result.rb
146
158
  - ruby_do.gemspec
147
159
  - spec/ruby_do_spec.rb
148
160
  - spec/spec_helper.rb
@@ -160,7 +172,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
160
172
  requirements:
161
173
  - - ">="
162
174
  - !ruby/object:Gem::Version
163
- hash: -2248539457086474609
175
+ hash: -2303673294360816635
164
176
  segments:
165
177
  - 0
166
178
  version: "0"