instrument 0.1.2 → 0.1.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/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.1.3
2
+
3
+ * registered type blocks now take a Hash as the second parameter
4
+ * template filenames now show up in backtraces
5
+
1
6
  == 0.1.2
2
7
 
3
8
  * controls may now accept a delegate object, which methods will be relayed to
data/Rakefile CHANGED
@@ -37,7 +37,12 @@ PKG_FILES = FileList[
37
37
  "[A-Z]*", "Rakefile"
38
38
  ].exclude(/database\.yml/).exclude(/[_\.]git$/)
39
39
 
40
- task :default => "spec:verify"
40
+ RCOV_ENABLED = (RUBY_PLATFORM != "java" && RUBY_VERSION =~ /^1\.8/)
41
+ if RCOV_ENABLED
42
+ task :default => "spec:verify"
43
+ else
44
+ task :default => "spec"
45
+ end
41
46
 
42
47
  WINDOWS = (RUBY_PLATFORM =~ /mswin|win32|mingw|bccwin|cygwin/) rescue false
43
48
  SUDO = WINDOWS ? '' : ('sudo' unless ENV['SUDOLESS'])
@@ -1,6 +1,6 @@
1
1
  # ++
2
2
  # Instrument, Copyright (c) 2008 Day Automation Systems, Inc.
3
- #
3
+ #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
6
6
  # "Software"), to deal in the Software without restriction, including
@@ -8,10 +8,10 @@
8
8
  # distribute, sublicense, and/or sell copies of the Software, and to
9
9
  # permit persons to whom the Software is furnished to do so, subject to
10
10
  # the following conditions:
11
- #
11
+ #
12
12
  # The above copyright notice and this permission notice shall be
13
13
  # included in all copies or substantial portions of the Software.
14
- #
14
+ #
15
15
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
16
  # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
17
  # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -52,15 +52,20 @@ module Instrument
52
52
  # execution context and returns the rendered template output as a
53
53
  # String. The block should ensure that all necessary libraries are
54
54
  # loaded.
55
- #
56
- # @param [Array] type_list the template types being registered
57
- # @yield the block generates the template output
58
- # @yieldparam [String] the template input
59
- # @yieldparam [Object] the execution context for the template
55
+ #
56
+ # @param [Array] type_list The template types being registered.
57
+ # @yield The block generates the template output.
58
+ # @yieldparam [String] input
59
+ # The template input.
60
+ # @yieldparam [Hash] options
61
+ # Additional parameters.
62
+ # :context - The execution context for the template, which will be set
63
+ # to the control object.
64
+ # :filename - The filename of the template being rendered.
60
65
  def self.register_type(*type_list, &block)
61
66
  # Ensure the @@type_map is initialized.
62
67
  self.types
63
-
68
+
64
69
  for type in type_list
65
70
  # Normalize to symbol
66
71
  type = type.to_s.to_sym
@@ -68,7 +73,7 @@ module Instrument
68
73
  end
69
74
  return nil
70
75
  end
71
-
76
+
72
77
  ##
73
78
  # Returns a list of registered template types.
74
79
  #
@@ -107,14 +112,12 @@ module Instrument
107
112
  #
108
113
  # @param [Class] klass the subclass that is extending Control
109
114
  def self.inherited(klass)
110
- if !defined?(@@control_subclasses) || @@control_subclasses == nil
111
- @@control_subclasses = []
112
- end
115
+ @@control_subclasses ||= []
113
116
  @@control_subclasses << klass
114
117
  @@control_subclasses.uniq!
115
118
  super
116
119
  end
117
-
120
+
118
121
  ##
119
122
  # Looks up a Control by name.
120
123
  #
@@ -122,14 +125,15 @@ module Instrument
122
125
  # @return [Instrument::Control, NilClass] the desired control or nil
123
126
  # @see Instrument::Control.control_name
124
127
  def self.lookup(control_name)
