cinesync 0.9.6 → 1.0.1
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/Rakefile +11 -11
- data/VERSION +1 -1
- data/cinesync.gemspec +43 -8
- data/{Samples → examples}/Export Notes to CSV.rb +0 -0
- data/examples/Start Session.rb +17 -0
- data/lib/cinesync/commands.rb +50 -0
- data/lib/cinesync/event_handler.rb +0 -1
- data/lib/cinesync/frame_annotation.rb +1 -1
- data/lib/cinesync/media_file.rb +7 -2
- data/lib/cinesync/xml.rb +4 -5
- data/lib/cinesync.rb +4 -7
- data/spec/.bacon +0 -0
- data/spec/cinesync_spec.rb +12 -0
- data/spec/event_handler_spec.rb +66 -0
- data/spec/frame_annotation_spec.rb +33 -0
- data/spec/media_file_spec.rb +125 -0
- data/spec/media_locator_spec.rb +68 -0
- data/spec/session_spec.rb +61 -0
- data/spec/small.txt +1 -0
- data/{test/helper.rb → spec/spec_helper.rb} +3 -5
- data/spec/v3 files/corrupt.csc +4 -0
- data/spec/v3 files/v3-Newer v4.csc +4 -0
- data/spec/v3 files/v3-Unsupported.csc +4 -0
- data/spec/v3 files/v3-active first.csc +37 -0
- data/spec/v3 files/v3-active second.csc +37 -0
- data/spec/v3 files/v3-active single.csc +14 -0
- data/spec/v3 files/v3-basic.csc +37 -0
- data/spec/v3 files/v3-groups.csc +728 -0
- data/spec/v3 files/v3-pro.csc +91 -0
- data/spec/v3 files/v3-refmovie.csc +32 -0
- data/spec/v3 files/v3-stereo-anaglyph-off.csc +468 -0
- data/spec/v3 files/v3-stereo-anaglyph.csc +470 -0
- data/spec/v3 files/v3-stereo-interlaced-off.csc +468 -0
- data/spec/v3 files/v3-stereo.csc +95 -0
- data/spec/v3 files/v3-url.csc +15 -0
- data/spec/xml_spec.rb +272 -0
- metadata +46 -11
    
        data/spec/xml_spec.rb
    ADDED
    
    | @@ -0,0 +1,272 @@ | |
| 1 | 
            +
            $: << File.expand_path(File.dirname(__FILE__))
         | 
| 2 | 
            +
            require 'spec_helper'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe "XML serialization" do
         | 
| 5 | 
            +
              it "should serialize empty session" do
         | 
| 6 | 
            +
                s = CineSync::Session.new
         | 
| 7 | 
            +
                xml = s.to_xml
         | 
| 8 | 
            +
                xml.should.not.be.empty?
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                doc = REXML::Document.new(xml)
         | 
| 11 | 
            +
                doc.root.name.should == "session"
         | 
| 12 | 
            +
                doc.root.namespace.should == CineSync::SessionV3Namespace
         | 
| 13 | 
            +
                doc.root.attributes["version"].to_i.should == CineSync::SessionV3XMLFileVersion
         | 
| 14 | 
            +
                doc.root.attributes["sessionFeatures"].should == s.session_features.to_s
         | 
| 15 | 
            +
                doc.root.attributes["userData"].should.be.nil?
         | 
| 16 | 
            +
                doc.root.elements["notes"].should.be.nil?
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              it "should fail when writing an invalid session" do
         | 
| 20 | 
            +
                s = CineSync::Session.new
         | 
| 21 | 
            +
                s.media << CineSync::MediaFile.new
         | 
| 22 | 
            +
                s.should.not.be.valid?
         | 
| 23 | 
            +
                should.raise(Exception) { s.to_xml }
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              it "should load basic session" do
         | 
| 27 | 
            +
                path = File.join("spec", "v3 files", "v3-basic.csc")
         | 
| 28 | 
            +
                s = File.open(path) {|f| CineSync::Session.load(f) }
         | 
| 29 | 
            +
                s.file_version.should == 3
         | 
| 30 | 
            +
                s.user_data.should == "sessionUserData blah bloo blee"
         | 
