jiveapps 1.0.4 → 1.0.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.
@@ -1,4 +1,13 @@
1
- === 1.0.4
1
+ === 1.0.5 2011-07-29
2
+ * Enhancements
3
+ * Update app template to use preferred height of 400 px on home view
4
+ * Don't run gadgets.window.adjustHeight onload by default, so 400 px height persists
5
+ * Escape HTML entities in ModulePref attributes to prevent invalid XML
6
+ * Detect if git errors occur during app creation or livedev, and display if so
7
+ * Bug Fixes:
8
+ * Fix example link tags for lifecycle events to have capital L
9
+
10
+ === 1.0.4 2011-06-14
2
11
  * Enhancements
3
12
  * after app has been pushed to git remote, check for existence of web copy. if it does not exist, halt and delete app
4
13
  * validate SSH key format before uploading. halt if its invalid, show user why and how to fix it
@@ -80,7 +89,7 @@
80
89
 
81
90
  === 0.0.7 2011-01-07
82
91
  * Bug fixes
83
- * If Git push fails, delete app and clean up.
92
+ * If Git push fails, delete app and clean up.
84
93
  * Sync SSH key whenever creating a new app to avoid Git push failures.
85
94
  * Require "fileutils" for older versions of ruby 1.8.6 that do not load it by default
86
95
 
@@ -1,3 +1,4 @@
1
+ require 'cgi'
1
2
  class CreateGenerator < RubiGen::Base
2
3
 
3
4
  include Jiveapps::Helpers
@@ -50,6 +51,11 @@ class CreateGenerator < RubiGen::Base
50
51
  end
51
52
  end
52
53
 
54
+ # Escape HTML entities
55
+ def h(str)
56
+ CGI.escapeHTML(str)
57
+ end
58
+
53
59
  protected
54
60
  def banner
55
61
  <<-EOS
@@ -1,11 +1,10 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <Module specificationVersion="1">
3
- <ModulePrefs title="<%= title %>"
4
- description="<%= description %>"
5
- author="<%= author_name %>"
6
- author_affiliation="<%= author_affiliation %>"
7
- author_email="<%= author_email %>"
8
- height="300">
3
+ <ModulePrefs title="<%= h title %>"
4
+ description="<%= h description %>"
5
+ author="<%= h author_name %>"
6
+ author_affiliation="<%= h author_affiliation %>"
7
+ author_email="<%= h author_email %>">
9
8
 
10
9
  <!-- Commonly used features -->
11
10
  <Require feature="dynamic-height" />
@@ -42,8 +41,8 @@
42
41
 
43
42
  <!-- Lifecycle Events: https://developers.jivesoftware.com/community/docs/DOC-1119 -->
44
43
  <!--
45
- <link rel="event.addapp" href="http://www.example.com/add" />
46
- <link rel="event.removeapp" href="http://www.example.com/remove" />
44
+ <Link rel="event.addapp" href="http://www.example.com/add" />
45
+ <Link rel="event.removeapp" href="http://www.example.com/remove" />
47
46
  -->
48
47
 
49
48
  <!-- Preloaded Content: http://wiki.opensocial.org/index.php?title=Remote_Data_Requests_%28v0.9%29#Preloading_data -->
@@ -56,7 +55,7 @@
56
55
  <!-- User Preferences: http://code.google.com/apis/gadgets/docs/reference.html#Userprefs_Ref -->
57
56
  <!--
58
57
  <UserPref name="where_i_live" display_name="Where I Live" datatype="string" default_value="" required="false" />
59
- <UserPref name="subscribe_to_newsletter" display_name="Subscribe to Newsletter" datatype="bool" default_value="" required="false" />
58
+ <UserPref name="subscribe_to_newsletter" display_name="Subscribe to Newsletter" datatype="bool" default_value="" required="false" />
60
59
  <UserPref name="difficulty"
61
60
  display_name="Difficulty"
62
61
  datatype="enum"
@@ -68,10 +67,10 @@
68
67
  -->
69
68
 
70
69
  <!-- To begin development, remove the hello view and uncomment the home and canvas views below -->
71
- <Content type="html" view="home,canvas" href="hello.html" />
70
+ <Content type="html" view="home,canvas" href="hello.html" preferred_height="400" />
72
71
 
73
72
  <!--
74
- <Content type="html" view="home" href="home.html" />
73
+ <Content type="html" view="home" href="home.html" preferred_height="400" />
75
74
  <Content type="html" view="canvas" href="canvas.html" />
76
75
  -->
77
76
 
@@ -12,11 +12,10 @@
12
12
  autoHeight: false,
13
13
  navigation: true
14
14
  });
15
- gadgets.window.adjustHeight();
16
15
  });
17
16
  </script>
18
17
  <style type="text/css" media="screen">
