hw 0.3.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.
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Tom Milewski
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,49 @@
1
+ # HW
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'hw'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install hw
18
+
19
+ ## Usage
20
+
21
+ $ hw active_admin install
22
+ $ hw active_admin resource <model name>
23
+ $ hw airbrake install
24
+ $ hw devise install # TODO
25
+ $ hw devise strategy <facebook | twitter | instagram | github> # TODO
26
+ $ hw git commit # TODO
27
+ $ hw git gitignore
28
+ $ hw git init
29
+ $ hw git remote # TODO
30
+ $ hw haml convert
31
+ $ hw haml install
32
+ $ hw memcache install
33
+ $ hw memcache session_store
34
+ $ hw memcache start
35
+ $ hw new_relic install <license key>
36
+ $ hw rails new <project name>
37
+ $ hw redis install
38
+ $ hw resque install
39
+ $ hw resque scheduler
40
+ $ hw resque worker <name>
41
+ $ hw unicorn install
42
+
43
+ ## Contributing
44
+
45
+ 1. Fork it
46
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
47
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
48
+ 4. Push to the branch (`git push origin my-new-feature`)
49
+ 5. Create new Pull Request
data/bin/hw ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift(File.expand_path('../../lib', __FILE__))
3
+ require 'hw/cli'
4
+ HW::CLI.start
@@ -0,0 +1,4 @@
1
+ require "hw/version"
2
+
3
+ module HW
4
+ end
@@ -0,0 +1,31 @@
1
+ module HW
2
+ module Actions
3
+ def header msg
4
+ say_status ">>>", "\e[36m#{msg}\e[0m", :cyan
5
+ end
6
+
7
+ def info msg; say_status "info", msg, :white; end
8
+ def success msg; say_status "success", msg, :green; end
9
+ def error msg; say_status "error", msg, :red; end
10
+ def warn msg; say_status "warning", msg, :yellow; end
11
+
12
+ def replace_file(destination, data = nil, config = {}, &block)
13
+ remove_file(destination)
14
+ create_file(destination, data, config, block)
15
+ end
16
+
17
+ def bundle
18
+ header "Bundling gems"
19
+ run "bundle install --quiet"
20
+ end
21
+
22
+ def migrate env = :development
23
+ header "Migrating the database"
24
+ rake "db:migrate", :env => env
25
+ end
26
+
27
+ def worker filename, data=nil, &block
28
+ create_file("app/workers/#{filename}", data, :verbose => false, &block)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,10 @@
1
+ require 'git'
2
+ require 'thor'
3
+ require 'thor/group'
4
+ require 'httparty'
5
+ require 'active_support/all' #/concerns
6
+ require 'rails/generators/actions'
7
+
8
+ require 'hw/core_ext/string'
9
+ require 'hw/actions'
10
+ require 'hw/utilities'
@@ -0,0 +1,74 @@
1
+ require 'hw/base'
2
+
3
+ module HW
4
+ class Thor < ::Thor
5
+ include Thor::Actions
6
+ include Rails::Generators::Actions
7
+ include HW::Utilities
8
+ include HW::Actions
9
+ end
10
+
11
+ class CLI < HW::Thor
12
+ def self.start(given_args = ARGV, config = {})
13
+ packages = Hash.new
14
+
15
+ if ARGV.empty?
16
+ SOURCES.keys.each do |directory|
17
+ full_path = File.join(SOURCES_PATH, directory, "*.rb")
18
+
19
+ Dir[full_path].each do |file|
20
+ key = File.basename(file, '.rb')
21
+ packages[key] = file
22
+ end
23
+ end
24
+
25
+ packages.merge!({ 'system' => nil, 'help' => nil })
26
+
27
+ Thor::Shell::Basic.new.print_in_columns(packages.keys.sort)
28
+ else
29
+ name = ARGV.first
30
+
31
+ if name != 'settings'
32
+ if %w(system help).include?(name)
33
+ require 'hw/packages/system'
34
+ register(HW::Packages::System, "system", "system <command>", "Perform system commands")
35
+ else
36
+ SOURCES.keys.each do |directory|
37
+ full_path = File.join(SOURCES_PATH, directory, "#{name}.rb")
38
+ packages[name] = full_path if File.exists?(full_path)
39
+ end
40
+
41
+ begin
42
+ require packages[name]
43
+ rescue TypeError
44
+ puts "Package '#{name}' does not exist in any of the sources."
45
+ exit(1)
46
+ end
47
+
48
+ pkg_name = name.to_pkg
49
+
50
+ if RESERVED_WORDS.include?(pkg_name.downcase)
51
+ raise "#{pkg_name} is a reserved word and cannot be defined as a package"
52
+ end
53
+
54
+ klass = HW::Packages::const_get(pkg_name)
55
+ register(klass, name, "#{name} <command>", "")
56
+ end
57
+ end
58
+ end
59
+
60
+ super(given_args, config)
61
+ end
62
+
63
+ desc "settings", "Display cb settings information"
64
+ def settings
65
+ hidden = %w(ClassMethods)
66
+ constants = HW::Utilities.constants.reject { |c| hidden.include?(c) }
67
+ rows = Array.new
68
+
69
+ constants.each { |constant| rows << [constant, HW::Utilities::const_get(constant)] }
70
+
71
+ Thor::Shell::Basic.new.print_table(rows)
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,6 @@
1
+ class String
2
+ def to_pkg
3
+ string = self.to_s.sub(/^[a-z\d]*/) { $&.capitalize }
4
+ string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub('/', '::')
5
+ end
6
+ end
@@ -0,0 +1,42 @@
1
+ module HW
2
+ module Packages
3
+ class System < HW::Thor
4
+ desc "update", "Update installed packages"
5
+ def update
6
+ header "Updating hw"
7
+
8
+ # Setup File Structure
9
+ empty_directory DIRECTORY unless File.exists? DIRECTORY
10
+ empty_directory SOURCES_PATH unless File.exists? SOURCES_PATH
11
+
12
+ unless File.exists? CONFIG_PATH
13
+ header "Adding default source to #{CONFIG_PATH}"
14
+
15
+ create_file CONFIG_PATH
16
+ invoke :add_source, ["default", DEFAULT_SOURCE]
17
+ end
18
+
19
+ SOURCES.each do |name, url|
20
+ begin
21
+ repo_path = "#{SOURCES_PATH}/#{name}"
22
+
23
+ if File.exists?(repo_path)
24
+ Git.open(repo_path).pull
25
+ else
26
+ Git.clone(url, name, :path => SOURCES_PATH)
27
+ end
28
+ success "Successfully pulled updates from #{url} to #{SOURCES_PATH}#{name}"
29
+ rescue Git::GitExecuteError
30
+ warn "Nothing was pulled from #{url}"
31
+ end
32
+ end
33
+ end
34
+
35
+ desc "add_source <name> <source>", "Add a source to ~/.cbrc"
36
+ def add_source name, source
37
+ header "Appending #{name} to #{CONFIG_PATH}"
38
+ append_file CONFIG_PATH, "#{name}=#{source}\n"
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,31 @@
1
+ module HW
2
+ module Utilities
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ DEFAULT_SOURCE = "git@github.com:carrot/hw-packages.git"
7
+ DIRECTORY = File.expand_path("~/.hw/")
8
+ CONFIG_PATH = "#{DIRECTORY}/config"
9
+ SOURCES_PATH = "#{DIRECTORY}/sources/"
10
+ RESERVED_WORDS = %w(help system)
11
+ SOURCES = self.sources
12
+ end
13
+
14
+ module ClassMethods
15
+ def sources
16
+ if File.exists? CONFIG_PATH
17
+ sources = Hash.new
18
+
19
+ File.readlines(CONFIG_PATH).each do |line|
20
+ source = line.split("=")
21
+ sources[source[0]] = source[1].strip
22
+ end
23
+
24
+ sources
25
+ else
26
+ {}
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,3 @@
1
+ module HW
2
+ VERSION = "0.3.0"
3
+ end
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hw
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tom Milewski
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: &70278592665240 !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: *70278592665240
25
+ - !ruby/object:Gem::Dependency
26
+ name: thor
27
+ requirement: &70278592653920 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.14.6
33
+ - - <
34
+ - !ruby/object:Gem::Version
35
+ version: '2.0'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: *70278592653920
39
+ - !ruby/object:Gem::Dependency
40
+ name: rails
41
+ requirement: &70278592651820 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: *70278592651820
50
+ - !ruby/object:Gem::Dependency
51
+ name: rake
52
+ requirement: &70278592651140 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ! '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ type: :runtime
59
+ prerelease: false
60
+ version_requirements: *70278592651140
61
+ - !ruby/object:Gem::Dependency
62
+ name: httparty
63
+ requirement: &70278592650380 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ type: :runtime
70
+ prerelease: false
71
+ version_requirements: *70278592650380
72
+ - !ruby/object:Gem::Dependency
73
+ name: pg
74
+ requirement: &70278592649580 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ type: :runtime
81
+ prerelease: false
82
+ version_requirements: *70278592649580
83
+ - !ruby/object:Gem::Dependency
84
+ name: git
85
+ requirement: &70278592648940 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: *70278592648940
94
+ - !ruby/object:Gem::Dependency
95
+ name: rspec-rails
96
+ requirement: &70278592648280 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: *70278592648280
105
+ - !ruby/object:Gem::Dependency
106
+ name: ruby-prof
107
+ requirement: &70278592647560 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ type: :development
114
+ prerelease: false
115
+ version_requirements: *70278592647560
116
+ - !ruby/object:Gem::Dependency
117
+ name: debugger
118
+ requirement: &70278592646380 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: *70278592646380
127
+ - !ruby/object:Gem::Dependency
128
+ name: ronn
129
+ requirement: &70278592645660 !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: *70278592645660
138
+ - !ruby/object:Gem::Dependency
139
+ name: rspec
140
+ requirement: &70278592644060 !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ~>
144
+ - !ruby/object:Gem::Version
145
+ version: '2.11'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: *70278592644060
149
+ - !ruby/object:Gem::Dependency
150
+ name: sqlite3
151
+ requirement: &70278592638880 !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ type: :development
158
+ prerelease: false
159
+ version_requirements: *70278592638880
160
+ description: Package manager for random tasks
161
+ email:
162
+ - tmilewski@gmail.com
163
+ executables:
164
+ - hw
165
+ extensions: []
166
+ extra_rdoc_files: []
167
+ files:
168
+ - lib/hw/actions.rb
169
+ - lib/hw/base.rb
170
+ - lib/hw/cli.rb
171
+ - lib/hw/core_ext/string.rb
172
+ - lib/hw/packages/system.rb
173
+ - lib/hw/utilities.rb
174
+ - lib/hw/version.rb
175
+ - lib/hw.rb
176
+ - bin/hw
177
+ - LICENSE
178
+ - README.md
179
+ homepage: http://carrotcreative.com
180
+ licenses: []
181
+ post_install_message:
182
+ rdoc_options: []
183
+ require_paths:
184
+ - lib
185
+ required_ruby_version: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ required_rubygems_version: !ruby/object:Gem::Requirement
192
+ none: false
193
+ requirements:
194
+ - - ! '>='
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ requirements: []
198
+ rubyforge_project:
199
+ rubygems_version: 1.8.17
200
+ signing_key:
201
+ specification_version: 3
202
+ summary: ''
203
+ test_files: []