appsendr 0.0.1 → 0.0.2

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/Manifest CHANGED
@@ -0,0 +1,21 @@
1
+ Manifest
2
+ README.rdoc
3
+ Rakefile
4
+ appsendr.gemspec
5
+ bin/appsendr
6
+ lib/appsendr.rb
7
+ lib/appsendr/binary_plist.rb
8
+ lib/appsendr/client.rb
9
+ lib/appsendr/command.rb
10
+ lib/appsendr/commands/app.rb
11
+ lib/appsendr/commands/auth.rb
12
+ lib/appsendr/commands/base.rb
13
+ lib/appsendr/commands/build.rb
14
+ lib/appsendr/commands/collaborators.rb
15
+ lib/appsendr/commands/deploy.rb
16
+ lib/appsendr/commands/help.rb
17
+ lib/appsendr/commands/testers.rb
18
+ lib/appsendr/commands/version.rb
19
+ lib/appsendr/constants.rb
20
+ lib/appsendr/helpers.rb
21
+ terms
data/README.rdoc CHANGED
@@ -42,7 +42,7 @@ build <active configuration> # build and deploy app
42
42
  build:clean # clean project
43
43
 
44
44
  testers # list testers for app
45
- testers:add <email> <name> #t
45
+ testers:add <email> <name> #
46
46
  testers:remove <email>
47
47
  testers:clear
48
48
 
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ Echoe.new('appsendr', AppSendr::VERSION) do |p|
10
10
  p.email = "nolanbrown@gmail.com"
11
11
  p.ignore_pattern = ["tmp/*", "script/*"]
12
12
  p.development_dependencies = []
13
- p.runtime_dependencies = ["rest-client >=1.4.0", "rubyzip", "json_pure >=1.2.0"]
13
+ p.runtime_dependencies = ["rest-client >=1.4.0", "rubyzip", "json_pure >=1.2.0", "aws-s3"]
14
14
  p.has_rdoc = true
15
15
 
16
16
  end
data/appsendr.gemspec CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{appsendr}
5
- s.version = "0.0.1"
5
+ s.version = "0.0.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["AppSendr"]
9
- s.date = %q{2010-11-20}
9
+ s.date = %q{2010-12-15}
10
10
  s.default_executable = %q{appsendr}
11
11
  s.description = %q{A gem that will build and distribute an iphone/ipad app to the web for remote install}
12
12
  s.email = %q{nolanbrown@gmail.com}
13
13
  s.executables = ["appsendr"]
