chloe 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/bin/chloe ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'chloe'
5
+
6
+ Chloe::CLI.start
data/lib/chloe/cli.rb ADDED
@@ -0,0 +1,10 @@
1
+ module Chloe
2
+ class CLI < ::Thor
3
+
4
+ desc :install, 'Initializes this application to accept Chloe tasks'
5
+ def install(name)
6
+ invoke Chloe::Tasks::Initialize, [name]
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ module Chloe
2
+ class Executable < Thor
3
+
4
+ def self.start
5
+ @registry.each do |klass, subcommand, usage|
6
+ self.register(klass, subcommand, usage, klass.summary)
7
+ end
8
+ super
9
+ end
10
+
11
+ def self.tag_for_registry(klass, subcommand_name, usage)
12
+ args = [klass, subcommand_name, usage]
13
+ (@registry ||= []) << args
14
+ end
15
+
16
+ end
17
+ end
data/lib/chloe/task.rb ADDED
@@ -0,0 +1,23 @@
1
+ module Chloe
2
+ class Task < Thor
3
+
4
+ def self.inherited(subclass)
5
+ parts = subclass.to_s.split('::')
6
+ basename = parts.last
7
+ namespace = parts[0..-2]
8
+ snakename = Thor::Util.snake_case(basename)
9
+ executable = (namespace << 'Executable').join('::').constantize
10
+
11
+ executable.tag_for_registry subclass, snakename.to_sym, "#{snakename} <command>"
12
+ end
13
+
14
+ def self.summary(summary = nil)
15
+ if summary
16
+ @summary = summary
17
+ else
18
+ @summary || self.to_s.split('::').last
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,26 @@
1
+ module Chloe
2
+ module Tasks
3
+ class Initialize < ::Thor::Group
4
+ include ::Thor::Actions
5
+
6
+ argument :name
7
+
8
+ def self.source_root
9
+ File.dirname(File.expand_path(File.join(__FILE__, '..')))
10
+ end
11
+
12
+ def create_executable
13
+ template('templates/executable', name)
14
+ end
15
+
16
+ def chmod_executable
17
+ chmod(name, 0755)
18
+ end
19
+
20
+ def create_example
21
+ template('templates/example.rb', '.chloe/example.rb')
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,5 @@
1
+ module Chloe
2
+ module Tasks
3
+ autoload :Initialize, 'chloe/tasks/initialize'
4
+ end
5
+ end
@@ -0,0 +1,18 @@
1
+ module <%= Thor::Util.camel_case(name) %>
2
+ module CLI
3
+ class Example < Chloe::Task
4
+ summary "This is an example task group, delete this task group an make your own"
5
+
6
+ desc 'print "[text]"', 'Prints the text that is passed as an argument'
7
+ def print(text)
8
+ puts text
9
+ end
10
+
11
+ desc 'output "[text]"', 'Prints "OUTPUT:" and then the text passed as an argument'
12
+ def output(text)
13
+ puts "OUTPUT: #{text}"
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'chloe'
5
+
6
+ Chloe.bootstrap('<%= Thor::Util.camel_case(name) %>')
@@ -0,0 +1,3 @@
1
+ module Chloe
2
+ VERSION = '0.0.1'
3
+ end
data/lib/chloe.rb ADDED
@@ -0,0 +1,42 @@
1
+ require 'thor'
2
+ require 'thor/group'
3
+
4
+ require 'core_ext/string'
5
+
6
+ require 'chloe/cli'
7
+
8
+ module Chloe
9
+ autoload :CLI, 'chloe/cli'
10
+ autoload :Executable, 'chloe/executable'
11
+ autoload :Task, 'chloe/task'
12
+ autoload :Tasks, 'chloe/tasks'
13
+ autoload :Version, 'chloe/version'
14
+
15
+ class << self
16
+
17
+ def bootstrap(name)
18
+ executable = define_executable(name)
19
+ require_tasks
20
+ executable.start
21
+ end
22
+
23
+ def define_executable(name)
24
+ module_eval <<-EVAL
25
+ module ::#{name}
26
+ module CLI
27
+ class Executable < Chloe::Executable
28
+ end
29
+ end
30
+ end
31
+ EVAL
32
+ "#{name}::CLI::Executable".constantize
33
+ end
34
+
35
+ def require_tasks
36
+ Dir.glob('.chloe/**/*.rb') do |file|
37
+ require file
38
+ end
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,12 @@
1
+ class String
2
+ def constantize
3
+ names = self.split('::')
4
+ names.shift if names.empty? || names.first.empty?
5
+
6
+ constant = Object
7
+ names.each do |name|
8
+ constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
9
+ end
10
+ constant
11
+ end
12
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chloe
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Ryan Moran
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-07-24 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: thor
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ hash: 35
29
+ segments:
30
+ - 0
31
+ - 15
32
+ - 0
33
+ version: 0.15.0
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 35
45
+ segments:
46
+ - 2
47
+ - 11
48
+ - 0
49
+ version: 2.11.0
50
+ type: :development
51
+ version_requirements: *id002
52
+ description: " Chloe is a tool used to manage an application's development environment.\n We all have projects that use a multitude of tools to bootstrap, run, and\n test our applications while they are in development. We have to learn\n bundler, rake, rails, vagrant, librarian, and many other tools so that we\n can just get something up to hack on it. Chloe tries to solve this by\n acting as a simple CLI for your application in development. It enables\n you to wrap up common tasks into a singular interface, keeping tests,\n vms, and dependency management all under one roof.\n"
53
+ email:
54
+ - ryan.moran@gmail.com
55
+ executables:
56
+ - chloe
57
+ extensions: []
58
+
59
+ extra_rdoc_files: []
60
+
61
+ files:
62
+ - bin/chloe
63
+ - lib/chloe.rb
64
+ - lib/chloe/cli.rb
65
+ - lib/chloe/executable.rb
66
+ - lib/chloe/task.rb
67
+ - lib/chloe/tasks.rb
68
+ - lib/chloe/tasks/initialize.rb
69
+ - lib/chloe/templates/example.rb
70
+ - lib/chloe/templates/executable
71
+ - lib/chloe/version.rb
72
+ - lib/core_ext/string.rb
73
+ homepage: https://github.com/ryanmoran/chloe
74
+ licenses: []
75
+
76
+ post_install_message:
77
+ rdoc_options: []
78
+
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ hash: 3
96
+ segments:
97
+ - 0
98
+ version: "0"
99
+ requirements: []
100
+
101
+ rubyforge_project:
102
+ rubygems_version: 1.8.24
103
+ signing_key:
104
+ specification_version: 3
105
+ summary: Chloe helps keep your application development environment under control.
106
+ test_files: []
107
+