| 31 | 
            +
                s.media.length.should == 3
         | 
| 32 | 
            +
                s.notes.should == "These are my session notes.\nnewline."
         | 
| 33 | 
            +
                s.should.be.valid?
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                s.media[0].should.be.valid?
         | 
| 36 | 
            +
                s.media[0].name.should == "024b_fn_079_v01_1-98.mov"
         | 
| 37 | 
            +
                s.media[0].locator.path.should == "/Volumes/Scratch/test_files/movies/024b_fn_079_v01_1-98.mov"
         | 
| 38 | 
            +
                s.media[0].should.not.be.active?
         | 
| 39 | 
            +
                s.media[0].current_frame.should == 1
         | 
| 40 | 
            +
                s.media[0].user_data.should == ""
         | 
| 41 | 
            +
                s.media[0].groups.should == []
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                s.media[1].should.be.valid?
         | 
| 44 | 
            +
                s.media[1].name.should == "sample_mpeg4.mp4"
         | 
| 45 | 
            +
                s.media[1].locator.url.to_s.should == "http://example.com/test_files/movies/sample_mpeg4.mp4"
         | 
| 46 | 
            +
                s.media[1].locator.short_hash.should == "e74db5de61fa5483c541a3a3056f22d158b44ace"
         | 
| 47 | 
            +
                s.media[1].should.be.active?
         | 
| 48 | 
            +
                s.media[1].current_frame.should == 65
         | 
| 49 | 
            +
                s.media[1].user_data.should == ""
         | 
| 50 | 
            +
                s.media[1].groups.should == []
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                s.media[2].should.be.valid?
         | 
| 53 | 
            +
                s.media[2].name.should == "Test_MH 2fps.mov"
         | 
| 54 | 
            +
                s.media[2].locator.short_hash.should == "f9f0c5d3e3e340bcc9486abbb01a71089de9b886"
         | 
| 55 | 
            +
                s.media[2].should.not.be.active?
         | 
| 56 | 
            +
                s.media[2].current_frame.should == 1
         | 
| 57 | 
            +
                s.media[2].user_data.should == "myPrivateInfo"
         | 
| 58 | 
            +
                s.media[2].groups.should == []
         | 
| 59 | 
            +
                s.media[2].notes.should == "These notes on the last movie."
         | 
| 60 | 
            +
                s.media[2].annotations[1].notes.should == "This is a note on the first frame of the last movie."
         | 
| 61 | 
            +
                s.media[2].annotations[88].notes.should == ""
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              it "should load group movies" do
         | 
| 65 | 
            +
                path = File.join("spec", "v3 files", "v3-refmovie.csc")
         | 
| 66 | 
            +
                s = File.open(path) {|f| CineSync::Session.load(f) }
         | 
| 67 | 
            +
                s.file_version.should == 3
         | 
| 68 | 
            +
                s.user_data.should == "sessionUserData blah bloo blee"
         | 
| 69 | 
            +
                s.media.length.should == 3
         | 
| 70 | 
            +
                s.notes.should == "These are my session notes.\nnewline."
         | 
| 71 | 
            +
                s.should.be.valid?
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                s.media[0].should.be.valid?
         | 
| 74 | 
            +
                s.media[0].name.should == "024b_fn_079_v01_1-98.mov"
         | 
| 75 | 
            +
                s.media[0].locator.path.should == "/Volumes/Scratch/test_files/movies/024b_fn_079_v01_1-98.mov"
         | 
| 76 | 
            +
                s.media[0].should.not.be.active?
         | 
| 77 | 
            +
                s.media[0].current_frame.should == 1
         | 
| 78 | 
            +
                s.media[0].user_data.should == ""
         | 
| 79 | 
            +
                s.media[0].groups.should == ["myGroup"]
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                s.media[1].should.be.valid?
         | 
| 82 | 
            +
                s.media[1].name.should == "sample_mpeg4.mp4"
         | 
| 83 | 
            +
                s.media[1].locator.url.to_s.should == "http://example.com/test_files/movies/sample_mpeg4.mp4"
         | 
