jiveapps 0.0.4 → 0.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.
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :test do
4
+ gem 'rspec', '>= 2.2.0'
5
+ gem 'webmock', '>= 1.6.1'
6
+ end
7
+
8
+ gem 'rest-client', '>= 1.6.1'
9
+ gem 'rubigen', '>= 1.5.5'
10
+ gem 'json_pure', '>= 1.4.6'
data/History.txt CHANGED
@@ -1,3 +1,11 @@
1
+ === 0.0.5 2010-12-06
2
+ * Bug Fixes
3
+ * Re-enabled re-authentication
4
+ * Major Enhancements
5
+ * Better user feedback when creating apps
6
+ * Better error reporting
7
+ * No longer require JSON C extension (no GCC or XCode required)
8
+
1
9
  === 0.0.4 2010-11-22
2
10
  * Major enhancements
3
11
  * SSL support
data/Manifest.txt CHANGED
@@ -1,4 +1,5 @@
1
1
  .rspec
2
+ Gemfile
2
3
  History.txt
3
4
  Manifest.txt
4
5
  PostInstall.txt
data/Rakefile CHANGED
@@ -1,8 +1,10 @@
1
+ $LOAD_PATH << './lib'
2
+
1
3
  require 'rubygems'
2
4
  gem 'hoe', '>= 2.1.0'
3
5
  require 'hoe'
4
6
  require 'fileutils'
5
- require './lib/jiveapps'
7
+ require 'jiveapps'
6
8
 
7
9
  Hoe.plugin :newgem
8
10
  # Hoe.plugin :website
@@ -14,12 +16,12 @@ $hoe = Hoe.spec 'jiveapps' do
14
16
  self.developer 'Scott Becker', 'becker.scott@gmail.com'
15
17
  self.description = "A set of command line tools for creating Jive Apps."
16
18
  self.summary = self.description
17
- self.version = "0.0.4"
19
+ self.version = "0.0.5"
18
20
  self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
19
21
  self.rubyforge_name = self.name # TODO this is default value
20
22
  self.extra_deps = [
21
23
  ['rest-client'],
22
- ['json'],
24
+ ['json_pure'],
23
25
  ['rubigen']
24
26
  ]
25
27
  end
@@ -66,3 +68,15 @@ RSpec::Core::RakeTask.new('rcov') do |t|
66
68
  end
67
69
 
68
70
  task :default => :spec
71
+
72
+ desc "Fix password"
73
+ task "fix_pass" do
74
+ system "rm ~/.jiveapps/credentials"
75
+ system "cp ~/.jiveapps/credentials_right ~/.jiveapps/credentials"
76
+ end
77
+
78
+ desc "Break password"
79
+ task "break_pass" do
80
+ system "rm ~/.jiveapps/credentials"
81
+ system "cp ~/.jiveapps/credentials_wrong ~/.jiveapps/credentials"
82
+ end
data/lib/jiveapps.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Jiveapps
2
- VERSION = '0.0.4'
3
- WEBHOST = 'apphosting.jivesoftware.com'
4
- GITHOST = 'apphosting.jivesoftware.com'
2
+ VERSION = '0.0.5'
3
+ WEBHOST = 'https://apphosting.jivesoftware.com'
4
+ MODE = 'production'
5
5
  end
6
6
 
7
7
  require 'jiveapps/client'
@@ -4,12 +4,8 @@ require 'json'
4
4
 
5
5
  class Jiveapps::Client
6
6
 
7
- def self.version
8
- '0.0.4'
9
- end
10
-
11
7
  def self.gem_version_string
12
- "jiveapps-gem/#{version}"
8
+ "jiveapps-gem/#{Jiveapps::VERSION}"
13
9
  end
14
10
 
15
11
  attr_reader :host, :user, :password
@@ -28,7 +24,7 @@ class Jiveapps::Client
28
24
  if apps.class == Array
29
25
  apps.map { |item| item['app'] }
30
26
  else
31
- return []
27
+ return apps
32
28
  end
33
29
  end
34
30
 
@@ -41,13 +37,13 @@ class Jiveapps::Client
41
37
  end
42
38
  end
43
39
 
44
- def create(name)
40
+ def post_app(path, obj)
45
41
  begin
46
- item = post("/apps", {:app => {:name => name}})
42
+ item = post(path, obj)
47
43
  if item.class == Hash && item['app']
48
44
  item['app']
49
45
  else
50
- nil
46
+ item
51
47
  end
52
48
  rescue => e