125
- for control_subclass in (@@control_subclasses || [])
128
+ @@control_subclasses ||= []
129
+ for control_subclass in @@control_subclasses
126
130
  if control_subclass.control_name == control_name
127
131
  return control_subclass
128
132
  end
129
133
  end
130
134
  return nil
131
135
  end
132
-
136
+
133
137
  ##
134
138
  # Creates a new Control object. Subclasses should not override this.
135
139
  #
@@ -140,19 +144,19 @@ module Instrument
140
144
  @options = options
141
145
  @block = block
142
146
  end
143
-
147
+
144
148
  ##
145
149
  # Returns the options that were used to create the Control.
146
150
  #
147
151
  # @return [Hash] a set of options required by the control
148
152
  attr_reader :options
149
-
153
+
150
154
  ##
151
155
  # Returns the block that was supplied when the Control was created.
152
156
  #
153
157
  # @return [Proc] the block used to create the Control
154
158
  attr_reader :block
155
-
159
+
156
160
  ##
157
161
  # Returns the Control's name. By default, this is the control's class
158
162
  # name, tranformed into This method may be overridden by a Control.
@@ -167,7 +171,7 @@ module Instrument
167
171
  tr("-", "_").
168
172
  downcase
169
173
  end
170
-
174
+
171
175
  ##
172
176
  # Returns a list of formats that this control may be rendered as.
173
177
  #
@@ -244,7 +248,7 @@ module Instrument
244
248
  end
245
249
  end
246
250
  end
247
-
251
+
248
252
  ##
249
253
  # Renders a control in a specific format.
250
254
  #
@@ -264,7 +268,7 @@ module Instrument
264
268
  next if full_name.index(File.expand_path(load_path)) != 0
265
269
 
266
270
  templates = Dir.glob(full_name + ".#{format}.*")
267
-
271
+
268
272
  # Select the first template matched. If there's more than one,
269
273
  # the extras will be ignored.
270
274
  template = templates.first
@@ -295,7 +299,9 @@ module Instrument
295
299
  end
296
300
 
297
301
  begin
298
- return self.class.processor(type).call(raw_content, self)
302
+ return self.class.processor(type).call(
303
+ raw_content, {:context => self, :filename => path}
304
+ )
299
305
  rescue Exception => e
300
306
  e.message <<
301
307
  "\nError occurred while rendering " +
@@ -307,23 +313,36 @@ module Instrument
307
313
  end
308
314
 
309
315
  # Register the default types.
310
- Instrument::Control.register_type(:haml) do |input, context|
316
+ Instrument::Control.register_type(:haml) do |input, options|
311
317
  require "haml"
312
- Haml::Engine.new(input, {:attr_wrapper => "\""}).render(context)
318
+ context = options[:context]
319
+ filename = options[:filename]
320
+ Haml::Engine.new(
321
+ input, :attr_wrapper => "\"", :filename => filename
322
+ ).render(context)
313
323
  end
314
- Instrument::Control.register_type(:erb, :rhtml) do |input, context|
324
+ Instrument::Control.register_type(:erb, :rhtml) do |input, options|
315
325
  begin; require "erubis"; rescue LoadError; require "erb"; end
326
+ context = options[:context]
327
+ filename = options[:filename]
328
+ binding = context.instance_eval { (lambda {}).binding }
316
329
  erb = Erubis::Eruby.new(input) rescue ERB.new(input)
317
- erb.result(context.send(:binding))
330
+ if erb.respond_to?(:filename=)
331
+ erb.filename = filename
332
+ end
333
+ erb.result(binding)
318
334
  end
319
- Instrument::Control.register_type(:mab) do |input, context|
335
+ Instrument::Control.register_type(:mab) do |input, options|
320
336
  require "markaby"
337
+ context = options[:context]
321
338
  Markaby::Builder.new({}, context).capture do
322
339
  eval(input)
323
340
  end