| 84 | 
            +
                s.media[1].locator.short_hash.should == "e74db5de61fa5483c541a3a3056f22d158b44ace"
         | 
| 85 | 
            +
                s.media[1].should.not.be.active?
         | 
| 86 | 
            +
                s.media[1].current_frame.should == 1
         | 
| 87 | 
            +
                s.media[1].user_data.should == ""
         | 
| 88 | 
            +
                s.media[1].groups.should == []
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                s.media[2].should.be.valid?
         | 
| 91 | 
            +
                s.media[2].group.should == "myGroup"
         | 
| 92 | 
            +
                s.media[2].should.not.be.active?
         | 
| 93 | 
            +
                s.media[2].current_frame.should == 1
         | 
| 94 | 
            +
                s.media[2].user_data.should == ""
         | 
| 95 | 
            +
              end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
              it "should load higher version" do
         | 
| 98 | 
            +
                xml_str = <<-XML
         | 
| 99 | 
            +
                  <?xml version="1.0" encoding="UTF-8" ?>
         | 
| 100 | 
            +
                  <session xmlns="http://www.cinesync.com/ns/session/3.0" version="4" sessionFeatures="standard">
         | 
| 101 | 
            +
                  </session>
         | 
| 102 | 
            +
                XML
         | 
| 103 | 
            +
                s = CineSync::Session.load(xml_str, true)
         | 
| 104 | 
            +
                s.should.not.be.valid?
         | 
| 105 | 
            +
                s.user_data.should == ""
         | 
| 106 | 
            +
                s.file_version.should == 4
         | 
| 107 | 
            +
                s.notes.should == ""
         | 
| 108 | 
            +
                s.session_features.should == :standard
         | 
| 109 | 
            +
              end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
              it "should load groups" do
         | 
| 112 | 
            +
                xml_str = <<-XML
         | 
| 113 | 
            +
                  <?xml version="1.0" encoding="UTF-8" ?>
         | 
| 114 | 
            +
                  <session xmlns="http://www.cinesync.com/ns/session/3.0" version="3" sessionFeatures="standard">
         | 
| 115 | 
            +
                    <group>Group 1</group>
         | 
| 116 | 
            +
                    <group>second>group</group>
         | 
| 117 | 
            +
                    <media userData="media data" currentFrame="12">
         | 
| 118 | 
            +
                      <name>First movie</name>
         | 
| 119 | 
            +
                      <locators><shortHash>f9f0c5d3e3e340bcc9486abbb01a71089de9b886</shortHash></locators>
         | 
| 120 | 
            +
                      <group>Group 1</group>
         | 
| 121 | 
            +
                    </media>
         | 
| 122 | 
            +
                  </session>
         | 
| 123 | 
            +
                XML
         | 
| 124 | 
            +
                s = CineSync::Session.load(xml_str)
         | 
| 125 | 
            +
                s.should.be.valid?
         | 
| 126 | 
            +
                s.groups.should == ["Group 1", "second>group"]
         | 
| 127 | 
            +
                s.media[0].current_frame.should == 12
         | 
| 128 | 
            +
                s.media[0].groups.should == ["Group 1"]
         | 
| 129 | 
            +
              end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
              it "should load session and media notes" do
         | 
| 132 | 
            +
                xml_str = <<-XML
         | 
| 133 | 
            +
                  <?xml version="1.0" encoding="UTF-8" ?>
         | 
| 134 | 
            +
                  <session xmlns="http://www.cinesync.com/ns/session/3.0" version="3" sessionFeatures="standard">
         | 
| 135 | 
            +
                    <media userData="media data">
         | 
| 136 | 
            +
                      <name>First movie</name>
         | 
| 137 | 
            +
                      <locators><path>/does/not/exist.mov</path></locators>
         | 
| 138 | 
            +
                      <notes>Media notes that come first in the file</notes>
         | 
| 139 | 
            +
                    </media>
         | 
| 140 | 
            +
                    <notes>session notes</notes>
         | 
| 141 | 
            +
                  </session>
         | 
| 142 | 
            +
                XML
         | 
| 143 | 
            +
                s = CineSync::Session.load(xml_str)
         | 
