appsendr 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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: []