324
341
  end
325
- Instrument::Control.register_type(:rxml) do |input, context|
342
+ Instrument::Control.register_type(:rxml) do |input, options|
326
343
  require "builder"
344
+ context = options[:context]
327
345
  xml = Builder::XmlMarkup.new(:indent => 2)
328
- eval(input, context.send(:binding))
346
+ binding = context.instance_eval { (lambda {}).binding }
347
+ eval(input, binding)
329
348
  end
@@ -1,6 +1,6 @@
1
1
  # ++
2
2
  # Instrument, Copyright (c) 2008 Day Automation Systems, Inc.
3
- #
3
+ #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
6
6
  # "Software"), to deal in the Software without restriction, including
@@ -8,10 +8,10 @@
8
8
  # distribute, sublicense, and/or sell copies of the Software, and to
9
9
  # permit persons to whom the Software is furnished to do so, subject to
10
10
  # the following conditions:
11
- #
11
+ #
12
12
  # The above copyright notice and this permission notice shall be
13
13
  # included in all copies or substantial portions of the Software.
14
- #
14
+ #
15
15
  # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
16
  # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
17
  # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -31,13 +31,13 @@ module Instrument
31
31
  # == Example
32
32
  #
33
33
  # include Instrument::ControlBuilder
34
- #
34
+ #
35
35
  # select_control(:name => "base", :selections => [
36
36
  # {:label => "One", :value => "1"},
37
37
  # {:label => "Two", :value => "2"},
38
38
  # {:label => "Three", :value => "3"},
39
39
  # {:label => "Four", :value => "4"}
40
- # ]).to_xhtml
40
+ # ]).to_xhtml
41
41
  module ControlBuilder
42
42
  ##
43
43
  # Prevents Kernel#select from being accidentally called.
@@ -59,9 +59,9 @@ module Instrument
59
59
  super
60
60
  end
61
61
 
62
- ##
62
+ ##
63
63
  # Initializes Instrument::Control subclasses by name.
64
- #
64
+ #
65
65
  # @param [Symbol] method the method being called
66
66
  # @param [Array] params the method's parameters
67
67
  # @param [Proc] block the block being passed to the method
@@ -76,6 +76,6 @@ module Instrument
76
76
  "undefined method `#{method}' for " +
77
77
  "#{self.inspect}:#{self.class.name}"
78
78
  end
79
- end
79
+ end
80
80
  end
81
81
  end
@@ -27,7 +27,7 @@ unless defined? Instrument::VERSION
27
27
  module VERSION #:nodoc:
28
28
  MAJOR = 0
29
29
  MINOR = 1
30
- TINY = 2
30
+ TINY = 3
31
31
 
32
32
  STRING = [MAJOR, MINOR, TINY].join('.')
33
33
  end
@@ -1,6 +1,6 @@
1
1
  require "uuidtools"
2
2
  require "time"
3
- xml.instruct! :xml, :version=>"1.0"
3
+ xml.instruct! :xml, :version=>"1.0"
4
4
  xml.feed("xmlns" => "http://www.w3.org/2005/Atom", "xml:lang" => "en_US") do
5
5
  xml.id("urn:uuid:4a11e26e-239c-11dd-adf9-001ec2186a45")
6
6
  xml.title("Select Control")
@@ -19,34 +19,34 @@ describe Instrument::ControlBuilder, "extending another object" do
19
19
  class ExtendedObject
20
20
  include Instrument::ControlBuilder
21
21
  end
22
-
22
+
23
23
  before :all do
24
24
  @extended_object = ExtendedObject.new
25
25
  end
26
-
26
+
27
27
  it "should enable mixins to function" do
28
28
  @extended_object.image_control.class.should == ImageControl
29
29
  @extended_object.select.class.should == Select
30
30
  end
31
-
31
+
32
32
  it "should still raise an Exception for non-existent methods" do