| 144 | 
            +
                s.notes.should == "session notes"
         | 
| 145 | 
            +
                s.media[0].current_frame.should == 1
         | 
| 146 | 
            +
                s.media[0].user_data.should == "media data"
         | 
| 147 | 
            +
                s.media[0].notes.should == "Media notes that come first in the file"
         | 
| 148 | 
            +
              end
         | 
| 149 | 
            +
             | 
| 150 | 
            +
              it "should preserve drawing objects" do
         | 
| 151 | 
            +
                path = File.join("spec", "v3 files", "v3-groups.csc")
         | 
| 152 | 
            +
                s = File.open(path) {|f| CineSync::Session.load(f) }
         | 
| 153 | 
            +
                s.file_version.should == 3
         | 
| 154 | 
            +
                s.notes.should == ""
         | 
| 155 | 
            +
                s.should.be.valid?
         | 
| 156 | 
            +
             | 
| 157 | 
            +
                mf = s.media[0]
         | 
| 158 | 
            +
                mf.annotations.length.should == 13
         | 
| 159 | 
            +
                mf.annotations[1].drawing_objects[0].name.should.satisfy do |tag|
         | 
| 160 | 
            +
                  CineSync::FrameAnnotation::DrawingObjectElements.include? tag
         | 
| 161 | 
            +
                end
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                doc = REXML::Document.new(s.to_xml)
         | 
| 164 | 
            +
                doc.root.get_elements("media").length.should == s.media.length
         | 
| 165 | 
            +
                doc.root.get_elements("group").length.should == s.groups.length
         | 
| 166 | 
            +
                doc.root.get_elements("media")[0].get_elements("annotation").length.should == 13
         | 
| 167 | 
            +
              end
         | 
| 168 | 
            +
             | 
| 169 | 
            +
              it "should write basic session" do
         | 
| 170 | 
            +
                s = CineSync::Session.new
         | 
| 171 | 
            +
                path = "/path/to/nonexistent/file.mov"
         | 
| 172 | 
            +
                s.media << CineSync::MediaFile.new(path)
         | 
| 173 | 
            +
                xml = s.to_xml
         | 
| 174 | 
            +
                xml.should.not.be.nil?
         | 
| 175 | 
            +
                xml.should.not.be.empty?
         | 
| 176 | 
            +
             | 
| 177 | 
            +
                doc = REXML::Document.new(xml)
         | 
| 178 | 
            +
                doc.root.name.should == "session"
         | 
| 179 | 
            +
                doc.root.attributes["sessionFeatures"].should == s.session_features.to_s
         | 
| 180 | 
            +
                doc.root.get_elements("media").length.should == 1
         | 
| 181 | 
            +
                media_elem = doc.root.get_elements("media")[0]
         | 
| 182 | 
            +
                media_elem.get_elements("groups").length.should == 0
         | 
| 183 | 
            +
                media_elem.elements[".//locators/path"].text.should == path
         | 
| 184 | 
            +
              end
         | 
| 185 | 
            +
             | 
| 186 | 
            +
              it "should write short hash locators" do
         | 
| 187 | 
            +
                s = CineSync::Session.new
         | 
| 188 | 
            +
                path = "/Volumes/Oyama/Streams/cineSync Test Files/movies/nasa_shuttle_m420p.mov"
         | 
| 189 | 
            +
                mf = CineSync::MediaFile.new(path)
         | 
| 190 | 
            +
                s.media << mf
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                doc = REXML::Document.new(s.to_xml)
         | 
| 193 | 
            +
                media_elem = doc.root.get_elements("media")[0]
         | 
| 194 | 
            +
                loc_elem = media_elem.get_elements("locators")[0]
         | 
| 195 | 
            +
                loc_elem.elements["path"].text.should == mf.locator.path
         | 
| 196 | 
            +
                loc_elem.elements["shortHash"].text.should == mf.locator.short_hash
         | 
| 197 | 
            +
                loc_elem.elements["url"].should.be.nil?
         | 
| 198 | 
            +
              end
         | 
| 199 | 
            +
             | 
| 200 | 
            +
              it "should write url locators" do
         | 
