dryrun 0.4.5 → 0.5.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c67f2fe04c2d7ccdba7e7bd50ddf7ae355f22c3c
4
- data.tar.gz: 3794bbba77ed2e187b8cac839e66eeebea564b32
3
+ metadata.gz: 3d3f3a98a45ab58ac45426e6c806a5b6bd773cc9
4
+ data.tar.gz: 04cacfaa410713424d3c67e570e79864ab30f6a5
5
5
  SHA512:
6
- metadata.gz: 89d80fad215e3bf72c9ae0e89ec51cb6e018a361b96f6ddfc73885275f0c393be4529c8a6d5fee5bf79f6a436259762bf4a4478e1273c292af1009059ae8902c
7
- data.tar.gz: 78a26051d414064d937fa83db821e18ab0747af93f30bd721b26d5aab1333916bd4ad66c6d21d89382c27e48c9ba7fc7d34b7805f970da7ec727cf9b9d450ff7
6
+ metadata.gz: 56e0f7b045e2ab959a96f007016ae362d8d97a62be4b583989e313bceafbb77623aca311df3db72381f5b8f117a782a1623591043e16b6f56cc283c8678dd9c4
7
+ data.tar.gz: 65f34a5ef5c2d48fab4a841431876d60694597b777fe616bdcb376ca63607a9a811f74c257909ef1f8af772bb9a4f92d97b259308709833e7a2df0310699b6f0
@@ -1 +1 @@
1
- 2.0.0
1
+ 2.2.3
data/README.md CHANGED
@@ -11,11 +11,29 @@
11
11
 
12
12
 
13
13
  ## Usage
14
- > dryrun https://github.com/cesarferreira/android-helloworld
15
-
14
+ ```shell
15
+ dryrun https://github.com/cesarferreira/android-helloworld
16
+ ```
16
17
 
17
18
  Wait a few seconds... and `voilà`! The app is opened on your phone :smiley:
18
19
 
20
+
21
+ #### From a custom repository folder:
22
+ ```shell
23
+ dryrun repository_url -p custom/path/to/gradle_application
24
+ ```
25
+
26
+ #### A custom module
27
+ ```shell
28
+ dryrun repository_url -m custom_application_module
29
+ ```
30
+
31
+ #### Help at any time:
32
+ ```shell
33
+ dryrun -h
34
+ ```
35
+
36
+
19
37
  ### Goodies
20
38
 
21
39
  - Private repos can be tested too :smiley:
@@ -57,3 +75,11 @@ Wait a few seconds... and `voilà`! The app is opened on your phone :smiley:
57
75
  ## Contributing
58
76
 
59
77
  Bug reports and pull requests are welcome on GitHub at https://github.com/cesarferreira/dryrun.
78
+
79
+ To install gem as local you can use this:
80
+ ```shell
81
+ # In the project folder:
82
+ rake install
83
+ # Next in the any gemset or place:
84
+ gem install --local path_to_dryrun/pkg/dryrun-<builded_version>.gem
85
+ ```
data/bin/dryrun CHANGED
@@ -2,10 +2,4 @@
2
2
  require 'bundler/setup'
3
3
  require 'dryrun'
4
4
 
5
- # ARGUMENTS validation
6
- if ARGV.length != 1
7
- puts "You need to provide the github URL"
8
- exit 1
9
- end
10
-
11
- DryRun::MainApp.initialize(ARGV[0])
5
+ DryRun::MainApp.new(ARGV).call
@@ -1,3 +1,4 @@
1
+ require 'optparse'
1
2
  require 'colorize'
2
3
  require 'tmpdir'
3
4
  require 'fileutils'
@@ -5,47 +6,77 @@ require 'dryrun/github'
5
6
  require 'dryrun/android_project'
6
7
 
7
8
  module DryRun
8
-
9
9
  class MainApp