33
33
  (lambda do
34
34
  @extended_object.bogus
35
35
  end).should raise_error(NoMethodError)
36
36
  end
37
-
37
+
38
38
  it "should respond to a normal message" do
39
39
  @extended_object.should respond_to(:to_s)
40
40
  end
41
-
41
+
42
42
  it "should not respond to a bogus message" do
43
43
  @extended_object.should_not respond_to(:bogus)
44
44
  end
45
-
45
+
46
46
  it "should respond to a valid control name message" do
47
47
  @extended_object.should respond_to(:image_control)
48
48
  end
49
-
49
+
50
50
  it "should not respond to an invalid control name message" do
51
51
  @extended_object.should_not respond_to(:bogus_control)
52
52
  end
@@ -6,11 +6,11 @@ class SelectControl < Instrument::Control
6
6
  def initialize(label, value)
7
7
  @label, @value = label, value
8
8
  end
9
-
9
+
10
10
  attr_accessor :label
11
11
  attr_accessor :value
12
12
  end
13
-
13
+
14
14
  def element_id
15
15
  return self.options[:id] || self.options[:name]
16
16
  end
@@ -18,7 +18,7 @@ class SelectControl < Instrument::Control
18
18
  def element_name
19
19
  return self.options[:name]
20
20
  end
21
-
21
+
22
22
  def selections
23
23
  if !defined?(@selections) || @selections == nil
24
24
  @selections = []
@@ -70,7 +70,7 @@ describe Instrument::Control do
70
70
  control = Instrument::Control.new(&proc)
71
71
  control.block.should eql(proc)
72
72
  end
73
-
73
+
74
74
  it "should still raise an Exception for non-existent methods" do
75
75
  (lambda do
76
76
  Instrument::Control.new.bogus
@@ -100,25 +100,25 @@ describe Instrument::Control do
100
100
  SelectControl.new.to_xml
101
101
  end).should raise_error(ZeroDivisionError)
102
102
  end
103
-
103
+
104
104
  it "should correctly delegate messages to the delegate object" do
105
105
  SelectControl.new(:delegate => [1,2,3]).size.should == 3
106
106
  end
107
-
107
+
108
108
  it "should have the correct list of formats" do
109
109
  SelectControl.formats.sort.should == [
110
110
  "atom", "html", "json", "txt", "xhtml", "xml"
111
111
  ]
112
112
  end
113
-
113
+
114
114
  it "should have no formats listed for the base class" do
115
115
  Instrument::Control.formats.should == []
116
116
  end
117
-
117
+
118
118
  it "should respond to a normal message" do
119
119
  SelectControl.new.should respond_to(:render)
120
120
  end
121
-
121
+
122
122
  it "should not respond to a bogus message" do
123
123
  SelectControl.new.should_not respond_to(:bogus)
124
124
  end
@@ -127,25 +127,25 @@ describe Instrument::Control do
127
127
  Instrument::Control.new.should respond_to(:select_control)
128
128
  SelectControl.new.should respond_to(:select_control)
129
129
  end
130
-
130
+
131
131
  it "should not respond to invalid subclass messages" do
132
132
  SelectControl.new.should_not respond_to(:bogus_control)
133
133
  end
134
-
134
+
135
135
  it "should respond to a valid format conversion message" do
136
136
  SelectControl.new.should respond_to(:to_atom)
137
137
  end
138
-
138
+
139
139
  it "should not respond to an invalid format conversion message" do
140
140
  SelectControl.new.should_not respond_to(:to_bogus)
141
141
  end
142
-
142
+
143
143
  it "should respond to messages available on a delegated object" do
144
144
  SelectControl.new(:delegate => []).should respond_to(:<<)
145
145
  SelectControl.new(:delegate => 42).should respond_to(:>>)
146
146
  SelectControl.new(:delegate => 42).should respond_to(:<<)
147
147
  end
148
-
148
+
149
149
  it "should not respond to messages unavailable on a delegated object" do
