git-feats 0.0.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.
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 1.9.2
5
+ - 1.8.7
6
+ - jruby-19mode
7
+ - rbx-19mode
8
+ matrix:
9
+ allow_failures:
10
+ - rvm: jruby-19mode
11
+ - rvm: rbx-19mode
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in git-feats.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Chris Knadler
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.
data/README.md ADDED
@@ -0,0 +1,106 @@
1
+ # git-feats [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/cknadler/git-feats) [![Dependency Status](https://gemnasium.com/cknadler/git-feats.png)](https://gemnasium.com/cknadler/git-feats)
2
+
3
+ `git-feats` is a command line wrapper for `git` that allows you to complete feats based on your `git` usage.
4
+
5
+ ## Installation
6
+
7
+ $ gem install git-feats
8
+
9
+ `git-feats` is is best aliased as `git`, so you can type `$ git <command>` as you normally would and complete feats.
10
+
11
+ See [alias](#alias) for instructions.
12
+
13
+ ## Usage
14
+
15
+ #### With Alias
16
+
17
+ If you alias `git-feats`, just keep using `git` like you always have. Occasionally, you will complete feats and it will look like this:
18
+
19
+ ```
20
+ $ git status
21
+
22
+ ********************************************************************************
23
+ Feat Completed!
24
+ Status Report
25
+ Viewed the working tree status with git status
26
+ ********************************************************************************
27
+
28
+ # On branch master
29
+ # Changes not staged for commit:
30
+ # (use "git add <file>..." to update what will be committed)
31
+ # (use "git checkout -- <file>..." to discard changes in working directory)
32
+ #
33
+ # modified: README.md
34
+ #
35
+ no changes added to commit (use "git add" and/or "git commit -a")
36
+
37
+ ```
38
+
39
+ #### Without Alias
40
+
41
+ If you don't alias `git` to `git-feats` you can still use `git-feats` in place of `git`:
42
+
43
+ ```
44
+ $ git-feats status
45
+ ```
46
+
47
+ ## Alias
48
+
49
+ Add the following to your `.bash_profile` or other startup script:
50
+
51
+ ```
52
+ alias git=git-feats
53
+ ```
54
+
55
+ ## .com
56
+
57
+ `git-feats` has a sweet web frontend at [gitfeats.com](http://gitfeats.com).
58
+
59
+ Linking your account is as easy as:
60
+
61
+ ```
62
+ git config --global feats.key <your api key>
63
+ ```
64
+
65
+ ## Credits
66
+
67
+ git-feats was lovingly developed by:
68
+
69
+ * [Chris Knadler](https://github.com/cknadler)
70
+ * [Jennifer Coryell](https://github.com/dasmoose)
71
+ * [Ian Eckert](https://github.com/ieckert)
72
+
73
+ git-feats was inspired by [git-achievements](https://github.com/icefox/git-achievements).
74
+
75
+
76
+ ## Contributing
77
+
78
+ `git-feats` has a dead simple interface for making feats.
79
+
80
+ Simply add a feat to the [feats file][feats-file] and it will work in the gem.
81
+
82
+ If you are looking to contribute, that is a great place to start.
83
+
84
+ Also, git-feats needs the following:
85
+
86
+ * Tests (probably RSpec)
87
+ * Code Cleanup
88
+
89
+ Any suggestions are also welcomed with open arms. Please fork, send pull requests and make issues.
90
+
91
+ #### How to contribute
92
+
93
+ 1. Fork it
94
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
95
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
96
+ 4. Push to the branch (`git push origin my-new-feature`)
97
+ 5. Create new Pull Request
98
+
99
+
100
+ ## Copyright
101
+
102
+ Copyright (c) 2012 Chris Knadler, Jennifer Coryell and Ian Eckert.
103
+
104
+ See LICENSE for details.
105
+
106
+ [feats-file]: https://github.com/cknadler/git-feats/blob/master/lib/git-feats/feats/feats.yml
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'bundler/gem_tasks'
2
+
3
+ desc "Clean"
4
+ task :clean do
5
+ rm_rf "pkg"
6
+ end
7
+
8
+ desc "Remove ~/.git_feats"
9
+ task :clean_feats do
10
+ rm_rf Dir.home + "/.git_feats"
11
+ end
data/bin/git-feats ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'git-feats'
4
+
5
+ GitFeats::Runner.run(*ARGV)
data/contributing.md ADDED
@@ -0,0 +1,20 @@
1
+ `git-feats` has a dead simple interface for making feats.
2
+
3
+ Simply add a feat to the [feats file][feats-file] and it will work in the gem.
4
+
5
+ If you are looking to contribute, that is a great place to start.
6
+
7
+ Also, git-feats needs the following:
8
+
9
+ * Tests (probably RSpec)
10
+ * Code Cleanup
11
+
12
+ Any suggestions are also welcomed with open arms. Please fork, send pull requests and make issues.
13
+
14
+ #### How to contribute
15
+
16
+ 1. Fork it
17
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
18
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
19
+ 4. Push to the branch (`git push origin my-new-feature`)
20
+ 5. Create new Pull Request
data/git-feats.gemspec ADDED
@@ -0,0 +1,47 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'git-feats/version'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "git-feats"
8
+ s.version = GitFeats::VERSION
9
+ s.authors = ["Chris Knadler"]
10
+ s.email = ["takeshi91k@gmail.com"]
11
+ s.homepage = "https://github.com/cknadler/git-feats"
12
+ s.license = "MIT"
13
+
14
+ s.summary = "git achievements from the command line"
15
+ s.description = <<desc
16
+ `git-feats` is a command line utility which adds achievements to git.
17
+
18
+ Based on your `git` usage, you will complete feats.
19
+
20
+ It can used on its own or as a `git` wrapper.
21
+
22
+ Wrapping `git`:
23
+
24
+ Use `git` as you normally would.
25
+
26
+ $ git status
27
+
28
+ Without wrapping `git`:
29
+
30
+ Use `git-feats` in place of `git`.
31
+
32
+ $ git-feats status
33
+ desc
34
+
35
+ s.required_ruby_version = ">= 1.9.3"
36
+
37
+ s.files = `git ls-files`.split("\n").reject {|path| path =~ /\.gitignore$/}
38
+ s.test_files = `git ls-files -- features/*`.split("\n")
39
+ s.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
40
+
41
+ s.require_paths = ["lib"]
42
+
43
+ s.add_runtime_dependency "json"
44
+ s.add_runtime_dependency "faraday", "~> 0.8.4"
45
+
46
+ s.add_development_dependency "rake", "~> 10.0.2"
47
+ end
@@ -0,0 +1,41 @@
1
+ require 'faraday'
2
+ require 'json'
3
+
4
+ module GitFeats
5
+ module API
6
+
7
+ extend self
8
+
9
+ URL = 'http://localhost:3000'
10
+
11
+ def upload_feats
12
+ # Post json to git-feats
13
+ conn.post do |req|
14
+ req.url '/api/post_feats'
15
+ req.headers['Content-Type'] = 'application/json'
16
+ req.body = upload_feats_body.to_json
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ # Return the faraday connection or load a new one
23
+ def conn
24
+ @conn ||= new_connection
25
+ end
26
+
27
+ def new_connection
28
+ # Create git-feats connection
29
+ Faraday.new(:url => URL)
30
+ end
31
+
32
+ # Construct the body for the upload feats post
33
+ def upload_feats_body
34
+ {
35
+ :username => Config.username,
36
+ :key => Config.api_key,
37
+ :history => History.data
38
+ }
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,40 @@
1
+ module GitFeats
2
+ class Args < Array
3
+
4
+ # Makes a new Args object
5
+ def initialize(*args)
6
+ super
7
+ @executable = ENV["GIT"] || "git"
8
+ end
9
+
10
+ # Returns an executable command
11
+ # that can be called with exec
12
+ #
13
+ # args - The args of the command
14
+ #
15
+ # Returns an array of args prepended with an executable
16
+ def to_exec(args = self)
17
+ Array(@executable) + args
18
+ end
19
+
20
+ # Checks if a pattern (string of args)
21
+ # matches the first arguments in an Args object
22
+ #
23
+ # Examples:
24
+ #
25
+ # Args('init').match?('init') #=> true
26
+ # Args('add', '.').match?('add .') #=> true
27
+ # Args('commit', '-a', '-m').match?('commit -a') #=> true
28
+ #
29
+ # Args('commit').match?('init') #=> false
30
+ # Args('commit').match?('commit -a') #=> false
31
+ #
32
+ # Returns a boolean
33
+ def match?(pattern)
34
+ pattern.split.each_with_index do |arg, index|
35
+ return false unless arg == self[index]
36
+ end
37
+ return true
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,48 @@
1
+ module GitFeats
2
+ module Checker
3
+
4
+ extend self
5
+
6
+ # Main interface for checking feats
7
+ def check(args)
8
+
9
+ # Load history and completed
10
+ Completed.unserialize
11
+ History.unserialize
12
+
13
+ # request flag
14
+ upload = false
15
+
16
+ # Check for feats and update history
17
+ Feats.all.each do |pattern, feats|
18
+ if args.match?(pattern)
19
+ History.add(pattern)
20
+
21
+ feats.each do |feat, value|
22
+ if History.count(pattern) >= value[:count]
23
+ unless Completed.exists?(feat)
24
+ Completed.add(feat)
25
+ Reporter.report(value)
26
+ upload = true
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ # upload feats if the request flag is set
34
+ upload_feats if upload
35
+
36
+ # Write out history and completed feats
37
+ Completed.serialize
38
+ History.serialize
39
+ end
40
+
41
+ private
42
+
43
+ # call upload feats from API if config values exist
44
+ def upload_feats
45
+ API.upload_feats if Config.exists?
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,32 @@
1
+ module GitFeats
2
+ module Completed
3
+
4
+ extend self
5
+
6
+ PATH = Dir.home + '/.git_feats/completed'
7
+
8
+ # load data from file
9
+ def unserialize
10
+ @completed = Serializer.unserialize(PATH) || []
11
+ end
12
+
13
+ # write data to file
14
+ def serialize
15
+ Serializer.serialize(PATH, @completed)
16
+ end
17
+
18
+ # Add a feat to the list of completed feats
19
+ def add(feat)
20
+ @completed << feat
21
+ end
22
+
23
+ # check of a user has already completed a feat
24
+ def exists?(feat)
25
+ @completed.include?(feat.to_s)
26
+ end
27
+
28
+ def data
29
+ @completed
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,30 @@
1
+ module GitFeats
2
+ module Config
3
+
4
+ extend self
5
+
6
+ CONFIG_CMD = "git config --global feats.key"
7
+
8
+ # Returns the config value for username
9
+ def username
10
+ @username ||= config_value.split('-')[0]
11
+ end
12
+
13
+ # Returns the config value for api key
14
+ def api_key
15
+ @api_key ||= config_value.split('-')[1].chomp
16
+ end
17
+
18
+ # Check if config exists and is configured properly
19
+ def exists?
20
+ username && api_key
21
+ end
22
+
23
+ private
24
+
25
+ # loads the config value from the global git config file
26
+ def config_value
27
+ @config_value ||= `#{CONFIG_CMD}`
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,251 @@
1
+ ---
2
+ "add":
3
+ :bricks_and_mortar:
4
+ :name: "Bricks and Mortar"
5
+ :desc: "Added files to the index area for inclusion in the next commit with git add"
6
+ :count: 1
7
+
8
+ "am":
9
+ :delivery:
10
+ :name: "Delivery"
11
+ :desc: "Applied a patch using git am"
12
+ :count: 1
13
+
14
+ "bisect":
15
+ :bug_hunter:
16
+ :name: "Bug Hunter"
17
+ :desc: "Performed a binary search to find which change introduced a bug with git bisect"
18
+ :count: 1
19
+
20
+ "blame":
21
+ :blame_game:
22
+ :name: "Blame Game"
23
+ :desc: "Used git blame to annotate a file with information about changes"
24
+ :count: 1
25
+
26
+ "bundle":
27
+ :cold_transfer:
28
+ :name: "Cold Transfer"
29
+ :desc: "Bundled git objects and refs with git bundle"
30
+ :count: 1
31
+
32
+ "cherry-pick":
33
+ :fine_grain:
34
+ :name: "Fine Grain"
35
+ :desc: "Applied a commit from one branch to another with git cherry-pick"
36
+ :count: 1
37
+
38
+ "checkout":
39
+ :shopping_spree:
40
+ :name: "Shopping Spree"
41
+ :desc: "Changed branches with git checkout"
42
+ :count: 1
43
+
44
+ "checout -b":
45
+ :impulse_buy:
46
+ :name: "Impulse Buy"
47
+ :desc: "Created a new branch with git checkout -b"
48
+ :count: 1
49
+
50
+ "clean":
51
+ :mr_clean:
52
+ :name: "Mr. Clean"
53
+ :desc: "Used git clean to remove untracked files from the working tree"
54
+ :count: 1
55
+
56
+ "clone":
57
+ :replicator:
58
+ :name: "Replicator"
59
+ :desc: "Used git clone to copy a repository into a new directory"
60
+ :count: 1
61
+
62
+ "commit":
63
+ :author:
64
+ :name: "Author"
65
+ :desc: "Made a commit using git commit"
66
+ :count: 1
67
+ :bestseller:
68
+ :name: "Bestseller"
69
+ :desc: "Made 100 commits using git commit"
70
+ :count: 100
71
+
72
+ "config":
73
+ :tinkerer:
74
+ :name: "Tinkerer"
75
+ :desc: "Used git config to set configuration options"
76
+ :count: 1
77
+
78
+ "diff":
79
+ :foreshadowing:
80
+ :name: "Foreshadowing"
81
+ :desc: "Used git diff to see a diff of changes"
82
+ :count: 1
83
+
84
+ "fetch":
85
+ :expansion:
86
+ :name: "Expansion"
87
+ :desc: "Downloaded objects and refs from another repository with git fetch"
88
+ :count: 1
89
+
90
+ "filter-branch":
91
+ :hedge_trimming:
92
+ :name: "Hedge Trimming"
93
+ :desc: "Rewrote a branch with git filter-branch"
94
+ :count: 1
95
+
96
+ "format-patch":
97
+ :mail_clerk:
98
+ :name: "Mail Clerk"
99
+ :desc: "Prepared patches for email submission with git format-patch"
100
+ :count: 1
101
+
102
+ "gc":
103
+ :housekeeping:
104
+ :name: "Housekeeping"
105
+ :desc: "Optimized a local repository with git gc"
106
+ :count: 1
107
+
108
+ "grep":
109
+ :private_investigator:
110
+ :name: "Private Investigator"
111
+ :desc: "Searched tracked files using git grep"
112
+ :count: 1
113
+
114
+ "imap-send":
115
+ :mailman:
116
+ :name: "Mailman"
117
+ :desc: "Sent patches to an IMAP folder using git imap-send"
118
+ :count: 1
119
+
120
+ "init":
121
+ :empty_lot:
122
+ :name: "Empty Lot"
123
+ :desc: "Initialize a git repository with git init"
124
+ :count: 1
125
+
126
+ "instaweb":
127
+ :pixels_everywhere:
128
+ :name: "Pixels Everywhere"
129
+ :desc: "Browse your working repository on gitweb with git instaweb"
130
+ :count: 1
131
+
132
+ "log":
133
+ :historian:
134
+ :name: "Historian"
135
+ :desc: "Read the commit history with git log"
136
+ :count: 1
137
+
138
+ "merge":
139
+ :unification:
140
+ :name: "Unification"
141
+ :desc: "Joined two or more commit histories with git merge"
142
+ :count: 1
143
+
144
+ "mv":
145
+ :moving_day:
146
+ :name: "Moving Day"
147
+ :desc: "Moved something with git mv"
148
+ :count: 1
149
+
150
+ "pull":
151
+ :assimilation:
152
+ :name: "Assimilation"
153
+ :desc: "Fetched from and merged with another repository with git pull"
154
+ :count: 1
155
+
156
+ "push":
157
+ :social_butterfly:
158
+ :name: "Social Butterfly"
159
+ :desc: "Pushed a branch to a remote repository using git push"
160
+ :count: 1
161
+
162
+ "rebase":
163
+ :slice_and_dice:
164
+ :name: "Slice and Dice"
165
+ :desc: "Rebased local commits to updated upstream head with git rebase"
166
+ :count: 1
167
+
168
+ "reflog":
169
+ :seamstress:
170
+ :name: "Seamstress"
171
+ :desc: "Investigated old branches using git reflog"
172
+ :count: 1
173
+
174
+ "remote add":
175
+ :connected:
176
+ :name: "Connected"
177
+ :desc: "Added an external repository with git remote add"
178
+ :count: 1
179
+
180
+ "reset":
181
+ :second_guess:
182
+ :name: "Second Guess"
183
+ :desc: "Changed the current HEAD state with git reset"
184
+ :count: 1
185
+
186
+ "rm":
187
+ :fireball:
188
+ :name: "Fireball"
189
+ :desc: "Removed something with git rm"
190
+ :count: 1
191
+
192
+ "shell":
193
+ :annex:
194
+ :name: "Annex"
195
+ :desc: "Loaded a restricted login shell for Git-only SSH access with git shell"
196
+ :count: 1
197
+
198
+ "show":
199
+ :showoff:
200
+ :name: "Showoff"
201
+ :desc: "Displayed one or more objects (blobs trees tags and commits) with git show"
202
+ :count: 1
203
+
204
+ "show-branch":
205
+ :forest_cartography:
206
+ :name: "Forest Cartography"
207
+ :desc: "Displayed a branch graph with git show-branch"
208
+ :count: 1
209
+
210
+ "stash":
211
+ :hoarder:
212
+ :name: "Hoarder"
213
+ :desc: "Stashed local changes using git stash"
214
+ :count: 1
215
+
216
+ "status":
217
+ :status_report:
218
+ :name: "Status Report"
219
+ :desc: "Viewed the working tree status with git status"
220
+ :count: 1
221
+
222
+ "submodule add":
223
+ :sublet:
224
+ :name: "Sublet"
225
+ :desc: "Added a submodule with git submodule add"
226
+ :count: 1
227
+
228
+ "submodule update":
229
+ :renovations:
230
+ :name: "Renovations"
231
+ :desc: "Updated one or more submodules with git submodule update"
232
+ :count: 1
233
+
234
+ "svn":
235
+ :dinosaur:
236
+ :name: "Dinosaur"
237
+ :desc: "Streamed changes to svn with git svn"
238
+ :count: 1
239
+
240
+ "tag":
241
+ :label_wizard:
242
+ :name: "Label Wizard"
243
+ :desc: "Created deleted or listed one or more tags with git tag"
244
+ :count: 1
245
+
246
+ "whatchanged":
247
+ :historian:
248
+ :name: "Historian"
249
+ :desc: "Showed the difference each commit introduced with git whatchanged"
250
+ :count: 1
251
+ ---
@@ -0,0 +1,14 @@
1
+ require 'yaml'
2
+
3
+ module GitFeats
4
+ module Feats
5
+
6
+ extend self
7
+
8
+ PATH = File.dirname(__FILE__) + '/feats/feats.yml'
9
+
10
+ def all
11
+ @feats ||= YAML.load_file(PATH)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,34 @@
1
+ module GitFeats
2
+ module History
3
+
4
+ extend self
5
+
6
+ PATH = Dir.home + '/.git_feats/history'
7
+
8
+ # load data from file
9
+ def unserialize
10
+ @history = Serializer.unserialize(PATH) || {}
11
+ end
12
+
13
+ # write data to file
14
+ def serialize
15
+ Serializer.serialize(PATH, @history)
16
+ end
17
+
18
+ def add(pattern)
19
+ if @history[pattern]
20
+ @history[pattern] += 1
21
+ else
22
+ @history[pattern] = 1
23
+ end
24
+ end
25
+
26
+ def count(pattern)
27
+ @history[pattern]
28
+ end
29
+
30
+ def data
31
+ @history
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,16 @@
1
+ module GitFeats
2
+ module Reporter
3
+
4
+ extend self
5
+
6
+ COLUMNS = 80
7
+
8
+ def report(feat)
9
+ puts "\n" + '*' * COLUMNS
10
+ puts "Feat Completed!".center(COLUMNS)
11
+ puts feat[:name].center(COLUMNS)
12
+ puts feat[:desc].center(COLUMNS)
13
+ puts '*' * COLUMNS + "\n\n"
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ module GitFeats
2
+ class Runner
3
+
4
+ # Creates a new Runner
5
+ #
6
+ # args - The args to be run with git
7
+ def initialize(*args)
8
+ @args = Args.new(args)
9
+ # parse args for feats
10
+ Checker.check(@args)
11
+ end
12
+
13
+ # Run shortcut
14
+ def self.run(args)
15
+ Runner.new(args).run
16
+ end
17
+
18
+ # Execute git command
19
+ def run
20
+ exec(*@args.to_exec)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,39 @@
1
+ require 'json'
2
+
3
+ module GitFeats
4
+ module Serializer
5
+
6
+ extend self
7
+
8
+ # serialize a ruby object to a file in json
9
+ #
10
+ # path - file path
11
+ # data - data to be serialized
12
+ #
13
+ # Returns nothing
14
+ def serialize(path, data)
15
+ # Make a path to the data file if one doesn't already exist
16
+ dir = File.dirname path
17
+ FileUtils.mkpath(dir) unless File.directory?(dir)
18
+
19
+ File.open(path, "w") do |f|
20
+ f.puts data.to_json
21
+ end
22
+ end
23
+
24
+ # unserialize a json file to a ruby object
25
+ #
26
+ # path - file path
27
+ #
28
+ # Returns a ruby object or nil
29
+ def unserialize(path)
30
+ if File.exists?(path) && !File.zero?(path)
31
+ begin
32
+ return JSON.parse(IO.binread(path))
33
+ rescue JSON::ParserError => e
34
+ puts e
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,3 @@
1
+ module GitFeats
2
+ VERSION = "0.0.1"
3
+ end
data/lib/git-feats.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'git-feats/serializer'
2
+ require 'git-feats/args'
3
+ require 'git-feats/api'
4
+ require 'git-feats/config'
5
+ require 'git-feats/checker'
6
+ require 'git-feats/completed'
7
+ require 'git-feats/feats'
8
+ require 'git-feats/history'
9
+ require 'git-feats/reporter'
10
+ require 'git-feats/runner'
11
+ require 'git-feats/version'
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: git-feats
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Chris Knadler
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: json
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: faraday
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.8.4
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.8.4
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 10.0.2
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 10.0.2
62
+ description: ! " `git-feats` is a command line utility which adds achievements to
63
+ git.\n\n Based on your `git` usage, you will complete feats.\n\n It can used on
64
+ its own or as a `git` wrapper.\n\n Wrapping `git`:\n\n Use `git` as you normally
65
+ would.\n\n $ git status\n\n Without wrapping `git`:\n\n Use `git-feats` in
66
+ place of `git`.\n\n $ git-feats status\n"
67
+ email:
68
+ - takeshi91k@gmail.com
69
+ executables:
70
+ - git-feats
71
+ extensions: []
72
+ extra_rdoc_files: []
73
+ files:
74
+ - .travis.yml
75
+ - Gemfile
76
+ - LICENSE.txt
77
+ - README.md
78
+ - Rakefile
79
+ - bin/git-feats
80
+ - contributing.md
81
+ - git-feats.gemspec
82
+ - lib/git-feats.rb
83
+ - lib/git-feats/api.rb
84
+ - lib/git-feats/args.rb
85
+ - lib/git-feats/checker.rb
86
+ - lib/git-feats/completed.rb
87
+ - lib/git-feats/config.rb
88
+ - lib/git-feats/feats.rb
89
+ - lib/git-feats/feats/feats.yml
90
+ - lib/git-feats/history.rb
91
+ - lib/git-feats/reporter.rb
92
+ - lib/git-feats/runner.rb
93
+ - lib/git-feats/serializer.rb
94
+ - lib/git-feats/version.rb
95
+ homepage: https://github.com/cknadler/git-feats
96
+ licenses:
97
+ - MIT
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: 1.9.3
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubyforge_project:
116
+ rubygems_version: 1.8.24
117
+ signing_key:
118
+ specification_version: 3
119
+ summary: git achievements from the command line
120
+ test_files: []