dryrun 0.7.9 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bc56acb0b83a79cdaf4d2598da0ebf3dc811f0b4
4
- data.tar.gz: 4a2b2a5015b0481e000f7f0b69cc3118d8afe979
3
+ metadata.gz: 5d6c17c4daa6f07ff66e42bbb93fee0f301e159e
4
+ data.tar.gz: 9a822a3cb7961d64e0127776a549cc5f503f2ec1
5
5
  SHA512:
6
- metadata.gz: fa2148852009d390dedca1ce5d17f835ed288c9441a39abf99cea0f6318b55bffa2a40868b56055d31189d31574640daa3bece41cca92cd63afb1e71f4eb63b9
7
- data.tar.gz: f4d4a20fd672de76f584b7dd7a08847e5594f4cb55569cc95bb11d1a5d42ae08c67eb50a627ba3faa1711d808e9aaf430519671021069f6233ae6f5192544621
6
+ metadata.gz: 22ed812fc2e7bbb4bcb621915e0a64f550f899da8de52fdeab807c2ef111b37c5bdce6a0783b6a6219eb53935e8c320d310221ae5970a949bb2bb7da8819d519
7
+ data.tar.gz: 9606739e80de94d5bf619d30a8c57ed25d14fb821ec62c50a3c544eb91699fa8f908aee10ffc72ed451605f009336891b2e854365c265bbd1c10e84c3acac160
@@ -0,0 +1,26 @@
1
+ Style/Encoding:
2
+ Enabled: false
3
+
4
+ Metrics/LineLength:
5
+ Enabled: false
6
+
7
+ Metrics/MethodLength:
8
+ Enabled: false
9
+
10
+ Metrics/ClassLength:
11
+ Enabled: false
12
+
13
+ Metrics/PerceivedComplexity:
14
+ Enabled: false
15
+
16
+ Metrics/AbcSize:
17
+ Enabled: false
18
+
19
+ Metrics/CyclomaticComplexity:
20
+ Enabled: false
21
+
22
+ AllCops:
23
+ TargetRubyVersion: 2.0
24
+
25
+ Documentation:
26
+ Enabled: false
data/README.md CHANGED
@@ -1,17 +1,17 @@
1
1
  ![Image](extras/logo.png)
2
2
 