14
- s.extra_rdoc_files = ["README.rdoc", "bin/appsendr", "lib/appsendr.rb", "lib/appsendr/binary_plist.rb", "lib/appsendr/client.rb", "lib/appsendr/command.rb", "lib/appsendr/commands/app.rb", "lib/appsendr/commands/auth.rb", "lib/appsendr/commands/base.rb", "lib/appsendr/commands/build.rb", "lib/appsendr/commands/deploy.rb", "lib/appsendr/commands/help.rb", "lib/appsendr/commands/testers.rb", "lib/appsendr/commands/version.rb", "lib/appsendr/constants.rb", "lib/appsendr/helpers.rb"]
15
- s.files = ["Manifest", "README.rdoc", "Rakefile", "appsendr.gemspec", "bin/appsendr", "lib/appsendr.rb", "lib/appsendr/binary_plist.rb", "lib/appsendr/client.rb", "lib/appsendr/command.rb", "lib/appsendr/commands/app.rb", "lib/appsendr/commands/auth.rb", "lib/appsendr/commands/base.rb", "lib/appsendr/commands/build.rb", "lib/appsendr/commands/deploy.rb", "lib/appsendr/commands/help.rb", "lib/appsendr/commands/testers.rb", "lib/appsendr/commands/version.rb", "lib/appsendr/constants.rb", "lib/appsendr/helpers.rb"]
14
+ s.extra_rdoc_files = ["README.rdoc", "bin/appsendr", "lib/appsendr.rb", "lib/appsendr/binary_plist.rb", "lib/appsendr/client.rb", "lib/appsendr/command.rb", "lib/appsendr/commands/app.rb", "lib/appsendr/commands/auth.rb", "lib/appsendr/commands/base.rb", "lib/appsendr/commands/build.rb", "lib/appsendr/commands/collaborators.rb", "lib/appsendr/commands/deploy.rb", "lib/appsendr/commands/help.rb", "lib/appsendr/commands/testers.rb", "lib/appsendr/commands/version.rb", "lib/appsendr/constants.rb", "lib/appsendr/helpers.rb"]
15
+ s.files = ["Manifest", "README.rdoc", "Rakefile", "appsendr.gemspec", "bin/appsendr", "lib/appsendr.rb", "lib/appsendr/binary_plist.rb", "lib/appsendr/client.rb", "lib/appsendr/command.rb", "lib/appsendr/commands/app.rb", "lib/appsendr/commands/auth.rb", "lib/appsendr/commands/base.rb", "lib/appsendr/commands/build.rb", "lib/appsendr/commands/collaborators.rb", "lib/appsendr/commands/deploy.rb", "lib/appsendr/commands/help.rb", "lib/appsendr/commands/testers.rb", "lib/appsendr/commands/version.rb", "lib/appsendr/constants.rb", "lib/appsendr/helpers.rb", "terms"]
16
16
  s.homepage = %q{http://www.appsendr.com/gem}
17
17
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Appsendr", "--main", "README.rdoc"]
18
18
  s.require_paths = ["lib"]
@@ -28,14 +28,17 @@ Gem::Specification.new do |s|
28
28
  s.add_runtime_dependency(%q<rest-client>, [">= 1.4.0"])
29
29
  s.add_runtime_dependency(%q<rubyzip>, [">= 0"])
30
30
  s.add_runtime_dependency(%q<json_pure>, [">= 1.2.0"])
31
+ s.add_runtime_dependency(%q<aws-s3>, [">= 0"])
31
32
  else
32
33
  s.add_dependency(%q<rest-client>, [">= 1.4.0"])
33
34
  s.add_dependency(%q<rubyzip>, [">= 0"])
34
35
  s.add_dependency(%q<json_pure>, [">= 1.2.0"])
36
+ s.add_dependency(%q<aws-s3>, [">= 0"])
35
37
  end
36
38
  else
37
39
  s.add_dependency(%q<rest-client>, [">= 1.4.0"])
38
40
  s.add_dependency(%q<rubyzip>, [">= 0"])
39
41
  s.add_dependency(%q<json_pure>, [">= 1.2.0"])
42
+ s.add_dependency(%q<aws-s3>, [">= 0"])
40
43
  end
41
44
  end
@@ -3,29 +3,9 @@ require "nkf"
3
3
  require "set"
4
4
  require "stringio"
5
5
 
6
- ## https://github.com/schlueter/Ipa-Reader/blob/master/lib/ipa_reader/ipa_file.rb
7
- # (The MIT License)
6
+ # Binary Plist implementation is from @schlueter
7
+ # https://github.com/schlueter/Ipa-Reader/blob/master/lib/ipa_reader/plist_binary.rb
8
8
  #
9
- # Copyright (c) 2010
10
- #
11
- # Permission is hereby granted, free of charge, to any person obtaining
12
- # a copy of this software and associated documentation files (the
13
- # 'Software'), to deal in the Software without restriction, including
14
- # without limitation the rights to use, copy, modify, merge, publish,
15
- # distribute, sublicense, and/or sell copies of the Software, and to
16
- # permit persons to whom the Software is furnished to do so, subject to
17
- # the following conditions:
18
- #
19
- # The above copyright notice and this permission notice shall be
20
- # included in all copies or substantial portions of the Software.
21
- #
22
- # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
23
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
25
- # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
26
- # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27
- # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28
- # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
9
 
30
10
  module AppSendr
31
11
  module Plist
@@ -4,9 +4,8 @@ require 'uri'
4
4
  require 'time'
5
5
  require 'appsendr/constants'
6
6
  require 'json/pure' unless {}.respond_to?(:to_json)
7
-
8
- # A Ruby class to call the Heroku REST API. You might use this if you want to
9
- # manage your Heroku apps from within a Ruby program, such as Capistrano.
7
+ require 'aws/s3'
8
+ # A Ruby class to call the AppSendr REST API.
10
9
  #
11
10
  # Example:
12
11
  #
@@ -14,6 +13,7 @@ require 'json/pure' unless {}.respond_to?(:to_json)
14
13
  # droppr = AppSendr::Client.new('me@example.com', 'mypass')
15
14
  # droppr.create('myapp')
16
15
  #
16
+
17
17
  class AppSendr::Client
18
18
  def self.version
19
19
  AppSendr::VERSION
@@ -53,6 +53,10 @@ class AppSendr::Client
53
53
  post('/api/app/link',{:id=>id});
54
54
  end
55
55
 
56
+ def install_url(app_id)
57
+ JSON.parse(get('/api/app/last_install_url/'+app_id.to_s))
58
+ end
59
+
56
60
  def create(name)
57
61
  JSON.parse(post('/api/app/create', {:name=>name}))
58
62
  end
@@ -69,6 +73,32 @@ class AppSendr::Client
69
73
  delete('/api/app/clear_testers/'+app_id.to_s,{});
70
74
  end
71
75
 
76
+ def add_group(app_id,name)
77
+ post('/api/app/add_group/'+app_id.to_s,{:name=>name});
78
+ end
79
+
80
+ def remove_group(app_id, name)
81
+ post('/api/app/remove_group/'+app_id.to_s,{:name=>name});
82
+ end
83
+
84
+ def groups(app_id)
85
+ JSON.parse(get('/api/app/groups/'+app_id.to_s))
86
+ end
87
+
88
+ ### add_collaborator
89
+
90
+ def add_collaborator(app_id,emaill)
91
+ post('/api/app/add_collaborator/'+app_id.to_s,{:email=>email});
92
+ end
93
+
94
+ def remove_collaborator(app_id,email)
95
+ post('/api/app/remove_collaborator/'+app_id.to_s,{:email=>email});
96
+ end
97
+
98
+ def collaborators(app_id)
99
+ JSON.parse(get('/api/app/collaborators/'+app_id.to_s))
100
+ end
101
+
72
102
  def testers(app_id)
73
103
  JSON.parse(get('/api/app/testers/'+app_id.to_s))
74
104
  end
@@ -76,22 +106,51 @@ class AppSendr::Client
76
106
  JSON.parse(get('/api/app/notify/'+app_id.to_s))
77
107
  end
78
108
 
79
- def upload(app_id, ipa,provisioning, notes, bundle_id, icon)
80
- params = {
81
- :ipa => File.new(ipa, 'rb'),
82
- :profile => File.new(provisioning, 'rb'),
83
- :notes=>notes,
84
- :bundle_identifier => bundle_id,
85
- :built_at=>Time.now
86
- }
87
- if icon
88
- params[:icon] = File.new(icon,'rb')
89
- end
90
- post('/api/app/upload/'+app_id.to_s, params)
109
+ def upload(app_id, ipa,provisioning,notify, notes, bundle_id, icon)
110
+ params = {
111
+ :profile => File.new(provisioning, 'rb'),
112
+ :notes=>notes,
113
+ :bundle_identifier => bundle_id,
114
+ :built_at=>Time.now,
115
+ :notify=>notify
116
+ # :ipa=>
117
+ }
118
+ if icon
119
+ params[:icon] = File.new(icon,'rb')
120
+ end
121
+ if(is_file_to_large?(ipa))
122
+ puts "IPA is too large to upload."
123
+ else
124
+ params[:ipa] = File.new(ipa, 'rb')
125
+
126
+ post('/api/app/upload/'+app_id.to_s, params)
127
+ end
91
128
  end
92
129
 
93
130
  protected
94
-
131
+ def is_file_to_large?(file)
132
+ in_mb = size_of_file(file).to_f
133
+ if in_mb > 10
134
+ return true
135
+ else
136
+ return false
137
+ end
138
+
139
+ end
140
+
141
+ def size_of_file(file)
142
+ size = File.size(file)
143
+ mb = 1024.0 * 1024.0
144
+ in_mb = size / mb
145
+
146
+ end
147
+
148
+
149
+ def upload_to_s3_directly
150
+ @s3_url = "http://appsendr.s3.amazonaws.com/"
151
+
152
+ end
153
+
95
154
  def api_params(params={})
96
155
  params[:api_key] ||= @api_key
97
156
 
@@ -1,5 +1,4 @@
1
1
  require 'readline'
2
- #require 'launchy'
3
2
 
4
3
  module AppSendr::Command
5
4
  class App < Base
@@ -36,6 +35,28 @@ module AppSendr::Command
36
35
  end
37
36
  end
38
37
 
38
+ def url
39
+ if in_project_dir?
40
+
41
+ resp = appsendr.install_url(get_app_id)
42
+ if resp["message"].size > 0
43
+ display "=== Your last install url is:"
44
+ url = resp["message"]["install_url"]
45
+ display url
46
+ do_copy = option_exists?('--copy', false)
47
+ if do_copy
48
+ display "Copied URL"
49
+ IO.popen('pbcopy', 'w') { |clipboard| clipboard.write url }
50
+ end
51
+ else
52
+ display "No versions available"
53
+ end
54
+ else
55
+ error("You are not in a project directory")
56
+ end
57
+
58
+ end
59
+
39
60
  def link
40
61
  if in_project_dir?
41
62
  error "This app is already linked to an appsendr." unless !has_project_droppr?
@@ -50,7 +71,7 @@ module AppSendr::Command
50
71
  display "Your app has been linked."
51
72
 
52
73
  else
53
- error("You are not in a project")
74
+ error("You are not in a project directory")
54
75
  end
55
76
  end
56
77
 
@@ -77,6 +98,24 @@ module AppSendr::Command
77
98
  end
78
99
  end
79
100
 
101
+ def groups
102
+ if in_project_dir?
103
+
104
+ groups = appsendr.groups(get_app_id)
105
+ if groups["message"].size > 0
106
+ display "=== Your groups"
107
+ i = 0
108
+ display groups["message"].map {|app, id|
109
+ "#{i+=1}. #{app['tester_group']['name'].ljust(35)}"
110
+ }.join("\n")
111
+ else
112
+ display "You have no groups."
113
+ end
114
+ else
115
+ error("You are not in a project directory")
116
+ end
117
+ end
118
+
80
119
  # def info
81
120
  # name = (args.first && !args.first =~ /^\-\-/) ? args.first : extract_app
82
121
  # attrs = appsendr.info(name)
@@ -1,5 +1,12 @@
1
1
  require 'fileutils'
2
2
 
3
+ class String
4
+ def cl_escape
5
+ self.gsub('&','\\\\&').gsub(" ","\\ ")
6
+ end
7
+ end
8
+
9
+
3
10
  module AppSendr::Command
4
11
  class Base
5
12
  include AppSendr::Helpers
@@ -41,6 +48,13 @@ module AppSendr::Command
41
48
  app
42
49
  end
43
50
 
51
+ def option_exists?(options, default=true)
52
+ values = options.is_a?(Array) ? options : [options]
53
+ return false unless opt_index = args.select { |a| values.include? a }.first
54
+ return true
55
+ end
56
+
57
+
44
58
  def extract_option(options, default=true)
45
59
  values = options.is_a?(Array) ? options : [options]
46
60
  return unless opt_index = args.select { |a| values.include? a }.first
@@ -55,8 +55,9 @@ module AppSendr::Command
55
55
 
56
56
  FileUtils.rm_rf payload_path
57
57
  Dir.mkdir(payload_path)
58
- `cp -r #{@app_path.gsub(" ","\\ ")} #{payload_path.gsub(" ","\\ ")+"/"+app_name.gsub(" ","\\ ")}`
59
- build_ipa(payload_path.gsub(" ","\\ "),ipa_path.gsub(" ","\\ "))
58
+ #display "#{@app_path.cl_escape} #{payload_path.cl_escape}/#{app_name.cl_escape}"
59
+ `cp -r #{@app_path.cl_escape} #{payload_path.cl_escape+"/"+app_name.cl_escape}`
60
+ build_ipa(payload_path.cl_escape,ipa_path.cl_escape)
60
61
 
61
62
  FileUtils.rm_rf payload_path
62
63
 
@@ -0,0 +1,24 @@
1
+ module AppSendr::Command
2
+ class Deploy < Build ## Inherhits from Deploy
3
+
4
+ def index
5
+ if in_project_dir?
6
+ unless has_project_droppr?
7
+ require_project_droppr
8
+ return
9
+ end
10
+
11
+ testers = appsendr.collaborators(read_app_id)
12
+ if testers["message"].size > 0
13
+ display "=== Your collaborators"
14
+ i = 0
15
+ display testers["message"].map {|app, id|
16
+ "#{i+=1}. #{app['app_user']['name']} - #{app['app_user']['email']}"
17
+ }.join("\n")
18
+ else
19
+ display "You have no collaborators."
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -11,6 +11,7 @@ module AppSendr::Command
11
11
  # opts.parse!(args) rescue return false
12
12
  #
13
13
  #
14
+
14
15
  @configuration = load_configuration
15
16
  if require_project(1,"deploy","your active configuration name",true)
16
17
  @app_dir = path_to_app_dir
@@ -22,7 +23,8 @@ module AppSendr::Command
22
23
  info = app_info
23
24
  bundle_identifier ||= info['CFBundleIdentifier']
24
25
  icon_path = icon_path(info)
25
- appsendr.upload(read_app_id,@ipa_path, profile_path,@notes,bundle_identifier,icon_path)
26
+ notify = option_exists?('--notify', false)
27
+ appsendr.upload(read_app_id,@ipa_path, profile_path,notify,@notes,bundle_identifier,icon_path)
26
28
  FileUtils.rm_rf @ipa_path
27
29
  else
28
30
  error "No .app file was built for the configuration \"#{@configuration}\". Compile your app or use the \"build\" command."
@@ -37,17 +37,24 @@ module AppSendr::Command
37
37
  group.command 'link', 'link your app with an exsiting one in appsendr'
38
38
  group.command 'create <name>', 'create a new app'
39
39
  group.space
40
+ group.command 'url', 'get the latest version install url. pass --copy to copy to the clipboard'
41
+ group.space
40
42
  group.command 'build <active configuration>', 'build your xcode project and deploy'
41
43
  group.command 'build:clean', 'clean your xcode project'
42
44
  group.space
43
- group.command 'deploy <active configuration>', 'deploy the current build'
45
+ group.command 'deploy <active configuration>', 'deploy the current build. pass --notify to send notification to all testers'
44
46
  group.space
45
47
  group.command 'testers', 'list testers'
46
48
  group.command 'testers:add <email> <name>', 'add a tester'
47
49
  group.command 'testers:remove <email> ', 'remove a tester'
48
50
  group.command 'testers:clear', 'remove all testers'
49
- group.command 'testers:notify', 'notify testers about the latest build'
50
-
51
+ group.command 'testers:notify <group>', 'notify testers about the latest build. group is optional.'
52
+ group.space
53
+ group.command 'groups', 'list groups'
54
+ group.space
55
+ group.command 'collaborators', 'list collaborators'
56
+ group.command 'collaborators:add <email>', 'add collaborators'
57
+ group.command 'collaborators:remove <email>','add collaborators'
51
58
  end
52
59
 
53
60
  end
@@ -1,5 +1,5 @@
1
1
  module AppSendr
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  PROJECT_DIR = ".appsendr"
4
4
  APPDROPPR_DIR = ".appsendr"
5
5
  end
data/lib/appsendr.rb CHANGED
@@ -1,3 +1,27 @@
1
1
  module AppSendr; end
2
2
 
3
3
  require 'appsendr/client'
4
+
5
+ # (The MIT License)
6
+ #
7
+ # Copyright (c) 2010
8
+ #
9
+ # Permission is hereby granted, free of charge, to any person obtaining
10
+ # a copy of this software and associated documentation files (the
11
+ # 'Software'), to deal in the Software without restriction, including
12
+ # without limitation the rights to use, copy, modify, merge, publish,
13
+ # distribute, sublicense, and/or sell copies of the Software, and to
14
+ # permit persons to whom the Software is furnished to do so, subject to
15
+ # the following conditions:
16
+ #
17
+ # The above copyright notice and this permission notice shall be
18
+ # included in all copies or substantial portions of the Software.
19
+ #
20
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
21
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23
+ # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
24
+ # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25
+ # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26
+ # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
+
data/terms ADDED
File without changes
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appsendr
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - AppSendr
@@ -15,8 +15,8 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-20 00:00:00 -08:00
19
- default_executable:
18
+ date: 2010-12-15 00:00:00 -08:00
19
+ default_executable: appsendr
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: rest-client
@@ -64,6 +64,20 @@ dependencies:
64
64
  version: 1.2.0
65
65
  type: :runtime
66
66
  version_requirements: *id003
67
+ - !ruby/object:Gem::Dependency
68
+ name: aws-s3
69
+ prerelease: false
70
+ requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ hash: 3
76
+ segments:
77
+ - 0
78
+ version: "0"
79
+ type: :runtime
80
+ version_requirements: *id004
67
81
  description: A gem that will build and distribute an iphone/ipad app to the web for remote install
68
82
  email: nolanbrown@gmail.com
69
83
  executables:
@@ -81,6 +95,7 @@ extra_rdoc_files:
81
95
  - lib/appsendr/commands/auth.rb
82
96
  - lib/appsendr/commands/base.rb
83
97
  - lib/appsendr/commands/build.rb
98
+ - lib/appsendr/commands/collaborators.rb
84
99
  - lib/appsendr/commands/deploy.rb
85
100
  - lib/appsendr/commands/help.rb
86
101
  - lib/appsendr/commands/testers.rb
@@ -101,12 +116,14 @@ files:
101
116
  - lib/appsendr/commands/auth.rb
102
117
  - lib/appsendr/commands/base.rb
103
118
  - lib/appsendr/commands/build.rb
119
+ - lib/appsendr/commands/collaborators.rb
104
120
  - lib/appsendr/commands/deploy.rb
105
121
  - lib/appsendr/commands/help.rb
106
122
  - lib/appsendr/commands/testers.rb
107
123
  - lib/appsendr/commands/version.rb
108
124
  - lib/appsendr/constants.rb
109
125
  - lib/appsendr/helpers.rb
126
+ - terms
110
127
  has_rdoc: true
111
128
  homepage: http://www.appsendr.com/gem
112
129
  licenses: []