shard 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/bin/shard CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  $:.unshift 'lib'
4
4
 
5
- require 'thor'
6
5
  require 'shard'
7
6
  require 'shard/cli'
8
7
 
@@ -1,13 +1,25 @@
1
1
  class Shard
2
- class << self
3
- attr_accessor :current_loader
2
+
3
+ def self.api
4
+ @api ||= Octokit::Client.new netrc: (Credentials.saved? && Credentials.valid?)
4
5
  end
6
+
7
+ def self.Ref(shard_line)
8
+ case shard_line
9
+ when String then Shard::Ref.parse(shard_line)
10
+ when Shard::Ref then shard_line
11
+ else raise ArgumentError
12
+ end
13
+ end
14
+
15
+ require 'shard/credentials'
16
+ require 'shard/shard_directory'
17
+ require 'shard/loader'
18
+ require 'shard/saver'
19
+ require 'shard/lister'
20
+ require 'shard/gist'
21
+ require 'shard/ref'
22
+ require 'shard/kernel'
23
+
5
24
  end
6
25
 
7
- require 'shard/shard_directory'
8
- require 'shard/loader'
9
- require 'shard/saver'
10
- require 'shard/lister'
11
- require 'shard/gist'
12
- require 'shard/shard_record'
13
- require 'shard/kernel'
@@ -1,72 +1,23 @@
1
- require 'thor'
2
-
3
- class Shard::CLI < Thor
4
-
5
- ########
6
- # #
7
- # List #
8
- # #
9
- ########
10
-
11
- desc "list USERNAME", "List all shards for Github user USERNAME"
1
+ module Shard::CLI
2
+
3
+ require 'shard/cli/commands'
4
+ require 'shard/cli/config'
5
+ require 'shard/cli/list'
6
+ require 'shard/cli/fork'
7
+
8
+ ##################
9
+ # #
10
+ # Module Methods #
11
+ # #
12
+ ##################
12
13
 
13
- def list(username)
14
- lister = Shard::Lister.new(username)
15
-
16
- if lister.shards.any?
17
- puts "Shards for Github user #{ username }:"
18
- puts
19
-
20
- lister.shard_names.each do |name|
21
- shard = lister.shards[name]
22
- puts "#{ name }:"
23
- puts " Description | #{ shard.description }"
24
- puts " URL | #{ shard.url }"
25
- puts
26
- end
27
- else
28
- puts "Github user #{ username } does not have any shards."
29
- puts "Shards are gists that have a file named shard.rb or <foo>.shard.rb"
14
+ def self.start(args)
15
+ if Shard::Ref.valid?(args[0])
16
+ args << "exec" if args.length == 1
17
+ args[0], args[1] = args[1], args[0]
30
18
  end
31
- end
32
-
33
- ########
34
- # #
35
- # Exec #
36
- # #
37
- ########
38
-
39
- desc "exec USERNAME/SHARD", "Runs the shard named SHARD for Github user USERNAME"
40
-
41
- def exec(shard_line)
42
- Shard::Loader.load shard_line
43
- end
44
-
45
- #########
46
- # #
47
- # Fetch #
48
- # #
49
- #########
50
-
51
- desc "fetch USERNAME/SHARD", "Downloads the shard named SHARD for Github user USERNAME"
52
-
53
- def fetch(shard_line)
54
- username, shard = shard_line.split '/'
55
- shard = Shard::ShardRecord.new(username, shard, 'HEAD')
56
-
57
- Shard::Saver.save(shard, verbose: true)
58
- end
59
-
60
- ########
61
- # #
62
- # Test #
63
- # #
64
- ########
65
-
66
- desc "test USERNAME/SHARD", "Runs the tests for shard named SHARD for Github user USERNAME"
67
19
 
68
- def test(shard_line)
69
- Shard::Loader.test shard_line
20
+ Commands.start(args)
70
21
  end
71
22
 
72
23
  end
