releaseable 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/.gitignore ADDED
@@ -0,0 +1,35 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## Idea
17
+ .idea
18
+ .bundle
19
+ .rakeTasks
20
+ *.iml
21
+
22
+ ## PROJECT::GENERAL
23
+ coverage
24
+ config
25
+ data
26
+ rdoc
27
+ pkg
28
+ log
29
+ tmp
30
+
31
+ ## PROJECT::SPECIFIC
32
+ *.db
33
+
34
+ # Yard cache files - used for the autogenerated documentation
35
+ .yardoc
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.2
@@ -0,0 +1,71 @@
1
+ require 'logger'
2
+ require 'logglier'
3
+ require 'java'
4
+
5
+ # Avoid OpenSSL failures
6
+ OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
7
+
8
+ # Logger extensions
9
+ class Logger
10
+
11
+ attr_accessor :config
12
+
13
+ def self.sound_alarm beeps = 3
14
+ beeps.times do
15
+ java.awt.Toolkit.getDefaultToolkit.beep
16
+ sleep 0.5
17
+ end
18
+ end
19
+
20
+ def sound_alarm beeps = @config[:beeps]
21
+ self.class.sound_alarm beeps
22
+ end
23
+
24
+ alias old_fatal fatal
25
+
26
+ def fatal *args
27
+ if @config && @config[:fatal]
28
+ entry = args.first
29
+ case entry
30
+ when Exception
31
+ @config[:fatal].fatal "#{entry.class}: '#{entry.message}' at #{caller.join(', ')}"
32
+ else
33
+ @config[:fatal].info *args
34
+ end
35
+ end
36
+ old_fatal *args
37
+ end
38
+
39
+ def configure config, &formatter
40
+ @config = config
41
+ @config[:beeps] ||= 0
42
+ @config[:time_format] ||= @config[:time] || '%M:%S.%N'
43
+ @config[:input] ||= 'b9a22025-b148-4dfe-8355-ce5dba40b6a2' #non-default
44
+ @config[:domain] ||= 'logs.loggly.com'
45
+ unless @config[:ignore]
46
+ @config[:fatal] ||= Logglier.new "https://#{@config[:domain]}/inputs/#{@config[:input]}"
47
+ end
48
+
49
+ self.level = @config[:level] || Logger::INFO
50
+ self.formatter = formatter || proc do |level, time, prog, msg|
51
+ "#{time.strftime(@config[:time_format])} #{msg}\n"
52
+ end
53
+ end
54
+ end
55
+
56
+ # Object#raise extensions
57
+
58
+ alias old_raise raise
59
+
60
+ # Sound alarm before raising error
61
+ def raise error
62
+ ex = error.kind_of?(String) ? RuntimeError.new(error) : error.exception
63
+
64
+ if defined?(log) && log.config
65
+ log.sound_alarm
66
+ log.fatal ex
67
+ else
68
+ Logger.sound_alarm
69
+ end
70
+ #old_raise ex #, ex.message, caller #ex.backtrace
71
+ end
@@ -0,0 +1,176 @@
1
+ #require 'httpclient'
2
+ #require 'net/http'
3
+ require 'xmlsimple'
4
+ require 'faraday'
5
+ require 'faraday_middleware'
6
+ require 'json'
7
+
8
+ module Releaseable
9
+ module GitHub
10
+
11
+ #OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
12
+
13
+ def self.connection
14
+ Faraday.new(:ssl => {:verify => false}) do |connection|
15
+ connection.use Faraday::Request::UrlEncoded
16
+ connection.use Faraday::Response::Logger
17
+ connection.adapter(Faraday.default_adapter)
18
+ end
19
+ end
20
+
21
+ #def self.get address #, data
22
+ # connection.get address
23
+ #end
24
+ #
25
+ #def self.post address, data
26
+ # connection.post address, data
27
+ #end
28
+
29
+ def self.post address, data
30
+ require 'net/http'
31
+ p uri = URI(address) #'https://secure.example.com/some_path?query=string')
32
+
33
+ #Net::HTTP.start(uri.host, uri.port,
34
+ # :use_ssl => uri.scheme == 'https',
35
+ # :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http|
36
+ # #request = Net::HTTP::Get.new uri.request_uri
37
+ # request = Net::HTTP::Post.new uri.path
38
+ # request.set_form_data(data)
39
+ #
40
+ # p response = http.request(request) # Net::HTTPResponse object
41
+ #end
42
+
43
+ server = Net::HTTP.new(uri.host, uri.port)
44
+ server.use_ssl = (uri.scheme == 'https')
45
+ server.verify_mode = OpenSSL::SSL::VERIFY_NONE if server.use_ssl?
46
+ server.start do |http|
47
+ req = Net::HTTP::Post.new(uri.path)
48
+ case data
49
+ when Hash
50
+ req.form_data = data
51
+ when Array
52
+ req.body = data
53
+ req.content_type = 'multipart/form-data'
54
+ end
55
+ http.request(req)
56
+ end
57
+ #rescue => err
58
+ # p err
59
+ end
60
+
61
+ def self.upload info = {}
62
+ info[:login] ||= `git config github.user`.chomp
63
+ info[:token] ||= `git config github.token`.chomp
64
+
65
+ raise "login or token is empty" if info[:login].empty? or info[:token].empty?
66
+ raise "required repository name" unless info[:repos]
67
+ raise "required file to upload" unless info[:file]
68
+
69
+ info[:repos] = info[:login] + '/' + info[:repos] unless info[:repos].include? '/'
70
+
71
+ if info[:file]
72
+ file = info[:file]
73
+ raise "bad file #{info[:file]}" unless File.exist?(file) && File.readable?(file)
74
+ info[:name] ||= File.basename(file) + rand(1000).to_s
75
+ end
76
+
77
+ raise "required name for filename with data parameter" unless info[:name]
78
+
79
+ info[:content_type] ||= 'application/octet-stream'
80
+
81
+ response = post "https://github.com/#{info[:repos]}/downloads",
82
+ 'file_size' => File.stat(info[:file]).size,
83
+ 'content_type' => info[:content_type],
84
+ 'file_name' => info[:name],
85
+ 'description' => info[:description] || '',
86
+ 'login' => info[:login],
87
+ 'token' => info[:token]
88
+
89
+ raise "Failed to post file info" unless response.code.to_i == 200 #status == 200
90
+
91
+ puts upload = JSON.parse(response.body)
92
+ upload.each { |k, v| print "#{k}:"; p v }
93
+ p upload['expirationdate']
94
+ p Time.utc *upload['expirationdate'].split(/[-T:]/)
95
+ sec = Time.utc(*upload['expirationdate'].split(/[-T:]/)).to_i
96
+
97
+ f = File.open(info[:file], 'rb')
98
+
99
+ ##stat = HTTPClient.post("http://github.s3.amazonaws.com/", [
100
+ response = post "http://github.s3.amazonaws.com/",
101
+ 'key' => upload['path'], #.gsub(/\//, '%2F'),
102
+ 'acl' => upload['acl'], #"public-read", #
103
+ 'success_action_status' => 201,
104
+ 'Filename' => info[:name],
105
+ 'AWSAccessKeyId' => upload['accesskeyid'],
106
+ 'Policy' => upload['policy'],
107
+ #'policy' => upload['policy'],
108
+ #'signature' => upload['signature'],
109
+ 'Signature' => upload['signature'],
110
+ 'Expires' => 1483421360, #sec, #upload['expirationdate'],
111
+ 'Content-Type' => upload['mime_type'] || 'application/octet-stream',
112
+ 'file' => f
113
+ #response = post "http://github.s3.amazonaws.com/",
114
+ # 'Filename' => info[:name],
115
+ # 'policy' => upload['policy'],
116
+ # 'success_action_status' => 201,
117
+ # 'key' => upload['path'].gsub(/\//, '%2F'),
118
+ # 'AWSAccessKeyId' => upload['accesskeyid'],
119
+ # 'Content-Type' => upload['mime_type'] || 'application/octet-stream',
120
+ # 'signature' => upload['signature'],
121
+ # 'acl' => upload['acl'], #"public-read", #
122
+ # 'file' => f
123
+
124
+ #stat = HTTPClient.post("http://github.s3.amazonaws.com/", [
125
+ # ['Filename', info[:name]],
126
+ # ['policy', upload_info['policy']],
127
+ # ['success_action_status', 201],
128
+ # ['key', upload_info['path']],
129
+ # ['AWSAccessKeyId', upload_info['accesskeyid']],
130
+ # ['Content-Type', upload_info['content_type'] || 'application/octet-stream'],
131
+ # ['signature', upload_info['signature']],
132
+ # ['acl', upload_info['acl']],
133
+ # ['file', f]
134
+ #])
135
+
136
+ #url = 'https://github.s3.amazonaws.com/'
137
+ #form = {
138
+ # 'key': 'downloads/octocat/Hello-World/new_file.jpg',
139
+ # 'acl': 'public-read',
140
+ # 'file': '@new_file.jpg'
141
+ #}
142
+ #
143
+ #r = requests.post(url, data=form)
144
+
145
+ # curl \
146
+ # -F "key=downloads/octocat/Hello-World/new_file.jpg" \
147
+ # -F "acl=public-read" \
148
+ # -F "success_action_status=201" \
149
+ # -F "Filename=new_file.jpg" \
150
+ # -F "AWSAccessKeyId=1ABCDEF..." \
151
+ # -F "Policy=ewogIC..." \
152
+ # -F "Signature=mwnF..." \
153
+ # -F "Content-Type=image/jpeg" \
154
+ # -F "file=@new_file.jpg" \
155
+ #https://github.s3.amazonaws.com/
156
+
157
+
158
+ f.close
159
+
160
+ analyze_aws_response response
161
+ end
162
+
163
+ private
164
+
165
+ def self.analyze_aws_response response
166
+ p message = XmlSimple.xml_in(response.body)
167
+ if response.code.to_i == 201
168
+ message['PostResponse']['Location']
169
+ else
170
+ #error = message['Error']
171
+ raise "Failed to upload" +
172
+ (" due to #{message['Code']} (#{message['Message']})" rescue '')
173
+ end
174
+ end
175
+ end
176
+ end
@@ -0,0 +1,50 @@
1
+ require "java"
2
+
3
+ # Sound snippets from everywhere (JRuby-only!):
4
+
5
+ def sound_alarm beeps = 3
6
+ beeps.times do
7
+ java.awt.Toolkit.getDefaultToolkit.beep
8
+ sleep 0.5
9
+ end
10
+ end
11
+
12
+ ; 3.times {java.awt.Toolkit.getDefaultToolkit.beep; p "oo"; sleep 1}
13
+
14
+ # Sound snippets from everywhere (JRuby-only!):
15
+
16
+ java_import javax.sound.sampled.AudioSystem
17
+ java_import javax.sound.sampled.Clip
18
+ java_import javax.sound.sampled.DataLine
19
+
20
+ class Sound
21
+ attr_accessor :clip
22
+
23
+ def self.load_sound(file_name)
24
+ sound = new
25
+
26
+ url = java.net.URL.new("file://" + ASSETS_DIR + file_name) # nasty little hack due to borked get_resource (means applet won't be easy..)
27
+ ais = AudioSystem.get_audio_input_stream(url)
28
+ info = DataLine::Info.new(Clip.java_class, ais.format)
29
+ clip = AudioSystem.get_line(info)
30
+ clip.open(ais)
31
+ clip.extend JRuby::Synchronized
32
+ sound.clip = clip
33
+
34
+ sound
35
+ end
36
+
37
+ def play
38
+ if clip
39
+ Thread.new do
40
+ clip.stop
41
+ clip.frame_position = 0
42
+ clip.start
43
+ end
44
+ end
45
+ end
46
+
47
+ %w{altar bosskill click1 click2 hit hurt hurt2 kill death splash key pickup roll shoot treasure crumble slide cut thud ladder potion}.each do |name|
48
+ const_set name.upcase, load_sound("/snd/#{name}.wav")
49
+ end
50
+ end
@@ -0,0 +1,8 @@
1
+ require 'pathname'
2
+
3
+ module Releaseable
4
+
5
+ VERSION_FILE = Pathname.new(__FILE__).dirname + '../../VERSION' # :nodoc:
6
+ VERSION = VERSION_FILE.exist? ? VERSION_FILE.read.strip : nil
7
+
8
+ end
@@ -0,0 +1,6 @@
1
+ module Releaseable
2
+ end # module Releaseable
3
+
4
+ require 'releaseable/version'
5
+
6
+
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: releaseable
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.2
6
+ platform: ruby
7
+ authors:
8
+ - arvicco
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-01-28 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: bundler
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.0.0
24
+ type: :runtime
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: jruby-openssl
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 0.7.5
35
+ type: :runtime
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: logglier
39
+ prerelease: false
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 0.2.7
46
+ type: :runtime
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: xml-simple
50
+ prerelease: false
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 1.1.1
57
+ type: :runtime
58
+ version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
60
+ name: rspec
61
+ prerelease: false
62
+ requirement: &id005 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 2.0.0
68
+ type: :development
69
+ version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
71
+ name: cucumber
72
+ prerelease: false
73
+ requirement: &id006 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ type: :development
80
+ version_requirements: *id006
81
+ - !ruby/object:Gem::Dependency
82
+ name: my_scripts
83
+ prerelease: false
84
+ requirement: &id007 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: "0"
90
+ type: :development
91
+ version_requirements: *id007
92
+ description: Support for non-gem package releases for JRuby (pre-alpha!).
93
+ email: arvitallian@gmail.com
94
+ executables: []
95
+
96
+ extensions: []
97
+
98
+ extra_rdoc_files: []
99
+
100
+ files:
101
+ - lib/releaseable.rb
102
+ - lib/releaseable/extensions.rb
103
+ - lib/releaseable/github.rb
104
+ - lib/releaseable/sound.rb
105
+ - lib/releaseable/version.rb
106
+ - VERSION
107
+ - .gitignore
108
+ homepage: http://github.com/arvicco/releaseable
109
+ licenses: []
110
+
111
+ post_install_message:
112
+ rdoc_options: []
113
+
114
+ require_paths:
115
+ - lib
116
+ required_ruby_version: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: "0"
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: "0"
128
+ requirements: []
129
+
130
+ rubyforge_project:
131
+ rubygems_version: 1.8.15
132
+ signing_key:
133
+ specification_version: 3
134
+ summary: Packaged releases support
135
+ test_files: []
136
+