peridot 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 965e2a6b1fe6c30be1856eb4c8525175844444b7
4
+ data.tar.gz: e740a77f8f4c965f43d7640804370d4bd72bf42a
5
+ SHA512:
6
+ metadata.gz: ac7bb43c4b127dee95eb01fb394c11fb067ac2e0f92053a81d3a46bf51740d282f6a79ba8e32818da7b1c78f9bf916bc912135d9e3731692f00b79b7f979eb50
7
+ data.tar.gz: e6a6181016bea59ca4b71c9526f79de6b49e3fa999736cfb2642ad60158b5dbbd3d8ea6c1d2cfc7850a33d334b445a9374153fc5a746a6998fd25fed5beb1b20
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2
+ Version 2, December 2004
3
+
4
+ Copyright (C) 2004 Sam Hocevar
5
+ 14 rue de Plaisance, 75014 Paris, France
6
+ Everyone is permitted to copy and distribute verbatim or modified
7
+ copies of this license document, and changing it is allowed as long
8
+ as the name is changed.
9
+
10
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
11
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
12
+
13
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
data/README.md ADDED
@@ -0,0 +1,105 @@
1
+ # Peridot
2
+
3
+ Peridot let's you manage your dotfiles with `rake` and you should love `rake`!
4
+ Seriously!
5
+
6
+ ## Installation
7
+
8
+ Install it yourself via:
9
+
10
+ $ gem install peridot
11
+
12
+ ## Usage
13
+
14
+ In your Rakefile require Peridot. If run inside rake, it will automagically
15
+ include Peridot module:
16
+
17
+ require 'peridot'
18
+
19
+ After this, copy the following to a fresh Rakefile:
20
+
21
+ require 'rubygems'
22
+ require 'peridot'
23
+
24
+ After this Peridot provides you with 2 standard tasks:
25
+
26
+ $ rake -T
27
+ rake dotfiles # Runs all your task in the dotfiles namespace
28
+ rake watch # Watches for changes and reruns rake
29
+
30
+ Peridot runs every task under `dotfiles` namespace if you run the `dotfiles`
31
+ task.
32
+
33
+ If you need to set up some environment for your dotfiles
34
+ (e.g. different values for git email at home/work) you do this with tasks for
35
+ each environment as Peridot relies heavily on `rake`.
36
+
37
+ task(:work) { set :git_email, 'work@startup.com' }
38
+ task(:home) { set :git_email, 'home@hotel-mama.com' }
39
+
40
+ You can than use it in an erb file like this:
41
+
42
+ email = <%= get! :git_email %>
43
+
44
+ ## Features
45
+
46
+ Peridot gives you some nice methods for interacting with your dotfiles.
47
+
48
+ ### Path helpers
49
+
50
+ There are `#repo_file` and `#home_file` to give you the full paths to your
51
+ files.
52
+
53
+ ### ERB
54
+
55
+ There is a convenience method to generate a regular files from erb input.
56
+
57
+ generate_file(from, to)
58
+
59
+ ### Watch for changes
60
+
61
+ You can add a special task `watch` to your rake command to have Peridot
62
+ watch for changes and rerun your rake command.
63
+
64
+ ### Attributes
65
+
66
+ There is `#set` to aid you in setting options for later use in
67
+ your rake tasks. On the other side there is `#get` which fetches attributes
68
+ from a central storage. To raise an exception if a required attribute is
69
+ missing there is also `#get!`.
70
+
71
+ ### Ignoring files
72
+
73
+ With `#ignored_files` there is a standard list of files and filetypes
74
+ which can be matched (regexp) again certain files with `#ignored?(file)`
75
+
76
+ ignored_files << 'README'
77
+ link_file from, to unless ignored?('README')
78
+
79
+ ### FileUtils
80
+
81
+ All methods from `FileUtils` are included in the global namespace and can be
82
+ used for mastering your dotfiles.
83
+
84
+ ## Examples in the wild
85
+
86
+ Take look at my dotfiles: https://github.com/svenwin/dotfiles/blob/master/Rakefile
87
+
88
+ ## Special Thanks
89
+
90
+ * [Daniel Bayerlein(@danielbayerlein)](https://github.com/danielbayerlein) -
91
+ For support, code review and much more
92
+ * [Jim Weirich (@jimweirich)](https://github.com/jimweirich) - for creating
93
+ [Rake](https://github.com/jimweirich/rake)
94
+
95
+ ## Contributing
96
+
97
+ 1. Fork it
98
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
99
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
100
+ 4. Push to the branch (`git push origin my-new-feature`)
101
+ 5. Create new [Pull Request](../../pull/new/master)
102
+
103
+ ## Copyright
104
+
105
+ Copyright (c) 2013 Sven Winkler. See [LICENSE](./LICENSE) for details.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,19 @@
1
+ module Peridot
2
+ class AttributeStorage
3
+ def initialize(hash = {})
4
+ @hash = hash
5
+ end
6
+
7
+ def get(key)
8
+ @hash.fetch(key)
9
+ end
10
+
11
+ def get!(key)
12
+ get(key) or raise("#{key} is not an attribute")
13
+ end
14
+
15
+ def set(key, value)
16
+ @hash.store(key, value)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,39 @@
1
+ require 'fileutils'
2
+
3
+ module Peridot::FileAccess
4
+ include(::FileUtils)
5
+
6
+ def ignored_files
7
+ @ignored_files ||= %w(Rakefile \.erb$)
8
+ end
9
+
10
+ def ignored_files=(files)
11
+ @ignored_files = files
12
+ end
13
+
14
+ def ignored?(file)
15
+ ignored_files.any? { |ignore_file| file.match(ignore_file) }
16
+ end
17
+
18
+ def generate_file(source, target)
19
+ puts("Generating #{target}")
20
+ template = ERB.new(File.read(source))
21
+ template.filename = target
22
+ File.open(target, 'w') do |f|
23
+ f.write(template.result(binding))
24
+ end
25
+ end
26
+
27
+ def home_file(file)
28
+ File.join(Dir.home, file)
29
+ end
30
+
31
+ def repo_file(file)
32
+ File.join(Dir.pwd, file)
33
+ end
34
+
35
+ def link_file(source, target)
36
+ rm_f(target)
37
+ ln_s(source, target)
38
+ end
39
+ end
@@ -0,0 +1,9 @@
1
+ module Peridot::Forwardable
2
+ def forward(*methods, target_hash)
3
+ methods.each do |m|
4
+ define_method m do |*args|
5
+ send(target_hash[:to]).send(m, *args)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module Peridot::Ignores
2
+ def ignored_files
3
+ @ignored_files ||= %w(Rakefile \.erb$)
4
+ end
5
+
6
+ def ignored_files=(files)
7
+ @ignored_files = files
8
+ end
9
+
10
+ def ignored?(file)
11
+ ignored_files.any? { |ignore_file| file.match(ignore_file) }
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ task(:default) { puts 'Peridot is installed, captain ;-)' }
2
+
3
+ desc 'Runs all your task in the dotfiles namespace'
4
+ task :dotfiles do
5
+ Rake::Task.tasks.select { |t| t.invoke if t.name =~ /^dotfiles:/ }
6
+ end
7
+
8
+ desc 'Watches for changes and reruns rake'
9
+ task(:watch) { at_exit { Peridot::Watcher.new(ARGV - ['watch']).install! } }
@@ -0,0 +1,3 @@
1
+ module Peridot
2
+ VERSION = '0.1.1'
3
+ end
@@ -0,0 +1,26 @@
1
+ require 'listen'
2
+
3
+ module Peridot
4
+ class Watcher
5
+ def initialize(*args)
6
+ @args = args
7
+ end
8
+
9
+ def install!
10
+ puts 'Peridot is watching for changes'
11
+ @listener = ::Listen.to(Dir.pwd.to_s)
12
+ @listener.change do
13
+ @listener.pause
14
+ run_command!
15
+ @listener.unpause
16
+ end
17
+ @listener.start!
18
+ end
19
+
20
+ def run_command!
21
+ command = @args.unshift('rake').join(' ')
22
+ puts(command)
23
+ system(command)
24
+ end
25
+ end
26
+ end
data/lib/peridot.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'erb'
2
+ require 'peridot/attribute_storage'
3
+ require 'peridot/file_access'
4
+ require 'peridot/forwardable'
5
+ require 'peridot/ignores'
6
+ require 'peridot/version'
7
+ require 'peridot/watcher'
8
+
9
+ module Peridot
10
+ def self.included(base)
11
+ [FileAccess, Forwardable].each { |klass| base.send(:include, klass) }
12
+
13
+ base.forward(:get, :get!, :set, to: :attributes)
14
+
15
+ load('peridot/tasks.rake') if defined?(Rake)
16
+ end
17
+
18
+ def attributes
19
+ @attributes ||= AttributeStorage.new
20
+ end
21
+ end
22
+
23
+ include(Peridot) if $PROGRAM_NAME =~ /\/rake[\w\d\S]*$/
data/peridot.gemspec ADDED
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/peridot/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = %w(Sven Winkler)
6
+ gem.email = %w(sven@w5r.org)
7
+ gem.description = %q{Dotfile management with rake on steroids}
8
+ gem.summary = %q{Dotfile management with rake on steroids}
9
+
10
+ gem.files = `git ls-files`.split($\)
11
+ gem.name = 'peridot'
12
+ gem.require_paths = %w(lib)
13
+ gem.version = Peridot::VERSION
14
+
15
+ gem.add_dependency('rake')
16
+ gem.add_dependency('listen')
17
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: peridot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Sven
8
+ - Winkler
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-08-18 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: listen
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ description: Dotfile management with rake on steroids
43
+ email:
44
+ - sven@w5r.org
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - .gitignore
50
+ - Gemfile
51
+ - LICENSE
52
+ - README.md
53
+ - Rakefile
54
+ - lib/peridot.rb
55
+ - lib/peridot/attribute_storage.rb
56
+ - lib/peridot/file_access.rb
57
+ - lib/peridot/forwardable.rb
58
+ - lib/peridot/ignores.rb
59
+ - lib/peridot/tasks.rake
60
+ - lib/peridot/version.rb
61
+ - lib/peridot/watcher.rb
62
+ - peridot.gemspec
63
+ homepage:
64
+ licenses: []
65
+ metadata: {}
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 2.0.5
83
+ signing_key:
84
+ specification_version: 4
85
+ summary: Dotfile management with rake on steroids
86
+ test_files: []