@@ -0,0 +1,102 @@
1
+ require 'thor'
2
+
3
+ module Shard::CLI
4
+
5
+ class Commands < Thor
6
+
7
+ ########
8
+ # #
9
+ # List #
10
+ # #
11
+ ########
12
+
13
+ desc "list USERNAME", "List all shards for Github user USERNAME"
14
+
15
+ def list(username)
16
+ Shard::CLI::List.run(username)
17
+ end
18
+
19
+ ########
20
+ # #
21
+ # Exec #
22
+ # #
23
+ ########
24
+
25
+ desc "USERNAME/SHARD", "Runs the shard named SHARD for Github user USERNAME"
26
+
27
+ def exec(shard_line)
28
+ Shard::Loader.load shard_line
29
+ end
30
+
31
+ #########
32
+ # #
33
+ # Fetch #
34
+ # #
35
+ #########
36
+
37
+ desc "USERNAME/SHARD fetch", "Downloads the shard named SHARD for Github user USERNAME"
38
+
39
+ def fetch(shard_line)
40
+ Shard::Saver.save shard_line, verbose: true
41
+ end
42
+
43
+ ########
44
+ # #
45
+ # Test #
46
+ # #
47
+ ########
48
+
49
+ desc "USERNAME/SHARD test", "Runs the tests for shard named SHARD for Github user USERNAME"
50
+
51
+ def test(shard_line)
52
+ Shard::Loader.test shard_line
53
+ end
54
+
55
+ ##########
56
+ # #
57
+ # Config #
58
+ # #
59
+ ##########
60
+
61
+ desc "config", "Set up Github credentials for use in shard"
62
+
63
+ def config
64
+ Shard::CLI::Config.run
65
+ end
66
+
67
+ ########
68
+ # #
69
+ # View #
70
+ # #
71
+ ########
72
+
73
+ desc "USERNAME/SHARD view", "Opens the shard in a browser window"
74
+
75
+ def view(shard_line)
76
+ if line = Shard::Ref.parse(shard_line)
77
+ lister = Shard::Lister.new(line.user)
78
+ shard = lister.shards[line.name]
79
+ url = shard.url
80
+
81
+ `open #{ url }`
82
+ else
83
+ puts "'#{ shard_line }' is not a valid shard reference."
84
+ end
85
+ end
86
+
87
+ ########
88
+ # #
89
+ # Fork #
90
+ # #
91
+ ########
92
+
93
+ desc "USERNAME/SHARD fork", "Forks a copy of the shard into your Github account (requires authentication)"
94
+
95
+ def fork(shard_line)
96
+ Shard::CLI::Fork.run shard_line
97
+ end
98
+
99
+
100
+ end
101
+
102
+ end
@@ -0,0 +1,102 @@
1
+ require 'io/console'
2
+
3
+ module Shard::CLI
4
+
5
+ class Config
6
+
7
+ #################
8
+ # #
9
+ # Class Methods #
10
+ # #
11
+ #################
12
+
13
+ def self.run
14
+ new.run
15
+ end
16
+
17
+ ####################
18
+ # #
19
+ # Instance Methods #
20
+ # #
21
+ ####################
22
+
23
+ def run
24
+ if credentials_saved?
25
+ replace_credentials
26
+ else
27
+ add_credentials
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def add_credentials
34
+ puts <<-EOF
35
+ To use shard features that require a Github login,
36
+ please enter your username and password below.
37
+
38
+ Note, you can provide an Personal Access Token instead
39
+ of a password (recommended).
40
+ (See https://github.com/settings/tokens/new for more information)
41
+
42
+ EOF
43
+
44
+ print " Username | "
45
+ username = STDIN.gets.to_s.chomp
46
+ print " Password | "
47
+ password = STDIN.noecho(&:gets).to_s.chomp
48
+
49
+ save_credentials(username, password)
50
+
51
+ if credentials_saved?
52
+ puts "\nCredentials saved to ~/.netrc"
53
+
54
+ validate_login
55
+ else
56
+ puts "\nCredentials have been cleared."
57
+ end
58
+ end
59
+
60
+ def credentials_saved?
61
+ Shard::Credentials.saved?
62
+ end
63
+
64
+ def replace_credentials
65
+ str = valid_login? ? "" : "invalid "
66
+
67
+ puts "You currently have #{ str }Github credentials saved in ~/.netrc"
68
+ print "Do you wish to replace them? [yn] "
69
+
70
+ if yes?
71
+ add_credentials
72
+ end
73
+ end
74
+
75
+ def save_credentials(username, password)
76
+ Shard::Credentials.new(username, password).save
77
+ end
78
+
79
+ def validate_login
80
+ if valid_login?
81
+ puts "\nThe saved Github credentials are valid."
82
+ else
83
+ puts "\nThe saved Github credentials are invalid."
84
+ print "Do you wish to re-enter them? [yn] "
85
+
86
+ if yes?
87
+ add_credentials
88
+ end
89
+ end
90
+ end
91
+
92
+ def valid_login?
93
+ Shard::Credentials.valid?
94
+ end
95
+
96
+ def yes?
97
+ STDIN.gets.chomp.downcase == 'y'
98
+ end
99
+
100
+ end
101
+
102
+ end
@@ -0,0 +1,73 @@
1
+ module Shard::CLI
2
+
3
+ class Fork
4
+
5
+ ################
6
+ # #
7
+ # Declarations #
8
+ # #
9
+ ################
10
+
11
+ attr_reader :ref
12
+
13
+ ###############
14
+ # #
15
+ # Constructor #
16
+ # #
17
+ ###############
18
+
19
+ def initialize(shard_line)
20
+ @ref = Shard::Ref(shard_line)
21
+ end
22
+
23
+ #################
24
+ # #
25
+ # Class Methods #
26
+ # #
27
+ #################
28
+
29
+ def self.run(shard_line)
30
+ new(shard_line).run
31
+ end
32
+
33
+ ####################
34
+ # #
35
+ # Instance Methods #
36
+ # #
37
+ ####################
38
+
39
+ def run
40
+ if ref.nil?
41
+ puts "That is not a valid shard reference."
42
+ return
43
+ end
44
+
45
+ if Shard::Credentials.saved? && Shard::Credentials.valid?
46
+ fork_shard
47
+ else
48
+ puts "You are not currently logged into Github."
49
+ Shard::CLI::Config.run
50
+
51
+ if Shard::Credentials.saved?
52
+ run
53
+ end
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ def fork_shard
60
+ lister = Shard::Lister.new(ref.user)
61
+ shard = lister.shards[ref.name]
62
+
63
+ if shard
64
+ puts "Forking #{ ref.user }/#{ ref.name }..."
65
+ Shard.api.fork_gist(shard.id)
66
+ else
67
+ puts "That is not a valid shard reference."
68
+ end
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -0,0 +1,46 @@
1
+ module Shard::CLI
2
+
3
+ class List
4
+
5
+ #################
6
+ # #
7
+ # Class Methods #
8
+ # #
9
+ #################
10
+
11
+ def self.run(username)
12
+ new.run(username)
13
+ end
14
+
15
+ ####################
16
+ # #
17
+ # Instance Methods #
18
+ # #
19
+ ####################
20
+
21
+ def run(username)
22
+ lister = Shard::Lister.new(username)
23
+
24
+ if lister.shards.any?
25
+ puts "Shards for Github user #{ username }:"
26
+ puts
27
+
28
+ lister.shard_names.each do |name|
29
+ shard = lister.shards[name]
30
+ puts "#{ name }:"
31
+ puts " Description | #{ shard.description }"
32
+ puts " URL | #{ shard.url }"
33
+ puts
34
+ end
35
+ else
36
+ puts "Github user #{ username } does not have any shards."
37
+ puts "Shards are gists that have a file named shard.rb or <foo>.shard.rb"
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ end
44
+
45
+ end
46
+
@@ -0,0 +1,61 @@
1
+ require 'octokit'
2
+ require 'netrc'
3
+
4
+ class Shard
5
+
6
+ class Credentials < Struct.new(:username, :password)
7
+
8
+ ################
9
+ # #
10
+ # Declarations #
11
+ # #
12
+ ################
13
+
14
+ GITHUB_API_ENTRY = "api.github.com"
15
+
16
+ #################
17
+ # #
18
+ # Class Methods #
19
+ # #
20
+ #################
21
+
22
+ def self.current
23
+ username, password = Netrc.read[GITHUB_API_ENTRY]
24
+ new(username, password)
25
+ end
26
+
27
+ def self.saved?
28
+ current.present?
29
+ end
30
+
31
+ def self.valid?
32
+ Octokit.validate_credentials netrc: true
33
+ end
34
+
35
+ ####################
36
+ # #
37
+ # Instance Methods #
38
+ # #
39
+ ####################
40
+
41
+ def save
42
+ if present?
43
+ netrc_file[GITHUB_API_ENTRY] = username, password
44
+ else
45
+ netrc_file.delete GITHUB_API_ENTRY
46
+ end
47
+
48
+ netrc_file.save
49
+ end
50
+
51
+ def netrc_file
52
+ @netrc_file ||= Netrc.read
53
+ end
54
+
55
+ def present?
56
+ !(username.to_s == '' || password.to_s == '')
57
+ end
58
+
59
+ end
60
+
61
+ end
@@ -1,5 +1,3 @@
1
- require 'octokit'
2
-
3
1
  class Shard
4
2
 
5
3
  class Lister
@@ -48,7 +46,7 @@ class Shard
48
46
  private
49
47
 
50
48
  def fetch_gists
51
- Octokit.gists username
49
+ Shard.api.gists username
52
50
  end
53
51
 
54
52
  def gist_by_id(id)
@@ -10,9 +10,10 @@ class Shard
10
10
 
11
11
  include ShardDirectory
12
12
 
13
- attr_reader :shard
13
+ SHARD_FILE_PATTERN = %q(*shard.rb)
14
+ TEST_FILE_PATTERNS = %w( *_spec.rb *_test.rb )
14
15
 
15
- SHARD_LINE_REGEX = %r{([a-zA-Z0-9_-]+)/(\w+)(?::(\w+))?}
16
+ attr_reader :ref
16
17
 
17
18
  ###############
18
19
  # #
@@ -21,7 +22,7 @@ class Shard
21
22
  ###############
22
23
 
23
24
  def initialize(shard_line)
24
- parse_shard_line(shard_line)
25
+ @ref = Shard::Ref(shard_line)
25
26
  end
26
27
 
27
28
  #################
@@ -45,69 +46,25 @@ class Shard
45
46
  ####################
46
47
 
47
48
  def load
48
- ensure_shard_saved
49
-
50
- Shard.current_loader, previous_loader = self, Shard.current_loader
51
- require shard_file_path
52
- Shard.current_loader = previous_loader
49
+ load_file(SHARD_FILE_PATTERN)
53
50
  end
54
51
 
55
52
  def load_file(filename)
56
- path = filename ? ruby_file_path(filename) : shard_file_path
57
- require path
53
+ ensure_shard_saved
54
+
55
+ require find_file_path(ref, filename)
58
56
  end
59
57
 
60
58
  def test
61
59
  ensure_shard_saved
62
60
 
63
- Shard.current_loader, previous_loader = self, Shard.current_loader
64
- require *shard_test_paths
65
- Shard.current_loader = previous_loader
61
+ require *find_file_paths(ref, *TEST_FILE_PATTERNS)
66
62
  end
67
63
 
68
64
  private
69
65
 
70
- def already_loaded?
71
- shard_dir_exists?(shard.username, shard.name, shard.version)
72
- end
73
-
74
66
  def ensure_shard_saved
75
- unless already_loaded?
76
- Shard::Saver.save shard
77
- end
78
- end
79
-
80
- def parse_shard_line(shard_line)
81
- if match = shard_line.match(SHARD_LINE_REGEX)
82
- username = match[1]
83
- name = match[2]
84
- version = parse_version match[3]
85
-
86
- @shard = Shard::ShardRecord.new(username, name, version)
87
- end
88
- end
89
-
90
- def parse_version(raw_version)
91
- raw_version || 'HEAD'
92
- end
93
-
94
- def ruby_file_path(filename)
95
- file_path(shard.username, shard.name, shard.version, filename)
96
- end
97
-
98
- def shard_file_path
99
- path = file_path(shard.username, shard.name, shard.version, '*shard.rb')
100
- Dir[ path ].first
101
- end
102
-
103
- def shard_test_paths
104
- test_path = file_path(shard.username, shard.name, shard.version, '*_test.rb')
105
- test_files = Dir[ test_path ]
106
-
107
- spec_path = file_path(shard.username, shard.name, shard.version, '*_spec.rb')
108
- spec_files = Dir[ spec_path ]
109
-
110
- test_files + spec_files
67
+ Shard::Saver.save ref, lazy: true
111
68
  end
112
69
 
113
70
  end
@@ -0,0 +1,38 @@
1
+ class Shard
2
+
3
+ class Ref < Struct.new(:user, :name, :file, :version)
4
+
5
+ ################
6
+ # #
7
+ # Declarations #
8
+ # #
9
+ ################
10
+
11
+ PATTERN = %r{([a-zA-Z0-9_-]+)/(\w+)} # (?::(\w+))?
12
+
13
+ #################
14
+ # #
15
+ # Class Methods #
16
+ # #
17
+ #################
18
+
19
+ def self.parse(shard_line)
20
+ if matcher = shard_line.match(PATTERN)
21
+ user = matcher[1]
22
+ name = matcher[2]
23
+ file = nil
24
+ version = 'HEAD'
25
+
26
+ new(user, name, file, version)
27
+ else
28
+ nil
29
+ end
30
+ end
31
+
32
+ def self.valid?(shard_line)
33
+ shard_line =~ PATTERN
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -10,7 +10,9 @@ class Shard
10
10
 
11
11
  include ShardDirectory
12
12
 
13
- attr_reader :shard, :gist, :full_gist, :options
13
+ attr_reader :ref, :gist, :full_gist, :options
14
+
15
+ SHA_LENGTH = 8
14
16
 
15
17
  ###############
16
18
  # #
@@ -18,8 +20,8 @@ class Shard
18
20
  # #
19
21
  ###############
20
22
 
21
- def initialize(shard, options = {})
22
- @shard = shard
23
+ def initialize(shard_line_or_ref, options = {})
24
+ @ref = Shard::Ref(shard_line_or_ref)
23
25
  @options = options
24
26
  end
25
27
 
@@ -29,8 +31,8 @@ class Shard
29
31
  # #
30
32
  #################
31
33
 
32
- def self.save(shard, options = {})
33
- new(shard, options).save!
34
+ def self.save(shard_line, options = {})
35
+ new(shard_line, options).save!
34
36
  end
35
37
 
36
38
  ####################
@@ -40,7 +42,9 @@ class Shard
40
42
  ####################
41
43
 
42
44
  def save!
43
- create_shard_dir(shard.username, shard.name, shard.version)
45
+ return if shard_dir_exists?(ref) && options[:lazy]
46
+
47
+ create_shard_dir(ref)
44
48
  fetch_shard_contents
45
49
 
46
50
  gist.all_files.each do |file|
@@ -48,16 +52,16 @@ class Shard
48
52
  end
49
53
 
50
54
  if options[:verbose]
51
- puts "VERSION #{ version(8) }..."
55
+ puts "VERSION #{ version }..."
52
56
  end
53
57
  end
54
58
 
55
59
  private
56
60
 
57
61
  def fetch_shard_contents
58
- lister = Shard::Lister.new(shard.username)
59
- @gist = lister.shards[shard.name]
60
- @full_gist = Octokit.gist gist.id
62
+ lister = Shard::Lister.new(ref.user)
63
+ @gist = lister.shards[ref.name]
64
+ @full_gist = Shard.api.gist gist.id
61
65
  end
62
66
 
63
67
  def file_contents(filename)
@@ -65,7 +69,7 @@ class Shard
65
69
  end
66
70
 
67
71
  def write_file(file)
68
- path = file_path(shard.username, shard.name, shard.version, file.filename)
72
+ path = file_path(ref, file.filename)
69
73
  contents = file_contents(file.filename)
70
74
 
71
75
  if options[:verbose]
@@ -75,7 +79,7 @@ class Shard
75
79
  File.write path, contents
76
80
  end
77
81
 
78
- def version(length)
82
+ def version(length = SHA_LENGTH)
79
83
  full_version = full_gist.history.first.version
80
84
  full_version[0...length]
81
85
  end
@@ -8,36 +8,40 @@ class Shard
8
8
  # #
9
9
  ##################
10
10
 
11
- def create_root
12
- unless Dir.exists?(path)
13
- Dir.mkdir(path)
14
- end
15
- end
16
-
17
- def create_shard_dir(username, shard, version)
18
- dir = directory(username, shard, version)
11
+ def create_shard_dir(ref)
12
+ dir = directory(ref)
19
13
 
20
- unless shard_dir_exists?(username, shard, version)
14
+ unless shard_dir_exists?(ref)
21
15
  FileUtils.mkpath(dir)
22
16
  end
23
17
  end
24
18
 
25
- def shard_dir_exists?(username, shard, version)
26
- dir = directory(username, shard, version)
27
-
28
- Dir.exists?(dir)
19
+ def shard_dir_exists?(ref)
20
+ Dir.exists? directory(ref)
29
21
  end
30
22
 
31
- def directory(username, shard, version)
32
- File.join(path, username, shard, version)
23
+ def directory(ref)
24
+ File.join(root_path, ref.user, ref.name, ref.version)
33
25
  end
34
26
 
35
- def path
27
+ def root_path
36
28
  File.join(Dir.home, '.shard')
37
29
  end
38
30
 
39
- def file_path(username, shard, version, filename)
40
- File.join( directory(username, shard, version), filename )
31
+ def file_path(ref, filename, options = {})
32
+ File.join( directory(ref), filename )
33
+ end
34
+
35
+ def find_file_path(ref, filename, options = {})
36
+ find_file_paths(ref, filename).first
37
+ end
38
+
39
+ def find_file_paths(ref, *filenames)
40
+ full_names = filenames.map do |filename|
41
+ File.join( directory(ref), filename)
42
+ end
43
+
44
+ Dir[ *full_names ]
41
45
  end
42
46
 
43
47
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,27 +12,60 @@ cert_chain: []
12
12
  date: 2013-10-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: bundler
16
- requirement: &70160527980780 !ruby/object:Gem::Requirement
15
+ name: octokit
16
+ requirement: &70161726787500 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ! '>='
19
+ - - =
20
20
  - !ruby/object:Gem::Version
21
- version: '0'
21
+ version: 1.25.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70160527980780
24
+ version_requirements: *70161726787500
25
25
  - !ruby/object:Gem::Dependency
26
- name: octokit
27
- requirement: &70160527979280 !ruby/object:Gem::Requirement
26
+ name: netrc
27
+ requirement: &70161726786820 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
- - - =
30
+ - - ~>
31
31
  - !ruby/object:Gem::Version
32
- version: 1.25.0
32
+ version: 0.7.7
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70161726786820
36
+ - !ruby/object:Gem::Dependency
37
+ name: thor
38
+ requirement: &70161726786340 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 0.18.1
33
44
  type: :runtime
34
45
  prerelease: false
35
- version_requirements: *70160527979280
46
+ version_requirements: *70161726786340
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: &70161726785960 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70161726785960
58
+ - !ruby/object:Gem::Dependency
59
+ name: bundler
60
+ requirement: &70161726785480 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70161726785480
36
69
  description: ! 'Shard is a light-weight code loading-and-running-and-sharing tool,
37
70
  built on top of http://gist.github.com.
38
71
 
@@ -48,14 +81,19 @@ extensions: []
48
81
  extra_rdoc_files: []
49
82
  files:
50
83
  - lib/shard.rb
84
+ - lib/shard/cli/commands.rb
85
+ - lib/shard/cli/config.rb
86
+ - lib/shard/cli/fork.rb
87
+ - lib/shard/cli/list.rb
51
88
  - lib/shard/cli.rb
89
+ - lib/shard/credentials.rb
52
90
  - lib/shard/gist.rb
53
91
  - lib/shard/kernel.rb
54
92
  - lib/shard/lister.rb
55
93
  - lib/shard/loader.rb
94
+ - lib/shard/ref.rb
56
95
  - lib/shard/saver.rb
57
96
  - lib/shard/shard_directory.rb
58
- - lib/shard/shard_record.rb
59
97
  - bin/shard
60
98
  homepage: https://github.com/mark/shard
61
99
  licenses:
@@ -1,29 +0,0 @@
1
- class Shard::ShardRecord
2
-
3
- ################
4
- # #
5
- # Declarations #
6
- # #
7
- ################
8
-
9
- attr_reader :username, :name, :version
10
-
11
- ###############
12
- # #
13
- # Constructor #
14
- # #
15
- ###############
16
-
17
- def initialize(username, name, version = "HEAD")
18
- @username = username
19
- @name = name
20
- @version = version
21
- end
22
-
23
- ####################
24
- # #
25
- # Instance Methods #
26
- # #
27
- ####################
28
-
29
- end