qcmd 0.1.13 → 0.1.14

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/README.md CHANGED
@@ -13,11 +13,11 @@ IT.**
13
13
 
14
14
  ## Installation
15
15
 
16
- Before installing qcmd, you'll have to install the [Command Line Tools for
16
+ Before installing `qcmd`, you'll have to install the [Command Line Tools for
17
17
  Xcode](https://developer.apple.com/downloads). They're free, but you'll need an
18
18
  Apple ID to download them.
19
19
 
20
- Once you've done that, you can install qcmd to your machine by running the
20
+ Once you've done that, you can install `qcmd` to your machine by running the
21
21
  following command:
22
22
 
23
23
  $ sudo gem install qcmd
@@ -130,6 +130,35 @@ An example session might look like this:
130
130
  > exit
131
131
  exiting...
132
132
 
133
+
134
+ If you already know the machine you want to connect to, you can use the `-m`
135
+ option to connect immediately from the command line:
136
+
137
+ $ qcmd -m "my mac laptop"
138
+ Connecting to workspace: Untitled Workspace 1
139
+ Connected to "Untitled Workspace 1"
140
+ Loaded 1 cue
141
+ 10:15 [my mac laptop] [Untitled Workspace 1]
142
+ >
143
+
144
+
145
+ If there's only one workspace available, `qcmd` will connect to the given machine
146
+ and then try to automatically connect to that workspace. If there's more than
147
+ one workspace, you can list it on the command line as well to connect immediately:
148
+
149
+ $ qcmd -m "my mac laptop" -w "very special cues.cues"
150
+ 10:36 [my mac laptop] [very special cues.cues]
151
+ >
152
+
153
+
154
+ Finally, if all you want `qcmd` to do is run a single command and exit, you can
155
+ use the `-c` option from the command line along with the `-m` and `-w` to make
156
+ sure `qcmd` knows where to send the message:
157
+
158
+ $ qcmd -m "my mac laptop" -w "very special cues.cues" -c "cue 1 start"
159
+ ok
160
+
161
+
133
162
  ## Contributing
134
163
 
135
164
  1. Fork it
data/bin/qcmd CHANGED
@@ -11,14 +11,50 @@ opts = Trollop::options do
11
11
  version VERSION_STRING
12
12
  opt :verbose, 'Use verbose mode', :default => false
13
13
  opt :debug, "Show full debug output, don't make changes to workspaces", :default => false
14
- opt :machine, "Automatically try to connect to the machine with the given name", :type => :string
15
- opt :workspace, "Automatically try to connect to the workspace with the given name", :type => :string
16
- opt :workspace_passcode, "Use the given workspace passcode", :type => :integer
17
- opt :command, "Execute a single command and exit", :type => :string
14
+ opt :machine, 'Automatically try to connect to the machine with the given name', :type => :string
15
+ opt :workspace, 'Automatically try to connect to the workspace with the given name', :type => :string
16
+ opt :workspace_passcode, 'Use the given workspace passcode', :type => :integer
17
+ opt :command, 'Execute a single command and exit', :type => :string
18
+ opt :version_check, 'Check if a new version of qcmd is available and quit', :default => false
18
19
  end
19
20
 
20
21
  Qcmd.log_level = :info
21
22
 
23
+ if opts[:version_check]
24
+ if Qcmd.available_version
25
+ if Qcmd.installed_version.to_s != Qcmd.available_version.to_s
26
+ puts "You have version #{ Qcmd.installed_version }, but #{ Qcmd.available_version.to_s } is available."
27
+ puts "Run `sudo gem update qcmd` to get the most recent version."
28
+ else
29
+ puts "You have the current version of qcmd installed."
30
+ puts VERSION_STRING
31
+ end
32
+ else
33
+ puts "We were unable to reach #{ Qcmd.rubygems_uri } to check the available qcmd version."
34
+ end
35
+
36
+ exit
37
+ else
38
+ # version check on every command line open
39
+ Qcmd.while_quiet do
40
+ if !Qcmd::Configuration.config['skip_version_warning'] && Qcmd.available_version
41
+ known_available_version = Qcmd::Configuration.config['available_version']
42
+
43
+ if Qcmd.installed_version.to_s != Qcmd.available_version.to_s &&
44
+ (!Qcmd::Configuration.config['version_warning'] || Qcmd.available_version != known_available_version)
45
+ # use 'puts' to make sure the message is available
46
+ puts "A new version of qcmd is available! You have #{ Qcmd.installed_version }, but #{ Qcmd.available_version.to_s } is the most recent."
47
+ puts
48
+
49
+ Qcmd::Configuration.update('available_version', Qcmd.available_version)
50
+ Qcmd::Configuration.update('version_warning', true)
51
+ end
52
+ else
53
+ Qcmd::Configuration.update('skip_version_warning', true)
54
+ end
55
+ end
56
+ end
57
+
22
58
  if opts[:verbose]
23
59
  Qcmd.log_level = :debug
24
60
  end
@@ -86,9 +86,9 @@ module Qcmd
86
86
 
87
87
  def debug message
88
88
  # always write to log
89
-
90
89
  Qcmd::Configuration.log.puts "[%s] %s" % [Time.now.strftime('%T'), message]
91
90
 
91
+ # forward message to log
92
92
  log(:debug, message)
93
93
  end
94
94
 
@@ -57,7 +57,7 @@ module Qcmd
57
57
  end
58
58
 
59
59
  def aliases
60
- @aliases ||= Qcmd::Aliases.defaults.merge(Qcmd::Configuration.config['aliases'])
60
+ @aliases ||= Qcmd::Aliases.defaults.merge(Qcmd::Configuration.config['aliases'] || {})
61
61
  end
62
62
 
63
63
  def alias_arg_matcher
@@ -156,7 +156,7 @@ module Qcmd
156
156
 
157
157
  # tell QLab to always reply to messages
158
158
  response = Qcmd::Action.evaluate('/alwaysReply 1')
159
- if response.nil? || response.empty?
159
+ if response.nil? || response.to_s.empty?
160
160
  log(:error, %[Failed to connect to QLab machine "#{ machine.name }"])
161
161
  elsif response.status == 'ok'
162
162
  print %[Connected to machine "#{ machine.name }"]
@@ -178,14 +178,23 @@ module Qcmd
178
178
  machine = nil
179
179
 
180
180
  # machine name can be found or IPv4 address is given
181
- if Qcmd::Network.find(machine_name)
181
+
182
+ if machine_name.nil? || machine_name.to_s.empty?
183
+ machine = nil
184
+ elsif Qcmd::Network.find(machine_name)
182
185
  machine = Qcmd::Network.find(machine_name)
183
- elsif Qcmd::Network::IPV4_MATCHER =~ machine_name
186
+ elsif Qcmd::Network::IPV4_MATCHER =~ machine_name.to_s
184
187
  machine = Qcmd::Machine.new(machine_name, machine_name, 53000)
185
188
  end
186
189
 
187
190
  if machine.nil?
188
- log(:warning, 'Sorry, that machine could not be found')
191
+ if machine_name.nil? || machine_name.to_s.empty?
192
+ log(:warning, 'You must include a machine name to connect.')
193
+ else
194
+ log(:warning, 'Sorry, that machine could not be found')
195
+ end
196
+
197
+ disconnected_machine_warning
189
198
  else
190
199
  print "Connecting to machine: #{machine_name}"
191
200
  connect_machine machine
@@ -322,10 +331,12 @@ module Qcmd
322
331
  connect_to_machine_by_name machine_ident
323
332
  end
324
333
 
325
- load_workspaces
334
+ if Qcmd.context.machine_connected?
335
+ load_workspaces
326
336
 
327
- if !connect_default_workspace
328
- Handler.print_workspace_list
337
+ if !connect_default_workspace
338
+ Handler.print_workspace_list
339
+ end
329
340
  end
330
341
 
331
342
  when 'disconnect'
@@ -657,7 +668,9 @@ module Qcmd
657
668
  ## QLab commands
658
669
 
659
670
  def load_workspaces
660
- Qcmd.context.machine.workspaces = Qcmd::Action.evaluate('workspaces').map {|ws| QLab::Workspace.new(ws)}
671
+ if !Qcmd.context.machine.nil?
672
+ Qcmd.context.machine.workspaces = Qcmd::Action.evaluate('workspaces').map {|ws| QLab::Workspace.new(ws)}
673
+ end
661
674
  end
662
675
 
663
676
  def connect_default_workspace
@@ -41,6 +41,9 @@ module Qcmd
41
41
  end
42
42
 
43
43
  JSON.load(File.open(config_file))
44
+ rescue
45
+ Qcmd.log(:error, "Failed to load configuration, make sure #{ config_file } is valid JSON.\n\n")
46
+ raise
44
47
  end
45
48
  end
46
49
 
@@ -6,4 +6,3 @@ if !String.new.respond_to?(:force_encoding)
6
6
  end
7
7
  end
8
8
 
9
-
@@ -12,9 +12,8 @@ module Qcmd
12
12
  # make sure string is wrapped in parens to make the parser happy
13
13
  begin
14
14
  parser.parse_string "#{ string }"
15
- rescue => ex
16
- puts "parser FAILED WITH EXCEPTION: #{ ex.message }"
17
- raise
15
+ rescue ParseException => ex
16
+ puts "Command parser failed with exception: #{ ex.message }"
18
17
  end
19
18
  end
20
19
 
@@ -1,3 +1,37 @@
1
1
  module Qcmd
2
- VERSION = "0.1.13"
2
+ VERSION = "0.1.14"
3
+
4
+ class << self
5
+ def installed_version
6
+ Gem.loaded_specs["qcmd"].version
7
+ end
8
+
9
+ def rubygems_uri
10
+ @rubygems_uri ||= URI.parse("http://rubygems.org/api/v1/gems/qcmd.json")
11
+ end
12
+
13
+ def available_version
14
+ @available_version ||= begin
15
+ require "net/http"
16
+ require "uri"
17
+
18
+ begin
19
+ # Shortcut
20
+ response = Net::HTTP.get_response(rubygems_uri)
21
+ rescue => ex
22
+ Qcmd.debug "error loading #{ rubygems_uri }"
23
+ Qcmd.debug "couldn't load remote qcmd version: #{ ex.message }"
24
+ return false
25
+ end
26
+
27
+ begin
28
+ JSON.parse(response.body)['version']
29
+ rescue => ex
30
+ Qcmd.debug "error parsing #{ rubygems_uri }"
31
+ Qcmd.debug "couldn't parse remote qcmd version: #{ ex.message }"
32
+ false
33
+ end
34
+ end
35
+ end
36
+ end
3
37
  end
@@ -1,5 +1,8 @@
1
1
  require 'strscan'
2
2
 
3
+ class ParseException < Exception
4
+ end
5
+
3
6
  class SexpistolParser < StringScanner
4
7
 
5
8
  def initialize(string)
@@ -7,6 +10,7 @@ class SexpistolParser < StringScanner
7
10
  in_string_literal = false
8
11
  escape_char = false
9
12
  paren_count = 0
13
+
10
14
  string.bytes.each do |byte|
11
15
  if escape_char
12
16
  escape_char = false
@@ -31,9 +35,9 @@ class SexpistolParser < StringScanner
31
35
  end
32
36
 
33
37
  if paren_count > 0
34
- raise Exception, "Missing closing parentheses"
38
+ raise ParseException.new("Missing closing parentheses")
35
39
  elsif paren_count < 0
36
- raise Exception, "Missing opening parentheses"
40
+ raise ParseException.new("Missing opening parentheses")
37
41
  end
38
42
 
39
43
  super(string)
@@ -43,19 +47,19 @@ class SexpistolParser < StringScanner
43
47
  exp = []
44
48
  while true
45
49
  case fetch_token
46
- when '('
47
- exp << parse
48
- when ')'
49
- break
50
- when :"'"
51
- case fetch_token
52
- when '(' then exp << [:quote].concat([parse])
53
- else exp << [:quote, @token]
54
- end
55
- when String, Fixnum, Float, Symbol
56
- exp << @token
57
- when nil
58
- break
50
+ when '('
51
+ exp << parse
52
+ when ')'
53
+ break
54
+ when :"'"
55
+ case fetch_token
56
+ when '(' then exp << [:quote].concat([parse])
57
+ else exp << [:quote, @token]
58
+ end
59
+ when String, Fixnum, Float, Symbol
60
+ exp << @token
61
+ when nil
62
+ break
59
63
  end
60
64
  end
61
65
  exp
@@ -73,10 +77,10 @@ class SexpistolParser < StringScanner
73
77
  elsif scan(/"([^"\\]|\\.)*"/)
