teamster 0.6.1 → 0.7.0
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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/bin/teamster +111 -19
- data/content/views/index.erb +1 -1
- data/lib/teamster-cli.rb +176 -71
- data/lib/teamster.rb +6 -6
- data/lib/teamster/base_adapter.rb +2 -2
- data/lib/teamster/general_helper.rb +10 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c5a470c1e28e2d662dc3c98942635606502e112
|
4
|
+
data.tar.gz: 7a5a7e6d1a5c615fdc84c95d1e31855948118c5e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32996c28d9f7ad620a41084ab884b5a8846998dd73641f1edffb5f53e00c0dbcd1c88245a4f226d48f24d559e36a71b6d8c0dda1779f624e50bf4b03f10b0522
|
7
|
+
data.tar.gz: f6ffded7e2a5fe8178cf9cc58cfefe33c24d0bf141aadfb3296d97d1c8af7c8daf75721dc51bdfff0e2d0623ed0def6789f418d3062c7dcb58f41ca4a31ee89c
|
data/VERSION
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
0.
|
1
|
+
0.7.0
|
2
2
|
|
data/bin/teamster
CHANGED
@@ -28,27 +28,39 @@ class TeamsterApp
|
|
28
28
|
["--prod", GetoptLong::NO_ARGUMENT ],
|
29
29
|
["--help", GetoptLong::NO_ARGUMENT ],
|
30
30
|
["--overwrite", GetoptLong::NO_ARGUMENT ],
|
31
|
+
["--local", GetoptLong::NO_ARGUMENT ],
|
32
|
+
["--no-update", GetoptLong::NO_ARGUMENT ],
|
31
33
|
["--socket-file", GetoptLong::REQUIRED_ARGUMENT],
|
32
34
|
["--state-file", GetoptLong::REQUIRED_ARGUMENT])
|
33
|
-
@
|
35
|
+
@opts = {}.tap do |hsh|
|
34
36
|
opts.each do |opt, arg|
|
35
37
|
opt = opt[/--([\w-]+)/, 1].gsub(/-/, "_").to_sym
|
36
38
|
arg ||= true
|
37
39
|
hsh[opt] = arg
|
38
40
|
end
|
39
41
|
end
|
40
|
-
@
|
42
|
+
@opts
|
41
43
|
end
|
42
44
|
|
45
|
+
ALLOWED_COMMANDS = [
|
46
|
+
:init, :list,
|
47
|
+
:create, :delete, :remove, :export, :import, :update,
|
48
|
+
:start, :stop, :restart
|
49
|
+
]
|
50
|
+
|
43
51
|
def run_app
|
44
|
-
if @
|
52
|
+
if @opts[:help]
|
45
53
|
quit detailed_usage
|
46
|
-
elsif @
|
54
|
+
elsif @opts[:version]
|
47
55
|
quit show_version
|
48
56
|
elsif ARGV.size > 0
|
49
57
|
command = ARGV.shift.to_sym
|
50
58
|
args = ARGV
|
51
|
-
|
59
|
+
if ALLOWED_COMMANDS.include?(command)
|
60
|
+
send command, *args
|
61
|
+
else
|
62
|
+
unknown command
|
63
|
+
end
|
52
64
|
else
|
53
65
|
quit usage
|
54
66
|
end
|
@@ -58,14 +70,18 @@ class TeamsterApp
|
|
58
70
|
|
59
71
|
# --{ COMMANDS }-- #
|
60
72
|
|
73
|
+
def unknown(command)
|
74
|
+
quit "\nUNKNOWN COMMAND: #{command}\nFor help, run command: teamster --help", 1
|
75
|
+
end
|
76
|
+
|
61
77
|
def init(*args)
|
62
78
|
current_working_folder = Dir.pwd
|
63
|
-
team_name = args[0]
|
64
79
|
content = File.dirname(__FILE__) + '/../content'
|
80
|
+
@config = {}
|
65
81
|
puts "Initializing Teamster in current folder."
|
66
82
|
puts "Creating required content..."
|
67
83
|
FileUtils.mkdir_p "conf"
|
68
|
-
create_config
|
84
|
+
create_config
|
69
85
|
FileUtils.mkdir_p "data"
|
70
86
|
create_user
|
71
87
|
FileUtils.cp_r "#{content}/views", current_working_folder
|
@@ -81,9 +97,9 @@ class TeamsterApp
|
|
81
97
|
def start(*)
|
82
98
|
puts "Starting teamster..."
|
83
99
|
if File.exists?(CONFIG_FILE)
|
84
|
-
if @
|
85
|
-
socket_file = @
|
86
|
-
state_file = @
|
100
|
+
if @opts[:prod]
|
101
|
+
socket_file = @opts[:socket_file] || DEFAULT_UNIX_SOCKET_FILE
|
102
|
+
state_file = @opts[:state_file] || DEFAULT_APP_STATE_FILE
|
87
103
|
Thread.new { exec "puma -d -b unix://#{socket_file} -S #{state_file}" }
|
88
104
|
else
|
89
105
|
Thread.new { exec "rackup -p 9292" }
|
@@ -95,7 +111,7 @@ class TeamsterApp
|
|
95
111
|
|
96
112
|
def stop(*)
|
97
113
|
puts "Stopping teamster..."
|
98
|
-
state_file = @
|
114
|
+
state_file = @opts[:state_file] || DEFAULT_APP_STATE_FILE
|
99
115
|
if File.exists? state_file
|
100
116
|
Thread.new { exec "pumactl -S #{state_file} stop" }
|
101
117
|
else
|
@@ -106,7 +122,7 @@ class TeamsterApp
|
|
106
122
|
|
107
123
|
def restart(*)
|
108
124
|
puts "Restarting teamster..."
|
109
|
-
state_file = @
|
125
|
+
state_file = @opts[:state_file] || DEFAULT_APP_STATE_FILE
|
110
126
|
if File.exists? state_file
|
111
127
|
Thread.new { exec "pumactl -S #{state_file} restart" }
|
112
128
|
else
|
@@ -115,22 +131,98 @@ class TeamsterApp
|
|
115
131
|
end
|
116
132
|
|
117
133
|
def create(*args)
|
118
|
-
name = args
|
119
|
-
|
134
|
+
name = args.join(' ')
|
135
|
+
if name =~ /_/
|
136
|
+
quit "Does not support adapter names containing underscores."
|
137
|
+
end
|
138
|
+
create_adapter_for name
|
139
|
+
end
|
140
|
+
|
141
|
+
def update(*args)
|
142
|
+
name = if args.empty?
|
143
|
+
nil
|
144
|
+
else
|
145
|
+
args.join(' ')
|
146
|
+
end
|
147
|
+
if name
|
148
|
+
update_adapter name
|
149
|
+
else
|
150
|
+
update_new_adapters
|
151
|
+
update_existing_adapters
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def delete(*args)
|
156
|
+
unless @opts[:no_update]
|
157
|
+
update_new_adapters
|
158
|
+
update_existing_adapters
|
159
|
+
end
|
160
|
+
name = args.join(' ')
|
161
|
+
config = YAML.load_file(CONFIG_FILE)
|
162
|
+
adapters = config.fetch('adapters')
|
163
|
+
selected_adapter = adapters.find {|e| e.fetch("name") == name}
|
164
|
+
if selected_adapter
|
165
|
+
files = selected_adapter.fetch("files")
|
166
|
+
confirmation = ask_user "Are you sure you want to delete adapter \"#{name}\"? [y/N]"
|
167
|
+
if confirmation =~ /^y$|^yes$/i
|
168
|
+
files.each do |file|
|
169
|
+
FileUtils.rm file
|
170
|
+
end
|
171
|
+
adapters.delete_if {|e| e.fetch("name") == name}
|
172
|
+
File.open(CONFIG_FILE, 'w') {|fh| fh.write config.to_yaml}
|
173
|
+
quit "Successfully deleted adapter: #{name}"
|
174
|
+
else
|
175
|
+
quit "Deletion of adapter \"#{name}\" cancelled."
|
176
|
+
end
|
177
|
+
else
|
178
|
+
quit "Unable to find adapter: #{name}"
|
179
|
+
end
|
180
|
+
end
|
181
|
+
alias_method :remove, :delete
|
182
|
+
|
183
|
+
def list(*args)
|
184
|
+
unless @opts[:no_update]
|
185
|
+
update_new_adapters
|
186
|
+
update_existing_adapters
|
187
|
+
end
|
188
|
+
local = @opts[:local] || true
|
189
|
+
adapters = fetch_adapters
|
190
|
+
adapter_names = [].tap do |arr|
|
191
|
+
adapters.each {|hsh| arr << hsh.fetch('name')}
|
192
|
+
end
|
193
|
+
puts
|
194
|
+
puts "Adapters In Current Instance:"
|
195
|
+
adapter_names.each {|name| puts "- #{name}"}
|
120
196
|
end
|
121
197
|
|
122
198
|
def import(*args)
|
123
|
-
name = args
|
124
|
-
|
199
|
+
name = args.join(' ')
|
200
|
+
quit "Import not supported for now."
|
125
201
|
end
|
126
202
|
|
127
203
|
def export(*args)
|
128
|
-
|
129
|
-
|
204
|
+
unless @opts[:no_update]
|
205
|
+
update_new_adapters
|
206
|
+
update_existing_adapters
|
207
|
+
end
|
208
|
+
name = args.join(' ')
|
209
|
+
selected_adapter = fetch_adapter name
|
210
|
+
if selected_adapter
|
211
|
+
files = selected_adapter.fetch("files")
|
212
|
+
export_adapter name, files
|
213
|
+
else
|
214
|
+
quit "Adapter not found: #{name}"
|
215
|
+
end
|
130
216
|
end
|
131
217
|
|
132
|
-
|
218
|
+
def fetch_adapters
|
219
|
+
YAML.load_file(CONFIG_FILE).fetch('adapters')
|
220
|
+
end
|
133
221
|
|
222
|
+
def fetch_adapter(name)
|
223
|
+
adapters = fetch_adapters
|
224
|
+
adapters.find {|e| e.fetch("name") == name}
|
225
|
+
end
|
134
226
|
end
|
135
227
|
end
|
136
228
|
|
data/content/views/index.erb
CHANGED
data/lib/teamster-cli.rb
CHANGED
@@ -10,12 +10,9 @@ module Teamster
|
|
10
10
|
exit code
|
11
11
|
end
|
12
12
|
|
13
|
-
def create_config
|
14
|
-
|
15
|
-
|
16
|
-
else
|
17
|
-
ask_user_for :title, "What is your team name"
|
18
|
-
end
|
13
|
+
def create_config
|
14
|
+
@config['title'] = ask_user "What is your team name"
|
15
|
+
@config['adapters'] = []
|
19
16
|
File.open(CONFIG_FILE, 'w') {|fh| fh.write @config.to_yaml}
|
20
17
|
end
|
21
18
|
|
@@ -32,29 +29,87 @@ module Teamster
|
|
32
29
|
Base64.strict_encode64(obj)
|
33
30
|
end
|
34
31
|
|
35
|
-
def ask_user_for(opt, question)
|
36
|
-
unless @config[opt]
|
37
|
-
@config[opt] = ask_user question
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
32
|
def ask_user(question)
|
42
33
|
print "#{question}: "
|
43
34
|
STDIN.gets.strip
|
44
35
|
end
|
45
36
|
|
37
|
+
def update_adapter(name)
|
38
|
+
config = YAML.load_file(CONFIG_FILE)
|
39
|
+
adapter = config.fetch('adapters').find {|e| e.fetch("name") == name}
|
40
|
+
quit "No local adapter found with name: #{name}" unless adapter
|
41
|
+
list_from_fs = Dir.glob("lib/teamster-adapters/#{name.gsub(' ', '_')}/**/*.*")
|
42
|
+
list_from_conf = adapter.fetch('files')
|
43
|
+
list_from_conf.concat(list_from_fs).uniq!
|
44
|
+
File.open(CONFIG_FILE, 'w') {|fh| fh.write config.to_yaml}
|
45
|
+
end
|
46
|
+
|
47
|
+
def update_new_adapters
|
48
|
+
config = YAML.load_file(CONFIG_FILE)
|
49
|
+
adapters = config.fetch('adapters')
|
50
|
+
current_adapters = Dir.glob("lib/teamster-adapters/*.rb").map do |f|
|
51
|
+
f.split('/').last.gsub('.rb', '').gsub('_', ' ')
|
52
|
+
end
|
53
|
+
current_adapters.each do |name|
|
54
|
+
next if adapters.find {|e| e.fetch("name") == name}
|
55
|
+
adapters << {}.tap do |hsh|
|
56
|
+
hsh["name"] = name
|
57
|
+
file_list = Dir.glob("lib/teamster-adapters/#{name.gsub(' ', '_')}/**/*.*")
|
58
|
+
file_list << "lib/teamster-adapters/#{name.gsub(' ', '_')}.rb"
|
59
|
+
hsh["files"] = file_list
|
60
|
+
end
|
61
|
+
end
|
62
|
+
File.open(CONFIG_FILE, 'w') {|fh| fh.write config.to_yaml}
|
63
|
+
end
|
64
|
+
|
65
|
+
def update_existing_adapters
|
66
|
+
config = YAML.load_file(CONFIG_FILE)
|
67
|
+
adapters = config.fetch('adapters')
|
68
|
+
current_adapters = Dir.glob("lib/teamster-adapters/*.rb").map do |f|
|
69
|
+
f.split('/').last.gsub('.rb', '').gsub('_', ' ')
|
70
|
+
end
|
71
|
+
current_adapters.each do |name|
|
72
|
+
adapter = adapters.find {|e| e.fetch("name") == name}
|
73
|
+
list_from_fs = Dir.glob("lib/teamster-adapters/#{name.gsub(' ', '_')}/**/*.*")
|
74
|
+
list_from_conf = adapter.fetch('files')
|
75
|
+
list_from_conf.concat(list_from_fs).uniq!
|
76
|
+
end
|
77
|
+
File.open(CONFIG_FILE, 'w') {|fh| fh.write config.to_yaml}
|
78
|
+
end
|
79
|
+
|
80
|
+
def add_adapter_to_config(name, filename)
|
81
|
+
@config = YAML.load_file CONFIG_FILE
|
82
|
+
adapter = {
|
83
|
+
'name' => name,
|
84
|
+
'files' => [
|
85
|
+
"lib/teamster-adapters/#{filename}.rb",
|
86
|
+
"lib/teamster-adapters/#{filename}/#{filename}_helper.rb",
|
87
|
+
"lib/teamster-adapters/#{filename}/views/#{filename}.erb",
|
88
|
+
"lib/teamster-adapters/#{filename}/views/#{filename}_summary.erb"
|
89
|
+
]
|
90
|
+
}
|
91
|
+
@config.tap do |hsh|
|
92
|
+
adapters = hsh.fetch('adapters')
|
93
|
+
adapters << adapter
|
94
|
+
end
|
95
|
+
File.open(CONFIG_FILE, 'w') {|fh| fh.write @config.to_yaml}
|
96
|
+
end
|
97
|
+
|
46
98
|
def create_adapter_for(name)
|
47
99
|
puts "Creating placeholders for adapter #{name}...\n"
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
create_file "lib/teamster-adapters/#{
|
52
|
-
create_file "lib/teamster-adapters/#{
|
100
|
+
filename = name.split(' ').map{|a| a.downcase}.join('_')
|
101
|
+
class_name = name.split(' ').map{|a| a.capitalize}.join('')
|
102
|
+
FileUtils.mkdir_p "lib/teamster-adapters/#{filename}/views"
|
103
|
+
create_file "lib/teamster-adapters/#{filename}.rb", "adapter_placeholder_for", filename, class_name
|
104
|
+
create_file "lib/teamster-adapters/#{filename}/#{filename}_helper.rb", "adapter_helper_placeholder_for", filename, class_name
|
105
|
+
create_file "lib/teamster-adapters/#{filename}/views/#{filename}.erb", "view_placeholder_for", filename, class_name
|
106
|
+
create_file "lib/teamster-adapters/#{filename}/views/#{filename}_summary.erb", "view_summary_placeholder_for", filename, class_name
|
53
107
|
puts "\nBasic adapter creation done!"
|
54
|
-
puts "Controller : \"lib/teamster-adapters/#{
|
55
|
-
puts "Helper : \"lib/teamster-adapters/#{
|
56
|
-
puts "View : \"lib/teamster-adapters/#{
|
57
|
-
puts "Summary View : \"lib/teamster-adapters/#{
|
108
|
+
puts "Controller : \"lib/teamster-adapters/#{filename}.rb\""
|
109
|
+
puts "Helper : \"lib/teamster-adapters/#{filename}/#{filename}_helper.rb\""
|
110
|
+
puts "View : \"lib/teamster-adapters/#{filename}/views/#{filename}.erb\""
|
111
|
+
puts "Summary View : \"lib/teamster-adapters/#{filename}/views/#{filename}_summary.erb\""
|
112
|
+
add_adapter_to_config name, filename
|
58
113
|
end
|
59
114
|
|
60
115
|
def import_adapter_for(name)
|
@@ -72,22 +127,23 @@ module Teamster
|
|
72
127
|
end
|
73
128
|
end
|
74
129
|
|
75
|
-
def
|
76
|
-
|
77
|
-
|
78
|
-
puts "The following files will be
|
79
|
-
puts "-
|
80
|
-
puts
|
130
|
+
def export_adapter(name, files)
|
131
|
+
zip_file = "#{name.gsub(' ', '_')}.zip"
|
132
|
+
puts "\nExporting adapter #{name} to zip: #{zip_file}\n\n"
|
133
|
+
puts "The following files will be exported into a zip file:"
|
134
|
+
files.each {|f| puts "- #{f}"}
|
135
|
+
puts
|
81
136
|
if `which zip`.length != 0
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
137
|
+
if system "zip -r #{zip_file} #{files.join(' ')}"
|
138
|
+
quit "\nExport successful!", 0
|
139
|
+
else
|
140
|
+
quit "\nError occurred when zipping!", 1
|
141
|
+
end
|
86
142
|
end
|
87
143
|
end
|
88
144
|
|
89
145
|
def create_file(filename, method, *args)
|
90
|
-
case [File.exists?(filename), !!@
|
146
|
+
case [File.exists?(filename), !!@opts[:overwrite]]
|
91
147
|
when [true, false]
|
92
148
|
puts "File \"#{filename}\" exists. Run with --overwrite to overwrite file."
|
93
149
|
else
|
@@ -105,12 +161,12 @@ module Teamster
|
|
105
161
|
Initialize application:
|
106
162
|
teamster init
|
107
163
|
|
164
|
+
Create an adapter:
|
165
|
+
teamster create my amazing adapter
|
166
|
+
|
108
167
|
Run web application:
|
109
168
|
teamster start
|
110
169
|
|
111
|
-
Run web application in production (uses unix socket & state file):
|
112
|
-
teamster start --prod [--socket-file FILE] [--state-file FILE]
|
113
|
-
|
114
170
|
Verify by opening browser and navigating to "http://localhost:9292".
|
115
171
|
|
116
172
|
For more detailed help, please run "teamster --help".
|
@@ -127,32 +183,77 @@ Usage:
|
|
127
183
|
teamster [COMMAND] [OPTIONS]
|
128
184
|
|
129
185
|
Commands:
|
130
|
-
init, start, stop, restart
|
186
|
+
init, list, create, delete, export, import, update, start, stop, restart
|
131
187
|
|
132
188
|
Options (standalone):
|
133
189
|
--help Display this detailed help.
|
134
190
|
--version Version of the teamster used.
|
135
|
-
--create-adapter NAME Creates a stub of a adapter
|
136
|
-
--import-adapter FILE << PENDING IMPLEMENTATION >>
|
137
|
-
--export-adapter FILE << PENDING IMPLEMENTATION >>
|
138
191
|
|
139
192
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
193
|
+
Command \"init\" : Initializes the web app. Creates required files for web app.
|
194
|
+
Options:
|
195
|
+
--overwrite If app is already initialized, --overwrite will
|
196
|
+
recreate all the base files.
|
197
|
+
|
198
|
+
|
199
|
+
Command \"list\" Lists all teamster adapters.
|
200
|
+
|
201
|
+
|
202
|
+
Command \"create\" NAME Creates a skeleton of a teamster adapter. Creates a
|
203
|
+
new entry in the config file.
|
204
|
+
|
205
|
+
|
206
|
+
Command \"update\" NAME Updates the files for a teamster adapter in the
|
207
|
+
config file. NAME is optional. If NAME is not given,
|
208
|
+
all new and existing adapters are updated.
|
209
|
+
|
146
210
|
|
211
|
+
Command \"delete\" NAME Deletes all the files of the adapter based on the
|
212
|
+
config file.
|
213
|
+
Option:
|
214
|
+
--no-update Does not update new and existing adapters in the
|
215
|
+
config files before deletion.
|
147
216
|
|
148
|
-
Options used with \"stop\":
|
149
|
-
--socket-file FILE Relative/absolute path to the UNIX socket file.
|
150
|
-
--state-file FILE Relative/absolute path to the Puma state file.
|
151
217
|
|
218
|
+
Command \"remove\" NAME Same as DELETE above.
|
152
219
|
|
153
|
-
|
154
|
-
|
155
|
-
|
220
|
+
|
221
|
+
Command \"export\" NAME Zips all the files listed in the config file for
|
222
|
+
the specified adapter. Take care to scrub all
|
223
|
+
information in config files, etc.
|
224
|
+
Option:
|
225
|
+
--no-update Does not update new and existing adapters in the
|
226
|
+
config files before deletion.
|
227
|
+
|
228
|
+
|
229
|
+
Command \"import\" NAME Import is not yet implemented.
|
230
|
+
|
231
|
+
|
232
|
+
Command \"start\" : Used to run the teamster web app.
|
233
|
+
Options:
|
234
|
+
--prod Binds a unix socket to be used by a web
|
235
|
+
server (eg. Nginx) and creates a state file
|
236
|
+
that is used by the Puma app server.
|
237
|
+
--socket-file FILE Required with --prod. Relative/absolute path
|
238
|
+
to the UNIX socket file.
|
239
|
+
--state-file FILE Required with --prod. Relative/absolute path
|
240
|
+
to the Puma state file.
|
241
|
+
|
242
|
+
|
243
|
+
Command \"stop\" : Used to stop the teamster web app in production mode.
|
244
|
+
Options:
|
245
|
+
--socket-file FILE Required. Relative/absolute path to the UNIX
|
246
|
+
socket file.
|
247
|
+
--state-file FILE Required. Relative/absolute path to the Puma
|
248
|
+
state file.
|
249
|
+
|
250
|
+
|
251
|
+
Command \"restart\" : Used to restart the teamster web app in production mode.
|
252
|
+
Options:
|
253
|
+
--socket-file FILE Required. Relative/absolute path to the UNIX
|
254
|
+
socket file.
|
255
|
+
--state-file FILE Required. Relative/absolute path to the Puma
|
256
|
+
state file.
|
156
257
|
DETAIL
|
157
258
|
end
|
158
259
|
|
@@ -180,34 +281,38 @@ end
|
|
180
281
|
CODE
|
181
282
|
end
|
182
283
|
|
183
|
-
def adapter_placeholder_for(
|
284
|
+
def adapter_placeholder_for(filename, class_name)
|
184
285
|
<<-CODE
|
185
|
-
require_relative \"#{
|
186
|
-
|
187
|
-
\# NOTE: If the namespace is changed, please take care of the
|
188
|
-
\# namespace of the sub-class and helper adapters.
|
286
|
+
require_relative \"#{filename}/#{filename}_helper\"
|
189
287
|
|
190
288
|
module Teamster
|
191
289
|
module Adapters
|
192
|
-
class #{
|
290
|
+
class #{class_name} < Sinatra::Base
|
193
291
|
\# Class methods that contain Teamster-Adapter specific helpers.
|
194
292
|
include BaseAdapter
|
195
293
|
|
196
|
-
\# Stuff that needs to be done before registration with core.
|
197
|
-
|
198
|
-
|
294
|
+
\# --{ Stuff that needs to be done before registration with core. }--
|
295
|
+
|
296
|
+
\# Add adapters here (comma separated) if there are helper adapters.
|
297
|
+
has_helpers #{class_name}Helper
|
298
|
+
|
299
|
+
\# Location of the views folder
|
300
|
+
views_at \"\#\{File.dirname(__FILE__)\}/#{filename}/views\"
|
301
|
+
|
199
302
|
under_development \# Remove this line when development is finished.
|
303
|
+
|
304
|
+
\# ------------------------------------------------------------------
|
200
305
|
|
201
306
|
\# Register this class so it can be used.
|
202
|
-
register self
|
307
|
+
register self, "#{filename}"
|
203
308
|
|
204
309
|
configure do
|
205
310
|
enable :logging \# To log, use \"logger.info <MSG>\". Log messages are captured
|
206
311
|
\# in the file specified in config.ru.
|
207
312
|
end
|
208
313
|
|
209
|
-
get '/#{
|
210
|
-
erb :#{
|
314
|
+
get '/#{filename.gsub('_', '-')}/?' do
|
315
|
+
erb :#{filename}
|
211
316
|
end
|
212
317
|
end
|
213
318
|
end
|
@@ -215,17 +320,17 @@ end
|
|
215
320
|
CODE
|
216
321
|
end
|
217
322
|
|
218
|
-
def adapter_helper_placeholder_for(
|
323
|
+
def adapter_helper_placeholder_for(filename, class_name)
|
219
324
|
<<-CODE
|
220
325
|
module Teamster
|
221
326
|
module Adapters
|
222
|
-
module #{
|
223
|
-
def #{
|
327
|
+
module #{class_name}Helper
|
328
|
+
def #{filename}_summary?
|
224
329
|
true
|
225
330
|
end
|
226
331
|
|
227
|
-
def #{
|
228
|
-
erb :#{
|
332
|
+
def #{filename}_summary
|
333
|
+
erb :#{filename}_summary
|
229
334
|
end
|
230
335
|
end
|
231
336
|
end
|
@@ -233,14 +338,14 @@ end
|
|
233
338
|
CODE
|
234
339
|
end
|
235
340
|
|
236
|
-
def view_placeholder_for(
|
341
|
+
def view_placeholder_for(filename, class_name)
|
237
342
|
<<-CODE
|
238
|
-
<h1 style='text-align: center'>PLACEHOLDER FOR #{
|
343
|
+
<h1 style='text-align: center'>PLACEHOLDER FOR #{filename.split('_').map{|a| a.upcase}.join(' ')}</h1>
|
239
344
|
<p style='text-align: center'>Page under construction. Please check back later!</p>
|
240
345
|
CODE
|
241
346
|
end
|
242
347
|
|
243
|
-
def view_summary_placeholder_for(
|
348
|
+
def view_summary_placeholder_for(filename, class_name)
|
244
349
|
<<-CODE
|
245
350
|
<p>Under development right now..</p>
|
246
351
|
CODE
|
data/lib/teamster.rb
CHANGED
@@ -13,12 +13,12 @@ module Teamster
|
|
13
13
|
@@views = []
|
14
14
|
@@title = 'TEAMSTER'
|
15
15
|
@@root = Dir.pwd
|
16
|
-
CORE_CONFIG = '
|
16
|
+
CORE_CONFIG = 'conf/teamster.conf'
|
17
17
|
|
18
18
|
# NOTE: Class methods used in configure block needs be declared
|
19
19
|
# before the configure block.
|
20
20
|
def self.set_default_options_from(core_opts)
|
21
|
-
@@title = core_opts[
|
21
|
+
@@title = core_opts["title"]
|
22
22
|
end
|
23
23
|
|
24
24
|
configure do
|
@@ -54,12 +54,12 @@ module Teamster
|
|
54
54
|
@@root
|
55
55
|
end
|
56
56
|
|
57
|
-
def self.use_adapter(teamster_adapter)
|
58
|
-
if @@adapters.include? teamster_adapter
|
57
|
+
def self.use_adapter(teamster_adapter, name)
|
58
|
+
if @@adapters.include? [teamster_adapter, name]
|
59
59
|
warn "Adapter #{teamster_adapter} already registered!"
|
60
60
|
else
|
61
|
-
@@adapters << teamster_adapter
|
62
|
-
@@views
|
61
|
+
@@adapters << [teamster_adapter, name]
|
62
|
+
@@views << teamster_adapter.views
|
63
63
|
end
|
64
64
|
teamster_adapter.helpers GeneralHelper
|
65
65
|
if teamster_adapter.has_helper?
|
@@ -58,9 +58,10 @@ module Teamster
|
|
58
58
|
|
59
59
|
def available_adapters(shuffle = false)
|
60
60
|
available_adapters = [].tap do |arr|
|
61
|
-
App.adapters.each do |
|
62
|
-
|
63
|
-
|
61
|
+
App.adapters.each do |adapter, name|
|
62
|
+
unless adapter.under_development?
|
63
|
+
arr << ['/' + name.gsub('_', '-'), name.split('_').map{|a| a.capitalize}.join(' ')]
|
64
|
+
end
|
64
65
|
end
|
65
66
|
end
|
66
67
|
shuffle ? available_adapters.shuffle : available_adapters
|
@@ -68,18 +69,18 @@ module Teamster
|
|
68
69
|
|
69
70
|
def developing_adapters
|
70
71
|
[].tap do |arr|
|
71
|
-
App.adapters.each do |
|
72
|
-
|
73
|
-
|
72
|
+
App.adapters.each do |adapter, name|
|
73
|
+
if adapter.under_development?
|
74
|
+
arr << ['/' + name.gsub('_', '-'), name.split('_').map{|a| a.capitalize}.join(' ')]
|
75
|
+
end
|
74
76
|
end
|
75
77
|
end
|
76
78
|
end
|
77
79
|
|
78
80
|
def all_adapters(shuffle = false)
|
79
81
|
all_adapters = [].tap do |arr|
|
80
|
-
App.adapters.each do |
|
81
|
-
|
82
|
-
arr << ['/' + adapter_name.downcase, adapter_name]
|
82
|
+
App.adapters.each do |adapter, name|
|
83
|
+
arr << ['/' + name.gsub('_', '-'), name.split('_').map{|a| a.capitalize}.join(' ')]
|
83
84
|
end
|
84
85
|
end
|
85
86
|
shuffle ? all_adapters.shuffle : all_adapters
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teamster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nur Muhammad Bin Sirat
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: puma
|