| 201 | 
            +
                s = CineSync::Session.new
         | 
| 202 | 
            +
                url = "http://example.com/random_file.mov"
         | 
| 203 | 
            +
                mf = CineSync::MediaFile.new(url)
         | 
| 204 | 
            +
                s.media << mf
         | 
| 205 | 
            +
             | 
| 206 | 
            +
                doc = REXML::Document.new(s.to_xml)
         | 
| 207 | 
            +
                media_elem = doc.root.get_elements("media")[0]
         | 
| 208 | 
            +
                loc_elem = media_elem.get_elements("locators")[0]
         | 
| 209 | 
            +
                loc_elem.elements["path"].should.be.nil?
         | 
| 210 | 
            +
                loc_elem.elements["shortHash"].should.be.nil?
         | 
| 211 | 
            +
                loc_elem.elements["url"].text.should == url
         | 
| 212 | 
            +
                loc_elem.elements["url"].text.should == String(mf.locator.url)
         | 
| 213 | 
            +
              end
         | 
| 214 | 
            +
             | 
| 215 | 
            +
              it "should write groups" do
         | 
| 216 | 
            +
                s = CineSync::Session.new
         | 
| 217 | 
            +
                s.groups = %w(Draft Final)
         | 
| 218 | 
            +
                url = "http://example.com/random_file.mov"
         | 
| 219 | 
            +
                mf = CineSync::MediaFile.new(url)
         | 
| 220 | 
            +
                mf.groups << "Final"
         | 
| 221 | 
            +
                s.media << mf
         | 
| 222 | 
            +
                s.media << CineSync::MediaFile.new("http://example.com/random_file_2.mov")
         | 
| 223 | 
            +
             | 
| 224 | 
            +
                doc = REXML::Document.new(s.to_xml)
         | 
| 225 | 
            +
                top_groups = doc.root.get_elements("group")
         | 
| 226 | 
            +
                top_groups.length.should == 2
         | 
| 227 | 
            +
                top_groups.any? {|g| g.text == "Draft" }.should.be.true?
         | 
| 228 | 
            +
                top_groups.any? {|g| g.text == "Final" }.should.be.true?
         | 
| 229 | 
            +
             | 
| 230 | 
            +
                media_elems = doc.root.get_elements("media")
         | 
| 231 | 
            +
                media_elems[0].get_elements("group").length.should == 1
         | 
| 232 | 
            +
                media_elems[0].get_elements("group")[0].text.should == mf.groups[0]
         | 
| 233 | 
            +
             | 
| 234 | 
            +
                media_elems[1].get_elements("group").should.be.empty?
         | 
| 235 | 
            +
              end
         | 
| 236 | 
            +
             | 
| 237 | 
            +
              it "should write notes" do
         | 
| 238 | 
            +
                s = CineSync::Session.new
         | 
| 239 | 
            +
                s.notes = "asdf"
         | 
| 240 | 
            +
                mf = CineSync::MediaFile.new("http://example.com/random_file.mov")
         | 
| 241 | 
            +
                mf.notes = "fancy media notes!"
         | 
| 242 | 
            +
                s.media << mf
         | 
| 243 | 
            +
             | 
| 244 | 
            +
                doc = REXML::Document.new(s.to_xml)
         | 
| 245 | 
            +
                doc.root.get_elements("notes")[0].text.should == s.notes
         | 
| 246 | 
            +
                doc.root.elements["media/notes"].text.should == mf.notes
         | 
| 247 | 
            +
              end
         | 
| 248 | 
            +
             | 
| 249 | 
            +
              it "should write user data" do
         | 
| 250 | 
            +
                s = CineSync::Session.new
         | 
| 251 | 
            +
                s.user_data = "asdf"
         | 
| 252 | 
            +
                mf = CineSync::MediaFile.new("http://example.com/random_file.mov")
         | 
| 253 | 
            +
                mf.user_data = '{"id":"1234QWERTY"}'
         | 
| 254 | 
            +
                s.media << mf
         | 
| 255 | 
            +
             | 
| 256 | 
            +
                doc = REXML::Document.new(s.to_xml)
         | 