150
150
  SelectControl.new(:delegate => []).should_not respond_to(:>>)
151
151
  end
@@ -162,7 +162,7 @@ describe Instrument::Control, "when rendered as XHTML with Haml" do
162
162
  it "should have the correct id and name" do
163
163
  @xhtml.should match(/<select id="base" name="base">/)
164
164
  end
165
-
165
+
166
166
  it "should have options for all of the given selections" do
167
167
  @xhtml.should match(/<option value="First"/)
168
168
  @xhtml.should match(/<option value="Second"/)
@@ -185,7 +185,7 @@ describe Instrument::Control, "when rendered as HTML with Markaby" do
185
185
  @html.should match(/id="base"/)
186
186
  @html.should match(/name="base"/)
187
187
  end
188
-
188
+
189
189
  it "should have options for all of the given selections" do
190
190
  @html.should match(/<option value="First"/)
191
191
  @html.should match(/<option value="Second"/)
@@ -205,7 +205,7 @@ describe Instrument::Control, "when rendered as Atom with XML Builder" do
205
205
  it "should have the correct id and name" do
206
206
  @atom.should match(/<title>Select Control<\/title>/)
207
207
  end
208
-
208
+
209
209
  it "should have options for all of the given selections" do
210
210
  @atom.should match(/<title>First<\/title>/)
211
211
  @atom.should match(/<title>Second<\/title>/)
@@ -226,7 +226,7 @@ describe Instrument::Control, "when rendered as JSON with Erubis" do
226
226
  @atom.should match(/"id": "base"/)
227
227
  @atom.should match(/"name": "base"/)
228
228
  end
229
-
229
+
230
230
  it "should have options for all of the given selections" do
231
231
  @atom.should match(/"label": "First"/)
232
232
  @atom.should match(/"value": "First"/)
@@ -29,7 +29,7 @@ namespace :gem do
29
29
  p.need_tar = true
30
30
  p.need_zip = true
31
31
  end
32
-
32
+
33
33
  desc "Show information about the gem"
34
34
  task :debug do
35
35
  puts GEM_SPEC.to_ruby
@@ -22,16 +22,16 @@ namespace :git do
22
22
  tag = "#{PKG_NAME}-#{PKG_VERSION}"
23
23
  msg = "Release #{PKG_NAME}-#{PKG_VERSION}"
24
24
 
25
- existing_tags = `git tag -l instrument-*`.split("\n")
25
+ existing_tags = `git tag -l #{PKG_NAME}-*`.split("\n")
26
26
  if existing_tags.include?(tag)
27
27
  warn("Tag already exists, deleting...")
28
28
  unless system "git tag -d #{tag}"
29
- abort "Tag deletion failed."
29
+ abort "Tag deletion failed."
30
30
  end
31
31
  end
32
32
  puts "Creating git tag '#{tag}'..."
33
33
  unless system "git tag -a -m \"#{msg}\" #{tag}"
34
- abort "Tag creation failed."
34
+ abort "Tag creation failed."
35
35
  end
36
36
  end
37
37
  end
@@ -13,7 +13,7 @@ namespace :metrics do
13
13
  "LOC #{sprintf("%4d", codelines)} | #{file_name}"
14
14
  total_lines += lines
15
15
  total_codelines += codelines
16
-
16
+
17
17
  lines, codelines = 0, 0
18
18
  end
19
19
 
@@ -16,7 +16,7 @@ namespace :doc do
16
16
  task :ri do
17
17
  sh "rdoc --ri -o ri ."
18
18
  end
19
-
19
+
20
20
  desc "Remove ri products"
21
21
  task :clobber_ri do
22
22
  rm_r "ri" rescue nil
@@ -1,9 +1,8 @@
1
- require 'rubyforge'
2
- require 'rake/contrib/sshpublisher'
3
-
4
1
  namespace :gem do
