vj-player-sdk 0.4.5
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/.gitignore +6 -0
- data/README.textile +35 -0
- data/Rakefile +71 -0
- data/VERSION.yml +4 -0
- data/lib/playersdk.rb +60 -0
- data/lib/playersdk/compiler.rb +122 -0
- data/lib/playersdk/compilers/flex.rb +102 -0
- data/lib/playersdk/core_ext/hash.rb +63 -0
- metadata +83 -0
data/.gitignore
ADDED
data/README.textile
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
h1. Videojuicer Player SDK
|
2
|
+
|
3
|
+
h2. Configuration
|
4
|
+
|
5
|
+
You must create a `config.yml` to define the build tasks for the `playersdk` to use, the configuration file uses standard "YAML":http://en.wikipedia.org/wiki/YAML syntaxs.
|
6
|
+
|
7
|
+
---
|
8
|
+
# Flex SDK location
|
9
|
+
flex_sdk: "/Applications/Adobe\ Flex\ Builder\ 3/sdks/3.3.0"
|
10
|
+
|
11
|
+
# Flex framework version, the bundled RSLs are specific
|
12
|
+
flex_framework_version: "framework_3.3.0.4852"
|
13
|
+
|
14
|
+
# List of tasks the SDK will complete
|
15
|
+
tasks:
|
16
|
+
# Copies the Flex framework RSLs into the build folder
|
17
|
+
"framework": {
|
18
|
+
type: framework,
|
19
|
+
framework_rsl: 'framework_3.3.0.4852'
|
20
|
+
}
|
21
|
+
# Compiles an Addon for use with the Videojuicer Player
|
22
|
+
"player-addon": {
|
23
|
+
type: addon,
|
24
|
+
src: vj-player-ui/src, main: DefaultUI.mxml,
|
25
|
+
sdk: true,
|
26
|
+
engine: "builds/vj-player-engine",
|
27
|
+
libs: false,
|
28
|
+
target: player-addon
|
29
|
+
}
|
30
|
+
|
31
|
+
h2. TODO
|
32
|
+
|
33
|
+
# Tests
|
34
|
+
# Expand README
|
35
|
+
License
|
data/Rakefile
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
|
5
|
+
begin
|
6
|
+
gem 'jeweler', '>= 1.0.1'
|
7
|
+
require 'jeweler'
|
8
|
+
Jeweler::Tasks.new do |s|
|
9
|
+
s.name = "vj-player-sdk"
|
10
|
+
s.summary = %Q{Videojuicer Player SDK runtime and compiler to create and build Player Addons.}
|
11
|
+
s.homepage = "http://videojuicer.com/"
|
12
|
+
s.email = "adam@videojuicer.com"
|
13
|
+
s.description = "Videojuicer Player SDK runtime and compiler to create and build Player Addons."
|
14
|
+
s.authors = ["sixones", "danski"]
|
15
|
+
s.files.exclude 'test/dest'
|
16
|
+
s.test_files.exclude 'test/dest'
|
17
|
+
|
18
|
+
# Dependencies
|
19
|
+
s.add_dependency('open4', '>= 0.9.6')
|
20
|
+
s.add_dependency('rubyzip', '>= 0.9.1')
|
21
|
+
end
|
22
|
+
rescue LoadError
|
23
|
+
puts "Jeweler not available. Install it with: sudo gem install jeweler --version '>= 1.0.1'"
|
24
|
+
exit(1)
|
25
|
+
end
|
26
|
+
|
27
|
+
Rake::TestTask.new do |t|
|
28
|
+
t.libs << 'lib'
|
29
|
+
t.pattern = 'test/**/test_*.rb'
|
30
|
+
t.verbose = false
|
31
|
+
end
|
32
|
+
|
33
|
+
Rake::RDocTask.new do |rdoc|
|
34
|
+
rdoc.rdoc_dir = 'rdoc'
|
35
|
+
rdoc.title = 'playersdk'
|
36
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
37
|
+
rdoc.rdoc_files.include('README*')
|
38
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
39
|
+
end
|
40
|
+
|
41
|
+
begin
|
42
|
+
require 'rcov/rcovtask'
|
43
|
+
Rcov::RcovTask.new do |t|
|
44
|
+
t.libs << 'test'
|
45
|
+
t.test_files = FileList['test/**/test_*.rb']
|
46
|
+
t.verbose = true
|
47
|
+
end
|
48
|
+
rescue LoadError
|
49
|
+
end
|
50
|
+
|
51
|
+
task :default => [:test, :features]
|
52
|
+
|
53
|
+
# console
|
54
|
+
|
55
|
+
desc "Open an irb session preloaded with this library"
|
56
|
+
task :console do
|
57
|
+
sh "irb -rubygems -I lib -r player-sdk.rb"
|
58
|
+
end
|
59
|
+
|
60
|
+
begin
|
61
|
+
require 'cucumber/rake/task'
|
62
|
+
|
63
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
64
|
+
t.cucumber_opts = "--format progress"
|
65
|
+
end
|
66
|
+
rescue LoadError
|
67
|
+
desc 'Cucumber rake task not available'
|
68
|
+
task :features do
|
69
|
+
abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
|
70
|
+
end
|
71
|
+
end
|
data/VERSION.yml
ADDED
data/lib/playersdk.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__) # For use/testing when no gem is installed
|
2
|
+
|
3
|
+
# rubygems
|
4
|
+
require 'rubygems'
|
5
|
+
|
6
|
+
# core
|
7
|
+
require 'fileutils'
|
8
|
+
require 'yaml'
|
9
|
+
require 'zip/zip'
|
10
|
+
|
11
|
+
# internal requires
|
12
|
+
require 'playersdk/core_ext/hash.rb'
|
13
|
+
require 'playersdk/compiler.rb'
|
14
|
+
require 'playersdk/compilers/flex.rb'
|
15
|
+
|
16
|
+
module PlayerSDK
|
17
|
+
# Default options. Overriden by values in config.yml or command-line opts.
|
18
|
+
# (Strings rather symbols used for compatability with YAML)
|
19
|
+
DEFAULTS = {
|
20
|
+
'build_dir' => '.',
|
21
|
+
'temp_dir' => 'tmp',
|
22
|
+
'config_path' => './config.yml',
|
23
|
+
'flex_sdk' => '',
|
24
|
+
'flex_framework_swc' => 'frameworks/libs/framework.swc',
|
25
|
+
'flex_framework_version' => '',
|
26
|
+
'tasks' => '',
|
27
|
+
'verbose' => false,
|
28
|
+
'deployment_url' => ''
|
29
|
+
}
|
30
|
+
|
31
|
+
# Generate a Player SDK configuration Hash by merging the default options
|
32
|
+
# with anything in config.yml, and adding the given options on top
|
33
|
+
# +override+ is a Hash of config directives
|
34
|
+
#
|
35
|
+
# Returns Hash
|
36
|
+
def self.configuration(override)
|
37
|
+
# _config.yml may override default source location, but until
|
38
|
+
# then, we need to know where to look for _config.yml
|
39
|
+
config_path = override['config_path'] || PlayerSDK::DEFAULTS['config_path']
|
40
|
+
|
41
|
+
# Get configuration from <source>/config.yml
|
42
|
+
config = {}
|
43
|
+
|
44
|
+
begin
|
45
|
+
config = YAML.load_file(config_path)
|
46
|
+
puts "Configuration from #{config_path}"
|
47
|
+
rescue => err
|
48
|
+
puts "WARNING: Could not read configuration. Using defaults (and options)."
|
49
|
+
puts "\t" + err
|
50
|
+
end
|
51
|
+
|
52
|
+
# Merge DEFAULTS < config.yml < override
|
53
|
+
PlayerSDK::DEFAULTS.deep_merge(config).deep_merge(override)
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.version
|
57
|
+
yml = YAML.load(File.read(File.join(File.dirname(__FILE__), *%w[.. VERSION.yml])))
|
58
|
+
"#{yml[:major]}.#{yml[:minor]}.#{yml[:patch]}"
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
module PlayerSDK
|
2
|
+
class Compiler
|
3
|
+
attr_accessor :config, :compiler, :version
|
4
|
+
|
5
|
+
def initialize(config)
|
6
|
+
self.config = config.clone
|
7
|
+
|
8
|
+
self.compiler = PlayerSDK::Compilers::Flex.new(self.config);
|
9
|
+
end
|
10
|
+
|
11
|
+
def process
|
12
|
+
tasks = self.config['tasks']
|
13
|
+
|
14
|
+
puts "Found #{tasks.length} task(s) to process"
|
15
|
+
|
16
|
+
if tasks.length != 0
|
17
|
+
# find the copy tasks
|
18
|
+
tasks.each do |key,value|
|
19
|
+
if value['type'] == 'copy'
|
20
|
+
self.run_task(key, value)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
find_version
|
25
|
+
|
26
|
+
if self.version != nil
|
27
|
+
self.config['deployment_url'] = self.config['deployment_url'].gsub("%V", self.version)
|
28
|
+
|
29
|
+
puts "Deployment url set to: #{self.config['deployment_url']}"
|
30
|
+
|
31
|
+
tasks.each do |key,value|
|
32
|
+
if value['type'] != 'copy'
|
33
|
+
self.run_task(key, value)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
puts "\n\n"
|
38
|
+
end
|
39
|
+
|
40
|
+
puts "Completed #{tasks.length} tasks(s)"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def find_version
|
45
|
+
if File.exists?("#{self.config['build_dir']}/version.properties")
|
46
|
+
file = File.read("#{self.config['build_dir']}/version.properties")
|
47
|
+
|
48
|
+
if (file == nil)
|
49
|
+
puts "Something went wrong reading the file"
|
50
|
+
return
|
51
|
+
end
|
52
|
+
|
53
|
+
version_s = ""
|
54
|
+
file.scan(/version.([a-z]+) = ('?)([\w]+)('?)/i).each { |key, q1, value, q2|
|
55
|
+
if value != ''
|
56
|
+
if key == 'text'
|
57
|
+
version_s = version_s.slice(0, version_s.length - 1)
|
58
|
+
end
|
59
|
+
|
60
|
+
version_s += "#{value}."
|
61
|
+
end
|
62
|
+
}
|
63
|
+
|
64
|
+
version_s = version_s.slice(0, version_s.length - 1)
|
65
|
+
|
66
|
+
self.version = version_s
|
67
|
+
|
68
|
+
puts "Using version #{self.version}"
|
69
|
+
else
|
70
|
+
puts "No version file found at #{self.config['build_dir']}/version.properties"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def run_task(key, value)
|
75
|
+
if value['src'] != nil && value['src'] != ''
|
76
|
+
puts "\nRunning task #{key} in #{value['src']}"
|
77
|
+
else
|
78
|
+
puts "\nRunning task #{key}"
|
79
|
+
end
|
80
|
+
|
81
|
+
case value['type']
|
82
|
+
when "player"
|
83
|
+
self.compiler.compile_mxmlc(value['src'], value['main'], value['sdk'], value['engine'], value['libs'], value['target'], self.config['build_dir'], self.config['deployment_url'])
|
84
|
+
when "engine"
|
85
|
+
self.compiler.compile_compc(value['src'], value['sdk'], value['engine'], value['libs'], value['target'], self.config['build_dir'], self.config['deployment_url'])
|
86
|
+
|
87
|
+
puts "Optimizing engine swf .."
|
88
|
+
|
89
|
+
optimize_target = value['optimize_target'] != '' ? value['optimize_target'] : value['target']
|
90
|
+
|
91
|
+
self.compiler.optimize_swc(value['target'], optimize_target, self.config['build_dir'])
|
92
|
+
when "addon"
|
93
|
+
self.compiler.compile_mxmlc(value['src'], value['main'], value['sdk'], value['engine'], value['libs'], value['target'], self.config['build_dir'], self.config['deployment_url'])
|
94
|
+
when "framework"
|
95
|
+
if value['target'] == nil || value['target'] == ""
|
96
|
+
value['target'] = 'framework'
|
97
|
+
end
|
98
|
+
|
99
|
+
puts "Moving Flex framework RSLs to #{value['target']}"
|
100
|
+
|
101
|
+
self.compiler.run_command("cp #{config['flex_sdk']}/frameworks/rsls/#{value['framework_rsl']}.swz #{config['build_dir']}/#{value['target']}.swz")
|
102
|
+
self.compiler.run_command("cp #{config['flex_sdk']}/frameworks/rsls/#{value['framework_rsl']}.swf #{config['build_dir']}/#{value['target']}.swf")
|
103
|
+
|
104
|
+
#self.compiler.run_command("chmod 644 #{config['build_dir']}/#{config['target']}.sw*")
|
105
|
+
when "clean"
|
106
|
+
puts "Cleaning directories ..."
|
107
|
+
|
108
|
+
self.compiler.run_command("rm -rf #{config['build_dir']}/* #{config['tmp_dir']}/*")
|
109
|
+
when "copy"
|
110
|
+
puts "Copying over #{value['src']}"
|
111
|
+
|
112
|
+
self.compiler.run_command("cp #{value['src']} #{config['build_dir']}/#{value['target']}")
|
113
|
+
when ""
|
114
|
+
puts "Unknown task type, skipping task ..\n"
|
115
|
+
return
|
116
|
+
end
|
117
|
+
|
118
|
+
puts "\n"
|
119
|
+
puts "Successfully compiled #{key} to target #{value['target']}.\n"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module PlayerSDK
|
2
|
+
module Compilers
|
3
|
+
class Flex
|
4
|
+
attr_accessor :config
|
5
|
+
|
6
|
+
def initialize(config)
|
7
|
+
self.config = config.clone
|
8
|
+
end
|
9
|
+
|
10
|
+
def executable(name)
|
11
|
+
excutable = "#{config['flex_sdk']}/bin/#{name}"
|
12
|
+
|
13
|
+
if false
|
14
|
+
excutable += ".exe"
|
15
|
+
end
|
16
|
+
|
17
|
+
excutable
|
18
|
+
end
|
19
|
+
|
20
|
+
def run_command(command)
|
21
|
+
if config['verbose']
|
22
|
+
system command
|
23
|
+
else
|
24
|
+
`#{command}`
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def compile_mxmlc(source_path, main_file, include_sdk, include_engine, include_libs, output_file, output_dir, deployment_url)
|
29
|
+
command ="#{executable('mxmlc')} -compiler.source-path #{source_path} -file-specs #{source_path}/#{main_file} -static-link-runtime-shared-libraries=false"
|
30
|
+
|
31
|
+
if include_sdk
|
32
|
+
command += " -runtime-shared-library-path=#{config['flex_sdk']}/frameworks/libs/framework.swc,#{deployment_url}/framework.swz,#{config['crossdomain_url']}/crossdomain.xml,#{deployment_url}/framework.swf"
|
33
|
+
end
|
34
|
+
|
35
|
+
if include_engine
|
36
|
+
command += " -runtime-shared-library-path=#{include_engine}.swc,#{deployment_url}/vj-player-engine.swf"
|
37
|
+
end
|
38
|
+
|
39
|
+
if include_libs
|
40
|
+
command += " -compiler.include-libraries #{include_libs}"
|
41
|
+
end
|
42
|
+
|
43
|
+
command += " -use-network -benchmark -compiler.strict --show-actionscript-warnings=true -compiler.optimize -compiler.as3"
|
44
|
+
command += " -output #{output_dir}/#{output_file}"
|
45
|
+
|
46
|
+
run_command(command)
|
47
|
+
end
|
48
|
+
|
49
|
+
def compile_compc(source_path, include_sdk, include_engine, include_libs, output_file, output_dir, deployment_url)
|
50
|
+
command = "#{executable('compc')} -source-path #{source_path} -include-sources #{source_path}"
|
51
|
+
|
52
|
+
if include_sdk
|
53
|
+
command += " -runtime-shared-library-path=#{config['flex_sdk']}/#{config['flex_framework_swc']},#{deployment_url}/framework.swz,#{config['crossdomain_url']}/crossdomain.xml,#{deployment_url}/framework.swf"
|
54
|
+
end
|
55
|
+
|
56
|
+
if include_engine
|
57
|
+
command += " -runtime-shared-library-path=#{include_engine}.swc,#{deployment_url}/vj-player-engine.swf"
|
58
|
+
end
|
59
|
+
|
60
|
+
if include_libs
|
61
|
+
command += " -compiler.include-libraries #{include_libs}"
|
62
|
+
end
|
63
|
+
|
64
|
+
command += " -use-network -benchmark -compiler.strict --show-actionscript-warnings=true -compiler.optimize -compiler.as3"
|
65
|
+
command += " -output #{output_dir}/#{output_file}"
|
66
|
+
|
67
|
+
run_command(command)
|
68
|
+
end
|
69
|
+
|
70
|
+
def optimize_swc(input_swc, output_file, output_dir)
|
71
|
+
# extract
|
72
|
+
self.unzip("#{output_dir}/#{input_swc}", "#{config['temp_dir']}")
|
73
|
+
|
74
|
+
# optimize
|
75
|
+
command = "#{executable('optimizer')} -input #{config['temp_dir']}/library.swf -output #{output_dir}/#{output_file} --keep-as3-metadata='Bindable,Managed,ChangeEvent,NonCommittingChangeEvent,Transient'"
|
76
|
+
|
77
|
+
run_command(command)
|
78
|
+
|
79
|
+
# update digest information
|
80
|
+
command = "#{executable('digest')} --digest.swc-path #{output_dir}/#{input_swc} --digest.rsl-file #{output_dir}/#{output_file}"
|
81
|
+
|
82
|
+
run_command(command)
|
83
|
+
end
|
84
|
+
|
85
|
+
def unzip(file, destination)
|
86
|
+
Zip::ZipFile.open(file) { |zip_file|
|
87
|
+
zip_file.each { |f|
|
88
|
+
f_path = File.join(destination, f.name)
|
89
|
+
|
90
|
+
if File.exist?(f_path) then
|
91
|
+
FileUtils.rm_rf f_path
|
92
|
+
end
|
93
|
+
|
94
|
+
FileUtils.mkdir_p(File.dirname(f_path))
|
95
|
+
|
96
|
+
zip_file.extract(f, f_path) # unless File.exist?(f_path)
|
97
|
+
}
|
98
|
+
}
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
class Hash
|
2
|
+
|
3
|
+
# Returns a new hash just like this one, but with all the string keys expressed as symbols.
|
4
|
+
# Also applies to hashes within self.
|
5
|
+
# Based on an implementation within Rails 2.x, thanks Rails!
|
6
|
+
def deep_symbolize
|
7
|
+
target = dup
|
8
|
+
target.inject({}) do |memo, (key, value)|
|
9
|
+
value = value.deep_symbolize if value.is_a?(Hash)
|
10
|
+
memo[(key.to_sym rescue key) || key] = value
|
11
|
+
memo
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Subtracts one hash from another by removing keys from the actor and recursing on any hash values.
|
16
|
+
# Returns a new Hash without affecting the actors.
|
17
|
+
# Example 1:
|
18
|
+
# {:foo=>"bar"} - {:foo=>"bar"} == {}
|
19
|
+
# Example 2 of deep nesting:
|
20
|
+
# {:foo=>{:bar=>"baz", :car=>"naz"}, :bar=>"baz"} - {:foo=>{:car=>"naz"}} == {:foo=>{:bar=>"baz"}, :bar=>"baz"}
|
21
|
+
def -(arg)
|
22
|
+
target = dup; actor = arg.dup
|
23
|
+
actor.each do |key, value|
|
24
|
+
if value.is_a?(Hash)
|
25
|
+
target[key] = target[key] - value
|
26
|
+
else
|
27
|
+
target.delete(key)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
return target
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns a new hash just like this one, but with all STRING keys and values evaluated
|
34
|
+
# and rendered as liquid templates using the provided payload hash.
|
35
|
+
def deep_liquify(payload={})
|
36
|
+
target = dup
|
37
|
+
target.inject({}) do |memo, (key, value)|
|
38
|
+
value = value.deep_liquify(payload) if value.is_a?(Hash)
|
39
|
+
value = value.liquify(payload) if value.is_a?(String)
|
40
|
+
key = key.liquify(payload) if key.is_a?(String)
|
41
|
+
memo[(key.to_sym rescue key) || key] = value
|
42
|
+
memo
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Merges self with another hash, recursively.
|
47
|
+
#
|
48
|
+
# This code was lovingly stolen from some random gem:
|
49
|
+
# http://gemjack.com/gems/tartan-0.1.1/classes/Hash.html
|
50
|
+
#
|
51
|
+
# Thanks to whoever made it.
|
52
|
+
def deep_merge(hash)
|
53
|
+
target = dup
|
54
|
+
hash.keys.each do |key|
|
55
|
+
if hash[key].is_a? Hash and self[key].is_a? Hash
|
56
|
+
target[key] = target[key].deep_merge(hash[key])
|
57
|
+
next
|
58
|
+
end
|
59
|
+
target[key] = hash[key]
|
60
|
+
end
|
61
|
+
target
|
62
|
+
end
|
63
|
+
end
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vj-player-sdk
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- sixones
|
8
|
+
- danski
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2009-10-30 00:00:00 +00:00
|
14
|
+
default_executable: playersdk
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: open4
|
18
|
+
type: :runtime
|
19
|
+
version_requirement:
|
20
|
+
version_requirements: !ruby/object:Gem::Requirement
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.9.6
|
25
|
+
version:
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: rubyzip
|
28
|
+
type: :runtime
|
29
|
+
version_requirement:
|
30
|
+
version_requirements: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 0.9.1
|
35
|
+
version:
|
36
|
+
description: Videojuicer Player SDK runtime and compiler to create and build Player Addons.
|
37
|
+
email: adam@videojuicer.com
|
38
|
+
executables:
|
39
|
+
- playersdk
|
40
|
+
extensions: []
|
41
|
+
|
42
|
+
extra_rdoc_files:
|
43
|
+
- README.textile
|
44
|
+
files:
|
45
|
+
- .gitignore
|
46
|
+
- README.textile
|
47
|
+
- Rakefile
|
48
|
+
- VERSION.yml
|
49
|
+
- bin/playersdk
|
50
|
+
- lib/playersdk.rb
|
51
|
+
- lib/playersdk/compiler.rb
|
52
|
+
- lib/playersdk/compilers/flex.rb
|
53
|
+
- lib/playersdk/core_ext/hash.rb
|
54
|
+
has_rdoc: true
|
55
|
+
homepage: http://videojuicer.com/
|
56
|
+
licenses: []
|
57
|
+
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options:
|
60
|
+
- --charset=UTF-8
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: "0"
|
74
|
+
version:
|
75
|
+
requirements: []
|
76
|
+
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 1.3.5
|
79
|
+
signing_key:
|
80
|
+
specification_version: 3
|
81
|
+
summary: Videojuicer Player SDK runtime and compiler to create and build Player Addons.
|
82
|
+
test_files: []
|
83
|
+
|