10
+ def initialize(arguments)
11
+ create_options_parser
12
+ @url = ['-h', '--help'].include?(arguments.first) ? nil : arguments.shift
13
+ @app_path = nil
14
+ @custom_module = nil
15
+ @opt_parser.parse!(arguments)
10
16
 
11
- def self.ANDROID_HOME_is_defined
12
- sdk = `echo $ANDROID_HOME`.gsub("\n",'')
13
- !sdk.empty?
17
+ unless @url
18
+ puts @opt_parser.help
19
+ exit
20
+ end
14
21
  end
15
22
 
23
+ def create_options_parser
24
+ @opt_parser = OptionParser.new do |opts|
25
+ opts.banner = "Usage: dryrun GITHUB_URL [OPTIONS]"
26
+ opts.separator ''
27
+ opts.separator "Options"
28
+
29
+ opts.on('-m MODULE_NAME', '--module MODULE_NAME', 'Custom module to run') do |custom_module|
30
+ @custom_module = custom_module
31
+ end
32
+ opts.on('-p PATH', '--path PATH', 'Custom path to android project') do |app_path|
33
+ @app_path = app_path
34
+ end
35
+ opts.on('-h', '--help', 'Displays help') do
36
+ puts opts.help
37
+ exit
38
+ end
39
+ end
40
+ end
16
41
 
17
- def self.initialize(url)
42
+ def android_home_is_defined
43
+ sdk = `echo $ANDROID_HOME`.gsub("\n",'')
44
+ !sdk.empty?
45
+ end
18
46
 
19
- unless self.ANDROID_HOME_is_defined
47
+ def call
48
+ unless android_home_is_defined
20
49
  puts "\nWARNING: your #{'$ANDROID_HOME'.yellow} is not defined\n"
21
50
  puts "\nhint: in your #{'~/.bashrc'.yellow} add:\n #{"export ANDROID_HOME=\"/Users/cesarferreira/Library/Android/sdk/\"".yellow}"
22
51
  puts "\nNow type #{'source ~/.bashrc'.yellow}\n\n"
23
52
  exit 1
24
53
  end
25
54
 
26
- github = Github.new(url)
55
+ github = Github.new(@url)
27
56
 
28
57
  unless github.is_valid
29
- puts "#{url.red} is not a valid github url"
58
+ puts "#{@url.red} is not a valid github @url"
30
59
  exit 1
31
60
  end
32
61
 
33
62
  # clone the repository
34
63
  repository_path = github.clone
35
64
 
36
- android_project = AndroidProject.new(repository_path)
65
+ android_project = AndroidProject.new(repository_path, @app_path, @custom_module)
37
66
 
38
67
  # is a valid android project?
39
68
  unless android_project.is_valid
40
- puts "#{url.red} is not a valid android project"
69
+ puts "#{@url.red} is not a valid android project"
41
70
  exit 1
42
71
  end
43
72
 
73
+ puts "Using custom app folder: #{@app_path.green}" if @app_path
74
+ puts "Using custom module: #{@custom_module.green}" if @custom_module
75
+
44
76
  # clean and install the apk
45
77
  android_project.install
46
78
 
47
79
  puts "\n> If you want to remove the app you just installed, execute:\n#{android_project.get_uninstall_command.yellow}\n\n"
48
-
49
80
  end
50
81
  end
51
82
  end
@@ -3,22 +3,34 @@ require 'fileutils'
3
3
  require 'tempfile'
4
4
 
5
5
  module DryRun
6
-
7
6
  class AndroidProject
8
-
9
- def initialize(path)
7
+ def initialize(path, custom_app_path, custom_module)
8
+ @custom_app_path = custom_app_path
9
+ @custom_module = custom_module
10
10
  @base_path = path
11
- @settings_gradle_path = settings_gradle
11
+ @settings_gradle_path = settings_gradle_file
12
+
13
+ check_custom_app_path
14
+
12
15
  @modules = find_modules
13
16
  end
14
17
 