5
2
  desc 'Package and upload to RubyForge'
6
3
  task :release => ["gem:package"] do |t|
4
+ require 'rubyforge'
5
+
7
6
  v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
8
7
  abort "Versions don't match #{v} vs #{PROJ.version}" if v != PKG_VERSION
9
8
  pkg = "pkg/#{GEM_SPEC.full_name}"
@@ -28,6 +27,9 @@ end
28
27
  namespace :doc do
29
28
  desc "Publish RDoc to RubyForge"
30
29
  task :release => ["doc:rdoc"] do
30
+ require "rake/contrib/sshpublisher"
31
+ require "yaml"
32
+
31
33
  config = YAML.load(
32
34
  File.read(File.expand_path('~/.rubyforge/user-config.yml'))
33
35
  )
@@ -41,6 +43,9 @@ end
41
43
  namespace :spec do
42
44
  desc "Publish specdoc to RubyForge"
43
45
  task :release => ["spec:specdoc"] do
46
+ require "rake/contrib/sshpublisher"
47
+ require "yaml"
48
+
44
49
  config = YAML.load(
45
50
  File.read(File.expand_path('~/.rubyforge/user-config.yml'))
46
51
  )
@@ -49,10 +54,13 @@ namespace :spec do
49
54
  local_dir = "specdoc"
50
55
  Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
51
56
  end
52
-
57
+
53
58
  namespace :rcov do
54
59
  desc "Publish coverage report to RubyForge"
55
60
  task :release => ["spec:rcov"] do
61
+ require "rake/contrib/sshpublisher"
62
+ require "yaml"
63
+
56
64
  config = YAML.load(
57
65
  File.read(File.expand_path('~/.rubyforge/user-config.yml'))
58
66
  )
@@ -67,6 +75,9 @@ end
67
75
  namespace :website do
68
76
  desc "Publish website to RubyForge"
69
77
  task :release => ["doc:release", "spec:release", "spec:rcov:release"] do
78
+ require "rake/contrib/sshpublisher"
79
+ require "yaml"
80
+
70
81
  config = YAML.load(
71
82
  File.read(File.expand_path('~/.rubyforge/user-config.yml'))
72
83
  )
@@ -4,7 +4,11 @@ namespace :spec do
4
4
  Spec::Rake::SpecTask.new(:rcov) do |t|
5
5
  t.spec_files = FileList['spec/**/*_spec.rb']
6
6
  t.spec_opts = ['--color', '--format', 'specdoc']
7
- t.rcov = true
7
+ if RCOV_ENABLED
8
+ t.rcov = true
9
+ else
10
+ t.rcov = false
11
+ end
8
12
  t.rcov_opts = [
9
13
  '--exclude', 'spec',
10
14
  '--exclude', '1\\.8\\/gems',
@@ -12,24 +16,32 @@ namespace :spec do
12
16
  ]
13
17
  end
14
18
 
15
- RCov::VerifyTask.new(:verify) do |t|
16
- t.threshold = 100.0
17
- t.index_html = 'coverage/index.html'
19
+ Spec::Rake::SpecTask.new(:normal) do |t|
20
+ t.spec_files = FileList['spec/**/*_spec.rb']
21
+ t.spec_opts = ['--color', '--format', 'specdoc']
22
+ t.rcov = false
18
23
  end
19
24
 
20
- task :verify => :rcov
25
+ if RCOV_ENABLED
26
+ RCov::VerifyTask.new(:verify) do |t|
27
+ t.threshold = 100.0
28
+ t.index_html = 'coverage/index.html'
29
+ end
30
+
31
+ task :verify => :rcov
32
+ end
21
33
 
22
34
  desc "Generate HTML Specdocs for all specs"
23
35
  Spec::Rake::SpecTask.new(:specdoc) do |t|
24
36
  specdoc_path = File.expand_path(
25
37
  File.join(File.dirname(__FILE__), '../specdoc/'))
