lesspainful 0.0.1

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,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in lesspainful.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/bin/lesspainful ADDED
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env ruby
2
+ require 'digest'
3
+ require 'rest_client'
4
+ require 'json'
5
+
6
+ def host
7
+ ENV["lp_host"] || "https://www.lesspainful.com"
8
+ end
9
+
10
+ def digest(file)
11
+ Digest::SHA256.file(file).hexdigest
12
+ end
13
+
14
+ def workspace
15
+ if ARGV[2]
16
+ "#{ARGV[2]}/"
17
+ else
18
+ ""
19
+ end
20
+ end
21
+
22
+ def app
23
+ ARGV[0]
24
+ end
25
+
26
+ def api_key
27
+ ARGV[1]
28
+ end
29
+
30
+ def is_android?
31
+ app.end_with? ".apk"
32
+ end
33
+
34
+ def test_server_path
35
+ require 'digest/md5'
36
+ digest = Digest::MD5.hexdigest(File.read(app))
37
+ version = `calabash-android version`.strip
38
+ "#{workspace}test_servers/#{digest}_#{version}.apk"
39
+ end
40
+
41
+ def all_files
42
+ files = Dir.glob("#{workspace}features/**/*")
43
+ files += Dir.glob("#{workspace}vendor/**/*")
44
+ if is_android?
45
+ files << test_server_path
46
+ end
47
+ files.find_all { |file_or_dir| File.file? file_or_dir }
48
+ end
49
+
50
+ def http_post(address, args)
51
+ response = RestClient.post "#{host}/#{address}", args
52
+ response.body
53
+ end
54
+
55
+ hashes = all_files.collect { |f| digest(f) }
56
+ hashes << digest(app)
57
+
58
+ puts "Checking files"
59
+ response = http_post("check_hash", {"hashes" => hashes})
60
+
61
+ cache_status = JSON.parse(response)
62
+
63
+ curl_args = []
64
+ files = []
65
+ paths = []
66
+ all_files.each do |file|
67
+ if cache_status[digest(file)]
68
+ #Server already knows about this file. No need to upload it.
69
+ files << digest(file)
70
+ else
71
+ #Upload file
72
+ files << File.new(file)
73
+ end
74
+ paths << file.sub(workspace, "")
75
+ end
76
+
77
+ app_file = cache_status[digest(app)] ? digest(app) : File.new(app)
78
+
79
+ puts "Uploading files"
80
+ response = http_post("upload", {"files" => files, "paths" => paths, "app" => app_file, "api_key" => api_key, "app_filename" => File.basename(app)})
81
+ puts response
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "lesspainful"
7
+ s.version = LessPainful::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Jonas Maturana Larsen"]
10
+ s.email = ["jonas@lesspainful.com"]
11
+ s.homepage = "http://www.lesspainful.com"
12
+ s.summary = %q{Client for uploading calabash test to www.lesspainful.com}
13
+ s.description = %q{www.lesspainful.com lets you run calabash tests for native and hybrid apps on physical devices}
14
+ s.files = `git ls-files`.split("\n")
15
+ s.executables = "lesspainful"
16
+ s.require_paths = ["lib"]
17
+
18
+ s.add_dependency( "json")
19
+ s.add_dependency( "rest-client")
20
+ end
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+ gem 'calabash-android'
3
+
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module LessPainful
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lesspainful
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jonas Maturana Larsen
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: json
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rest-client
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: www.lesspainful.com lets you run calabash tests for native and hybrid
47
+ apps on physical devices
48
+ email:
49
+ - jonas@lesspainful.com
50
+ executables:
51
+ - lesspainful
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - Gemfile
56
+ - Rakefile
57
+ - bin/lesspainful
58
+ - lesspainful.gemspec
59
+ - lib/GemfileTemplate
60
+ - lib/version.rb
61
+ homepage: http://www.lesspainful.com
62
+ licenses: []
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ requirements: []
80
+ rubyforge_project:
81
+ rubygems_version: 1.8.24
82
+ signing_key:
83
+ specification_version: 3
84
+ summary: Client for uploading calabash test to www.lesspainful.com
85
+ test_files: []