18
+ def check_custom_app_path
19
+ return unless @custom_app_path
20
+
21
+ full_custom_path = File.join(@base_path, @custom_app_path)
22
+ settings_path = settings_gradle_file(full_custom_path)
23
+ return unless is_valid(settings_path)
24
+
25
+ @settings_gradle_path = settings_path
26
+ @base_path = full_custom_path
27
+ end
28
+
15
29
  def remove_local_properties
16
30
  Dir.chdir @base_path
17
31
  file_name = 'local.properties'
18
32
 
19
- if File.exist?(file_name)
20
- File.remove(file_name)
21
- end
33
+ File.delete(file_name) if File.exist?(file_name)
22
34
 
23
35
  system("touch #{file_name}")
24
36
  end
@@ -35,34 +47,30 @@ module DryRun
35
47
 
36
48
  # Move temp file to origin
37
49
  FileUtils.mv(tmp.path, file)
38
-
39
50
  end
40
51
 
41
- def settings_gradle
42
- "#{@base_path}/settings.gradle"
52
+ def settings_gradle_file(path = @base_path)
53
+ File.join(path, 'settings.gradle')
43
54
  end
44
55
 
45
- def is_valid
46
- File.exist?(@settings_gradle_path)
56
+ def is_valid(settings_path = @settings_gradle_path)
57
+ File.exist?(settings_path)
47
58
  end
48
59
 
49
60
  def find_modules
50
- if self.is_valid
51
- content = File.open(@settings_gradle_path, "rb").read
52
- modules = content.scan(/'([^']*)'/)
53
- modules.each {|replacement| replacement.first.gsub!(':', '/')}
54
- else
55
- return []
56
- end
61
+ return [] unless is_valid
62
+
63
+ content = File.open(@settings_gradle_path, "rb").read
64
+ modules = content.scan(/'([^']*)'/)
65
+ modules.each {|replacement| replacement.first.gsub!(':', '/')}
57
66
  end
58
67
 
59
68
  def install
60
-
61
69
  Dir.chdir @base_path
62
70
 
63
- path, execute_line = self.sample_project
71
+ path, execute_line = sample_project
64
72
 
65
- if path == false and execute_line==false
73
+ if path == false and execute_line == false
66
74
  puts "Couldn't open the sample project, sorry!".red
67
75
  exit 1
68
76
  end
@@ -76,60 +84,72 @@ module DryRun
76
84
  end
77
85
 
78
86
  # Generate the gradle/ folder
79
- if File.exist?('gradlew') and !is_gradle_wrapped
80
- system('gradle wrap')
81
- end
87
+ system('gradle wrap') if File.exist?('gradlew') and !is_gradle_wrapped
88
+
89
+ remove_application_id
90
+ remove_local_properties
82
91
 
83
- self.uninstall
84
- self.remove_application_id
85
- self.remove_local_properties
92
+ if @custom_module
93
+ system("#{builder} clean :#{@custom_module}:installDebug")
94
+ else
95
+ system("#{builder} clean installDebug")
96
+ end
86
97
 
87
- system("#{builder} clean assembleDebug installDebug")
98
+ clear_app_data
88
99
 
89
100
  puts "Installing #{@package.green}...\n"
90
101
  puts "executing: #{execute_line.green}\n\n"
102
+
91
103
  system(execute_line)
92
104
 
93
105
  end
94
106
 
95
107
  def is_gradle_wrapped
96
-
97
- if !File.directory?('gradle/')
98
- return false
99
- end
108
+ return false if !File.directory?('gradle/')
100
109
 
101
110
  File.exist?('gradle/wrapper/gradle-wrapper.properties') and File.exist?('gradle/wrapper/gradle-wrapper.jar')
102
111
  end
103
112
 
104
113
  def sample_project
114
+ if @custom_module && @modules.any? { |m| m.first == "/#{@custom_module}" }
115
+ @path_to_sample = File.join(@base_path, "/#{@custom_module}")
116
+ return @path_to_sample, get_execution_line_command(@path_to_sample)
117
+ else
118
+ @modules.each do |child|
119
+ full_path = File.join(@base_path, child.first)
120
+ @path_to_sample = full_path
105
121
 