19
- body {background: #fff; font-size:90%;color:#333;font-family: arial, helvetica, sans-serif;}
18
+ body {background: #fff; font-size:80%;color:#333;font-family: arial, helvetica, sans-serif;}
20
19
  #wrapper {width:350px;}
21
20
  #wrapper div {padding:0;margin:0;}
22
21
  #wrapper p {padding:0;margin:0;}
@@ -33,7 +32,7 @@
33
32
  #devlinks div.documentation {padding:0;margin:0;background: url('images/icon48.png') no-repeat; background-position: 10px 2px ; height:70px;}
34
33
  #devlinks div.login {padding:0;margin:0;background: url('images/icon48.png') no-repeat; background-position: 10px 2px ; height:70px;}
35
34
  #devlinks div.market {padding:0;margin:0;background: url('images/icon48.png') no-repeat; background-position: 10px 2px ; height:70px;}
36
- #devlinks div p {margin:10px 0px 0px 80px;}
35
+ #devlinks div p {margin:0px 0px 0px 80px;}
37
36
  #devlinks h3 a,a:hover {text-decoration:none;}
38
37
  #devlinks ul {margin:5px 0px 0px 50px;}
39
38
  #devlinks li a {font-size:95%;}
@@ -2,5 +2,5 @@ gadgets.util.registerOnLoadHandler(function() {
2
2
  // add code that should run on page load here
3
3
 
4
4
  // resize app window to fit content
5
- gadgets.window.adjustHeight();
5
+ // gadgets.window.adjustHeight();
6
6
  });
@@ -39,6 +39,7 @@ Other features:
39
39
  s.add_dependency 'directory_watcher', '1.3.2'
40
40
  s.add_dependency 'rest-client', '1.6.1'
41
41
  s.add_dependency 'rubigen', '1.5.5'
42
+ s.add_dependency 'systemu', '2.2.0'
42
43
 
43
44
  s.add_development_dependency 'rspec', '>= 2.2.0'
44
45
  s.add_development_dependency 'rcov', '>= 0.9.9'
@@ -1,4 +1,5 @@
1
1
  require 'jiveapps/helpers'
2
+ require 'jiveapps/shell'
2
3
  require 'jiveapps/commands/base'
3
4
 
4
5
  Dir["#{File.dirname(__FILE__)}/commands/*.rb"].each { |c| require c }
@@ -47,7 +47,7 @@ module Jiveapps::Command
47
47
  display "=== #{@appname} folder already exists."
48
48
  else
49
49
  display "=== Cloning #{@appname}..."
50
- run("git clone #{app['git_url']} --origin jiveapps")
50
+ run("git clone #{app['git_url']} --origin jiveapps", :exec => true)
51
51
  end
52
52
  end
53
53
  end
@@ -106,32 +106,30 @@ module Jiveapps::Command
106
106
  return unless current_app
107
107
  display "Step 3 of 4. Creating local Git repository and pushing to remote... ", false
108
108
 
109
+ result = nil
109
110
  Dir.chdir(File.join(Dir.pwd, @appname)) do
110
-
111
- run("git init")
112
- run("git add .")
113
- run('git commit -m "initial commit"')
114
- run("git remote add jiveapps #{current_app['git_url']}")
115
- run("git push jiveapps master")
116
-
117
- # configure master branch to track to remote branch.
118
- # was using "git branch --set-upstream master jiveapps/master"
119
- # but it is only supported in git 1.7 and higher
120
- run("git config branch.master.remote jiveapps")
121
- run("git config branch.master.merge refs/heads/master")
122
- run("git config push.default tracking")
111
+ result = run("git init")
112
+ result = run("git add .") unless result.error?
113
+ result = run("git commit -m \"initial commit\"") unless result.error?
114
+ result = run("git remote add jiveapps #{current_app['git_url']}") unless result.error?
115
+ result = run("git push jiveapps master") unless result.error?
123
116
  end
124
117
 
125
- if $? == 0
126
- display "SUCCESS"
127
- else
118
+ if result.error?
128
119
  display "FAILURE"
120
+ display result.error
129
121
  display_git_push_fail_info
130
122
  delete_app
123
+ else
124
+ display "SUCCESS"
125
+ Dir.chdir(File.join(Dir.pwd, @appname)) do
126
+ run("git branch --set-upstream master jiveapps/master")
127
+ end
131
128
  end
132
129
  end
133
130
 
134
131
  def check_app_push
132
+ return unless current_app
135
133
  response_code = get_response_code(current_app['app_url'])
136
134
  if response_code != 200
137
135
  display_git_push_fail_info
@@ -15,8 +15,11 @@ module Jiveapps::Command
15
15
  display "create <app_name> # create a new app"
16
16
  display "clone <app_name> # clone the repository of an existing app"
17
17
  display ""
18
- display "info [--app <app_name>] # displays information about an app"
19
- display "install [--app <app_name>] # install an app on the sandbox (if you removed it, you can reinstall)"
18
+ display "=== App Specific Commands"
19
+ display " NOTE: run these within app directory, or pass app name with: --app <app_name>"
20
+ display ""
21
+ display "info # displays information about an app"
22
+ display "install # install an app on the sandbox (if you removed it, you can reinstall)"
20
23
  display ""
21
24
  display "keys # show your user\'s public keys"
22
25
  display "keys:add [<path to keyfile>] # add a public key. optionally include path"
@@ -47,9 +47,7 @@ module Jiveapps::Command
47
47
  display "\n\n\n=== Stopping LiveDev: #{app}"
48
48
 
49
49
  # remove livedev run file if it exists
50
- if File.exist?(".git/livedev")
51
- File.delete(".git/livedev")
52
- end
50
+ remove_livedev_run_file
53
51
 
54
52
  # switch server to run in normal mode
55
53
  display "1/3: Switching the Jive App Sandbox to point to master branch."
@@ -98,6 +96,33 @@ module Jiveapps::Command
98
96
 
99
97
  private
100
98
 
99
+ # This calls the normal Jiveapps::Helper run() method,
100
+ # detects if there is an error, and if there is, removes
101
+ # the livedev run/lock file and quits with an error.
102
+ def run(cmd)
103
+ result = super(cmd)
104
+ if result.error?
105
+ display "FAILURE"
106
+ display result.error
107
+ remove_livedev_run_file
108
+ exit 1
109
+ end
110
+ end
111
+
112
+ # Because STDIN.gets() blocks on Windows with the systemu library
113
+ # We use this inside the livedev listener loop instead of the normal
114
+ # run() which calls systemu(). Less error handling is possible.
115
+ def nonblock_run(command)
116
+ if debug_mode?
117
+ puts "DEBUG: $ #{command}"
118
+ `#{command}`
119
+ elsif running_on_windows?
120
+ `#{command} > NUL 2>&1`
121
+ else
122
+ `#{command} > /dev/null 2>&1` # silent
123
+ end
124
+ end
125
+
101
126
  def livedev_branch_name
102
127
  "livedev/#{jiveapps.user}"
103
128
  end
@@ -167,22 +192,22 @@ module Jiveapps::Command
167
192
  def watch_dir_and_commit_changes
168
193
  @dw = DirectoryWatcher.new '.', :glob => '**/*', :pre_load => true
169
194
  @dw.interval = 1
170
- @dw.add_observer do |*args|
195
+ @dw.add_observer do |*args|
171
196
  verify_livedev_branch
172
197
 
173
- changes = ""
198
+ changes = []
174
199
  args.each do |event|
175
200
  if event.type == :added || event.type == :modified
176
- run("git add #{event.path}")
201
+ nonblock_run("git add #{event.path}")
177
202
  elsif event.type == :removed
178
- run("git rm #{event.path}")
203
+ nonblock_run("git rm #{event.path}")
179
204
  end
180
205
  display " - [#{Time.now.strftime("%Y-%m-%d %T")}] LiveDev: #{event.type} #{event.path}"
181
- changes << " #{event.type} '#{event.path}'\n"
206
+ changes << "#{event.type} '#{event.path}'"
182
207
  end
183
208
 
184
- run("git commit -m \"LiveDev Changes\n#{changes}\"")
185
- run("git push -f jiveapps #{livedev_branch_name}")
209
+ nonblock_run("git commit -m \"LiveDev Changes: #{changes.join(', ')}\"")
210
+ nonblock_run("git push -f jiveapps #{livedev_branch_name}")
186
211
  end
187
212
 
188
213
  @dw.start
@@ -219,6 +244,12 @@ module Jiveapps::Command
219
244
  end
220
245
  end
221
246
 
247
+ def remove_livedev_run_file
248
+ if File.exist?(".git/livedev")
249
+ File.delete(".git/livedev")
250
+ end
251
+ end
252
+
222
253
  end
223
254
 
224
255
  end
@@ -74,17 +74,22 @@ module Jiveapps
74
74
  raise Jiveapps::Command::CommandFailed, "Missing #{list.length} parameter#{list.length > 1 ? 's' : ''}: #{list.map{|l| '<' + l.to_s + '>'}.join(' ')}#{@usage}" if list.length > 0
75
75
  end
76
76
 
77
- def run(command)
78
- if debug_mode?
79
- puts "DEBUG: $ #{command}"
80
- `#{command}`
81
- elsif running_on_windows?
82
- `#{command} > NUL 2>&1`
77
+ def run(command, options={})
78
+ options[:exec] ||= false
79
+
80
+ puts "DEBUG: $ #{command}" if debug_mode?
81
+
82
+ if options[:exec] == true
83
+ exec command
83
84
  else
84
- `#{command} > /dev/null 2>&1` # silent
85
+ sh(command)
85
86
  end
86
87
  end
87
88
 
89
+ def sh(command)
90
+ Shell.new(command).run
91
+ end
92
+
88
93
  def debug_mode?
89
94
  return @debug_mode if @debug_mode.nil? == false
90
95
 
@@ -0,0 +1,45 @@
1
+ # Originally taken (and modified) from GitHub-Gem: https://github.com/defunkt/github-gem/blob/master/lib/github/command.rb
2
+
3
+ require 'systemu'
4
+
5
+ module Jiveapps
6
+ class Shell < String
7
+ attr_reader :error
8
+ attr_reader :out
9
+ attr_reader :exit_status
10
+
11
+ def initialize(command)
12
+ @command = command
13
+ end
14
+
15
+ def run
16
+ out = err = nil
17
+
18
+ begin
19
+ status, out, err = systemu(@command)
20
+ rescue => e
21
+ puts e.inspect
22
+ end
23
+
24
+ @exit_status = status.exitstatus
25
+
26
+ replace @error = err unless err.empty?
27
+ replace @out = out unless out.empty?
28
+
29
+ self
30
+ end
31
+
32
+ def command
33
+ @command.join(' ')
34
+ end
35
+
36
+ def error?
37
+ @exit_status != 0
38
+ end
39
+
40
+ def out?
41
+ !!@out
42
+ end
43
+
44
+ end
45
+ end
@@ -1,3 +1,3 @@
1
1
  module Jiveapps
2
- VERSION = '1.0.4'
2
+ VERSION = '1.0.5'
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jiveapps
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 4
10
- version: 1.0.4
9
+ - 5
10
+ version: 1.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Scott Becker
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-06-14 00:00:00 -07:00
18
+ date: 2011-08-01 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -83,9 +83,25 @@ dependencies:
83
83
  type: :runtime
84
84
  version_requirements: *id004
85
85
  - !ruby/object:Gem::Dependency
86
- name: rspec
86
+ name: systemu
87
87
  prerelease: false
88
88
  requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - "="
92
+ - !ruby/object:Gem::Version
93
+ hash: 7
94
+ segments:
95
+ - 2
96
+ - 2
97
+ - 0
98
+ version: 2.2.0
99
+ type: :runtime
100
+ version_requirements: *id005
101
+ - !ruby/object:Gem::Dependency
102
+ name: rspec
103
+ prerelease: false
104
+ requirement: &id006 !ruby/object:Gem::Requirement
89
105
  none: false
90
106
  requirements:
91
107
  - - ">="
@@ -97,11 +113,11 @@ dependencies:
97
113
  - 0
98
114
  version: 2.2.0
99
115
  type: :development
100
- version_requirements: *id005
116
+ version_requirements: *id006
101
117
  - !ruby/object:Gem::Dependency
102
118
  name: rcov
103
119
  prerelease: false
104
- requirement: &id006 !ruby/object:Gem::Requirement
120
+ requirement: &id007 !ruby/object:Gem::Requirement
105
121
  none: false
106
122
  requirements:
107
123
  - - ">="
@@ -113,11 +129,11 @@ dependencies:
113
129
  - 9
114
130
  version: 0.9.9
115
131
  type: :development
116
- version_requirements: *id006
132
+ version_requirements: *id007
117
133
  - !ruby/object:Gem::Dependency
118
134
  name: webmock
119
135
  prerelease: false
120
- requirement: &id007 !ruby/object:Gem::Requirement
136
+ requirement: &id008 !ruby/object:Gem::Requirement
121
137
  none: false
122
138
  requirements:
123
139
  - - ">="
@@ -129,7 +145,7 @@ dependencies:
129
145
  - 1
130
146
  version: 1.6.1
131
147
  type: :development
132
- version_requirements: *id007
148
+ version_requirements: *id008
133
149
  description: |+
134
150
  == Jiveapps
135
151
 
@@ -197,6 +213,7 @@ files:
197
213
  - lib/jiveapps/commands/oauth.rb
198
214
  - lib/jiveapps/commands/sharing.rb
199
215
  - lib/jiveapps/helpers.rb
216
+ - lib/jiveapps/shell.rb
200
217
  - lib/jiveapps/version.rb
201
218
  - spec/client_spec.rb
202
219
  - spec/commands/app_spec.rb
@@ -237,7 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
254
  requirements: []
238
255
 
239
256
  rubyforge_project:
240
- rubygems_version: 1.3.9.1
257
+ rubygems_version: 1.3.9.2
241
258
  signing_key:
242
259
  specification_version: 3
243
260
  summary: The "jiveapps" gem is a set of command line tools for building and hosting Jive App front-ends.