| 257 | 
            +
                doc.root.attributes["userData"].should == s.user_data
         | 
| 258 | 
            +
                doc.root.get_elements("media")[0].attributes["userData"].should == mf.user_data
         | 
| 259 | 
            +
              end
         | 
| 260 | 
            +
             | 
| 261 | 
            +
              it "should write frame notes" do
         | 
| 262 | 
            +
                s = CineSync::Session.new
         | 
| 263 | 
            +
                mf = CineSync::MediaFile.new("http://example.com/random_file.mov")
         | 
| 264 | 
            +
                mf.annotations[33].notes = "A note on frame 33"
         | 
| 265 | 
            +
                s.media << mf
         | 
| 266 | 
            +
             | 
| 267 | 
            +
                doc = REXML::Document.new(s.to_xml)
         | 
| 268 | 
            +
                ann_elem = doc.elements["session/media/annotation"]
         | 
| 269 | 
            +
                ann_elem.attributes["frame"].should == "33"
         | 
| 270 | 
            +
                ann_elem.elements["notes"].text.should == "A note on frame 33"
         | 
| 271 | 
            +
              end
         | 
| 272 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -3,10 +3,10 @@ name: cinesync | |
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 4 | 
             
              prerelease: false
         | 
| 5 5 | 
             
              segments: 
         | 
| 6 | 
            +
              - 1
         | 
| 6 7 | 
             
              - 0
         | 
| 7 | 
            -
              -  | 
| 8 | 
            -
               | 
| 9 | 
            -
              version: 0.9.6
         | 
| 8 | 
            +
              - 1
         | 
| 9 | 
            +
              version: 1.0.1
         | 
| 10 10 | 
             
            platform: ruby
         | 
| 11 11 | 
             
            authors: 
         | 
| 12 12 | 
             
            - Jonathon Mah
         | 
| @@ -15,7 +15,7 @@ autorequire: | |
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 17 |  | 
| 18 | 
            -
            date: 2010-05- | 
| 18 | 
            +
            date: 2010-05-28 00:00:00 +09:30
         | 
| 19 19 | 
             
            default_executable: 
         | 
| 20 20 | 
             
            dependencies: 
         | 
| 21 21 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -46,17 +46,17 @@ dependencies: | |
| 46 46 | 
             
              type: :runtime
         | 
| 47 47 | 
             
              version_requirements: *id002
         | 
| 48 48 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 49 | 
            -
              name:  | 
| 49 | 
            +
              name: bacon
         | 
| 50 50 | 
             
              prerelease: false
         | 
| 51 51 | 
             
              requirement: &id003 !ruby/object:Gem::Requirement 
         | 
| 52 52 | 
             
                requirements: 
         | 
| 53 53 | 
             
                - - ">="
         | 
| 54 54 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 55 55 | 
             
                    segments: 
         | 
| 56 | 
            -
                    - 2
         | 
| 57 56 | 
             
                    - 1
         | 
| 58 | 
            -
                     | 
| 59 | 
            -
             | 
| 57 | 
            +
                    - 0
         | 
| 58 | 
            +
                    version: "1.0"
         | 
| 59 | 
            +
              type: :development
         | 
| 60 60 | 
             
              version_requirements: *id003
         | 
| 61 61 | 
             
            description: "      This gem provides a Ruby interface to the cineSync session file format,\n      which is used by cineSync's scripting system. Use it to integrate\n      cineSync into your workflow.\n"
         | 
| 62 62 | 
             
            email: 
         | 
| @@ -75,12 +75,14 @@ files: | |
| 75 75 | 
             
            - LICENSE
         | 
| 76 76 | 
             
            - README.markdown
         | 
| 77 77 | 
             
            - Rakefile
         | 
| 78 | 
            -
            - Samples/Export Notes to CSV.rb
         | 
| 79 78 | 
             
            - VERSION
         | 
| 80 79 | 
             
            - cineSync Session v3 Schema.rnc
         | 
| 81 80 | 
             
            - cinesync.gemspec
         | 
| 81 | 
            +
            - examples/Export Notes to CSV.rb
         | 
| 82 | 
            +
            - examples/Start Session.rb
         | 
