ruby_do 0.0.2 → 0.0.3

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/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"