tacape 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ .DS_Store
2
+ pkg
3
+ tmp
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --format documentation
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org"
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,53 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ tacape (0.0.1)
5
+ activesupport
6
+ i18n
7
+ notifier
8
+ os
9
+ thor
10
+
11
+ GEM
12
+ remote: https://rubygems.org/
13
+ specs:
14
+ activesupport (3.2.12)
15
+ i18n (~> 0.6)
16
+ multi_json (~> 1.0)
17
+ coderay (1.0.9)
18
+ diff-lcs (1.2.4)
19
+ i18n (0.6.4)
20
+ method_source (0.8.1)
21
+ multi_json (1.7.4)
22
+ notifier (0.4.1)
23
+ os (0.9.6)
24
+ pry (0.9.12.2)
25
+ coderay (~> 1.0.5)
26
+ method_source (~> 0.8)
27
+ slop (~> 3.4)
28
+ pry-nav (0.2.3)
29
+ pry (~> 0.9.10)
30
+ rake (10.0.4)
31
+ rspec (2.13.0)
32
+ rspec-core (~> 2.13.0)
33
+ rspec-expectations (~> 2.13.0)
34
+ rspec-mocks (~> 2.13.0)
35
+ rspec-core (2.13.1)
36
+ rspec-expectations (2.13.0)
37
+ diff-lcs (>= 1.1.3, < 2.0)
38
+ rspec-mocks (2.13.1)
39
+ slop (3.4.5)
40
+ test_notifier (1.0.1)
41
+ notifier
42
+ thor (0.18.1)
43
+
44
+ PLATFORMS
45
+ ruby
46
+
47
+ DEPENDENCIES
48
+ pry
49
+ pry-nav
50
+ rake
51
+ rspec
52
+ tacape!
53
+ test_notifier
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler"
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require "rspec/core/rake_task"
5
+ RSpec::Core::RakeTask.new
6
+
7
+ task :default => :build
data/Readme.md ADDED
@@ -0,0 +1,23 @@
1
+ [![Code Climate](https://codeclimate.com/github/lucasmartins/tacape.png)](https://codeclimate.com/github/lucasmartins/tacape) [![Build Status](https://secure.travis-ci.org/lucasmartins/tacape.png?branch=master)](https://travis-ci.org/lucasmartins/tacape) [![Dependency Status](https://gemnasium.com/lucasmartins/tacape.png)](https://gemnasium.com/lucasmartins/tacape)
2
+
3
+ Tacape
4
+ ======
5
+
6
+ This is a work in progrees, I would wait until I have the testing suite implemented to publish this but time is slipping away from me, maybe you can help!
7
+
8
+ Just fork [Tacape Tools]((https://github.com/lucasmartins/tacape-tools)), add your tool, and make a pull request.
9
+
10
+ You can test your tools locally just throwing them at the `~/.tacape/tools` folder.
11
+
12
+ Take a look at the code of the tools already implemented.
13
+
14
+ All I did was to get the code of scripts I made for myself and put them togheter in a better organized way, this is not the kind of code you should publish, but I believe this is gonna force me to make it better.
15
+
16
+ Have fun!
17
+
18
+ This repo is used by [Tacape](https://github.com/lucasmartins/tacape)
19
+
20
+ License
21
+ =======
22
+
23
+ Tacape Tools is free software under the [MIT license](http://lucasmartins.mit-license.org).
data/bin/tacape ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- mode: ruby -*-
3
+
4
+ require "tacape"
5
+ Tacape::Cli.start
@@ -0,0 +1,11 @@
1
+ en:
2
+ greeting: "This is Tacape, a command-line tool that gathers years of personal crafting, don't use it too seriously thou."
3
+ tools:
4
+ gitrepo:
5
+ bless:
6
+ desc: 'Blesses the current folder to a remote repository'
7
+ list:
8
+ desc: 'Lists the remote repositories'
9
+ dns:
10
+ check_names:
11
+ desc: 'Checks a list of names for availability through DNS Lookup'
@@ -0,0 +1,11 @@
1
+ pt-BR:
2
+ greeting: 'Este é o Tacape, um utilitário para linha de comando que junta anos de hacking pessoal, no entanto, não leve muito a sério.'
3
+ tools:
4
+ gitrepo:
5
+ bless:
6
+ desc: '"Abençoa" a pasta atual para um repositório remoto'
7
+ list:
8
+ desc: 'Lista os repositórios remotos'
9
+ dns:
10
+ check_names:
11
+ desc: 'Verifica a disponibilidade de domínios através de uma lista de nomes utilizando DNS Lookup'
data/config/tacape.yml ADDED
@@ -0,0 +1 @@
1
+ --
data/lib/tacape.rb ADDED
@@ -0,0 +1,62 @@
1
+ require 'active_support/all'
2
+ require 'digest/md5'
3
+ require 'erb'
4
+ require 'logger'
5
+ require 'notifier'
6
+ require 'tempfile'
7
+ require 'pathname'
8
+ require 'thor'
9
+ require 'thor/group'
10
+ require 'yaml'
11
+ require 'os'
12
+ require 'i18n'
13
+ require 'pry'
14
+ require 'pry-nav'
15
+
16
+ Encoding.default_internal = "utf-8"
17
+ Encoding.default_external = "utf-8"
18
+
19
+ #Adds a way to retrieve Submodules of a Module, used for CustomContentParsers
20
+ class Module
21
+ def submodules
22
+ constants.collect {|const_name| const_get(const_name)}.select {|const| const.class == Module}
23
+ end
24
+ end
25
+
26
+ module Tacape
27
+ ROOT = Pathname.new(File.dirname(__FILE__) + "/..")
28
+
29
+ autoload :Cli, "tacape/cli"
30
+ autoload :Version, "tacape/version"
31
+ load "tacape/belt.rb"
32
+
33
+ def self.config(root_dir = nil)
34
+ root_dir ||= Pathname.new(Dir.pwd)
35
+ path = root_dir.join("config/tacape.yml")
36
+
37
+ raise "Invalid Tacape directory; couldn't found config/tacape.yml file." unless File.file?(path)
38
+ content = File.read(path)
39
+ erb = ERB.new(content).result
40
+ YAML.load(erb).with_indifferent_access
41
+ end
42
+
43
+ def self.locale
44
+ I18n.load_path = Dir['config/locales/*.yml']
45
+ I18n.backend.load_translations
46
+
47
+ @locale ||= Belt.current_os.locale
48
+ case @locale
49
+ when 'pt_BR'
50
+ I18n.locale = :"pt-BR"
51
+ else
52
+ I18n.locale = :en
53
+ end
54
+ return @locale
55
+ end
56
+ Tacape.locale
57
+
58
+ def self.logger
59
+ @logger ||= Logger.new(File.open("/tmp/tacape.log", "a"))
60
+ end
61
+
62
+ end
@@ -0,0 +1,30 @@
1
+ module Tacape
2
+ load "tacape/oses/osx.rb"
3
+ load "tacape/oses/fedora.rb"
4
+ load "tacape/oses/os_exceptions.rb"
5
+
6
+ class Belt
7
+ def self.os_families
8
+ #msoft: [windows: Windows]
9
+ {:mac=> {:osx=>Tacape::Os::Osx}, :linux=> {:fedora=>Tacape::Os::Fedora}}
10
+ end
11
+
12
+ #Returns the current OS class
13
+ def self.current_os
14
+ current_os=:unknown
15
+ current_os=self.os_families[:mac][:osx] if OS.osx?
16
+ current_os=self.os_families[:msoft][:windows] if OS.windows?
17
+ if OS.linux?
18
+ Belt.os_families[:linux].each do |k,v|
19
+ current_os=v.identify if v.identify!=nil
20
+ end
21
+ end
22
+ if current_os==nil
23
+ raise OSLayerNotImplemented, "Sorry, no goodies for you for now, we only support there OSes:\n#{Tacape::Belt.os_families}"
24
+ else
25
+ return current_os
26
+ end
27
+ end
28
+
29
+ end
30
+ end
data/lib/tacape/cli.rb ADDED
@@ -0,0 +1,89 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Tacape
3
+ load "tacape/tools/helpers/json_config.rb"
4
+ load "tacape/tools/helpers/os_support.rb"
5
+
6
+ class Cli < Thor
7
+ Dir["#{Tacape::Belt.current_os.tool_folder}/**/*.rb"].each do |tool|
8
+ load tool
9
+ end
10
+
11
+ def initialize(*args)
12
+ super
13
+ @current_os=Tacape::Belt.current_os
14
+ create_folder_structure
15
+ puts I18n.t('greeting')
16
+ end
17
+
18
+ def self.exit_on_failure?
19
+ true
20
+ end
21
+
22
+ desc "version", "Shows version"
23
+ map %w(-v --version) => :version
24
+ def version
25
+ say "Tacape version #{Version::STRING}"
26
+ end
27
+
28
+ desc "check", "Checks for system dependencies"
29
+ map %w(-c --check) => :check
30
+ def check
31
+ if `which ffmpeg`.include? 'ffmpeg'
32
+ ffmpeg=''
33
+ end
34
+ say "FFMPEG #{ffmpeg}"
35
+ end
36
+
37
+ desc "update", "Updates the Tools local repository"
38
+ map %w(-u --update) => :update
39
+ def update
40
+ update_tools
41
+ end
42
+
43
+ private
44
+ def config
45
+ YAML.load_file(config_path).with_indifferent_access
46
+ end
47
+
48
+ def config_path
49
+ root_dir.join("config/tacape.yml")
50
+ end
51
+
52
+ def root_dir
53
+ @root ||= Pathname.new(Dir.pwd)
54
+ end
55
+
56
+ def color(text, color)
57
+ color? ? shell.set_color(text, color) : text
58
+ end
59
+
60
+ def color?
61
+ shell.instance_of?(Thor::Shell::Color)
62
+ end
63
+
64
+ def self.load_tools
65
+ Dir["#{Tacape::Belt.current_os.tool_folder}/**/*.rb"].each do |tool|
66
+ load tool
67
+ end
68
+ end
69
+
70
+ def update_tools
71
+ #Should the tools be updated at each command?
72
+ Thread.new {
73
+ `cd #{@current_os.tool_folder} && git pull`
74
+ }
75
+ end
76
+
77
+ def create_folder_structure
78
+ unless File.exists? @current_os.config_folder
79
+ FileUtils.mkdir_p(@current_os.config_folder)
80
+ end
81
+ unless File.exists? @current_os.tool_folder
82
+ `git clone git@bitbucket.org:lucasmartins/tacape-tools.git #{@current_os.tool_folder}`
83
+ else
84
+ update_tools
85
+ end
86
+ end
87
+
88
+ end
89
+ end
@@ -0,0 +1,50 @@
1
+ module Tacape
2
+ module Os
3
+ class Fedora
4
+ def initialize
5
+ Tacape.logger.info 'Building OS class...'
6
+ @version = Tacape::Fedora.version
7
+ @config_folder = Tacape::Fedora.config_folder
8
+ end
9
+
10
+ def self.locale
11
+ puts 'Retrieving locale thorugh LANG environment variable...'
12
+ return ENV['LANG'].split('.').first
13
+ end
14
+
15
+ def self.config_folder
16
+ return "#{ENV['HOME']}/.tacape/config"
17
+ end
18
+
19
+ def self.tool_folder
20
+ return "#{ENV['HOME']}/.tacape/tools"
21
+ end
22
+
23
+ def self.identify
24
+ if self.issue_info.include? 'Fedora'
25
+ puts "Creating folder structure for Fedora"
26
+ return Tacape::Belt.os_families[:linux][:fedora]
27
+ else
28
+ return nil
29
+ end
30
+ end
31
+
32
+ def self.version
33
+ if issue_info.include? 'Fedora'
34
+ return issue_info.split(' ')[2]
35
+ else
36
+ raise WrongOSException,'Expecting Fedora'
37
+ end
38
+ end
39
+
40
+ protected
41
+ def self.issue_info
42
+ id_file='/etc/issue'
43
+ if File.exists?(id_file)
44
+ return File.read(id_file)
45
+ end
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,10 @@
1
+ module Tacape
2
+ class WrongOSException < StandardError
3
+ end
4
+
5
+ class OSLayerNotImplemented < StandardError
6
+ end
7
+
8
+ class UnsupportedOS < StandardError
9
+ end
10
+ end
@@ -0,0 +1,48 @@
1
+ module Tacape
2
+ module Os
3
+ class Osx
4
+ def initialize
5
+ Tacape.logger.info 'Building OS class...'
6
+ @version = Tacape::Fedora.version
7
+ @config_folder = Tacape::Fedora.config_folder
8
+ end
9
+
10
+ def self.locale
11
+ return ENV['LANG'].split('.').first
12
+ end
13
+
14
+ def self.config_folder
15
+ return "#{ENV['HOME']}/.tacape/config"
16
+ end
17
+
18
+ def self.tool_folder
19
+ return "#{ENV['HOME']}/.tacape/tools"
20
+ end
21
+
22
+ def self.identify
23
+ if OS.osx?
24
+ return Tacape::Belt.os_families[:mac][:osx]
25
+ else
26
+ return nil
27
+ end
28
+ end
29
+
30
+ def self.version
31
+ if OS.osx?
32
+ return `sw_vers -productVersion`.chomp
33
+ else
34
+ raise WrongOSException,'Expecting OSX'
35
+ end
36
+ end
37
+
38
+ protected
39
+ def issue_info
40
+ id_file='/etc/issue'
41
+ if File.exists?(id_file)
42
+ return File.read(id_file)
43
+ end
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,70 @@
1
+ module Tacape
2
+ module Tools
3
+ module Helpers
4
+ module JsonConfig
5
+ module InstanceMethods
6
+ def setup
7
+ @config={}
8
+ @config_template.each do |k,v|
9
+ tip=' use comma, no spaces' if v.class==Array
10
+ if @config_template[k]!=nil && @config_template[k]!=''
11
+ question = "#{k} [default=#{@config_template[k]}]#{tip}:"
12
+ else
13
+ question = "#{k}#{tip}:"
14
+ end
15
+
16
+ input = ask(question)
17
+
18
+ unless input.empty?
19
+ case v
20
+ when String
21
+ @config[k]=input
22
+ when Array
23
+ @config[k]=input.split(',')
24
+ else
25
+ puts "Bailed on #{v.class}"
26
+ end
27
+ if k.include?('folder') || k.include?('file')
28
+ if File.dirname(@config[k]) == '.'
29
+ @config[k]="#{ENV['HOME']}/#{@config[k]}"
30
+ end
31
+ unless File.exist?(File.dirname(@config[k]))
32
+ FileUtils.mkdir_p(File.dirname(@config[k]))
33
+ end
34
+ end
35
+ else
36
+ @config[k]=@config_template[k]
37
+ end
38
+ end
39
+
40
+ save_config
41
+ end
42
+
43
+ def load_config
44
+ if File.exist? @config_file
45
+ @config = JSON.parse(File.read(@config_file))
46
+ unless @config.class==Hash
47
+ raise 'Corrupt JSON file!'
48
+ end
49
+ return
50
+ else
51
+ setup
52
+ end
53
+ end
54
+
55
+ def save_config
56
+ unless File.exist? File.dirname(@config_file)
57
+ FileUtils.mkdir_p(File.dirname(@config_file))
58
+ end
59
+
60
+ File.open(@config_file, 'w') {|f| f.write(@config.to_json) }
61
+ end
62
+ end
63
+
64
+ def self.included(receiver)
65
+ receiver.send :include, InstanceMethods
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,23 @@
1
+ module Tacape
2
+ module Tools
3
+ module Helpers
4
+ module OsSupport
5
+ module InstanceMethods
6
+ def check_os_support
7
+ raise(OSLayerNotImplemented,'tool should have @os_support=[Tacepe::Os::SomeOs,...]') if @os_support==nil
8
+ @current_os=Tacape::Belt.current_os if @current_os==nil
9
+ unless @os_support.include? @current_os
10
+ raise UnsupportedOS, "This Tacape Tool does not support your OS."
11
+ end
12
+ end
13
+
14
+ end
15
+
16
+ def self.included(receiver)
17
+ receiver.send :include, InstanceMethods
18
+ end
19
+
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,8 @@
1
+ module Tacape
2
+ module Version
3
+ MAJOR = 0
4
+ MINOR = 0
5
+ PATCH = 3
6
+ STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
+ end
8
+ end
data/logo.gif ADDED
Binary file
@@ -0,0 +1,15 @@
1
+ require "tacape"
2
+ require "pathname"
3
+ require "test_notifier/runner/rspec"
4
+
5
+ SPECDIR = Pathname.new(File.dirname(__FILE__))
6
+ TMPDIR = SPECDIR.join("tmp")
7
+
8
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|r| require r}
9
+
10
+ RSpec.configure do |config|
11
+ config.include(SpecHelper)
12
+ config.include(Matchers)
13
+
14
+ config.before { FileUtils.mkdir_p(TMPDIR) }
15
+ end
@@ -0,0 +1,26 @@
1
+ RSpec::Matchers.define :exit_with_code do |code|
2
+ actual = nil
3
+
4
+ match do |block|
5
+ begin
6
+ block.call
7
+ rescue SystemExit => e
8
+ actual = e.status
9
+ end
10
+
11
+ actual && actual == code
12
+ end
13
+
14
+ failure_message_for_should do |block|
15
+ "expected block to call exit(#{code}) but exit" +
16
+ (actual ? "(#{actual}) was called" : " not called")
17
+ end
18
+
19
+ failure_message_for_should_not do |block|
20
+ "expected block not to call exit(#{code})"
21
+ end
22
+
23
+ description do
24
+ "expect block to call exit(#{code})"
25
+ end
26
+ end
@@ -0,0 +1,115 @@
1
+ module Matchers
2
+ def have_tag(selector, options = {}, &block)
3
+ HaveTag.new(:html, selector, options, &block)
4
+ end
5
+
6
+ def have_node(selector, options = {}, &block)
7
+ HaveTag.new(:xml, selector, options, &block)
8
+ end
9
+
10
+ class HaveTag
11
+ attr_reader :options, :selector, :actual, :actual_count, :doc, :type
12
+
13
+ def initialize(type, selector, options = {}, &block)
14
+ @selector = selector
15
+ @type = type
16
+
17
+ case options
18
+ when Hash
19
+ @options = options
20
+ when Numeric
21
+ @options = {:count => options}
22
+ else
23
+ @options = {:text => options}
24
+ end
25
+ end
26
+
27
+ def doc_for(input)
28
+ engine = type == :xml ? Nokogiri::XML : Nokogiri::HTML
29
+
30
+ if input.respond_to?(:body)
31
+ engine.parse(input.body.to_s)
32
+ elsif Nokogiri::XML::Element === input
33
+ input
34
+ else
35
+ engine.parse(input.to_s)
36
+ end
37
+ end
38
+
39
+ def matches?(actual, &block)
40
+ @actual = actual
41
+ @doc = doc_for(actual)
42
+
43
+ matches = doc.css(selector)
44
+
45
+ return options[:count] == 0 if matches.empty?
46
+ matches = filter_on_inner_text(matches) if options[:text]
47
+ matches = filter_on_nested_expectations(matches, block) if block
48
+
49
+ @actual_count = matches.size
50
+
51
+ return false if not acceptable_count?(actual_count)
52
+
53
+ !matches.empty?
54
+ end
55
+
56
+ def description
57
+ "have tag #{selector.inspect} with #{options.inspect}"
58
+ end
59
+
60
+ def failure_message
61
+ explanation = actual_count ? "but found #{actual_count}" : "but did not"
62
+ "expected\n#{doc.to_s}\nto have #{failure_count_phrase} #{failure_selector_phrase}, #{explanation}"
63
+ end
64
+
65
+ def negative_failure_message
66
+ explanation = actual_count ? "but found #{actual_count}" : "but did"
67
+ "expected\n#{doc.to_s}\nnot to have #{failure_count_phrase} #{failure_selector_phrase}, #{explanation}"
68
+ end
69
+
70
+ private
71
+ def filter_on_inner_text(elements)
72
+ elements.select do |el|
73
+ next(el.inner_text =~ options[:text]) if options[:text].is_a?(Regexp)
74
+ el.inner_text == options[:text]
75
+ end
76
+ end
77
+
78
+ def filter_on_nested_expectations(elements, block)
79
+ elements.select do |el|
80
+ begin
81
+ block[el]
82
+ rescue RSpec::Expectations::ExpectationNotMetError
83
+ false
84
+ else
85
+ true
86
+ end
87
+ end
88
+ end
89
+
90
+ def acceptable_count?(count)
91
+ return false unless options[:count] === count if options[:count]
92
+ return false unless count >= options[:minimum] if options[:minimum]
93
+ return false unless count <= options[:maximum] if options[:maximum]
94
+ true
95
+ end
96
+
97
+ def failure_count_phrase
98
+ if options[:count]
99
+ "#{options[:count]} elements matching"
100
+ elsif options[:minimum] || options[:maximum]
101
+ count_explanations = []
102
+ count_explanations << "at least #{options[:minimum]}" if options[:minimum]
103
+ count_explanations << "at most #{options[:maximum]}" if options[:maximum]
104
+ "#{count_explanations.join(' and ')} elements matching"
105
+ else
106
+ "an element matching"
107
+ end
108
+ end
109
+
110
+ def failure_selector_phrase
111
+ phrase = selector.inspect
112
+ phrase << (options[:text] ? " with inner text #{options[:text].inspect}" : "")
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,18 @@
1
+ module SpecHelper
2
+ def tmpdir
3
+ TMPDIR
4
+ end
5
+
6
+ def capture(stream)
7
+ begin
8
+ stream = stream.to_s
9
+ eval "$#{stream} = StringIO.new"
10
+ yield
11
+ result = eval("$#{stream}").string
12
+ ensure
13
+ eval("$#{stream} = #{stream.upcase}")
14
+ end
15
+
16
+ result
17
+ end
18
+ end
@@ -0,0 +1,53 @@
1
+ shared_examples_for "e-book" do
2
+ let(:mybook) { tmpdir.join("mybook") }
3
+
4
+ it "generates e-book" do
5
+ mybook.should be_directory
6
+ end
7
+
8
+ it "creates images directory" do
9
+ mybook.join("images").should be_directory
10
+ end
11
+
12
+ it "creates text directory" do
13
+ mybook.join("text").should be_directory
14
+ end
15
+
16
+ it "creates code directory" do
17
+ mybook.join("code").should be_directory
18
+ end
19
+
20
+ it "creates template directory" do
21
+ mybook.join("templates").should be_directory
22
+ end
23
+
24
+ it "creates configuration file" do
25
+ mybook.join("config/kitabu.yml").should be_file
26
+ end
27
+
28
+ it "creates helper file" do
29
+ mybook.join("config/helper.rb").should be_file
30
+ end
31
+
32
+ it "copies sample page" do
33
+ mybook.join("text/01_Welcome.md")
34
+ end
35
+
36
+ it "copies Guardfile" do
37
+ mybook.join("Guardfile")
38
+ end
39
+
40
+ it "copies html template files" do
41
+ mybook.join("templates/html/user.css").should be_file
42
+ mybook.join("templates/html/layout.css").should be_file
43
+ mybook.join("templates/html/layout.erb").should be_file
44
+ mybook.join("templates/html/syntax.css").should be_file
45
+ end
46
+
47
+ it "copies epub template files" do
48
+ mybook.join("templates/epub/user.css").should be_file
49
+ mybook.join("templates/epub/cover.erb").should be_file
50
+ mybook.join("templates/epub/cover.png").should be_file
51
+ mybook.join("templates/epub/page.erb").should be_file
52
+ end
53
+ end
data/spec/tacape.rb ADDED
@@ -0,0 +1,4 @@
1
+ require "spec_helper"
2
+
3
+ describe Tacape do
4
+ end
data/tacape.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "tacape/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "tacape"
7
+ s.version = Tacape::Version::STRING
8
+ s.platform = Gem::Platform::RUBY
9
+ s.required_ruby_version = ">= 1.9"
10
+ s.authors = ["Lucas Martins"]
11
+ s.email = ["lucasmartins@railsnapraia.com"]
12
+ #s.homepage = "http://rubygems.org/gems/tacape"
13
+ s.summary = "A command-line tool that gathers some years of personal crafting."
14
+ s.description = s.summary
15
+ s.license = "MIT"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency "activesupport"
23
+ s.add_dependency "i18n"
24
+ s.add_dependency "thor"
25
+ s.add_dependency "notifier"
26
+ s.add_dependency "os"
27
+
28
+ s.add_development_dependency "rspec"
29
+ s.add_development_dependency "test_notifier"
30
+ s.add_development_dependency "rake"
31
+ s.add_development_dependency "pry"
32
+ s.add_development_dependency "pry-nav"
33
+ end
@@ -0,0 +1,20 @@
1
+ #You must add -> load "tacape/tools/sample.rb" to cli.rb
2
+ module Tacape
3
+ module Tools
4
+ class Sample < Thor
5
+ namespace 'sample'
6
+
7
+ desc 'test','This is just a sample'
8
+ def test
9
+ puts "Implement your tool like this, pay attention to the namespace so it doesn't clash with other tools."
10
+ end
11
+
12
+ end
13
+ end
14
+
15
+ #Redefining the Cli to use this Tool
16
+ class Cli < Thor
17
+ desc 'sample','Defines a Tacape tool'
18
+ subcommand 'sample', Tools::Sample
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,242 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tacape
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Lucas Martins
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
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: i18n
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
+ - !ruby/object:Gem::Dependency
47
+ name: thor
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: notifier
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: os
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rspec
96
+ requirement: !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: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: test_notifier
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rake
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: pry
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: pry-nav
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ description: A command-line tool that gathers some years of personal crafting.
175
+ email:
176
+ - lucasmartins@railsnapraia.com
177
+ executables:
178
+ - tacape
179
+ extensions: []
180
+ extra_rdoc_files: []
181
+ files:
182
+ - .gitignore
183
+ - .rspec
184
+ - Gemfile
185
+ - Gemfile.lock
186
+ - Rakefile
187
+ - Readme.md
188
+ - bin/tacape
189
+ - config/locales/en.yml
190
+ - config/locales/pt-BR.yml
191
+ - config/tacape.yml
192
+ - lib/tacape.rb
193
+ - lib/tacape/belt.rb
194
+ - lib/tacape/cli.rb
195
+ - lib/tacape/oses/fedora.rb
196
+ - lib/tacape/oses/os_exceptions.rb
197
+ - lib/tacape/oses/osx.rb
198
+ - lib/tacape/tools/helpers/json_config.rb
199
+ - lib/tacape/tools/helpers/os_support.rb
200
+ - lib/tacape/version.rb
201
+ - logo.gif
202
+ - spec/spec_helper.rb
203
+ - spec/support/exit_with_code.rb
204
+ - spec/support/have_tag.rb
205
+ - spec/support/helper.rb
206
+ - spec/support/shared.rb
207
+ - spec/tacape.rb
208
+ - tacape.gemspec
209
+ - templates/tools/sample.rb
210
+ homepage:
211
+ licenses:
212
+ - MIT
213
+ post_install_message:
214
+ rdoc_options: []
215
+ require_paths:
216
+ - lib
217
+ required_ruby_version: !ruby/object:Gem::Requirement
218
+ none: false
219
+ requirements:
220
+ - - ! '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '1.9'
223
+ required_rubygems_version: !ruby/object:Gem::Requirement
224
+ none: false
225
+ requirements:
226
+ - - ! '>='
227
+ - !ruby/object:Gem::Version
228
+ version: '0'
229
+ requirements: []
230
+ rubyforge_project:
231
+ rubygems_version: 1.8.23
232
+ signing_key:
233
+ specification_version: 3
234
+ summary: A command-line tool that gathers some years of personal crafting.
235
+ test_files:
236
+ - spec/spec_helper.rb
237
+ - spec/support/exit_with_code.rb
238
+ - spec/support/have_tag.rb
239
+ - spec/support/helper.rb
240
+ - spec/support/shared.rb
241
+ - spec/tacape.rb
242
+ has_rdoc: