autodesk_backburner_client 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,21 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ lib/bundler/man
11
+ pkg
12
+ rdoc
13
+ spec/reports
14
+ test/tmp
15
+ test/version_tmp
16
+ tmp
17
+ # YARD artifacts
18
+ .yardoc
19
+ _yardoc
20
+ doc/
21
+ .idea/
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.2-p290@backburner --create
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in backburner.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Alexander Panasyuk
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # Autodesk Backburner Client
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'backburner', git: 'git@github.com:panasyuk/autodesk_backburner_client'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ ## Usage
16
+ ```ruby
17
+ require 'backburner'
18
+
19
+ c = Backburner::Client.new '127.0.0.1', 3234
20
+ jobs = c.jobs
21
+ jobs[0].name # => "Test Job"
22
+ ```
23
+
24
+ ## Contributing
25
+
26
+ 1. Fork it
27
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
28
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
29
+ 4. Push to the branch (`git push origin my-new-feature`)
30
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'backburner/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "autodesk_backburner_client"
8
+ gem.version = Backburner::VERSION
9
+ gem.authors = ["Alexander Panasyuk"]
10
+ gem.email = ["panasmeister@gmail.com"]
11
+ gem.description = %q{Autodesk Backburner client}
12
+ gem.summary = %q{Simple Backburner client, that fetches info via telnet}
13
+ gem.homepage = ""
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+ gem.add_dependency 'nori'
20
+ gem.add_dependency 'nokogiri'
21
+ gem.add_dependency 'recursive-open-struct'
22
+ gem.add_dependency 'i18n'
23
+ end
data/lib/backburner.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'active_support/core_ext/hash'
2
+ require "backburner/version"
3
+ require "backburner/connection"
4
+ require "backburner/job"
5
+ require "backburner/server"
6
+ require "backburner/client"
7
+ require "backburner/string/string_operations"
8
+ require "backburner/data_object"
9
+ require "backburner/backburner_object"
@@ -0,0 +1,23 @@
1
+ module Backburner
2
+
3
+ class BackburnerObject
4
+
5
+ attr_reader :data, :client, :handler
6
+
7
+ def method_missing name, *args
8
+ @data.search name
9
+ end
10
+
11
+ def initialize handler, client
12
+ @handler = handler
13
+ @client = client
14
+ reload
15
+ end
16
+
17
+ def reload
18
+ @data = reloader
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,80 @@
1
+ module Backburner
2
+
3
+ class Client
4
+
5
+ def initialize host, port=3234
6
+ @host = host
7
+ @port = port
8
+ @connection = Connection.new @host, @port
9
+ self
10
+ end
11
+
12
+ def connect
13
+ @connection = Connection.new @host, @port
14
+ end
15
+
16
+ def disconnect
17
+ @connection.close
18
+ end
19
+
20
+ def jobs
21
+ job_handlers = @connection.get_jobhlist.jobh_list.job
22
+ job_handlers = [job_handlers] unless job_handlers.kind_of?(Array)
23
+ job_handlers.map do |job_data|
24
+ Job.new job_data.handle, self
25
+ end
26
+ end
27
+
28
+ def job handler
29
+ job_data = job! handler
30
+ Job.new job_data, self
31
+ end
32
+
33
+ def job! handler
34
+ @connection.get_job handler
35
+ end
36
+
37
+ def servers
38
+ server_handlers = @connection.get_srvlist.server_list.server
39
+ server_handlers = [server_handlers] unless server_handlers.kind_of?(Array)
40
+ server_handlers.map do |server_data|
41
+ Server.new server_data.handle, self
42
+ end
43
+ end
44
+
45
+ def server handler
46
+ server_data = server! handler
47
+ Server.new server_data, self
48
+ end
49
+
50
+ def server! handler
51
+ @connection.get_server handler
52
+ end
53
+
54
+ private
55
+
56
+ def send_client_info
57
+ # <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
58
+ # <ClientInfo>
59
+ # <Version>300</Version>
60
+ # <UdpPort>0</UdpPort>
61
+ # <Controler>0</Controler>
62
+ # <SystemInfo>
63
+ # <TotalMemory>4294967295</TotalMemory>
64
+ # <TotalMemoryF>34313162752.000000</TotalMemoryF>
65
+ # <NumCpus>8</NumCpus>
66
+ # <Platform>Windows XP 6.1 Build 7601 - Service Pack 1</Platform>
67
+ # <User> </User>
68
+ # <ComputerName>rendermama</ComputerName>
69
+ # <Mac>00E052B9A2F20000</Mac>
70
+ # <WorkDiskSPace>0</WorkDiskSPace>
71
+ # <IPAddress>10.128.23.74</IPAddress>
72
+ # </SystemInfo>
73
+ #</ClientInfo>
74
+
75
+ end
76
+
77
+ end
78
+
79
+
80
+ end
@@ -0,0 +1,62 @@
1
+ require 'net/telnet'
2
+
3
+ module Backburner
4
+
5
+ class Connection
6
+
7
+ def initialize host, port=3234
8
+ @session = Net::Telnet.new('Host' => host, 'Port' => port, 'Prompt' => /backburner>/i)
9
+ @session.waitfor 'Match' => /backburner>/i
10
+ end
11
+
12
+ def method_missing name, *args
13
+ if name =~ /^get_/
14
+ object = name.to_s.gsub /^get_/, ''
15
+ return get(object, args)
16
+ end
17
+ super
18
+ end
19
+
20
+ def get object, *params
21
+ exec 'String' => "get #{object} #{params.join ' ' if params.kind_of?(Array)}"
22
+
23
+ end
24
+
25
+ def close
26
+ @session.close
27
+ end
28
+
29
+ def disable_prompt
30
+ response = exec 'String' => 'set prompt off'
31
+ return response if @last_status==201
32
+ raise
33
+ end
34
+
35
+ private
36
+
37
+ def exec arg_hash
38
+ xml_string = ""
39
+ first = true
40
+ @session.cmd arg_hash do |response|
41
+ if first
42
+ response =~ /(\d+) (\d*)(.*)/
43
+ @last_status = $1.to_i
44
+ @last_size = $2.to_i
45
+ @last_message = $3
46
+ first = false
47
+ next
48
+ end
49
+ xml_string += response
50
+ end
51
+
52
+ xml_string = xml_string.sub(/backburner>$/, '')
53
+ DataObject.new xml_string
54
+ end
55
+
56
+ def send hash
57
+
58
+ end
59
+
60
+ end
61
+
62
+ end
@@ -0,0 +1,81 @@
1
+ require 'nori'
2
+ require 'recursive_open_struct'
3
+ require 'builder'
4
+
5
+ module Backburner
6
+
7
+ class DataObject < RecursiveOpenStruct
8
+
9
+ def initialize xml=''
10
+ if xml
11
+ parser = Nori.new :convert_tags_to => lambda { |tag| tag.snakecase.to_sym }
12
+ super parser.parse(xml), recurse_over_arrays: true
13
+ else
14
+ super
15
+ end
16
+ end
17
+
18
+ def search name
19
+ result = dig @table, name
20
+ begin
21
+ case result
22
+ when /^\d+$/ then result.to_i
23
+ when /^\d+\.\d+$/ then result.to_f
24
+ when /^\d{4}\/\d{2}\/\d{2}-\d{2}:\d{2}:\d{2}:\d{4}-\d{2}$/ then Time.parse(result)
25
+ when /^Yes$/i then true
26
+ when /^No$/i then false
27
+ else result
28
+ end
29
+ rescue
30
+ result
31
+ end
32
+ end
33
+
34
+ def to_xml
35
+ builder = Nokogiri::XML::Builder.new do |xml|
36
+ xml.send @table.keys.first.to_s.camelize
37
+ end
38
+ document = builder.doc
39
+ root_element = document.children[0]
40
+ xml = xml_dig root_element, @table.values.first, document
41
+ document.to_xml
42
+ end
43
+
44
+ private
45
+
46
+ def dig hash, name
47
+ hash.each do |key, value|
48
+ return value if name.to_s == key.to_s
49
+ if value.kind_of?(Hash)
50
+ result = dig value, name
51
+ return result if result
52
+ end
53
+ end
54
+ nil
55
+ end
56
+
57
+ def xml_dig element, data, document
58
+ children = []
59
+ if data.kind_of?(Hash)
60
+ data.each do |key, value|
61
+ if key.to_s =~ /^@(.+)/
62
+ element[$1]=value
63
+ else
64
+ child= Nokogiri::XML::Element.new(key.to_s.camelize, document)
65
+ xml_dig(child, value, document)
66
+ children << child
67
+ end
68
+ end
69
+ elsif data.kind_of?(String)
70
+ children << data
71
+ end
72
+
73
+ children.each do |child|
74
+ element.add_child child
75
+ end
76
+ element
77
+ end
78
+
79
+ end
80
+
81
+ end
@@ -0,0 +1,170 @@
1
+ require 'backburner/backburner_object'
2
+
3
+ module Backburner
4
+
5
+ class Job < BackburnerObject
6
+
7
+ def reloader
8
+ @client.job!(@handler)
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+
15
+ #<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
16
+ # <Job>
17
+ #<!--backburner Job Description File-->
18
+ # <JobInfo>
19
+ # <Version>300</Version>
20
+ # <JobHandle>4294967295</JobHandle>
21
+ #<Name>8saasdfsddf18</Name>
22
+ # <Description>*</Description>
23
+ #<JobPriority>50</JobPriority>
24
+ # <User>igorello</User>
25
+ #<Computer>MARINA-PK</Computer>
26
+ # <LastUpdated>2013/09/06-13:10:07:0778-05</LastUpdated>
27
+ # <Submitted>2013/09/06-13:10:07:0778-05</Submitted>
28
+ # <Started>0000/00/00-00:00:00:0000-00</Started>
29
+ # <Ended>0000/00/00-00:00:00:0000-00</Ended>
30
+ # <NumberTasks>1</NumberTasks>
31
+ #<TasksCompleted>0</TasksCompleted>
32
+ # <Encoding>utf-8</Encoding>
33
+ #<!--Version 2013 Data-->
34
+ #<SrvLimitCount>0</SrvLimitCount>
35
+ # <ArchiveAfterDays>No</ArchiveAfterDays>
36
+ #<DeleteAfterDays>No</DeleteAfterDays>
37
+ # <DeleteDays>0</DeleteDays>
38
+ #<ArchiveDays>0</ArchiveDays>
39
+ # <AssignedSrvGrp></AssignedSrvGrp>
40
+ #</JobInfo>
41
+ # <JobFlags>
42
+ # <Active>Yes</Active>
43
+ #<Complete>No</Complete>
44
+ # <NonConcurrent>No</NonConcurrent>
45
+ #<NonStoppable>No</NonStoppable>
46
+ # <IgnoreJobShare>Yes</IgnoreJobShare>
47
+ #<JobHasDependencies>No</JobHasDependencies>
48
+ # <ZipArchive>Yes</ZipArchive>
49
+ #<LeaveInQueue>No</LeaveInQueue>
50
+ # <ArchiveWhenDone>No</ArchiveWhenDone>
51
+ #<DeleteWhenDone>No</DeleteWhenDone>
52
+ # <OverrideBlockingTasks>No</OverrideBlockingTasks>
53
+ #<EnableBlockingTasks>No</EnableBlockingTasks>
54
+ # </JobFlags>
55
+ #<Archive>
56
+ #<ArchiveSize>223773</ArchiveSize>
57
+ # <ExtractedSize>614376</ExtractedSize>
58
+ #</Archive>
59
+ # <Plugin>
60
+ # <PlugName>Autodesk 3ds Max 2013 (64-bit)</PlugName>
61
+ #<PlugVersion>300</PlugVersion>
62
+ # </Plugin>
63
+ #<Alerts>
64
+ #<Enabled>0</Enabled>
65
+ # <Failure>No</Failure>
66
+ #<Progress>No</Progress>
67
+ # <Completion>No</Completion>
68
+ #<NthTask>0</NthTask>
69
+ # <SendEmail>No</SendEmail>
70
+ #<IncludeSummary>No</IncludeSummary>
71
+ # <EmailFrom></EmailFrom>
72
+ #<EmailTo></EmailTo>
73
+ # <EmailServer></EmailServer>
74
+ #</Alerts>
75
+ # <Servers All="Yes" />
76
+ #<DependsOn />
77
+ # <!--Task Specific Data-->
78
+ # <JobDetails>
79
+ # <D3dsMaxData>
80
+ # <MaxJob displayable="1" editable="0" displayname="Autodesk 3ds Max 2013 General" indent="0">
81
+ # <Sequence displayable="0" editable="0">No</Sequence>
82
+ #<JobName displayable="0" editable="0">8saasdfsddf18</JobName>
83
+ # <MaxVersion displayable="0" editable="0">2013</MaxVersion>
84
+ #<FirstFrame displayable="1" editable="0" displayname="First Frame" type="1" indent="1">0</FirstFrame>
85
+ # <LastFrame displayable="1" editable="0" displayname="Last Frame" type="1" indent="1">0</LastFrame>
86
+ #<Step displayable="1" editable="0" displayname="Every Nth" type="1" indent="1">1</Step>
87
+ # <Width displayable="1" editable="0" displayname="Output Width" type="1" indent="1">1800</Width>
88
+ #<Height displayable="1" editable="0" displayname="Output Height" type="1" indent="1">1350</Height>
89
+ # <GammaCorrection displayable="1" editable="0" displayname="Gamma Correction" type="2" indent="1" yesstring="Enabled" nostring="Disabled">Yes</GammaCorrection>
90
+ #<InputGamma displayable="1" editable="0" displayname="Input Gamma" type="0" indent="1">1.000000</InputGamma>
91
+ # <OutputGamma displayable="1" editable="0" displayname="Output Gamma" type="0" indent="1">1.000000</OutputGamma>
92
+ #<PixelAspect displayable="1" editable="0" displayname="Pixel Aspect Ratio" type="0" indent="1">1.000000</PixelAspect>
93
+ # <OutputCamera displayable="1" editable="0" displayname="Camera" type="0" indent="1" length="40">Current view</OutputCamera>
94
+ #<REEnabled displayable="0" editable="0">Yes</REEnabled>
95
+ # <ServerPID displayable="0" editable="0">0</ServerPID>
96
+ #<RenderPreset displayable="0" editable="0"></RenderPreset>
97
+ # <Script displayable="1" editable="0" displayname="Pre-render Script" type="0" indent="1" displayvalue="Unknown" length="40"></Script>
98
+ #<PostRendScript displayable="1" editable="0" displayname="Post-render Script" type="0" indent="1" displayvalue="Unknown" length="40"></PostRendScript>
99
+ # <MaxLoad displayable="0" editable="0">20</MaxLoad>
100
+ #<MaxUnload displayable="0" editable="0">10</MaxUnload>
101
+ # <MaxRender displayable="0" editable="0">600</MaxRender>
102
+ #<RendererName displayable="1" editable="0" displayname="Renderer" type="0" indent="1" length="40">V-Ray Adv 2.30.01</RendererName>
103
+ # <RendererClassHi displayable="0" editable="0">1941615238</RendererClassHi>
104
+ #<RendererClassLo displayable="0" editable="0">2012806412</RendererClassLo>
105
+ # <VideoPostJob displayable="0" editable="0">No</VideoPostJob>
106
+ #<MapsIncluded displayable="0" editable="0">No</MapsIncluded>
107
+ # <SkipExisting displayable="0" editable="0">No</SkipExisting>
108
+ #<SkipOutputTest displayable="0" editable="0">No</SkipOutputTest>
109
+ # <DisplayVFB displayable="0" editable="0">Yes</DisplayVFB>
110
+ #<RegionRender displayable="0" editable="0">No</RegionRender>
111
+ # <StripRender displayable="1" editable="0" displayname="Strip Render" type="2" indent="0" yesstring="Enabled" nostring="Disabled">No</StripRender>
112
+ #<StitchRender displayable="1" editable="0" displayname="Stitch Phase" type="2" indent="0" yesstring="Yes" nostring="No">No</StitchRender>
113
+ # <StripCount displayable="1" editable="0" displayname="Strip Count" type="1" indent="1">0</StripCount>
114
+ #<StripHeight displayable="1" editable="0" displayname="Strip Height" type="1" indent="1">1350</StripHeight>
115
+ # <StripOverlap displayable="1" editable="0" displayname="Strip Overlap" type="1" indent="1">0</StripOverlap>
116
+ #<DeleteTempStrip displayable="0" editable="0">No</DeleteTempStrip>
117
+ # <RenderAllBatches displayable="0" editable="0">No</RenderAllBatches>
118
+ #<RenderToTexture displayable="0" editable="0">No</RenderToTexture>
119
+ # <IsStillFrame displayable="0" editable="0">No</IsStillFrame>
120
+ #<ContinueOnError displayable="0" editable="0">No</ContinueOnError>
121
+ # </MaxJob>
122
+ #<Scene displayable="1" editable="0" displayname="Scene Info" indent="0">
123
+ #<NumObjects displayable="1" editable="0" displayname="Objects" type="1" indent="1">0</NumObjects>
124
+ # <NumFaces displayable="1" editable="0" displayname="Faces" type="1" indent="1">0</NumFaces>
125
+ #<NumLights displayable="1" editable="0" displayname="Lights" type="1" indent="1">0</NumLights>
126
+ # <SceneStart displayable="1" editable="0" displayname="Scene Start" type="1" indent="1">0</SceneStart>
127
+ #<SceneEnd displayable="1" editable="0" displayname="Scene End" type="1" indent="1">0</SceneEnd>
128
+ # <VideoColorCheck displayable="1" editable="0" displayname="Video Color Check" type="2" indent="1" yesstring="On" nostring="Off">No</VideoColorCheck>
129
+ #<TwoSided displayable="1" editable="0" displayname="Two Sided" type="2" indent="1" yesstring="On" nostring="Off">No</TwoSided>
130
+ # <RenderHidden displayable="1" editable="0" displayname="Render Hidden" type="2" indent="1" yesstring="On" nostring="Off">No</RenderHidden>
131
+ #<RenderAtmosphere displayable="1" editable="0" displayname="Render Atmosphere" type="2" indent="1" yesstring="On" nostring="Off">Yes</RenderAtmosphere>
132
+ # <SuperBlack displayable="1" editable="0" displayname="Super Black" type="2" indent="1" yesstring="On" nostring="Off">No</SuperBlack>
133
+ #<SerialNumbering displayable="1" editable="0" displayname="Serial Numbering" type="2" indent="1" yesstring="On" nostring="Off">No</SerialNumbering>
134
+ # <Dither256 displayable="1" editable="0" displayname="Dither 256" type="2" indent="1" yesstring="On" nostring="Off">Yes</Dither256>
135
+ #<DitherTrueColor displayable="1" editable="0" displayname="Dither True Color" type="2" indent="1" yesstring="On" nostring="Off">Yes</DitherTrueColor>
136
+ # <RenderFields displayable="1" editable="0" displayname="Render Fields" type="2" indent="1" yesstring="On" nostring="Off">No</RenderFields>
137
+ #<FieldOrder displayable="1" editable="0" displayname="Field Order" type="2" indent="1" yesstring="Odd First" nostring="Even First">Yes</FieldOrder>
138
+ # <Multithread displayable="1" editable="0" displayname="Multithread" type="2" indent="1" yesstring="On" nostring="Off">Yes</Multithread>
139
+ #<RenderDisplacements displayable="1" editable="0" displayname="Displacements" type="2" indent="1" yesstring="On" nostring="Off">Yes</RenderDisplacements>
140
+ # <RenderEffects displayable="1" editable="0" displayname="Scene Effects" type="2" indent="1" yesstring="On" nostring="Off">Yes</RenderEffects>
141
+ #<UseAreaLights displayable="1" editable="0" displayname="Use Area Lights" type="2" indent="1" yesstring="On" nostring="Off">Yes</UseAreaLights>
142
+ # <UseAdvLight displayable="1" editable="0" displayname="Use Advanced Lighting" type="2" indent="1" yesstring="On" nostring="Off">Yes</UseAdvLight>
143
+ #<CalcAdvLight displayable="1" editable="0" displayname="Compute Advanced Lighting" type="2" indent="1" yesstring="On" nostring="Off">No</CalcAdvLight>
144
+ # </Scene>
145
+ #<Outputs displayable="1" editable="0" displayname="Outputs" indent="0">
146
+ #<Output>
147
+ #<Name displayable="1" editable="0" displayname="Output 0" type="3" indent="1" length="40">\\\rstor1\\NFS\\renderfarm\\users\\2\\jobs\\943\\prcs\\818\\output\\\output.jpg</Name>
148
+ # <OutputGamma displayable="0" editable="0">0.000000</OutputGamma>
149
+ #<IsDevice displayable="0" editable="0">No</IsDevice>
150
+ # </Output>
151
+ #</Outputs>
152
+ # <Cameras>
153
+ # <Camera>
154
+ # <Name displayable="0" editable="0">Camera001</Name>
155
+ #</Camera>
156
+ # </Cameras>
157
+ #<RenderElements displayable="1" editable="0" displayname="Render Elements" indent="0">
158
+ #<NoneDefined displayable="1" editable="0" displayname="None Defined" type="0" indent="1" length="40"></NoneDefined>
159
+ # </RenderElements>
160
+ #<SessionPaths displayable="1" editable="0" displayname="Alternate Paths" indent="0">
161
+ #<Path>
162
+ #<BitmapPath displayable="1" editable="0" displayname="Alternate Bitmap Path" type="3" indent="1" length="40">\\\\rstor1\\NFS\\renderfarm\\users\\2\\jobs\\943\\prcs\\818\\input\\</BitmapPath>
163
+ # </Path>
164
+ #</SessionPaths>
165
+ # <BitmapOptions />
166
+ #<BakeNodes />
167
+ # <SceneStates />
168
+ #</D3dsMaxData>
169
+ # </JobDetails>
170
+ #</Job>
@@ -0,0 +1,7 @@
1
+ class OpenStructData < RecursiveOpenStruct
2
+
3
+ def initialize xml
4
+
5
+ end
6
+
7
+ end
@@ -0,0 +1,9 @@
1
+ require 'backburner/backburner_object'
2
+
3
+ module Backburner
4
+ class Server < BackburnerObject
5
+ def reloader
6
+ @client.server!(@handler)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class String
2
+ def dasherize
3
+ self.gsub(/^([A-Z])/){ "#{$1.downcase}" }.gsub(/([A-Z])/){ "_#{$1.downcase}" }
4
+ end
5
+
6
+ def camelize
7
+ self.gsub(/(^|_)(.)/){ $2.upcase }
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Backburner
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: autodesk_backburner_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Alexander Panasyuk
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-12-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nori
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: nokogiri
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: recursive-open-struct
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: i18n
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: Autodesk Backburner client
79
+ email:
80
+ - panasmeister@gmail.com
81
+ executables: []
82
+ extensions: []
83
+ extra_rdoc_files: []
84
+ files:
85
+ - .gitignore
86
+ - .rvmrc
87
+ - Gemfile
88
+ - LICENSE.txt
89
+ - README.md
90
+ - Rakefile
91
+ - backburner.gemspec
92
+ - lib/backburner.rb
93
+ - lib/backburner/backburner_object.rb
94
+ - lib/backburner/client.rb
95
+ - lib/backburner/connection.rb
96
+ - lib/backburner/data_object.rb
97
+ - lib/backburner/job.rb
98
+ - lib/backburner/open_struct_data.rb
99
+ - lib/backburner/server.rb
100
+ - lib/backburner/string/string_operations.rb
101
+ - lib/backburner/version.rb
102
+ homepage: ''
103
+ licenses: []
104
+ post_install_message:
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 1.8.25
123
+ signing_key:
124
+ specification_version: 3
125
+ summary: Simple Backburner client, that fetches info via telnet
126
+ test_files: []