74
78
  eval(matched)
75
79
  # Match a float literal
76
- elsif scan(/[\-\+]? [0-9]+ ((e[0-9]+) | (\.[0-9]+(e[0-9]+)?))(\)| )(\s|$)/x)
80
+ elsif scan(/[\-\+]? [0-9]+ ((e[0-9]+) | (\.[0-9]+(e[0-9]+)?))#{ expression_ender }/x)
77
81
  matched.to_f
78
82
  # Match an integer literal
79
- elsif scan(/[\-\+]?[0-9]+(\)| )(\s|$)/x)
83
+ elsif scan(/[\-\+]?[0-9]+#{ expression_ender }/)
80
84
  matched.to_i
81
85
  # Match a comma (for comma quoting)
82
86
  elsif scan(/'/)
@@ -91,4 +95,12 @@ class SexpistolParser < StringScanner
91
95
  end
92
96
  end
93
97
 
98
+ def expression_ender
99
+ # end Fixnum and Float matchers with a non-grouping positive lookahead
100
+ # assertion that matches a closing paren, whitespace, or string end. The
101
+ # positive lookahead (?=...) ensures the string scanner includes the ending
102
+ # character in next fetch_token call.
103
+ '(?=(?:\)|\s|$))'
104
+ end
105
+
94
106
  end
@@ -0,0 +1,30 @@
1
+ # slide the playback rate up and down
2
+ require 'rubygems'
3
+ require 'osc-ruby'
4
+
5
+ c = OSC::Client.new 'localhost', 53000
6
+
7
+ # first cue
8
+ cue_number = 1
9
+
10
+ # pause between OSC messages. if this is much below 0.05 it'll just get weird
11
+ sleep_time = 0.05
12
+
13
+ # more steps means a longer slide
14
+ steps = 100
15
+
16
+ # how high should rate peak
17
+ max_rate = 2.0
18
+
19
+ 10.times do
20
+ # start at 1 to avoid sending 0.0 to rate
21
+ (1..steps).each do |n|
22
+ c.send(OSC::Message.new("/cue/#{ cue_number }/rate", n / (steps / max_rate)))
23
+ sleep(sleep_time)
24
+ end
25
+
26
+ (1..steps).each do |n|
27
+ c.send(OSC::Message.new("/cue/#{ cue_number }/rate", (max_rate + 0.01) - (n / (steps / max_rate))))
28
+ sleep(sleep_time)
29
+ end
30
+ end
@@ -12,13 +12,13 @@ describe Qcmd::Parser do
12
12
  end
13
13
 
14
14
  it "should parse integers" do
15
- tokens = Qcmd::Parser.parse 'go "word word" 10 (rate 10)'
16
- tokens.should eql([:go, 'word word', 10, [:rate, 10]])
15
+ tokens = Qcmd::Parser.parse 'go "word word" 10 (rate 10) 1'
16
+ tokens.should eql([:go, 'word word', 10, [:rate, 10], 1])
17
17
  end
18
18
 
19
19
  it "should parse floats" do
20
- tokens = Qcmd::Parser.parse '1.1 go ("word word" 10.2 -12.3 1.1.1 10.2)'
21
- tokens.should eql([1.1, :go, ['word word', 10.2, -12.3, :'1.1.1', 10.2]])
20
+ tokens = Qcmd::Parser.parse '1.1 go ("word word" 10.2 -12.3 1.1.1) 10.2'
21
+ tokens.should eql([1.1, :go, ['word word', 10.2, -12.3, :'1.1.1'], 10.2])
22
22
  end
23
23
 
24
24
  it "should parse invalid numbers as symbols" do
@@ -28,7 +28,6 @@ describe Qcmd::Parser do
28
28
 
29
29
  it "should parse nested quotes" do
30
30
  tokens = Qcmd::Parser.parse 'go "word word" 10 -12.3 "life \"is good\" yeah"'
31
-
32
31
  tokens.should eql([:go, 'word word', 10, -12.3, 'life "is good" yeah'])
33
32
  end
34
33
 
@@ -83,7 +82,6 @@ describe Qcmd::Parser do
83
82
  it "should handle escaped double quotes" do
84
83
  expression = Qcmd::Parser.generate([:go, 'word word', 10, -12.3, 'life "is good" yeah'])
85
84
  expression.should eql('(go "word word" 10 -12.3 "life \"is good\" yeah")')
86
-
87
85
  end
88
86
  end
89
87
  end
metadata CHANGED
@@ -1,136 +1,126 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: qcmd
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.13
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 14
9
+ version: 0.1.14
6
10
  platform: ruby
7
- authors:
11
+ authors:
8
12
  - Adam Bachman
9
13
  autorequire:
10
14
  bindir: bin
11
15
  cert_chain: []
12
- date: 2013-05-22 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
16
+
17
+ date: 2013-06-03 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: dnssd
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - '='
20
- - !ruby/object:Gem::Version
21
- version: '2.0'
22
- type: :runtime
23
22
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - '='
28
- - !ruby/object:Gem::Version
29
- version: '2.0'
30
- - !ruby/object:Gem::Dependency
31
- name: json
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - '='
36
- - !ruby/object:Gem::Version
37
- version: 1.7.7
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 2
29
+ - 0
30
+ version: "2.0"
38
31
  type: :runtime
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: json
39
35
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - '='
44
- - !ruby/object:Gem::Version
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "="
39
+ - !ruby/object:Gem::Version
40
+ segments:
41
+ - 1
42
+ - 7
43
+ - 7
45
44
  version: 1.7.7
46
- - !ruby/object:Gem::Dependency
47
- name: osc-ruby
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - '='
52
- - !ruby/object:Gem::Version
53
- version: 1.0.0
54
45
  type: :runtime
46
+ version_requirements: *id002
47
+ - !ruby/object:Gem::Dependency
48
+ name: osc-ruby
55
49
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - '='
60
- - !ruby/object:Gem::Version
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 1
56
+ - 0
57
+ - 0
61
58
  version: 1.0.0
62
- - !ruby/object:Gem::Dependency
63
- name: trollop
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - '='
68
- - !ruby/object:Gem::Version
69
- version: '2.0'
70
59
  type: :runtime
60
+ version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: trollop
71
63
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - '='
76
- - !ruby/object:Gem::Version
77
- version: '2.0'
78
- - !ruby/object:Gem::Dependency
64
+ requirement: &id004 !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "="
67
+ - !ruby/object:Gem::Version
68
+ segments:
69
+ - 2
70
+ - 0
71
+ version: "2.0"
72
+ type: :runtime
73
+ version_requirements: *id004
74
+ - !ruby/object:Gem::Dependency
79
75
  name: rspec
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ~>
84
- - !ruby/object:Gem::Version
85
- version: 2.10.0
86
- type: :development
87
76
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
77
+ requirement: &id005 !ruby/object:Gem::Requirement
78
+ requirements:
91
79
  - - ~>
92
- - !ruby/object:Gem::Version
80
+ - !ruby/object:Gem::Version
81
+ segments:
82
+ - 2
83
+ - 10
84
+ - 0
93
85
  version: 2.10.0
94
- - !ruby/object:Gem::Dependency
95
- name: cucumber
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - '='
100
- - !ruby/object:Gem::Version
101
- version: 1.2.1
102
86
  type: :development
87
+ version_requirements: *id005
88
+ - !ruby/object:Gem::Dependency
89
+ name: cucumber
103
90
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - '='
108
- - !ruby/object:Gem::Version
91
+ requirement: &id006 !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "="
94
+ - !ruby/object:Gem::Version
95
+ segments:
96
+ - 1
97
+ - 2
98
+ - 1
109
99
  version: 1.2.1
110
- - !ruby/object:Gem::Dependency
111
- name: aruba
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
100
  type: :development
101
+ version_requirements: *id006
102
+ - !ruby/object:Gem::Dependency
103
+ name: aruba
119
104
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
105
+ requirement: &id007 !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ segments:
110
+ - 0
111
+ version: "0"
112
+ type: :development
113
+ version_requirements: *id007
126
114
  description: A simple interactive QLab 3 command line controller
127
- email:
115
+ email:
128
116
  - adam.bachman@gmail.com
129
- executables:
117
+ executables:
130
118
  - qcmd
131
119
  extensions: []
120
+
132
121
  extra_rdoc_files: []
133
- files:
122
+
123
+ files:
134
124
  - .gitignore
135
125
  - CHANGELOG.md
136
126
  - Gemfile
@@ -174,6 +164,7 @@ files:
174
164
  - lib/vendor/sexpistol/sexpistol/sexpistol_parser.rb
175
165
  - qcmd.gemspec
176
166
  - sample/dnssd.rb
167
+ - sample/fast-rate-change.rb
177
168
  - sample/simple_console.rb
178
169
  - sample/tcp_qlab_connection.rb
179
170
  - spec/spec_helper.rb
@@ -183,31 +174,37 @@ files:
183
174
  - spec/unit/parser_spec.rb
184
175
  - spec/unit/qcmd_spec.rb
185
176
  - spec/unit/qlab_spec.rb
177
+ has_rdoc: true
186
178
  homepage: https://github.com/Figure53/qcmd
187
179
  licenses: []
180
+
188
181
  post_install_message:
189
182
  rdoc_options: []
190
- require_paths:
183
+
184
+ require_paths:
191
185
  - lib
192
- required_ruby_version: !ruby/object:Gem::Requirement
193
- none: false
194
- requirements:
195
- - - ! '>='
196
- - !ruby/object:Gem::Version
197
- version: '0'
198
- required_rubygems_version: !ruby/object:Gem::Requirement
199
- none: false
200
- requirements:
201
- - - ! '>='
202
- - !ruby/object:Gem::Version
203
- version: '0'
186
+ required_ruby_version: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ segments:
191
+ - 0
192
+ version: "0"
193
+ required_rubygems_version: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ segments:
198
+ - 0
199
+ version: "0"
204
200
  requirements: []
201
+
205
202
  rubyforge_project:
206
- rubygems_version: 1.8.24
203
+ rubygems_version: 1.3.6
207
204
  signing_key:
208
205
  specification_version: 3
209
206
  summary: QLab 3 console
210
- test_files:
207
+ test_files:
211
208
  - features/support/setup.rb
212
209
  - spec/spec_helper.rb
213
210
  - spec/unit/action_spec.rb