53
49
  if e.response.body =~ /^\{/ # assume this is JSON if it starts with "{"
@@ -59,24 +55,16 @@ class Jiveapps::Client
59
55
  end
60
56
  end
61
57
 
62
- def register(name)
63
- item = post("/apps/#{escape(name)}/register", {})
58
+ def create(name)
59
+ post_app("/apps", {:app => {:name => name}})
60
+ end
64
61
 
65
- if item.class == Hash && item['app']
66
- item['app']
67
- else
68
- nil
69
- end
62
+ def register(name)
63
+ post_app("/apps/#{escape(name)}/register", {})
70
64
  end
71
65
 
72
66
  def install(name)
73
- item = post("/apps/#{escape(name)}/register", {})
74
-
75
- if item.class == Hash && item['app']
76
- item['app']
77
- else
78
- nil
79
- end
67
+ post_app("/apps/#{escape(name)}/install", {})
80
68
  end
81
69
 
82
70
  ### SSH Keys
@@ -134,13 +122,14 @@ class Jiveapps::Client
134
122
  def process(method, uri, extra_headers={}, payload=nil)
135
123
  headers = jiveapps_headers.merge(extra_headers)
136
124
  args = [method, payload, headers].compact
125
+
137
126
  begin
138
127
  response = resource(uri).send(*args)
139
-
140
128
  extract_warning(response)
141
129
  parse_response(response.to_s)
142
- rescue => e
143
- puts e.response
130
+ rescue RestClient::BadRequest => e
131
+ puts e.response.body
132
+ return nil
144
133
  end
145
134
  end
146
135
 
@@ -167,11 +156,12 @@ class Jiveapps::Client
167
156
  end
168
157
 
169
158
  def escape(value) # :nodoc:
170
- ### Ugly hack - nginx/passenger unescapes the name before it gets to rails, causing routes to fail. double encode in production
171
- if Jiveapps::WEBHOST =~ /^becker/ # in dev mode
172
- _escape(value)
173
- else # in production mode
159
+ ### Ugly hack - nginx/passenger unescapes the name before it gets
160
+ ### to rails, causing routes to fail. double encode in production
161
+ if Jiveapps::MODE == 'production'
174
162
  _escape(_escape(value))
163
+ else
164
+ _escape(value)
175
165
  end
176
166
  end
177
167
 
@@ -185,7 +175,7 @@ class Jiveapps::Client
185
175
  if uri =~ /^http?/
186
176
  RestClient::Resource.new(uri, user, password)
187
177
  else
188
- RestClient::Resource.new("https://#{host}", user, password)[uri]
178
+ RestClient::Resource.new(host, user, password)[uri]
189
179
  end
190
180
  end
191
181
 
@@ -3,8 +3,15 @@ module Jiveapps::Command
3
3
 
4
4
  attr_reader :current_app
5
5
 
6
+ def version
7
+ display Jiveapps::Client.gem_version_string
8
+ end
9
+
6
10
  def list
7
- formatted_list = jiveapps.list.map do |app|
11
+ jiveapps_list = jiveapps.list
12
+ return if jiveapps_list.nil?
13
+
14
+ formatted_list = jiveapps_list.map do |app|
8
15
  " - " + app['name']
9
16
  end
10
17
 
@@ -32,8 +39,10 @@ module Jiveapps::Command
32
39
  end
33
40
 
34
41
  def create
35
- # check auth credentials and ssh key before generating app
36
- Jiveapps::Command.run_internal('auth:check', [])
42
+ debug "Running in debug mode."
43
+ app_list = Jiveapps::Command.run_internal('auth:check', []) # check auth credentials and ssh key before generating app
44
+ return unless app_list.class == Array
45
+ display "Creating new Jive App \"#{app_name}\"..."
37
46
  create_remote_app
38
47
  generate_app
39
48
  create_local_git_repo_and_push_to_remote
@@ -42,11 +51,13 @@ module Jiveapps::Command
42
51
  end
43
52
 
44
53
  def install
54
+ display "Installing \"#{app_name}\" on the Jive App Sandbox: ", false
45
55
  app = jiveapps.install(app_name)
56
+ handle_response_errors
46
57
  if app == nil
47
58
  display "App not found."
48
59
  else
49
- display "=== #{app['name']} - Installed"
60
+ display "=== #{app['name']}"
50
61
  display_app_info(app)
51
62
  end
52
63
  end
@@ -65,19 +76,14 @@ module Jiveapps::Command
65
76
  end
66
77
 
67
78
  def create_remote_app
68
- debug "Creating remote app."
79
+ display "Step 1 of 4. Check availability and create remote repository: ", false
69
80
  @current_app = jiveapps.create(app_name)
70
- if @current_app.class == Hash && @current_app["errors"]
71
- if @current_app["errors"]["name"]
72
- display "Error: Name #{@current_app["errors"]["name"]}"
73
- end
74
- @current_app = nil
75
- end
81
+ handle_response_errors
76
82
  end
77
83
 
78
84
  def generate_app
79
85
  return unless current_app
80
- debug "Generating local app."
86
+ display "Step 2 of 4. Generate app scaffolding."
81
87
 
82
88
  require 'rubygems'
83
89
  require 'rubigen'
@@ -88,7 +94,7 @@ module Jiveapps::Command
88
94
 
89
95
  def create_local_git_repo_and_push_to_remote
90
96
  return unless current_app
91
- debug "Creating local git repo and pushing to remote."
97
+ display "Step 3 of 4. Creating local Git repository and push to remote: ", false
92
98
 
93
99
  Dir.chdir(File.join(Dir.pwd, app_name)) do
94
100
 
@@ -98,13 +104,20 @@ module Jiveapps::Command
98
104
  run("git remote add jiveapps #{current_app['git_url']}")
99
105
  run("git push jiveapps master")
100
106
  end
107
+
108
+ if $? == 0
109
+ display "SUCCESS"
110
+ else
111
+ display "FAILURE"
112
+ end
101
113
  end
102
114
 
103
115
  def register_app
104
116
  return unless current_app
105
- debug "Registering app."
117
+ display "Step 4 of 4. Registering app on the Jive Apps Dev Center and installing on sandbox: ", false
106
118
 
107
119
  @current_app = jiveapps.register(app_name)
120
+ handle_response_errors
108
121
  end
109
122
 
110
123
  def create_notify_user
@@ -149,5 +162,17 @@ module Jiveapps::Command
149
162
  end
150
163
  end
151
164
 
165
+ def handle_response_errors
166
+ if @current_app.class == Hash && @current_app["errors"]
167
+ display "FAILURE"
168
+ @current_app["errors"].each do |key, value|
169
+ display "Error on \"#{key}\": #{value}"
170
+ end
171
+ @current_app = nil
172
+ else
173
+ display "SUCCESS"
174
+ end
175
+ end
176
+
152
177
  end
153
178
  end
@@ -62,7 +62,7 @@ module Jiveapps::Command
62
62
  end
63
63
 
64
64
  def ask_for_credentials
65
- puts "Enter your Jiveapps credentials."
65
+ puts "Enter your Jive Apps Developer Community credentials. (https://developers.jivesoftware.com)"
66
66
 
67
67
  print "Username: "
68
68
  user = ask
@@ -2,6 +2,7 @@ module Jiveapps::Command
2
2
  class Help < Base
3
3
 
4
4
  def index
5
+ puts "jiveapps gem: v#{Jiveapps::VERSION}"
5
6
  puts <<-eos
6
7
  === Summary
7
8
  The "jiveapps" program is a command line tool for building and hosting Jive App front-ends.
data/spec/spec_helper.rb CHANGED
@@ -13,7 +13,7 @@ Dir["#{File.dirname(__FILE__)}/../lib/jiveapps/commands/*"].each { |c| require c
13
13
  require 'jiveapps/client'
14
14
 
15
15
  def stub_api_request(method, path)
16
- stub_request(method, "https://#{Jiveapps::WEBHOST}#{path}")
16
+ stub_request(method, "#{Jiveapps::WEBHOST}#{path}")
17
17
  end
18
18
 
19
19
  def prepare_command(klass)
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: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 4
10
- version: 0.0.4
9
+ - 5
10
+ version: 0.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: 2010-11-22 00:00:00 -08:00
18
+ date: 2010-12-06 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -33,7 +33,7 @@ dependencies:
33
33
  type: :runtime
34
34
  version_requirements: *id001
35
35
  - !ruby/object:Gem::Dependency
36
- name: json
36
+ name: json_pure
37
37
  prerelease: false
38
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
39
  none: false
@@ -87,9 +87,9 @@ dependencies:
87
87
  hash: 19
88
88
  segments:
89
89
  - 2
90
- - 6
91
- - 2
92
- version: 2.6.2
90
+ - 7
91
+ - 0
92
+ version: 2.7.0
93
93
  type: :development
94
94
  version_requirements: *id005
95
95
  description: A set of command line tools for creating Jive Apps.
@@ -105,6 +105,7 @@ extra_rdoc_files:
105
105
  - PostInstall.txt
106
106
  files:
107
107
  - .rspec
108
+ - Gemfile
108
109
  - History.txt
109
110
  - Manifest.txt
110
111
  - PostInstall.txt