106
- @modules.each do |child|
107
- full_path = "#{@base_path}/#{child.first}"
108
- @path_to_sample = full_path
109
-
110
- execute_line = get_execute_line("#{full_path}/src/main/AndroidManifest.xml")
111
- return full_path, execute_line if execute_line
112
-
122
+ execution_line_command = get_execution_line_command(full_path)
123
+ return full_path, execution_line_command if execution_line_command
124
+ end
113
125
  end
114
- return false, false
126
+ [false, false]
127
+ end
128
+
129
+ def get_clear_app_command
130
+ "adb shell pm clear #{@package}"
115
131
  end
116
132
 
117
133
  def get_uninstall_command
118
134
  "adb uninstall #{@package}"
119
135
  end
120
136
 
121
- def uninstall
122
- system("#{self.get_uninstall_command}") # > /dev/null 2>&1")
137
+ def clear_app_data
138
+ system(get_clear_app_command)
123
139
  end
124
140
 
141
+ def uninstall_application
142
+ system(get_uninstall_command) # > /dev/null 2>&1")
143
+ end
125
144
 
126
- def get_execute_line(path_to_sample)
145
+ def get_execution_line_command(path_to_sample)
146
+ path_to_manifest = File.join(path_to_sample, 'src/main/AndroidManifest.xml')
127
147
 
128
- if !File.exist?(path_to_sample)
148
+ if !File.exist?(path_to_manifest)
129
149
  return false
130
150
  end
131
151
 
132
- f = File.open(path_to_sample)
152
+ f = File.open(path_to_manifest)
133
153
  doc = Nokogiri::XML(f)
134
154
 
135
155
  @package = get_package(doc)
@@ -142,7 +162,6 @@ module DryRun
142
162
  f.close
143
163
 
144
164
  "adb shell am start -n \"#{get_launchable_activity}\" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER"
145
-
146
165
  end
147
166
 
148
167
  def get_launchable_activity
@@ -164,7 +183,5 @@ module DryRun
164
183
  end
165
184
  false
166
185
  end
167
-
168
186
  end
169
-
170
187
  end
@@ -1,3 +1,3 @@
1
1
  module DryRun
2
- VERSION = "0.4.5"
2
+ VERSION = "0.5.0"
3
3
  end
metadata CHANGED
@@ -1,97 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dryrun
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.5.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: 2015-09-12 00:00:00.000000000 Z
11
+ date: 2015-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '10.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '10.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pry-byebug
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '3.1'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '1.7'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.7'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: colorize
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0.7'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.7'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: nokogiri
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: 1.6.6.2
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 1.6.6.2
97
97
  description: Tool which allows to quickly try the demo project of any Android Library
@@ -102,11 +102,11 @@ executables:
102
102
  extensions: []
103
103
  extra_rdoc_files: []
104
104
  files:
105
- - .gitignore
106
- - .rspec
107
- - .ruby-gemset
108
- - .ruby-version
109
- - .travis.yml
105
+ - ".gitignore"
106
+ - ".rspec"
107
+ - ".ruby-gemset"
108
+ - ".ruby-version"
109
+ - ".travis.yml"
110
110
  - Gemfile
111
111
  - LICENSE
112
112
  - README.md
@@ -129,17 +129,17 @@ require_paths:
129
129
  - lib
130
130
  required_ruby_version: !ruby/object:Gem::Requirement
131
131
  requirements:
132
- - - '>='
132
+ - - ">="
133
133
  - !ruby/object:Gem::Version
134
134
  version: 2.0.0
135
135
  required_rubygems_version: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - '>='
137
+ - - ">="
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  requirements: []
141
141
  rubyforge_project:
142
- rubygems_version: 2.4.6
142
+ rubygems_version: 2.4.8
143
143
  signing_key:
144
144
  specification_version: 4
145
145
  summary: Tool which allows to quickly try the demo project of any Android Library