26
38
  Dir.mkdir(specdoc_path) if !File.exist?(specdoc_path)
27
-
39
+
28
40
  output_file = File.join(specdoc_path, 'index.html')
29
41
  t.spec_files = FileList['spec/**/*_spec.rb']
30
42
  t.spec_opts = ["--format", "\"html:#{output_file}\"", "--diff"]
31
43
  t.fail_on_error = false
32
- end
44
+ end
33
45
 
34
46
  namespace :rcov do
35
47
  desc "Browse the code coverage report."
@@ -39,8 +51,13 @@ namespace :spec do
39
51
  end
40
52
  end
41
53
 
42
- desc "Alias to spec:verify"
43
- task "spec" => "spec:verify"
54
+ if RCOV_ENABLED
55
+ desc "Alias to spec:verify"
56
+ task "spec" => "spec:verify"
57
+ else
58
+ desc "Alias to spec:normal"
59
+ task "spec" => "spec:normal"
60
+ end
44
61
 
45
62
  task "clobber" => ["spec:clobber_rcov"]
46
63
 
@@ -74,12 +91,12 @@ module Rake
74
91
  success =
75
92
  !(`gnome-open #{filepath} 2>&1` =~ /There is no default action/)
76
93
  if !success
77
- opened = try_browsers.call()
94
+ opened = try_browsers.call()
78
95
  else
79
96
  opened = true
80
97
  end
81
98
  else
82
- opened = try_browsers.call()
99
+ opened = try_browsers.call()
83
100
  end
84
101
  if !opened
85
102
  puts "Don't know how to browse to location."
@@ -9,12 +9,12 @@
9
9
  margin: 0;
10
10
  padding: 0;
11
11
  }
12
-
12
+
13
13
  body {
14
14
  font-family: lucida grande, verdana, sans-serif;
15
15
  margin: 1em;
16
16
  }
17
-
17
+
18
18
  a {
19
19
  color: #880000;
20
20
  }
@@ -22,18 +22,18 @@
22
22
  a:visited {
23
23
  color: #333333;
24
24
  }
25
-
25
+
26
26
  h1 {
27
27
  font-size: 2em;
28
28
  margin: 0 0 0.8em 0;
29
29
  text-align: center;
30
30
  }
31
-
31
+
32
32
  h2 {
33
33
  font-size: 1em;
34
34
  margin: 0.8em 0;
35
35
  }
36
-
36
+
37
37
  p {
38
38
  margin: 0.8em 0;
39
39
  }
@@ -42,7 +42,7 @@
42
42
  font-size: 0.9em;
43
43
  margin: 0 0 0 1.5em;
44
44
  }
45
-
45
+
46
46
  div {
47
47
  width: 50%;
48
48
  margin: 0 auto;
@@ -55,7 +55,7 @@
55
55
  body {
56
56
  font-size: 0.9em;
57
57
  }
58
-
58
+
59
59
  a {
60
60
  text-decoration: none;
61
61
  color: #000;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: instrument
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Aman
@@ -9,11 +9,12 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-05 00:00:00 -04:00
12
+ date: 2008-10-23 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
17
+ type: :runtime
17
18
  version_requirement:
18
19
  version_requirements: !ruby/object:Gem::Requirement
19
20
  requirements:
@@ -23,6 +24,7 @@ dependencies:
23
24
  version:
24
25
  - !ruby/object:Gem::Dependency
25
26
  name: rspec
27
+ type: :runtime
26
28
  version_requirement:
27
29
  version_requirements: !ruby/object:Gem::Requirement
28
30
  requirements:
@@ -95,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
97
  requirements: []
96
98
 
97
99
  rubyforge_project: instrument
98
- rubygems_version: 1.1.1
100
+ rubygems_version: 1.2.0
99
101
  signing_key:
100
102
  specification_version: 2
101
103
  summary: Template-based Controls