loom 0.0.2 → 0.0.43

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/Gemfile CHANGED
@@ -3,6 +3,9 @@ source "http://rubygems.org"
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
 
6
+ gem "commander"
7
+ gem "rubyzip"
8
+
6
9
  # Add dependencies to develop your gem here.
7
10
  # Include everything needed to run rake, tests, features, etc.
8
11
  group :development do
@@ -11,4 +14,6 @@ group :development do
11
14
  gem "bundler"
12
15
  gem "jeweler"
13
16
  gem "simplecov"
17
+ gem "cucumber"
18
+ gem "aruba"
14
19
  end
data/Gemfile.lock CHANGED
@@ -1,7 +1,27 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ aruba (0.4.11)
5
+ childprocess (>= 0.2.3)
6
+ cucumber (>= 1.1.1)
7
+ ffi (>= 1.0.11)
8
+ rspec (>= 2.7.0)
9
+ builder (3.0.0)
10
+ childprocess (0.3.4)
11
+ ffi (~> 1.0, >= 1.0.6)
12
+ commander (4.1.2)
13
+ highline (~> 1.6.11)
14
+ cucumber (1.2.1)
15
+ builder (>= 2.1.2)
16
+ diff-lcs (>= 1.1.3)
17
+ gherkin (~> 2.11.0)
18
+ json (>= 1.4.6)
19
+ diff-lcs (1.1.3)
20
+ ffi (1.1.3)
21
+ gherkin (2.11.1)
22
+ json (>= 1.4.6)
4
23
  git (1.2.5)
24
+ highline (1.6.13)
5
25
  jeweler (1.8.4)
6
26
  bundler (~> 1.0)
7
27
  git (>= 1.2.5)
@@ -12,6 +32,15 @@ GEM
12
32
  rake (0.9.2.2)
13
33
  rdoc (3.12)
14
34
  json (~> 1.4)
35
+ rspec (2.11.0)
36
+ rspec-core (~> 2.11.0)
37
+ rspec-expectations (~> 2.11.0)
38
+ rspec-mocks (~> 2.11.0)
39
+ rspec-core (2.11.1)
40
+ rspec-expectations (2.11.2)
41
+ diff-lcs (~> 1.1.3)
42
+ rspec-mocks (2.11.1)
43
+ rubyzip (0.9.9)
15
44
  shoulda (3.0.1)
16
45
  shoulda-context (~> 1.0.0)
17
46
  shoulda-matchers (~> 1.0.0)
@@ -26,8 +55,12 @@ PLATFORMS
26
55
  ruby
27
56
 
28
57
  DEPENDENCIES
58
+ aruba
29
59
  bundler
60
+ commander
61
+ cucumber
30
62
  jeweler
31
63
  rdoc
64
+ rubyzip
32
65
  shoulda
33
66
  simplecov
data/README.rdoc CHANGED
@@ -14,6 +14,6 @@ Description goes here.
14
14
 
15
15
  == Copyright
16
16
 
17
- Copyright (c) 2012 Nate Beck. See LICENSE.txt for
17
+ Copyright (c) 2012 The Game Engine Company. See LICENSE.txt for
18
18
  further details.
19
19
 
data/Rakefile CHANGED
@@ -21,6 +21,7 @@ Jeweler::Tasks.new do |gem|
21
21
  gem.description = %Q{Command-line interface for the Loom Game Engine, brought to you by The Engine Co. (http://theengine.co)}
22
22
  gem.email = "support@theengine.co"
23
23
  gem.authors = ["The Engine Co."]
24
+ gem.files.exclude "features/**/*"
24
25
  # dependencies defined in Gemfile
25
26
  end
26
27
  Jeweler::RubygemsDotOrgTasks.new
@@ -43,3 +44,9 @@ Rake::RDocTask.new do |rdoc|
43
44
  rdoc.rdoc_files.include('README*')
44
45
  rdoc.rdoc_files.include('lib/**/*.rb')
45
46
  end
47
+
48
+ require "cucumber"
49
+ require 'cucumber/rake/task'
50
+ Cucumber::Rake::Task.new(:features) do |t|
51
+ t.cucumber_opts = "features"
52
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.43
data/bin/loom CHANGED
@@ -1,5 +1,45 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'loom'
3
+ if(ENV['LIB_DIR'])
4
+ $LOAD_PATH << File.expand_path(ENV['LIB_DIR'])
5
+ else
6
+ $LOAD_PATH << "./lib"
7
+ end
4
8
 
5
- Loom.process
9
+ require 'rubygems'
10
+ require 'commander/import'
11
+ require 'loom/config'
12
+ require 'helper'
13
+
14
+ #commands
15
+ require 'loom/new'
16
+ require 'loom/login'
17
+ require 'loom/logout'
18
+ require 'loom/ping'
19
+ require 'loom/init'
20
+ require 'loom/use'
21
+ require 'loom/run'
22
+ require 'loom/sdk'
23
+
24
+ #create the loom storage directory
25
+ LOOM_DIR = File.expand_path "#{ENV['HOME']}/.loom"
26
+ if !File.directory?(LOOM_DIR)
27
+ FileUtils.mkdir_p LOOM_DIR
28
+ end
29
+
30
+ # Constants
31
+ TEMPLATES_DIR = File.expand_path File.join File.dirname(__FILE__), '..', 'lib', 'templates'
32
+ CONFIG_PATH = ".loomconfig"
33
+ GLOBAL_CONFIG_PATH = "#{LOOM_DIR}/.loomconfig"
34
+ TOKEN_PATH = "#{LOOM_DIR}/token"
35
+ TEMP_PATH = "#{LOOM_DIR}/temp"
36
+ OSX_APP_PATH = "LoomDemo.app"
37
+
38
+ if !File.exists? GLOBAL_CONFIG_PATH
39
+ global_config = Loom::Config.new
40
+ global_config.save! GLOBAL_CONFIG_PATH
41
+ end
42
+
43
+ program :version, File.new(File.join(File.dirname(__FILE__), "..", "VERSION")).read
44
+ program :description, 'Command line tools for working with the loom sdk'
45
+ default_command :help
data/lib/helper.rb ADDED
@@ -0,0 +1,228 @@
1
+ require 'json'
2
+ require 'zip/zip'
3
+ require "net/http"
4
+
5
+ def get_token
6
+
7
+ if File.exists?(TOKEN_PATH)
8
+ return File.read(TOKEN_PATH)
9
+ else
10
+ say_error "Not Authenticated! Login using 'loom login'"
11
+ exit 1
12
+ end
13
+
14
+ end
15
+
16
+ def setup_env(command)
17
+ command.option '--env String', String, 'sets the authentication endpoint to a specific environment (for testing only).'
18
+ end
19
+
20
+ @host = "call setup_host"
21
+ def setup_host(options)
22
+ options.default :env => "prod"
23
+
24
+ if options.env == "prod"
25
+ @host = "theengine.co"
26
+ elsif options.env == "staging"
27
+ @host = "theengineco-staging.herokuapp.com"
28
+ elsif options.env == "local"
29
+ @host = "localhost:3000"
30
+ else
31
+ say "Environment #{options.env} is not supported"
32
+ exit 1
33
+ end
34
+ end
35
+
36
+ # Ensures the directory is configured as a loom project
37
+ def ensure_configured!
38
+ if !File.exists? CONFIG_PATH
39
+ should_configure = choose("This directory has not been configured as a loom project. Configure it now?", :yes, :no)
40
+
41
+ if(should_configure == :yes)
42
+ configure_directory ""
43
+ else
44
+ say_error "Cannot complete action in an unconfigured loom project."
45
+ exit 1
46
+ end
47
+
48
+ end
49
+ end
50
+
51
+ # Ensures the SDK that is specified in the config is imported
52
+ # into the project
53
+ def ensure_sdk_imported!
54
+
55
+ # if the sdk artifacts are already here then we don't need to
56
+ # do anything
57
+ return if(File.exists?("LoomDemo.app") && File.directory?("bin"))
58
+
59
+ say "Pulling in sdk files..."
60
+
61
+ sdk_path = File.join(LOOM_DIR, "sdks", config["sdk_version"])
62
+
63
+ # TODO: Make this windows compatible
64
+ sdk_app_path = File.join sdk_path, "LoomDemo.app"
65
+ sdk_libs_path = File.join sdk_path, "libs"
66
+ sdk_assets_path = File.join sdk_path, "assets"
67
+ project_path = Dir.pwd
68
+
69
+ if !File.directory?("bin")
70
+ FileUtils.mkdir_p "bin"
71
+ end
72
+
73
+ #copy loomgame executable
74
+
75
+ #FileUtils.cp_r(sdk_app_path,"loomgame")
76
+
77
+ # Change permissions in the executable
78
+ bin_file = "#{sdk_app_path}/Contents/MacOS/LoomDemo"
79
+ # TODO Add check for bin_file if it exists
80
+ say_tab 1, "Adding permissions to LoomDemo at #{bin_file}"
81
+ FileUtils.chmod(0755, bin_file)
82
+
83
+ #copy sdk_libs_path
84
+ say_tab 1, "Copying core libraries from #{sdk_libs_path}"
85
+
86
+ FileUtils.mkdir_p "libs"
87
+ Dir.chdir(sdk_libs_path) do
88
+ Dir.glob('**.loom') do |lib|
89
+ say_tab 2, "Copy #{lib}"
90
+ FileUtils.cp(lib, File.join(project_path, "libs"))
91
+ end
92
+ end
93
+
94
+ say_tab 1, "Copying assets to #{project_path}/assets"
95
+ FileUtils.cp_r("#{sdk_assets_path}/.", File.join(project_path, "assets"))
96
+ end
97
+
98
+ def say_tab(num_tabs,value)
99
+
100
+ result = ""
101
+ num_tabs.times do |t|
102
+ result += " "
103
+ end
104
+
105
+ say result + value
106
+ end
107
+
108
+ def configure_directory(dir)
109
+ say "Configuring Project..."
110
+
111
+ loom_config = {
112
+ :sdk_version => "0.0.1"
113
+ }
114
+
115
+ config_path = ""
116
+
117
+ if dir.length > 0
118
+ config_path = File.join dir, CONFIG_PATH
119
+ else
120
+ config_path = CONFIG_PATH
121
+ end
122
+
123
+ if File.exists?(config_path)
124
+ say_error "This project is already configured!"
125
+ exit 1
126
+ end
127
+
128
+ say_tab 1, "Writing file #{config_path}"
129
+
130
+ File.open(config_path , 'w') { |f|
131
+ f.write(JSON.pretty_generate(loom_config))
132
+ }
133
+ end
134
+
135
+ def config
136
+ ensure_configured!
137
+ JSON.parse(File.read(CONFIG_PATH))
138
+ end
139
+
140
+ def unzip_file (file, destination)
141
+ Zip::ZipFile.open(file) do |zip_file|
142
+ zip_file.each do |f|
143
+ f_path=File.join(destination, f.name)
144
+ FileUtils.mkdir_p(File.dirname(f_path))
145
+ zip_file.extract(f, f_path) unless File.exist?(f_path)
146
+ end
147
+ end
148
+ end
149
+
150
+ def search_for_remote_sdk(search)
151
+
152
+ if(search.nil? || search.empty?)
153
+ response = fetch("http://#{@host}/api/v1/sdks?auth_token=#{get_token}")
154
+ else
155
+ response = fetch("http://#{@host}/api/v1/sdk/#{search}?auth_token=#{get_token}")
156
+ end
157
+
158
+ response.body
159
+ end
160
+
161
+ def download_sdk(version)
162
+ response = fetch("http://#{@host}/api/v1/download/sdk/#{version}?auth_token=#{get_token}")
163
+
164
+ file_path = File.expand_path("#{TEMP_PATH}/#{version}.zip")
165
+
166
+ puts "Writing temporary file: #{file_path}"
167
+
168
+ FileUtils.mkdir_p TEMP_PATH
169
+ File.open(file_path, 'w') {|f| f.write(response.body) }
170
+
171
+ file_path
172
+ end
173
+
174
+ def fetch(uri_str, limit = 10)
175
+ # You should choose better exception.
176
+ raise ArgumentError, 'HTTP redirect too deep' if limit == 0
177
+
178
+ response = Net::HTTP.get_response(URI.parse(uri_str))
179
+ case response
180
+ when Net::HTTPSuccess then response
181
+ when Net::HTTPRedirection then fetch(response['location'], limit - 1)
182
+ else
183
+ response.error!
184
+ end
185
+ end
186
+
187
+ def list_installed_sdks()
188
+ say "Listing installed loom sdks..."
189
+
190
+ if !File.directory?(File.join(LOOM_DIR, "sdks")) || Dir[File.join(LOOM_DIR, "sdks", "*")].empty?
191
+ say_error "No SDKs installed"
192
+ exit 1
193
+ end
194
+
195
+ Dir.foreach(File.join(LOOM_DIR, "sdks")) do |sdk|
196
+ is_directory = File.directory?(File.join(LOOM_DIR, "sdks",sdk))
197
+ #is_current = sdk == config["sdk_version"]
198
+ #current_symbol = "*"
199
+
200
+ if is_directory && sdk != "." && sdk != ".."
201
+ # if is_current
202
+ # say_warning " #{current_symbol} #{sdk}"
203
+ # else
204
+ say_tab 1, "#{sdk}"
205
+ # end
206
+ end
207
+ end
208
+
209
+ exit(0)
210
+ end
211
+
212
+ def sdk_installed?(version)
213
+ File.directory?(File.join(LOOM_DIR, "sdks", version))
214
+ end
215
+
216
+ def set_local_config(key, value)
217
+ ensure_configured!
218
+
219
+ loom_config = Loom::Config.load CONFIG_PATH
220
+ loom_config[key] = value
221
+ loom_config.save! CONFIG_PATH
222
+ end
223
+
224
+ def set_global_config(key, value)
225
+ loom_config = Loom::Config.load GLOBAL_CONFIG_PATH
226
+ loom_config[key] = value
227
+ loom_config.save! GLOBAL_CONFIG_PATH
228
+ end
@@ -0,0 +1,48 @@
1
+ require 'json'
2
+
3
+ module Loom
4
+ class Config < Hash
5
+
6
+ # load a new config option
7
+ def self.load(path)
8
+ config = Config.new
9
+ config.merge! JSON.parse(File.read(path))
10
+ end
11
+
12
+ def save!(path)
13
+ File.open(path , 'w') do |f|
14
+ f.write(JSON.pretty_generate(self))
15
+ end
16
+ end
17
+
18
+ end
19
+ end
20
+
21
+ command :config do |c|
22
+
23
+ c.syntax = 'loom config [options]'
24
+ c.summary = 'add, edit and remove configuration options for loomcli'
25
+ c.description = 'add and edit configuration options for loomcli'
26
+ c.option '--global', 'sets the global configuration variable'
27
+ c.example 'set local variable', 'loom config foo bar'
28
+ c.example 'set global variable', 'loom config --global foo bar'
29
+
30
+ c.action do |args, options|
31
+
32
+ config_path = options.global ? GLOBAL_CONFIG_PATH : CONFIG_PATH
33
+
34
+ ensure_configured! unless options.global
35
+
36
+ loom_config = Loom::Config.load config_path
37
+
38
+ if !(args[0] && args[1])
39
+ say "Invalid number of arguments. Example: loom config foo bar"
40
+ exit 1
41
+ else
42
+ loom_config[args[0]] = args[1]
43
+ loom_config.save! config_path
44
+ end
45
+
46
+ end
47
+
48
+ end
data/lib/loom/init.rb ADDED
@@ -0,0 +1,18 @@
1
+ command :init do |c|
2
+
3
+ c.syntax = 'loom init [options]'
4
+ c.summary = 'Configures the working directory as a loom project.'
5
+ c.description = 'Configuration for the loom toolbelt is done through a .loomconfig file. All projects that wish to use the loom commands must be configured with a .loomconfig file in the project root. calling "loom init" automatically configures the project.'
6
+ c.example 'initialize and configure loom project', 'loom init'
7
+ c.example 'initialize in a specific directory', 'loom init --dir /Path/To/My/Project'
8
+ c.option '--dir STRING', String, 'Specify a directory to configure'
9
+
10
+ c.action do |args, options|
11
+
12
+ options.default :dir => ""
13
+
14
+ configure_directory options.dir
15
+
16
+ end
17
+
18
+ end
data/lib/loom/login.rb ADDED
@@ -0,0 +1,36 @@
1
+ command :login do |c|
2
+
3
+ c.syntax = 'loom login [options]'
4
+ c.summary = 'log in with your theengine.co credentials'
5
+ c.description = 'logging into theengine.co allows certain loom features to be unlocked, such as downloading the latest version of loom or installing a loom gem.'
6
+ c.example 'login to theengine.co', 'loom login'
7
+
8
+ setup_env c
9
+
10
+ c.action do |args, options|
11
+
12
+ setup_host options
13
+
14
+ say "Logging in to: #{@host}"
15
+
16
+ #ask for email and password
17
+ email = ask("Email: ")
18
+ user_password = password
19
+
20
+ # send along the credentials
21
+ endpoint = URI.parse("http://#{@host}/api/v1/session")
22
+
23
+ response = Net::HTTP.post_form(endpoint, {"email" => email, "password" => user_password})
24
+
25
+ if response.code == "201"
26
+ say_ok "Login successful!"
27
+ File.open(File.expand_path(TOKEN_PATH) , 'w') {|f| f.write(response.body) }
28
+
29
+ #save the token on disk
30
+ else
31
+ say_error "Login failed! #{response.body}"
32
+ exit 1
33
+ end
34
+ end
35
+
36
+ end
@@ -0,0 +1,16 @@
1
+ command :logout do |c|
2
+
3
+ c.syntax = 'loom logout [options]'
4
+ c.summary = 'log out from theengine.co'
5
+ c.description = ''
6
+ c.example 'logout from theengine.co', 'loom logout'
7
+
8
+ c.action do |args, options|
9
+
10
+ if File.exists?(TOKEN_PATH)
11
+ File.delete(TOKEN_PATH)
12
+ end
13
+ say_ok "You are now logged out"
14
+ end
15
+
16
+ end
data/lib/loom/new.rb ADDED
@@ -0,0 +1,46 @@
1
+ command :new do |c|
2
+
3
+ c.syntax = 'loom new [options]'
4
+ c.summary = 'Creates a new loom project in the specified directory'
5
+ c.description = 'loom new generates a bare bones project structure that can immediately compile by calling loom run, this acts as a great starting point for loom development'
6
+ c.example 'create a new project called MyProject', 'loom new MyProject'
7
+
8
+ c.action do |args, options|
9
+
10
+ dir = args[0] unless args.nil?
11
+
12
+ if dir.nil?
13
+ say_error "Unable to create a new loom project without a directory. Example: loom new MyGame"
14
+ exit 1
15
+ else
16
+ if !File.directory?(dir)
17
+
18
+ say "Initializing Project: #{dir}..."
19
+ say_tab 1, "Creating directory #{dir}/src"
20
+ FileUtils.mkdir_p "#{dir}/src"
21
+ say_tab 1, "Creating directory #{dir}/libs"
22
+ FileUtils.mkdir_p "#{dir}/libs"
23
+ say_tab 1, "Creating directory #{dir}/bin"
24
+ FileUtils.mkdir_p "#{dir}/bin"
25
+
26
+ say_tab 1, "Creating directory #{dir}/assets"
27
+ FileUtils.mkdir_p "#{dir}/assets"
28
+
29
+ say_tab 1, "Writing file #{dir}/src/Main.build"
30
+ main_build_file = File.new File.join TEMPLATES_DIR, "Main.build.erb"
31
+ File.open("#{dir}/src/Main.build" , 'w') {|f| f.write(main_build_file.read) }
32
+
33
+ say_tab 1, "Writing file #{dir}/src/Program.ls"
34
+ program_ls_file = File.new File.join TEMPLATES_DIR, "Program.ls.erb"
35
+ File.open("#{dir}/src/Program.ls" , 'w') {|f| f.write(program_ls_file.read) }
36
+
37
+ configure_directory dir
38
+
39
+ elsif
40
+ say_error "Directory #{dir} already exists!"
41
+ exit 1
42
+ end
43
+ end
44
+ end
45
+
46
+ end
data/lib/loom/ping.rb ADDED
@@ -0,0 +1,41 @@
1
+ require "net/http"
2
+ require "uri"
3
+
4
+ command :ping do |c|
5
+
6
+ c.syntax = 'loom ping [options]'
7
+ c.summary = 'ping the server as an authenticated user'
8
+ c.description = 'ping the server to check if you have been authenticated'
9
+ c.option '--env String', String, 'sets the authentication endpoint to a specific environment (for testing only).'
10
+ c.example 'ping theengine.co', 'loom ping'
11
+
12
+ c.action do |args, options|
13
+
14
+ #default options
15
+ options.default :env => "prod"
16
+
17
+ if options.env == "prod"
18
+ host = "theengine.co"
19
+ elsif options.env == "staging"
20
+ host = "theengineco-staging.herokuapp.com"
21
+ elsif options.env == "local"
22
+ host = "localhost:3000"
23
+ else
24
+ say "Environment #{options.env} is not supported"
25
+ return
26
+ end
27
+
28
+ say "Pinging: #{host}"
29
+
30
+ # send along the credentials
31
+ endpoint = URI.parse("http://#{host}/api/v1/ping_authenticated?auth_token=#{get_token}")
32
+ response = Net::HTTP.get_response(endpoint)
33
+
34
+ if response.code == "200"
35
+ say "Ping successful!"
36
+ else
37
+ say "Ping failed! #{response.body}"
38
+ end
39
+ end
40
+
41
+ end
data/lib/loom/run.rb ADDED
@@ -0,0 +1,22 @@
1
+ command :run do |c|
2
+
3
+ c.syntax = 'loom run [options]'
4
+ c.summary = 'run your loom app in the working directory'
5
+ c.description = ''
6
+ c.example 'run your loom app', 'loom run'
7
+
8
+ c.action do |args, options|
9
+
10
+ ensure_sdk_imported!
11
+
12
+ loom_config = Loom::Config.load CONFIG_PATH
13
+ sdk_version = loom_config["sdk_version"]
14
+
15
+ sdk_path = File.join(LOOM_DIR, "sdks", sdk_version)
16
+
17
+ # TODO: Shoud we hijack the stdio for this?
18
+ exec "#{sdk_path}/LoomDemo.app/Contents/MacOS/LoomDemo"
19
+
20
+ end
21
+
22
+ end
data/lib/loom/sdk.rb ADDED
@@ -0,0 +1,113 @@
1
+ command :sdk do |c|
2
+
3
+ c.syntax = 'loom sdk [options]'
4
+ c.summary = 'Manage sdks installed on the system'
5
+ c.description = 'loom sdk manages the sdks on the system'
6
+ c.example 'display currently installed sdks', 'loom sdk list'
7
+ c.example 'sets the systems default sdk to 1.0.0', 'loom sdk default 1.0.0'
8
+ c.example 'installs the latest version of the sdk', 'loom sdk install latest'
9
+ c.example 'install the 1.0.0 version of the sdk', 'loom sdk install 1.0.0'
10
+ c.example 'uninstall the 1.0.0 version of the sdk', 'loom sdk uninstall 1.0.0'
11
+ c.option '--local path', String, 'Loads a local sdk with the path specified'
12
+
13
+ setup_env c
14
+
15
+ c.action do |args, options|
16
+
17
+ setup_host options
18
+
19
+ mode = args.shift
20
+
21
+ case mode
22
+ when "install"
23
+ install_sdk(args, options)
24
+ when "uninstall", "remove"
25
+ uninstall_sdk(args, options)
26
+ when "search"
27
+ search_for_sdk(args, options)
28
+ when "default"
29
+ set_default_sdk(args, options)
30
+ when "list", nil
31
+ list_installed_sdks
32
+ else
33
+ puts "don't know how to do #{args[0]}"
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+
40
+ def set_default_sdk(args, options)
41
+
42
+ sdk_version = args.shift unless args.nil?
43
+
44
+ if sdk_version.nil?
45
+ say "Invalid number of arguments."
46
+ exit 1
47
+ elsif !sdk_installed?(sdk_version)
48
+ say "Cannot set default SDK to '#{sdk_version}' it is not installed"
49
+ exit 1
50
+ end
51
+
52
+ set_global_config("default_sdk", sdk_version)
53
+
54
+ say "Default SDK set to #{sdk_version}"
55
+
56
+ end
57
+
58
+ def search_for_sdk(args, options)
59
+ sdk_version = args.shift unless args.nil?
60
+
61
+ response = search_for_remote_sdk(sdk_version)
62
+
63
+ say "== Remote SDKs =="
64
+ say response
65
+
66
+ if response.include? "No sdk found"
67
+ exit 1
68
+ end
69
+
70
+ end
71
+
72
+ def install_sdk(args, options)
73
+ sdk_version = args.shift unless args.nil?
74
+ sdk_path = File.join(LOOM_DIR, "sdks", sdk_version)
75
+
76
+ if sdk_version.nil?
77
+ say "Invalid number of arguments."
78
+ exit 1
79
+ end
80
+
81
+ # if the sdk doesn't already exists
82
+ if !File.directory?(sdk_path)
83
+ if options.local.nil?
84
+ say "Downloading remote loom SDK..."
85
+ temp_file = download_sdk(sdk_version)
86
+ say "Installing remote loom SDK..."
87
+ unzip_file(temp_file, sdk_path)
88
+ File.delete(temp_file)
89
+ say_tab 1, "SDK installed. You can type 'loom use #{sdk_version}' in the future to use this SDK."
90
+ else
91
+ say "Installing local loom SDK..."
92
+ unzip_file(options.local, sdk_path)
93
+ say_tab 1, "SDK installed. You can type 'loom use #{sdk_version}' in the future to use this SDK."
94
+ end
95
+ end
96
+ end
97
+
98
+ def uninstall_sdk(args, options)
99
+ sdk_version = args.shift unless args.nil?
100
+ sdk_path = File.join(LOOM_DIR, "sdks", sdk_version)
101
+
102
+ if sdk_version.nil?
103
+ say "Invalid number of arguments."
104
+ exit 1
105
+ end
106
+
107
+ if File.directory?(sdk_path)
108
+ FileUtils.rm_rf sdk_path
109
+ say "Successfully uninstalled SDK: #{sdk_version}"
110
+ else
111
+ say "Cannot remove SDK: #{sdk_version}, it isn't installed"
112
+ end
113
+ end
data/lib/loom/use.rb ADDED
@@ -0,0 +1,95 @@
1
+ command :use do |c|
2
+
3
+ c.syntax = 'loom use [options]'
4
+ c.summary = 'Chooses an sdk version to use for the project'
5
+ c.description = 'loom use configures the project to use the specified sdk'
6
+ c.example 'display currently installed sdks', 'loom use'
7
+ c.example 'use the 1.0.0 version of the sdk', 'loom use 1.0.0'
8
+ c.option '--local path', String, 'Loads a local sdk with the path specified'
9
+
10
+ setup_env c
11
+
12
+ c.action do |args, options|
13
+ ensure_configured!
14
+
15
+ setup_host options
16
+
17
+ # lookup the config
18
+ loom_config = Loom::Config.load CONFIG_PATH
19
+
20
+ #####################################################
21
+ # => List Available SDKs
22
+ #####################################################
23
+ if args.length == 0
24
+ say "Listing installed loom sdks..."
25
+
26
+ if !File.directory?(File.join(LOOM_DIR, "sdks")) || Dir[File.join(LOOM_DIR, "sdks", "*")].empty?
27
+ say_error "No SDKs installed"
28
+ exit 1
29
+ end
30
+
31
+ Dir.foreach(File.join(LOOM_DIR, "sdks")) do |sdk|
32
+ is_directory = File.directory?(File.join(LOOM_DIR, "sdks",sdk))
33
+ is_current = sdk == config["sdk_version"]
34
+ current_symbol = "*"
35
+
36
+ if is_directory && sdk != "." && sdk != ".."
37
+ if is_current
38
+ say_warning " #{current_symbol} #{sdk}"
39
+ else
40
+ say " #{sdk}"
41
+ end
42
+ end
43
+ end
44
+ exit
45
+ end
46
+
47
+ #####################################################
48
+ # => Use specific sdk
49
+ #####################################################
50
+ sdk_version = args[0] unless args.nil?
51
+ sdk_path = File.join(LOOM_DIR, "sdks", sdk_version)
52
+
53
+ if sdk_version.nil?
54
+ say "Invalid number of arguments."
55
+ exit
56
+ end
57
+
58
+ # if the sdk doesn't already exists
59
+ if !File.directory?(sdk_path)
60
+ if options.local.nil?
61
+ # TODO: Download SDK from theengine.co
62
+ say "Downloading remote loom SDK..."
63
+ temp_file = download_sdk(sdk_version)
64
+ say "Installing remote loom SDK..."
65
+ unzip_file(temp_file, sdk_path)
66
+ File.delete(temp_file)
67
+ say_tab 1, "SDK installed. You can type 'loom use #{sdk_version}' in the future to use this SDK."
68
+ else
69
+ say "Installing local loom SDK..."
70
+ unzip_file(options.local, sdk_path)
71
+ say_tab 1, "SDK installed. You can type 'loom use #{sdk_version}' in the future to use this SDK."
72
+ end
73
+ end
74
+
75
+
76
+ if loom_config["sdk_version"] == sdk_version
77
+ say_ok "Already using loom version '#{sdk_version}'"
78
+ exit
79
+ end
80
+
81
+ # Write to .loomconfig
82
+ say "Configuring Project..."
83
+ loom_config["sdk_version"] = sdk_version
84
+ loom_config.save! CONFIG_PATH
85
+
86
+ # remove the bin folder to invalidate sdk import
87
+ FileUtils.rm_rf "bin" if File.directory?("bin")
88
+
89
+ ensure_sdk_imported!
90
+
91
+ say_ok "Now using loom version '#{sdk_version}'"
92
+
93
+ end
94
+
95
+ end
@@ -0,0 +1,11 @@
1
+ {
2
+ "name" : "Main",
3
+ "version" : "1.0",
4
+ "references" : [ "System.loom", "Loom.loom", "Compiler.loom"],
5
+ "outputDir" : "./bin",
6
+ "modules" : [ {
7
+ "name" : "Main",
8
+ "version": "1.0",
9
+ "sourcePath": ["./"]
10
+ } ]
11
+ }
@@ -0,0 +1,13 @@
1
+ package
2
+ {
3
+ import Loom.Application;
4
+
5
+ class Program
6
+ {
7
+ public static function main()
8
+ {
9
+ Console.print("Hello Loom!");
10
+ Application.quit();
11
+ }
12
+ }
13
+ }
data/loom.gemspec CHANGED
@@ -4,14 +4,15 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = "loom"
7
+ s.name = %q{loom}
8
8
  s.version = "0.0.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["The Engine Co."]
12
- s.date = "2012-07-07"
13
- s.description = "Command-line interface for the Loom Game Engine, brought to you by The Engine Co. (http://theengine.co)"
14
- s.email = "support@theengine.co"
12
+ s.date = %q{2012-08-01}
13
+ s.default_executable = %q{loom}
14
+ s.description = %q{Command-line interface for the Loom Game Engine, brought to you by The Engine Co. (http://theengine.co)}
15
+ s.email = %q{support@theengine.co}
15
16
  s.executables = ["loom"]
16
17
  s.extra_rdoc_files = [
17
18
  "LICENSE.txt",
@@ -26,38 +27,60 @@ Gem::Specification.new do |s|
26
27
  "Rakefile",
27
28
  "VERSION",
28
29
  "bin/loom",
29
- "lib/loom.rb",
30
- "loom.gemspec",
31
- "test/helper.rb",
32
- "test/test_loom.rb"
30
+ "lib/helper.rb",
31
+ "lib/loom/config.rb",
32
+ "lib/loom/init.rb",
33
+ "lib/loom/login.rb",
34
+ "lib/loom/logout.rb",
35
+ "lib/loom/new.rb",
36
+ "lib/loom/ping.rb",
37
+ "lib/loom/run.rb",
38
+ "lib/loom/use.rb",
39
+ "lib/loom/version.rb",
40
+ "lib/templates/Main.build.erb",
41
+ "lib/templates/Program.ls.erb",
42
+ "loom.gemspec"
33
43
  ]
34
- s.homepage = "http://www.theengine.co"
44
+ s.homepage = %q{http://www.theengine.co}
35
45
  s.require_paths = ["lib"]
36
- s.rubygems_version = "1.8.24"
37
- s.summary = "Loom Game Engine Command Line"
46
+ s.rubygems_version = %q{1.3.6}
47
+ s.summary = %q{Loom Game Engine Command Line}
38
48
 
39
49
  if s.respond_to? :specification_version then
50
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
40
51
  s.specification_version = 3
41
52
 
42
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
54
+ s.add_runtime_dependency(%q<commander>, [">= 0"])
55
+ s.add_runtime_dependency(%q<rubyzip>, [">= 0"])
43
56
  s.add_development_dependency(%q<shoulda>, [">= 0"])
44
57
  s.add_development_dependency(%q<rdoc>, [">= 0"])
45
58
  s.add_development_dependency(%q<bundler>, [">= 0"])
46
59
  s.add_development_dependency(%q<jeweler>, [">= 0"])
47
60
  s.add_development_dependency(%q<simplecov>, [">= 0"])
61
+ s.add_development_dependency(%q<cucumber>, [">= 0"])
62
+ s.add_development_dependency(%q<aruba>, [">= 0"])
48
63
  else
64
+ s.add_dependency(%q<commander>, [">= 0"])
65
+ s.add_dependency(%q<rubyzip>, [">= 0"])
49
66
  s.add_dependency(%q<shoulda>, [">= 0"])
50
67
  s.add_dependency(%q<rdoc>, [">= 0"])
51
68
  s.add_dependency(%q<bundler>, [">= 0"])
52
69
  s.add_dependency(%q<jeweler>, [">= 0"])
53
70
  s.add_dependency(%q<simplecov>, [">= 0"])
71
+ s.add_dependency(%q<cucumber>, [">= 0"])
72
+ s.add_dependency(%q<aruba>, [">= 0"])
54
73
  end
55
74
  else
75
+ s.add_dependency(%q<commander>, [">= 0"])
76
+ s.add_dependency(%q<rubyzip>, [">= 0"])
56
77
  s.add_dependency(%q<shoulda>, [">= 0"])
57
78
  s.add_dependency(%q<rdoc>, [">= 0"])
58
79
  s.add_dependency(%q<bundler>, [">= 0"])
59
80
  s.add_dependency(%q<jeweler>, [">= 0"])
60
81
  s.add_dependency(%q<simplecov>, [">= 0"])
82
+ s.add_dependency(%q<cucumber>, [">= 0"])
83
+ s.add_dependency(%q<aruba>, [">= 0"])
61
84
  end
62
85
  end
63
86
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.43
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,40 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-07 00:00:00.000000000 Z
12
+ date: 2012-09-07 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: commander
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: rubyzip
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'
14
46
  - !ruby/object:Gem::Dependency
15
47
  name: shoulda
16
48
  requirement: !ruby/object:Gem::Requirement
@@ -91,6 +123,38 @@ dependencies:
91
123
  - - ! '>='
92
124
  - !ruby/object:Gem::Version
93
125
  version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: cucumber
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: aruba
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
94
158
  description: Command-line interface for the Loom Game Engine, brought to you by The
95
159
  Engine Co. (http://theengine.co)
96
160
  email: support@theengine.co
@@ -109,10 +173,19 @@ files:
109
173
  - Rakefile
110
174
  - VERSION
111
175
  - bin/loom
112
- - lib/loom.rb
176
+ - lib/helper.rb
177
+ - lib/loom/config.rb
178
+ - lib/loom/init.rb
179
+ - lib/loom/login.rb
180
+ - lib/loom/logout.rb
181
+ - lib/loom/new.rb
182
+ - lib/loom/ping.rb
183
+ - lib/loom/run.rb
184
+ - lib/loom/sdk.rb
185
+ - lib/loom/use.rb
186
+ - lib/templates/Main.build.erb
187
+ - lib/templates/Program.ls.erb
113
188
  - loom.gemspec
114
- - test/helper.rb
115
- - test/test_loom.rb
116
189
  homepage: http://www.theengine.co
117
190
  licenses: []
118
191
  post_install_message:
@@ -127,7 +200,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
200
  version: '0'
128
201
  segments:
129
202
  - 0
130
- hash: -1945663102414634068
203
+ hash: 4584131822068820033
131
204
  required_rubygems_version: !ruby/object:Gem::Requirement
132
205
  none: false
133
206
  requirements:
data/lib/loom.rb DELETED
@@ -1,60 +0,0 @@
1
-
2
- require 'fileutils'
3
- require 'optparse'
4
-
5
- class Loom
6
- @options = {}
7
-
8
- def self.generate_new_loom(dir)
9
- if dir.nil?
10
- puts "Unable to generate new loom project, dir is nil"
11
- else
12
- if @options[:verbose] then puts "Making directory #{dir}" end
13
-
14
- create_directory dir
15
-
16
- #TODO These templates either need to be bundled with the gem,
17
- #or downloadedfrom the server.
18
- #FileUtils.cp_r "/Users/natebeck/Desktop/LoomScriptDev/.", dir
19
- end
20
- end
21
-
22
- def self.process()
23
-
24
- OptionParser.new do |opts|
25
- opts.banner = "Usage: example.rb [options]"
26
-
27
- opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
28
- @options[:verbose] = v
29
- end
30
- end.parse!
31
-
32
- if @options[:verbose] then puts "I AM VERBOSE!" end
33
-
34
- #p options
35
- #p ARGV
36
-
37
- action = ARGV[0]
38
-
39
- case action
40
- when "new"
41
- generate_new_loom ARGV[1]
42
- when "init", "s"
43
- puts "Do it here!"
44
- else
45
- puts "Whatcha trying to do?"
46
- # TODO Run Help
47
- end
48
- end
49
-
50
- private
51
-
52
- def self.create_directory(path)
53
- if !File.directory?(path)
54
- FileUtils.mkdir_p path
55
- puts "Created directory: #{path}"
56
- else
57
- puts "Skipped directory: #{path}" unless(path == Dir.pwd)
58
- end
59
- end
60
- end
data/test/helper.rb DELETED
@@ -1,18 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
10
- require 'test/unit'
11
- require 'shoulda'
12
-
13
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
- $LOAD_PATH.unshift(File.dirname(__FILE__))
15
- require 'loom'
16
-
17
- class Test::Unit::TestCase
18
- end
data/test/test_loom.rb DELETED
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestLoom < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end