qcmd 0.1.13 → 0.1.14

Sign up to get free protection for your applications and to get access to all the features.
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