| 82 83 | 
             
            - lib/cinesync.rb
         | 
| 83 84 | 
             
            - lib/cinesync/color_grading.rb
         | 
| 85 | 
            +
            - lib/cinesync/commands.rb
         | 
| 84 86 | 
             
            - lib/cinesync/event_handler.rb
         | 
| 85 87 | 
             
            - lib/cinesync/frame_annotation.rb
         | 
| 86 88 | 
             
            - lib/cinesync/mask.rb
         | 
| @@ -93,7 +95,31 @@ files: | |
| 93 95 | 
             
            - lib/cinesync/ui/win32_save_file_dialog.rb
         | 
| 94 96 | 
             
            - lib/cinesync/xml.rb
         | 
| 95 97 | 
             
            - lib/cinesync/zoom_state.rb
         | 
| 96 | 
            -
            -  | 
| 98 | 
            +
            - spec/.bacon
         | 
| 99 | 
            +
            - spec/cinesync_spec.rb
         | 
| 100 | 
            +
            - spec/event_handler_spec.rb
         | 
| 101 | 
            +
            - spec/frame_annotation_spec.rb
         | 
| 102 | 
            +
            - spec/media_file_spec.rb
         | 
| 103 | 
            +
            - spec/media_locator_spec.rb
         | 
| 104 | 
            +
            - spec/session_spec.rb
         | 
| 105 | 
            +
            - spec/small.txt
         | 
| 106 | 
            +
            - spec/spec_helper.rb
         | 
| 107 | 
            +
            - spec/v3 files/corrupt.csc
         | 
| 108 | 
            +
            - spec/v3 files/v3-Newer v4.csc
         | 
| 109 | 
            +
            - spec/v3 files/v3-Unsupported.csc
         | 
| 110 | 
            +
            - spec/v3 files/v3-active first.csc
         | 
| 111 | 
            +
            - spec/v3 files/v3-active second.csc
         | 
| 112 | 
            +
            - spec/v3 files/v3-active single.csc
         | 
| 113 | 
            +
            - spec/v3 files/v3-basic.csc
         | 
| 114 | 
            +
            - spec/v3 files/v3-groups.csc
         | 
| 115 | 
            +
            - spec/v3 files/v3-pro.csc
         | 
| 116 | 
            +
            - spec/v3 files/v3-refmovie.csc
         | 
| 117 | 
            +
            - spec/v3 files/v3-stereo-anaglyph-off.csc
         | 
| 118 | 
            +
            - spec/v3 files/v3-stereo-anaglyph.csc
         | 
| 119 | 
            +
            - spec/v3 files/v3-stereo-interlaced-off.csc
         | 
| 120 | 
            +
            - spec/v3 files/v3-stereo.csc
         | 
| 121 | 
            +
            - spec/v3 files/v3-url.csc
         | 
| 122 | 
            +
            - spec/xml_spec.rb
         | 
| 97 123 | 
             
            has_rdoc: true
         | 
| 98 124 | 
             
            homepage: http://github.com/jmah/cinesync
         | 
| 99 125 | 
             
            licenses: []
         | 
| @@ -125,4 +151,13 @@ signing_key: | |
| 125 151 | 
             
            specification_version: 3
         | 
| 126 152 | 
             
            summary: Library for scripting the cineSync collaborative video review tool
         | 
| 127 153 | 
             
            test_files: 
         | 
| 128 | 
            -
            -  | 
| 154 | 
            +
            - spec/cinesync_spec.rb
         | 
| 155 | 
            +
            - spec/event_handler_spec.rb
         | 
| 156 | 
            +
            - spec/frame_annotation_spec.rb
         | 
| 157 | 
            +
            - spec/media_file_spec.rb
         | 
| 158 | 
            +
            - spec/media_locator_spec.rb
         | 
| 159 | 
            +
            - spec/session_spec.rb
         | 
| 160 | 
            +
            - spec/spec_helper.rb
         | 
| 161 | 
            +
            - spec/xml_spec.rb
         | 
| 162 | 
            +
            - examples/Export Notes to CSV.rb
         | 
| 163 | 
            +
            - examples/Start Session.rb
         |