3
- **Try** any **android library** hosted online **directly** from the **command line**
3
+ [![Build Status](https://travis-ci.org/cesarferreira/dryrun.svg?branch=master)](https://travis-ci.org/cesarferreira/dryrun)
4
+ [![Gem Version](https://badge.fury.io/rb/dryrun.svg)](http://badge.fury.io/rb/dryrun)
5
+ [![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-dryrun-brightgreen.svg?style=flat)](http://android-arsenal.com/details/1/2361)
6
+ [![Android Weekly](https://img.shields.io/badge/Android%20Weekly-%23200-blue.svg)](http://androidweekly.net/issues/issue-200)
4
7
 
5
8
 
6
- ### Specs
7
- [![Build Status](https://travis-ci.org/cesarferreira/dryrun.svg?branch=master)](https://travis-ci.org/cesarferreira/dryrun) [![Gem Version](https://badge.fury.io/rb/dryrun.svg)](http://badge.fury.io/rb/dryrun)
9
+ **Try** any **android library** hosted online **directly** from the **command line**
8
10
 
9
- ### Featured in
10
- [![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-dryrun-brightgreen.svg?style=flat)](http://android-arsenal.com/details/1/2361)
11
- [![Android Weekly](https://img.shields.io/badge/Android%20Weekly-%23200-blue.svg)](http://androidweekly.net/issues/issue-200)
12
11
 
13
12
  ### Show some :heart:
14
- [![GitHub stars](https://img.shields.io/github/stars/cesarferreira/dryrun.svg?style=social&label=Star)](https://github.com/cesarferreira/dryrun) [![GitHub forks](https://img.shields.io/github/forks/cesarferreira/dryrun.svg?style=social&label=Fork)](https://github.com/cesarferreira/dryrun/fork) [![GitHub watchers](https://img.shields.io/github/watchers/cesarferreira/dryrun.svg?style=social&label=Watch)](https://github.com/cesarferreira/dryrun) [![GitHub followers](https://img.shields.io/github/followers/cesarferreira.svg?style=social&label=Follow)](https://github.com/cesarferreira/dryrun)
13
+ [![GitHub stars](https://img.shields.io/github/stars/cesarferreira/dryrun.svg?style=social&label=Star)](https://github.com/cesarferreira/dryrun)
14
+ [![GitHub forks](https://img.shields.io/github/forks/cesarferreira/dryrun.svg?style=social&label=Fork)](https://github.com/cesarferreira/dryrun/fork) [![GitHub watchers](https://img.shields.io/github/watchers/cesarferreira/dryrun.svg?style=social&label=Watch)](https://github.com/cesarferreira/dryrun) [![GitHub followers](https://img.shields.io/github/followers/cesarferreira.svg?style=social&label=Follow)](https://github.com/cesarferreira/dryrun)
15
15
  [![Twitter Follow](https://img.shields.io/twitter/follow/cesarmcferreira.svg?style=social)](https://twitter.com/cesarmcferreira)
16
16
 
17
17
 
@@ -36,6 +36,8 @@ Options
36
36
  -f, --flavour FLAVOUR Custom flavour (e.g. dev, qa, prod)
37
37
  -p, --path PATH Custom path to android project
38
38
  -t, --tag TAG Checkout tag/commit hash to clone (e.g. "v0.4.5", "6f7dd4b")
39
+ -c, --cleanup Clean the temporary folder before cloning the project
40
+ -w, --wipe Wipe the temporary dryrun folder
39
41
  -h, --help Displays help
40
42
  -v, --version Displays the version
41
43
  ```
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
3
 
4
- task :default => :test
4
+ task default: :test
5
5
  RSpec::Core::RakeTask.new(:test)
data/bin/dryrun CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env ruby
2
2
  require 'bundler/setup'
3
3
  require 'dryrun'
4
4
 
@@ -1,28 +1,28 @@
1
- # coding: utf-8
1
+ # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'dryrun/version'
5
5
 
6
- #rake build # Build dryrun-0.0.1.gem into the pkg directory
7
- #rake install # Build and install dryrun-0.0.1.gem into system gems
8
- #rake release # Create tag v0.0.1 and build and push dryrun-0.0.1.gem t...
9
- #rake spec # Run RSpec code examples
6
+ # rake build # Build dryrun-0.0.1.gem into the pkg directory
7
+ # rake install # Build and install dryrun-0.0.1.gem into system gems
8
+ # rake release # Create tag v0.0.1 and build and push dryrun-0.0.1.gem t...
9
+ # rake spec # Run RSpec code examples
10
10
 
11
11
  Gem::Specification.new do |spec|
12
- spec.name = "dryrun"
12
+ spec.name = 'dryrun'
13
13
  spec.version = Dryrun::VERSION
14
- spec.authors = ["cesar ferreira"]
15
- spec.email = ["cesar.manuel.ferreira@gmail.com"]
14
+ spec.authors = ['cesar ferreira']
15
+ spec.email = ['cesar.manuel.ferreira@gmail.com']
16
16
 
17
- spec.summary = %q{Tool to try any android library hosted online directly from the command line}
18
- spec.description = %q{Tool to try any android library hosted online directly from the command line}
19
- spec.homepage = "https://github.com/cesarferreira/dryrun"
17
+ spec.summary = 'Tool to try any android library hosted online directly from the command line'
18
+ spec.description = 'Tool to try any android library hosted online directly from the command line'
19
+ spec.homepage = 'https://github.com/cesarferreira/dryrun'
20
20
  spec.license = 'MIT'
21
21
 
22
22
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
23
- spec.bindir = "bin"
23
+ spec.bindir = 'bin'
24
24
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
25
- spec.require_paths = ["lib"]
25
+ spec.require_paths = ['lib']
26
26
 
27
27
  spec.required_ruby_version = '>= 2.0.0'
28
28
 
@@ -31,10 +31,8 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency 'rspec'
32
32
 
33
33
  spec.add_dependency 'bundler', '~> 1.7'
34
- spec.add_dependency 'colorize', '~> 0.7'
35
- spec.add_dependency 'oga', '~> 1.3.1'
34
+ spec.add_dependency 'colorize', '~> 0.7'
35
+ spec.add_dependency 'oga', '~> 1.3.1'
36
36
  spec.add_dependency 'highline', '~> 1.7'
37
- spec.add_dependency 'adb-sdklib', '~> 0.0.3'
38
37
  spec.add_dependency 'rjb', '>= 1.5.4'
39
-
40
38
  end
Binary file
@@ -1,41 +1,40 @@
1
- require 'optparse'
2
- require 'colorize'
1
+ require 'colorize'
3
2
  require 'tmpdir'
4
3
  require 'fileutils'
5
4
  require 'dryrun/github'
6
5
  require 'dryrun/version'
7
6
  require 'dryrun/android_project'
8
- require "highline/import"
7
+ require 'highline/import'
9
8
  require 'openssl'
10
9
  require 'open3'
11
10
  require_relative 'dryrun/device'
11
+ require 'optparse'
12
12
 
13
13
  module Dryrun
14
14
  class MainApp
15
15
  def initialize(arguments)
16
-
17
16
  outdated_verification
18
17
 
19
- @url = ['-h', '--help', '-v', '--version'].include?(arguments.first) ? nil : arguments.shift
18
+ @url = %w(-h --help -v --version -w --wipe).include?(arguments.first) ? nil : arguments.shift
20
19
 
21
20
  # defaults
22
21
  @app_path = nil
23
22
  @custom_module = nil
24
23
  @flavour = ''
25
24
  @tag = nil
26
- @branch = "master"
27
- @devices = Array.new
25
+ @branch = 'master'
26
+ @devices = []
27
+ @cleanup = false
28
28
 
29
29
  # Parse Options
30
- arguments.push "-h" unless @url
31
30
  create_options_parser(arguments)
32
31
  end
33
32
 
34
33
  def create_options_parser(args)
35
34
  args.options do |opts|
36
- opts.banner = "Usage: dryrun GIT_URL [OPTIONS]"
35
+ opts.banner = 'Usage: dryrun GIT_URL [OPTIONS]'
37
36
  opts.separator ''
38
- opts.separator "Options"
37
+ opts.separator 'Options'
39
38
 
40
39
  opts.on('-m MODULE_NAME', '--module MODULE_NAME', 'Custom module to run') do |custom_module|
41
40
  @custom_module = custom_module
@@ -57,6 +56,14 @@ module Dryrun
57
56
  @tag = tag
58
57
  end
59
58
 
59
+ opts.on('-c', '--cleanup', 'Clean the temporary folder before cloning the project') do
60
+ @cleanup = true
61
+ end
62
+
63
+ opts.on('-w', '--wipe', 'Wipe the temporary dryrun folder') do
64
+ wipe_temporary_folder
65
+ end
66
+
60
67
  opts.on('-h', '--help', 'Displays help') do
61
68
  puts opts.help
62
69
  exit
@@ -68,133 +75,115 @@ module Dryrun
68
75
  end
69
76
 
70
77
  opts.parse!
71
-
72
78
  end
73
79
  end
74
80
 
75
81
  def outdated_verification
76
- is_up_to_date = DryrunUtils.is_up_to_date
77
-
78
- if is_up_to_date
79
- return
80
- end
82
+ return if DryrunUtils.up_to_date
81
83
 
82
84
  input = nil
83
85
 
84
86
  begin
85
87
  input = ask "\n#{'Your Dryrun version is outdated, want to update?'.yellow} #{'[Y/n]:'.white}"
86
- end while !['y', 'n', 's'].include?(input.downcase)
87
-
88
- if input.downcase.eql? 'y'
89
- DryrunUtils.execute('gem update dryrun')
90
-
91
- end
88
+ end until %w(y n s).include?(input.downcase)
92
89
 
90
+ DryrunUtils.execute('gem update dryrun') if input.casecmp 'y'
93
91
  end
94
92
 
95
- def pick_device()
93
+ def pick_device
94
+ @device = nil
95
+
96
96
  if !Gem.win_platform?
97
- @@sdk = `echo $ANDROID_HOME`.gsub("\n",'')
98
- @@sdk = @@sdk + "/platform-tools/adb";
97
+ @sdk = `echo $ANDROID_HOME`.delete("\n")
98
+ @sdk += '/platform-tools/adb'
99
99
  else
100
- @@sdk = `echo %ANDROID_HOME%`.gsub("\n",'')
101
- @@sdk = @@sdk + "/platform-tools/adb.exe"
100
+ @sdk = `echo %ANDROID_HOME%`.delete("\n")
101
+ @sdk += '/platform-tools/adb.exe'
102
102
  end
103
103
 
104
- puts "Searching for devices...".yellow
104
+ $sdk = @sdk
105
+
106
+ puts 'Searching for devices...'.yellow
105
107
 
106
- run_adb("devices")
108
+ @devices = DryrunUtils.run_adb('devices')
107
109
 
108
- if @devices.empty?
109
- puts "No devices attached, but I'll run anyway"
110
+ if @devices.nil? || @devices.empty?
111
+ puts 'Killing adb, there might be an issue with it...'
112
+ DryrunUtils.run_adb('kill-server')
113
+ @devices = DryrunUtils.run_adb('devices')
110
114
  end
111
115
 
112
- @@device = nil
116
+ puts 'No devices attached, but I\'ll run anyway' if @devices.empty?
113
117
 
114
118
  if @devices.size >= 2
115
- puts "Pick your device (1,2,3...):"
119
+ puts 'Pick your device (1,2,3...):'
116
120
 
117
- @devices.each_with_index.map {|key, index| puts "#{index.to_s.green} - #{key.name} \n"}
121
+ @devices.each_with_index.map { |key, index| puts "#{index.to_s.green} - #{key.name} \n" }
118
122
 
119
- a = gets.chomp
123
+ input = gets.chomp
120
124
 
121
- if a.match(/^\d+$/) && a.to_i <= (@devices.length - 1) && a.to_i >= 0
122
- @@device = @devices[(a.to_i)]
123
- else
124
- @@device = @devices.first
125
- end
125
+ @device = if input.match(/^\d+$/) && input.to_i <= (@devices.length - 1) && input.to_i >= 0
126
+ @devices[input.to_i]
127
+ else
128
+ @devices.first
129
+ end
126
130
  else
127
- @@device = @devices.first
131
+ @device = @devices.first
128
132
  end
129
133
 
130
- puts "Picked #{@@device.name.to_s.green}" if @@device != nil
134
+ $device = @device
135
+ puts "Picked #{@device.name.to_s.green}" unless @device.nil?
131
136
  end
132
137
 
133
- def run_adb(args, adb_opts = {}, &block) # :yields: stdout
134
- path = "#{@@sdk} #{args}"
135
- last_command = path
136
- run(path, &block)
138
+ def android_home_is_defined
139
+ @sdk = if !Gem.win_platform?
140
+ `echo $ANDROID_HOME`.delete('\n')
141
+ else
142
+ `echo %ANDROID_HOME%`.delete('\n')
143
+ end
144
+ !@sdk.empty?
137
145
  end
138
146
 
139
- def run(path, &block)
140
- @last_command = path
141
- Open3.popen3(path) do |stdin, stdout, stderr, wait_thr|
142
- stdout.each do |line|
143
- line = line.strip
144
- if (!line.empty? && line !~ /^List of devices/)
145
- parts = line.split
146
- device = AdbDevice::Device.new(parts[0], parts[1])
147
- @devices << device
148
- end
149
- end
150
- end
151
- end
152
-
153
- def self.getSDK # :yields: stdout
154
- @@sdk
155
- end
156
-
157
- def self.getDevice # :yields: stdout
158
- @@device
159
- end
160
-
161
- def android_home_is_defined
162
- if !Gem.win_platform?
163
- sdk = `echo $ANDROID_HOME`.gsub("\n",'')
164
- else
165
- sdk = `echo %ANDROID_HOME%`.gsub("\n",'')
166
- end
167
- !sdk.empty?
168
- end
169
-
170
- def call
171
- unless android_home_is_defined
172
- puts "\nWARNING: your #{'$ANDROID_HOME'.yellow} is not defined\n"
173
- puts "\nhint: in your #{'~/.bashrc'.yellow} or #{'~/.bash_profile'.yellow} add:\n #{"export ANDROID_HOME=\"/Users/cesarferreira/Library/Android/sdk/\"".yellow}"
174
- puts "\nNow type #{'source ~/.bashrc'.yellow}\n\n"
147
+ def wipe_temporary_folder
148
+ tmpdir = Dir.tmpdir + '/dryrun/'
149
+ puts 'Wiping ' + tmpdir.red
150
+ FileUtils.rm_rf tmpdir
151
+ puts 'Folder totally removed!'.green
175
152
  exit 1
176
153
  end
177
154
 
178
- @url = @url.split("?").first
179
- @url.chop! if @url.end_with? '/'
155
+ def call
156
+ unless android_home_is_defined
157
+ puts "\nWARNING: your #{'$ANDROID_HOME'.yellow} is not defined\n"
158
+ puts "\nhint: in your #{'~/.bashrc'.yellow} or #{'~/.bash_profile'.yellow} add:\n #{"export ANDROID_HOME='/Users/cesarferreira/Library/Android/sdk/'".yellow}"
159
+ puts "\nNow type #{'source ~/.bashrc'.yellow}\n\n"
160
+ exit 1
161
+ end
180
162
 
163
+ if @url.nil?
164
+ puts 'You need to insert a valid GIT URL'
165
+ exit 1
166
+ end
181
167
 
182
- pick_device()
168
+ @url = @url.split('?').first
169
+ @url.chop! if @url.end_with? '/'
183
170
 
184
- github = Github.new(@url)
171
+ pick_device
185
172
 
186
- unless github.is_valid
187
- puts "#{@url.red} is not a valid git @url"
188
- exit 1
189
- end
173
+ github = Github.new(@url)
174
+
175
+ unless github.valid?
176
+ puts "#{@url.red} is not a valid git @url"
177
+ exit 1
178
+ end
190
179
 
191
180
  # clone the repository
192
- repository_path = github.clone(@branch, @tag)
181
+ repository_path = github.clone(@branch, @tag, @cleanup)
193
182
 
194
- android_project = AndroidProject.new(repository_path, @app_path, @custom_module, @flavour)
183
+ android_project = AndroidProject.new(repository_path, @app_path, @custom_module, @flavour, @device)
195
184
 
196
185
  # is a valid android project?
197
- unless android_project.is_valid
186
+ unless android_project.valid?
198
187
  puts "#{@url.red} is not a valid android project"
199
188
  exit 1
200
189
  end
@@ -205,7 +194,7 @@ module Dryrun
205
194
  # clean and install the apk
206
195
  android_project.install
207
196
 
208
- puts "\n> If you want to remove the app you just installed, execute:\n#{android_project.get_uninstall_command.yellow}\n\n"
197
+ puts "\n> If you want to remove the app you just installed, execute:\n#{android_project.uninstall_command.yellow}\n\n"
209
198
  end
210
199
  end
211
200
  end
@@ -1,5 +1,4 @@
1
- require 'adb-sdklib'
2
- require 'oga'
1
+ require 'oga'
3
2
  require 'fileutils'
4
3
  require 'tempfile'
5
4
  require 'find'
@@ -7,12 +6,12 @@ require_relative 'dryrun_utils'
7
6
 
8
7
  module Dryrun
9
8
  class AndroidProject
10
- def initialize(path, custom_app_path, custom_module, flavour)
11
-
9
+ def initialize(path, custom_app_path, custom_module, flavour, device)
12
10
  @custom_app_path = custom_app_path
13
11
  @custom_module = custom_module
14
- @base_path = @custom_app_path? File.join(path, @custom_app_path) : path
12
+ @base_path = @custom_app_path ? File.join(path, @custom_app_path) : path
15
13
  @flavour = flavour
14
+ @device = device
16
15
 
17
16
  @settings_gradle_path = settings_gradle_file
18
17
  @main_gradle_file = main_gradle_file
@@ -28,7 +27,7 @@ module Dryrun
28
27
  full_custom_path = @base_path
29
28
  settings_path = settings_gradle_file(full_custom_path)
30
29
  main_gradle_path = main_gradle_file(full_custom_path)
31
- return unless is_valid(main_gradle_path)
30
+ return unless valid?(main_gradle_path)
32
31
 
33
32
  @settings_gradle_path = settings_path
34
33
  @main_gradle_file = main_gradle_file
@@ -41,20 +40,19 @@ module Dryrun
41
40
  file_name = 'local.properties'
42
41
 
43
42
  File.delete(file_name) if File.exist?(file_name)
44
- if !Gem.win_platform?
45
- DryrunUtils.execute("touch #{file_name}")
46
- end
43
+
44
+ DryrunUtils.execute("touch #{file_name}") unless Gem.win_platform?
47
45
  end
48
46
 
49
47
  def remove_application_id
50
48
  # Open temporary file
51
- tmp = Tempfile.new("extract")
49
+ tmp = Tempfile.new('extract')
52
50
 
53
51
  file = "#{@path_to_sample}/build.gradle"
54
52
 
55
53
  # Write good lines to temporary file
56
- File.open(file, 'r') do |file|
57
- file.each do |l| tmp << l unless l.include? 'applicationId'
54
+ File.open(file, 'r') do |f|
55
+ f.each do |l| tmp << l unless l.include? 'applicationId'
58
56
  end
59
57
  end
60
58
  tmp.close
@@ -71,16 +69,17 @@ module Dryrun
71
69
  File.join(path, 'build.gradle')
72
70
  end
73
71
 
74
- def is_valid(main_gradle_file = @main_gradle_file)
75
- File.exist?(main_gradle_file)
72
+ def valid?(main_gradle_file = @main_gradle_file)
73
+ File.exist?(main_gradle_file) &&
74
+ File.exist?(@settings_gradle_path)
76
75
  end
77
76
 
78
77
  def find_modules
79
- return [] unless is_valid
78
+ return [] unless valid?
80
79
 
81
- content = File.open(@settings_gradle_path, "rb").read
80
+ content = File.open(@settings_gradle_path, 'rb').read
82
81
  modules = content.scan(/'([^']*)'/)
83
- modules.each {|replacement| replacement.first.gsub!(':', '/')}
82
+ modules.each { |replacement| replacement.first.tr!(':', '/') }
84
83
  end
85
84
 
86
85
  def install
@@ -88,24 +87,24 @@ module Dryrun
88
87
 
89
88
  path, execute_line = sample_project
90
89
 
91
- if path == false and execute_line == false
90
+ if path == false && execute_line == false
92
91
  puts "Couldn't open the sample project, sorry!".red
93
92
  exit 1
94
93
  end
95
94
 
96
- builder = "gradle"
95
+ builder = 'gradle'
97
96
 
98
97
  if File.exist?('gradlew')
99
98
  if !Gem.win_platform?
100
99
  DryrunUtils.execute('chmod +x gradlew')
101
100
  else
102
- DryrunUtils.execute("icacls gradlew /T")
101
+ DryrunUtils.execute('icacls gradlew /T')
103
102
  end
104
103
  builder = './gradlew'
105
104
  end
106
105
 
107
106
  # Generate the gradle/ folder
108
- DryrunUtils.execute('gradle wrap') if File.exist?('gradlew') and !is_gradle_wrapped
107
+ DryrunUtils.execute('gradle wrap') if File.exist?('gradlew') && !gradle_wrapped?
109
108
 
110
109
  remove_application_id
111
110
  remove_local_properties
@@ -115,22 +114,31 @@ module Dryrun
115
114
  DryrunUtils.execute("#{builder} :#{@custom_module}:install#{@flavour}Debug")
116
115
  else
117
116
  DryrunUtils.execute("#{builder} clean")
118
- puts "#{builder} install#{@flavour}Debug"
119
- DryrunUtils.execute("#{builder} install#{@flavour}Debug")
120
- end
121
117
 
122
- clear_app_data
118
+ if @device.nil?
119
+ puts 'No devices picked/available, proceeding with assemble instead'.green
120
+ puts "#{builder} assemble#{@flavour}Debug"
121
+ DryrunUtils.execute("#{builder} assemble#{@flavour}Debug")
122
+ else
123
+ puts "#{builder} install#{@flavour}Debug"
124
+ DryrunUtils.execute("#{builder} install#{@flavour}Debug")
125
+ end
126
+ end
123
127
 
124
- puts "Installing #{@package.green}...\n"
125
- puts "executing: #{execute_line.green}\n"
128
+ unless @device.nil?
129
+ clear_app_data
130
+ puts "Installing #{@package.green}...\n"
131
+ puts "executing: #{execute_line.green}\n"
126
132
 
127
- DryrunUtils.run_adb("shell #{execute_line}")
133
+ DryrunUtils.run_adb("shell #{execute_line}")
134
+ end
128
135
  end
129
136
 
130
- def is_gradle_wrapped
131
- return false if !File.directory?('gradle/')
137
+ def gradle_wrapped?
138
+ return false unless File.directory?('gradle/')
132
139
 
133
- File.exist?('gradle/wrapper/gradle-wrapper.properties') and File.exist?('gradle/wrapper/gradle-wrapper.jar')
140
+ File.exist?('gradle/wrapper/gradle-wrapper.properties') &&
141
+ File.exist?('gradle/wrapper/gradle-wrapper.jar')
134
142
  end
135
143
 
136
144
  def sample_project
@@ -149,37 +157,33 @@ module Dryrun
149
157
  [false, false]
150
158
  end
151
159
 
152
- def get_uninstall_command
153
- "adb uninstall \"#{@package}\""
160
+ def uninstall_command
161
+ "adb uninstall \"#{@package}\""
154
162
  end
155
163
 
156
164
  def clear_app_data
157
- DryrunUtils.run_adb("shell pm clear #{@package}")
165
+ DryrunUtils.run_adb("shell pm clear #{@package}")
158
166
  end
159
167
 
160
168
  def uninstall_application
161
- DryrunUtils.run_adb("shell pm uninstall #{@package}")
169
+ DryrunUtils.run_adb("shell pm uninstall #{@package}")
162
170
  end
163
171
 
164
172
  def get_execution_line_command(path_to_sample)
165
173
  manifest_file = get_manifest(path_to_sample)
166
174
 
167
- if manifest_file.nil?
168
- return false
169
- end
175
+ return false if manifest_file.nil?
170
176
 
171
177
  doc = Oga.parse_xml(manifest_file)
172
178
 
173
179
  @package = get_package(doc)
174
180
  @launcher_activity = get_launcher_activity(doc)
175
181
 
176
- if !@launcher_activity
177
- return false
178
- end
182
+ return false unless @launcher_activity
179
183
 
180
184
  manifest_file.close
181
185
 
182
- return "am start -n \"#{get_launchable_activity}\" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER"
186
+ "am start -n \"#{launchable_activity}\" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER"
183
187
  end
184
188
 
185
189
  def get_manifest(path_to_sample)
@@ -193,25 +197,25 @@ module Dryrun
193
197
  end
194
198
  end
195
199
 
196
- def get_launchable_activity
197
- full_path_to_launcher = "#{@package}#{@launcher_activity.gsub(@package,'')}"
200
+ def launchable_activity
201
+ full_path_to_launcher = "#{@package}#{@launcher_activity.gsub(@package, '')}"
198
202
  "#{@package}/#{full_path_to_launcher}"
199
203
  end
200
204
 
201
205
  def get_package(doc)
202
- doc.xpath("//manifest").attr('package').first.value
203
- end
206
+ doc.xpath('//manifest').attr('package').first.value
207
+ end
204
208
 
205
- def get_launcher_activity(doc)
206
- activities = doc.css('activity')
207
- activities.each do |child|
208
- intent_filter = child.css('intent-filter')
209
+ def get_launcher_activity(doc)
210
+ activities = doc.css('activity')
211
+ activities.each do |child|
212
+ intent_filter = child.css('intent-filter')
209
213
 
210
- if intent_filter != nil and intent_filter.length != 0
211
- return child.attr("android:name").value
214
+ if !intent_filter.nil? && !intent_filter.empty?
215
+ return child.attr('android:name').value
216
+ end
212
217
  end
218
+ false
213
219
  end
214
- false
215
220
  end
216
221
  end
217
- end
@@ -1,4 +1,4 @@
1
- module AdbDevice
1
+ module AdbDevice
2
2
  class Device
3
3
  attr_accessor :name, :id
4
4
 
@@ -8,4 +8,3 @@ module AdbDevice
8
8
  end
9
9
  end
10
10
  end
11
-
@@ -1,55 +1,63 @@
1
- require 'open-uri'
1
+ require 'open-uri'
2
2
  require 'dryrun/version'
3
3
  require 'open3'
4
4
 
5
5
  module Dryrun
6
- class DryrunUtils
7
-
8
- def self.execute(command)
9
- is_success = system command
10
- unless is_success
11
- puts "\n\n======================================================\n\n"
12
- puts " Something went wrong while executing this:".red
13
- puts " $ #{command}\n".yellow
14
- puts "======================================================\n\n"
15
- exit 1
16
- end
17
- end
18
-
19
- def self.get_latest_version
20
- url = 'https://raw.githubusercontent.com/cesarferreira/dryrun/master/lib/dryrun/version.rb'
21
- page_string = nil
22
-
23
- if Gem.win_platform?
24
- open(url, {ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE}) do |f|
25
- page_string = f.read
26
- end
27
- else
28
- open(url) do |f|
29
- page_string = f.read
30
- end
31
- end
32
-
33
- page_string[/#{Regexp.escape('\'')}(.*?)#{Regexp.escape('\'')}/m, 1]
34
- end
35
-
36
- def self.is_up_to_date
37
- latest = get_latest_version
38
- latest.to_s <= Dryrun::VERSION.to_s
39
- end
40
-
41
- def self.run_adb(args, adb_opts = {}, &block) # :yields: stdout
42
- adb_arg = ""
43
- adb_arg += " -s #{Dryrun::MainApp.getDevice.name}"
44
- path = "#{Dryrun::MainApp.getSDK} #{adb_arg} #{args} "
45
- last_command = path
46
- run(path, &block)
47
- end
48
-
49
- def self.run(path, &block)
50
- @last_command = path
51
- Open3.popen3(path) do |stdin, stdout, stderr, wait_thr|
52
- end
53
- end
54
- end
6
+ class DryrunUtils
7
+ attr_accessor :sdk
8
+ attr_accessor :device
9
+
10
+ def self.execute(command)
11
+ is_success = system command
12
+ unless is_success
13
+ puts "\n\n======================================================\n\n"
14
+ puts ' Something went wrong while executing this:'.red
15
+ puts " $ #{command}\n".yellow
16
+ puts "======================================================\n\n"
17
+ exit 1
18
+ end
19
+ end
20
+
21
+ def self.latest_version
22
+ url = 'https://raw.githubusercontent.com/cesarferreira/dryrun/master/lib/dryrun/version.rb'
23
+ page_string = nil
24
+
25
+ if Gem.win_platform?
26
+ open(url, ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE) do |f|
27
+ page_string = f.read
28
+ end
29
+ else
30
+ open(url) do |f|
31
+ page_string = f.read
32
+ end
33
+ end
34
+
35
+ page_string[/#{Regexp.escape('\'')}(.*?)#{Regexp.escape('\'')}/m, 1]
36
+ end
37
+
38
+ def self.up_to_date
39
+ latest = latest_version
40
+ latest.to_s <= Dryrun::VERSION.to_s
41
+ end
42
+
43
+ def self.run_adb(args) # :yields: stdout
44
+ adb_arg = " -s #{$device.name} " unless $device.nil?
45
+ path = "#{$sdk} #{adb_arg} #{args} "
46
+ run(path)
47
+ end
48
+
49
+ def self.run(path)
50
+ Open3.popen3(path) do |_stdin, stdout, _stderr|
51
+ devices = []
52
+ stdout.each do |line|
53
+ line = line.strip
54
+ if !line.empty? && line !~ /^List of devices/ && !line.start_with?('adb') && !line.start_with?('*')
55
+ parts = line.split
56
+ devices << AdbDevice::Device.new(parts[0], parts[1])
57
+ end
58
+ end
59
+ devices
60
+ end
61
+ end
62
+ end
55
63
  end
@@ -1,89 +1,87 @@
1
- require 'tmpdir'
1
+ require 'tmpdir'
2
2
  require 'fileutils'
3
3
  require 'uri'
4
- require_relative 'dryrun_utils'
5
4
  require 'digest'
5
+ require_relative 'dryrun_utils'
6
6
 
7
7
  module Dryrun
8
-
9
8
  class Github
10
9
  def initialize(url)
11
- url = url.split("?").first
10
+ url = url.split('?').first
12
11
  url.chop! if url.end_with? '/'
13
12
 
14
13
  @base_url = url
15
- @destination = get_destination
14
+ @destination = destination
16
15
  end
17
16
 
18
- def get_destination
17
+ def destination
19
18
  Digest::SHA256.hexdigest @base_url
20
19
  end
21
20
 
22
- def is_valid
23
- starts_with_git = @base_url.split(//).first(4).join.eql? "git@"
24
- starts_with_http = @base_url.split(//).first(7).join.eql? "http://"
25
- starts_with_https = @base_url.split(//).first(8).join.eql? "https://"
21
+ def valid?
22
+ starts_with_git = @base_url.split(//).first(4).join.eql? 'git@'
23
+ starts_with_http = @base_url.split(//).first(7).join.eql? 'http://'
24
+ starts_with_https = @base_url.split(//).first(8).join.eql? 'https://'
26
25
 
27
- return (starts_with_git or starts_with_https or starts_with_http)
26
+ (starts_with_git || starts_with_https || starts_with_http)
28
27
  end
29
28
 
30
29
  def clonable_url
31
- starts_with_git = @base_url.split(//).first(4).join.eql? "git@"
32
- ends_with_git = @base_url.split(//).last(4).join.eql? ".git"
30
+ starts_with_git = @base_url.split(//).first(4).join.eql? 'git@'
31
+ ends_with_git = @base_url.split(//).last(4).join.eql? '.git'
33
32
 
34
33
  # ends with git but doesnt start with git
35
- if ends_with_git and !starts_with_git
36
- return @base_url
37
- end
34
+ return @base_url if ends_with_git && !starts_with_git
38
35
 
39
36
  # ends with git but doesnt start with git
40
- if !ends_with_git and !starts_with_git
41
- return "#{@base_url}.git"
42
- end
37
+ return "#{@base_url}.git" if !ends_with_git && !starts_with_git
43
38
 
44
39
  @base_url
45
-
46
- # end
47
40
  end
48
41
 
49
42
  ##
50
43
  ## CLONE THE REPOSITORY
51
44
  ##
52
- def clone(branch, tag)
53
- clonable = self.clonable_url
45
+ def clone(branch, tag, cleanup)
46
+ clonable = clonable_url
47
+
48
+ tmpdir = Dir.tmpdir + "/dryrun/#{@destination}"
49
+
50
+ if cleanup
51
+ puts 'Wiping the folder: ' + tmpdir.green
52
+ FileUtils.rm_rf tmpdir
53
+ # FileUtils.mkdir_p tmpdir
54
+ end
54
55
 
55
- tmpdir = Dir.tmpdir+"/dryrun/#{@destination}"
56
56
  folder_exists = File.directory?(tmpdir)
57
-
57
+
58
58
  if folder_exists
59
59
  Dir.chdir tmpdir
60
- is_git_repo = system("git rev-parse")
61
-
60
+
61
+ is_git_repo = system('git rev-parse')
62
+
62
63
  if !is_git_repo
63
- FileUtils.rm_rf(tmpdir)
64
- DryrunUtils.execute("git clone --depth 1 #{clonable} #{tmpdir}")
64
+ FileUtils.rm_rf(tmpdir)
65
+ DryrunUtils.execute("git clone --depth 1 #{clonable} #{tmpdir}")
65
66
  DryrunUtils.execute("git checkout #{branch}")
66
67
  else
67
68
  puts "Found project in #{tmpdir.green}..."
68
- DryrunUtils.execute("git reset --hard HEAD")
69
- DryrunUtils.execute("git fetch --all")
69
+ DryrunUtils.execute('git reset --hard HEAD')
70
+ DryrunUtils.execute('git fetch --all')
70
71
  DryrunUtils.execute("git checkout #{branch}")
71
72
  DryrunUtils.execute("git pull origin #{branch}")
72
73
  end
73
-
74
74
  else
75
- DryrunUtils.execute("git clone --depth 1 #{clonable} #{tmpdir}")
75
+ DryrunUtils.execute("git clone --depth 1 #{clonable} #{tmpdir}")
76
76
  end
77
77
 
78
78
  if tag
79
79
  Dir.chdir tmpdir
80
- DryrunUtils.execute("git fetch --depth=10000")
80
+ DryrunUtils.execute('git fetch --depth=10000')
81
81
  DryrunUtils.execute("git checkout #{tag}")
82
82
  end
83
83
 
84
84
  tmpdir
85
85
  end
86
-
87
86
  end
88
-
89
87
  end
@@ -1,3 +1,3 @@
1
- module Dryrun
2
- VERSION = '0.7.9'
1
+ module Dryrun
2
+ VERSION = '0.8.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dryrun
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.9
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - cesar ferreira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-19 00:00:00.000000000 Z
11
+ date: 2016-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -108,20 +108,6 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.7'
111
- - !ruby/object:Gem::Dependency
112
- name: adb-sdklib
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: 0.0.3
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: 0.0.3
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: rjb
127
113
  requirement: !ruby/object:Gem::Requirement
@@ -147,6 +133,7 @@ extra_rdoc_files: []
147
133
  files:
148
134
  - ".gitignore"
149
135
  - ".rspec"
136
+ - ".rubocop.yml"
150
137
  - ".travis.yml"
151
138
  - Gemfile
152
139
  - LICENSE
@@ -186,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
173
  version: '0'
187
174
  requirements: []
188
175
  rubyforge_project:
189
- rubygems_version: 2.5.1
176
+ rubygems_version: 2.6.6
190
177
  signing_key:
191
178
  specification_version: 4
192
179
  summary: Tool to try any android library hosted online directly from the command line