drnic-mechanical_github 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ == 0.0.1 2009-01-23
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/Manifest.txt ADDED
@@ -0,0 +1,21 @@
1
+ History.txt
2
+ Manifest.txt
3
+ PostInstall.txt
4
+ README.rdoc
5
+ Rakefile
6
+ Rakefile.orig
7
+ features/development.feature
8
+ features/steps/common.rb
9
+ features/steps/env.rb
10
+ lib/mechanical_github.rb
11
+ lib/mechanical_github/repository.rb
12
+ lib/mechanical_github/session.rb
13
+ lib/mechanical_github/wiki.rb
14
+ pkg/mechanical_github-0.0.1.gem
15
+ script/console
16
+ script/destroy
17
+ script/generate
18
+ spec/mechanical_github_spec.rb
19
+ spec/spec.opts
20
+ spec/spec_helper.rb
21
+ tasks/rspec.rake
data/README.rdoc ADDED
@@ -0,0 +1,63 @@
1
+ = mechanical_github
2
+
3
+ * http://drnic.github.com/mechanical_github
4
+
5
+ == DESCRIPTION:
6
+
7
+ This gem provides a automated API for working with github.
8
+
9
+ == SYNOPSIS:
10
+
11
+ This will give you a session to work with.
12
+
13
+ sess = MechanicalGithub::Session.new
14
+
15
+ Make the session logged in to github - needed for private repos or write
16
+ operations.
17
+
18
+ sess.login(username, password)
19
+
20
+ Creates a repository for the passed in repository. Returns the repo if
21
+ successful, or nil if not
22
+
23
+ sess.create_repository(repository)
24
+
25
+ Will return a repository object for the given repository name and username.
26
+ Calling without a username will return the named repository for the currently
27
+ logged in username
28
+
29
+ sess.get_repository(repository_name, username)
30
+ sess.get_repository(repository_name)
31
+
32
+ == REQUIREMENTS:
33
+
34
+ * mechanize gem
35
+
36
+ == INSTALL:
37
+
38
+ * sudo gem install drnic-mechanical_github --source http://gems.github.com
39
+
40
+ == LICENSE:
41
+
42
+ (The MIT License)
43
+
44
+ Copyright (c) 2009 Dr Nic Williams, http://mocra.com + http://drnicwilliams.com
45
+
46
+ Permission is hereby granted, free of charge, to any person obtaining
47
+ a copy of this software and associated documentation files (the
48
+ 'Software'), to deal in the Software without restriction, including
49
+ without limitation the rights to use, copy, modify, merge, publish,
50
+ distribute, sublicense, and/or sell copies of the Software, and to
51
+ permit persons to whom the Software is furnished to do so, subject to
52
+ the following conditions:
53
+
54
+ The above copyright notice and this permission notice shall be
55
+ included in all copies or substantial portions of the Software.
56
+
57
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
58
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
59
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
60
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
61
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
62
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
63
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,26 @@
1
+ %w[rubygems rake rake/clean fileutils newgem].each { |f| require f }
2
+ require File.dirname(__FILE__) + '/lib/mechanical_github'
3
+
4
+ # Generate all the Rake tasks
5
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
6
+ $hoe = Hoe.new('mechanical_github', MechanicalGithub::VERSION) do |p|
7
+ p.developer('Dr Nic Williams', 'drnicwilliams@gmail.com')
8
+ p.developer('Lincoln Stoll', 'lstoll@lstoll.net')
9
+ p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
10
+ p.extra_deps = [
11
+ ['mechanize'],
12
+ ]
13
+ p.extra_dev_deps = [
14
+ ['newgem', ">= #{::Newgem::VERSION}"]
15
+ ]
16
+
17
+ p.clean_globs |= %w[**/.DS_Store tmp *.log]
18
+ path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
19
+ p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
20
+ p.rsync_args = '-av --delete --ignore-errors'
21
+ end
22
+
23
+ require 'newgem/tasks' # load /tasks/*.rake
24
+ Dir['tasks/**/*.rake'].each { |t| load t }
25
+
26
+ task :default => [:spec, :features]
@@ -0,0 +1,13 @@
1
+ Feature: Development processes of newgem itself (rake tasks)
2
+
3
+ As a Newgem maintainer or contributor
4
+ I want rake tasks to maintain and release the gem
5
+ So that I can spend time on the tests and code, and not excessive time on maintenance processes
6
+
7
+ Scenario: Generate RubyGem
8
+ Given this project is active project folder
9
+ And 'pkg' folder is deleted
10
+ When task 'rake gem' is invoked
11
+ Then folder 'pkg' is created
12
+ And file with name matching 'pkg/*.gem' is created else you should run "rake manifest" to fix this
13
+ And gem spec key 'rdoc_options' contains /--mainREADME.rdoc/
@@ -0,0 +1,194 @@
1
+ def in_project_folder(&block)
2
+ project_folder = @active_project_folder || @tmp_root
3
+ FileUtils.chdir(project_folder, &block)
4
+ end
5
+
6
+ def in_home_folder(&block)
7
+ FileUtils.chdir(@home_path, &block)
8
+ end
9
+
10
+ Given %r{^a safe folder} do
11
+ FileUtils.rm_rf @tmp_root = File.dirname(__FILE__) + "/../../tmp"
12
+ FileUtils.mkdir_p @tmp_root
13
+ FileUtils.mkdir_p @home_path = File.expand_path(File.join(@tmp_root, "home"))
14
+ @lib_path = File.expand_path(File.dirname(__FILE__) + '/../../lib')
15
+ Given "env variable $HOME set to '#{@home_path}'"
16
+ end
17
+
18
+ Given %r{^this project is active project folder} do
19
+ Given "a safe folder"
20
+ @active_project_folder = File.expand_path(File.dirname(__FILE__) + "/../..")
21
+ end
22
+
23
+ Given %r{^env variable \$([\w_]+) set to '(.*)'} do |env_var, value|
24
+ ENV[env_var] = value
25
+ end
26
+
27
+ def force_local_lib_override(project_name = @project_name)
28
+ rakefile = File.read(File.join(project_name, 'Rakefile'))
29
+ File.open(File.join(project_name, 'Rakefile'), "w+") do |f|
30
+ f << "$:.unshift('#{@lib_path}')\n"
31
+ f << rakefile
32
+ end
33
+ end
34
+
35
+ def setup_active_project_folder project_name
36
+ @active_project_folder = File.join(@tmp_root, project_name)
37
+ @project_name = project_name
38
+ end
39
+
40
+ Given %r{'(.*)' folder is deleted} do |folder|
41
+ in_project_folder do
42
+ FileUtils.rm_rf folder
43
+ end
44
+ end
45
+
46
+ When %r{^'(.*)' generator is invoked with arguments '(.*)'$} do |generator, arguments|
47
+ @stdout = StringIO.new
48
+ FileUtils.chdir(@active_project_folder) do
49
+ if Object.const_defined?("APP_ROOT")
50
+ APP_ROOT.replace(FileUtils.pwd)
51
+ else
52
+ APP_ROOT = FileUtils.pwd
53
+ end
54
+ run_generator(generator, arguments.split(' '), SOURCES, :stdout => @stdout)
55
+ end
56
+ File.open(File.join(@tmp_root, "generator.out"), "w") do |f|
57
+ @stdout.rewind
58
+ f << @stdout.read
59
+ end
60
+ end
61
+
62
+ When %r{run executable '(.*)' with arguments '(.*)'} do |executable, arguments|
63
+ @stdout = File.expand_path(File.join(@tmp_root, "executable.out"))
64
+ in_project_folder do
65
+ system "#{executable} #{arguments} > #{@stdout} 2> #{@stdout}"
66
+ end
67
+ end
68
+
69
+ When %r{run project executable '(.*)' with arguments '(.*)'} do |executable, arguments|
70
+ @stdout = File.expand_path(File.join(@tmp_root, "executable.out"))
71
+ in_project_folder do
72
+ system "ruby #{executable} #{arguments} > #{@stdout} 2> #{@stdout}"
73
+ end
74
+ end
75
+
76
+ When %r{run local executable '(.*)' with arguments '(.*)'} do |executable, arguments|
77
+ @stdout = File.expand_path(File.join(@tmp_root, "executable.out"))
78
+ executable = File.expand_path(File.join(File.dirname(__FILE__), "/../../bin", executable))
79
+ in_project_folder do
80
+ system "ruby #{executable} #{arguments} > #{@stdout} 2> #{@stdout}"
81
+ end
82
+ end
83
+
84
+ When %r{^task 'rake (.*)' is invoked$} do |task|
85
+ @stdout = File.expand_path(File.join(@tmp_root, "tests.out"))
86
+ FileUtils.chdir(@active_project_folder) do
87
+ system "rake #{task} --trace > #{@stdout} 2> #{@stdout}"
88
+ end
89
+ end
90
+
91
+ Then %r{^folder '(.*)' (is|is not) created} do |folder, is|
92
+ in_project_folder do
93
+ File.exists?(folder).should(is == 'is' ? be_true : be_false)
94
+ end
95
+ end
96
+
97
+ Then %r{^file '(.*)' (is|is not) created} do |file, is|
98
+ in_project_folder do
99
+ File.exists?(file).should(is == 'is' ? be_true : be_false)
100
+ end
101
+ end
102
+
103
+ Then %r{^file with name matching '(.*)' is created} do |pattern|
104
+ in_project_folder do
105
+ Dir[pattern].should_not be_empty
106
+ end
107
+ end
108
+
109
+ Then %r{gem file '(.*)' and generated file '(.*)' should be the same} do |gem_file, project_file|
110
+ File.exists?(gem_file).should be_true
111
+ File.exists?(project_file).should be_true
112
+ gem_file_contents = File.read(File.dirname(__FILE__) + "/../../#{gem_file}")
113
+ project_file_contents = File.read(File.join(@active_project_folder, project_file))
114
+ project_file_contents.should == gem_file_contents
115
+ end
116
+
117
+ Then %r{^output same as contents of '(.*)'$} do |file|
118
+ expected_output = File.read(File.join(File.dirname(__FILE__) + "/../expected_outputs", file))
119
+ actual_output = File.read(@stdout)
120
+ actual_output.should == expected_output
121
+ end
122
+
123
+ Then %r{^(does|does not) invoke generator '(.*)'$} do |does_invoke, generator|
124
+ actual_output = File.read(@stdout)
125
+ does_invoke == "does" ?
126
+ actual_output.should(match(/dependency\s+#{generator}/)) :
127
+ actual_output.should_not(match(/dependency\s+#{generator}/))
128
+ end
129
+
130
+ Then %r{help options '(.*)' and '(.*)' are displayed} do |opt1, opt2|
131
+ actual_output = File.read(@stdout)
132
+ actual_output.should match(/#{opt1}/)
133
+ actual_output.should match(/#{opt2}/)
134
+ end
135
+
136
+ Then %r{^output (does|does not) match \/(.*)\/} do |does, regex|
137
+ actual_output = File.read(@stdout)
138
+ (does == 'does') ?
139
+ actual_output.should(match(/#{regex}/)) :
140
+ actual_output.should_not(match(/#{regex}/))
141
+ end
142
+
143
+ Then %r{^contents of file '(.*)' (does|does not) match \/(.*)\/} do |file, does, regex|
144
+ in_project_folder do
145
+ actual_output = File.read(file)
146
+ (does == 'does') ?
147
+ actual_output.should(match(/#{regex}/)) :
148
+ actual_output.should_not(match(/#{regex}/))
149
+ end
150
+ end
151
+
152
+ Then %r{^all (\d+) tests pass} do |expected_test_count|
153
+ expected = %r{^#{expected_test_count} tests, \d+ assertions, 0 failures, 0 errors}
154
+ actual_output = File.read(@stdout)
155
+ actual_output.should match(expected)
156
+ end
157
+
158
+ Then %r{^all (\d+) examples pass} do |expected_test_count|
159
+ expected = %r{^#{expected_test_count} examples?, 0 failures}
160
+ actual_output = File.read(@stdout)
161
+ actual_output.should match(expected)
162
+ end
163
+
164
+ Then %r{^yaml file '(.*)' contains (\{.*\})} do |file, yaml|
165
+ in_project_folder do
166
+ yaml = eval yaml
167
+ YAML.load(File.read(file)).should == yaml
168
+ end
169
+ end
170
+
171
+ Then %r{^Rakefile can display tasks successfully} do
172
+ @stdout = File.expand_path(File.join(@tmp_root, "rakefile.out"))
173
+ FileUtils.chdir(@active_project_folder) do
174
+ system "rake -T > #{@stdout} 2> #{@stdout}"
175
+ end
176
+ actual_output = File.read(@stdout)
177
+ actual_output.should match(/^rake\s+\w+\s+#\s.*/)
178
+ end
179
+
180
+ Then %r{^task 'rake (.*)' is executed successfully} do |task|
181
+ @stdout.should_not be_nil
182
+ actual_output = File.read(@stdout)
183
+ actual_output.should_not match(/^Don't know how to build task '#{task}'/)
184
+ actual_output.should_not match(/Error/i)
185
+ end
186
+
187
+ Then %r{^gem spec key '(.*)' contains \/(.*)\/} do |key, regex|
188
+ in_project_folder do
189
+ gem_file = Dir["pkg/*.gem"].first
190
+ gem_spec = Gem::Specification.from_yaml(`gem spec #{gem_file}`)
191
+ spec_value = gem_spec.send(key.to_sym)
192
+ spec_value.to_s.should match(/#{regex}/)
193
+ end
194
+ end
@@ -0,0 +1,6 @@
1
+ require File.dirname(__FILE__) + "/../../lib/mechanical_github"
2
+
3
+ gem 'cucumber'
4
+ require 'cucumber'
5
+ gem 'rspec'
6
+ require 'spec'
@@ -0,0 +1,24 @@
1
+ module MechanicalGithub
2
+
3
+ # represents a project
4
+ class Repository
5
+ attr_reader :name, :description, :homepage, :username
6
+
7
+ def initialize(session, name, username, description, homepage)
8
+ @name = name
9
+ @description = description
10
+ @homepage = homepage
11
+ @username = username
12
+ @session = session
13
+ end
14
+
15
+ def self.url_for(username, name)
16
+ "https://github.com/#{username}/#{name}"
17
+ end
18
+
19
+ def wiki
20
+ Wiki.new(self, @session)
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,63 @@
1
+ module MechanicalGithub
2
+ class Session
3
+ attr_reader :agent, :username, :logged_in
4
+
5
+ # set up an agent witht the provided credentials, and log in to github with it.
6
+ def initialize()
7
+ @agent = WWW::Mechanize.new
8
+ @logged_in = false
9
+ end
10
+
11
+ # will need to do this to access private repos or be able to create stuff.
12
+ def login(username, password)
13
+ @username = username
14
+
15
+ loginpage = @agent.get('https://github.com/login')
16
+ loginform = loginpage.forms[0]
17
+
18
+ loginform['login'] = username
19
+ loginform['password'] = password
20
+ loginform['remember_me'] = '1' # make the session 'stick' a little longer, hopefully.
21
+ loginpage = @agent.submit(loginform)
22
+ @logged_in = true
23
+ end
24
+
25
+ #
26
+ def create_repository(name, description, homepage)
27
+ return unless @logged_in
28
+ newpage = @agent.get('http://github.com/repositories/new')
29
+ # create the repo
30
+ newform = newpage.forms[1]
31
+ #p form
32
+ newform['repository[name]'] = name
33
+ newform['repository[description]'] = description
34
+ newform['repository[homepage]'] = homepage
35
+ newform['repository[public]'] = true #always want it to be public
36
+
37
+ finishpage = @agent.submit(newform)
38
+
39
+ # TODO - error handle here - regex for error or something. rtn the new repo if OK, nil if not.
40
+
41
+ Repository.new(self, name, @username, description, homepage)
42
+ end
43
+
44
+ def find_repository(repository_name, username=@username)
45
+ return unless username
46
+ repopage = @agent.get(Repository.url_for(username, repository_name))
47
+ description = repopage.search("//span[@id='repository_description']").inner_html
48
+ homepage = repopage.search("//span[@id='repository_homepage']").inner_html
49
+ # because the fields on a repo are currently immutable, we have to create a new repo and return
50
+ Repository.new(self, repository_name, username, description, homepage)
51
+ end
52
+
53
+ def send_message(to, subject, body)
54
+ return unless @logged_in
55
+ newpage = @agent.get('http://github.com/inbox/new')
56
+ newform = newpage.forms[1]
57
+ newform['message[to]'] = to
58
+ newform['message[subject]'] = subject
59
+ newform['message[body]'] = body
60
+ @agent.submit(newform)
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,31 @@
1
+ module MechanicalGithub
2
+
3
+ class Wiki
4
+ attr_reader :project
5
+
6
+ def initialize(repository, session)
7
+ @repository = repository
8
+ @session = session
9
+ end
10
+
11
+ def url
12
+ "https://github.com/#{@repository.username}/#{repository.name}/wikis"
13
+ end
14
+
15
+ def pages
16
+
17
+ end
18
+
19
+ end
20
+
21
+ class WikiPage
22
+ attr_reader :name, :content
23
+
24
+ def initialize(name, content, session=nil)
25
+ @name = name
26
+ @content = @content
27
+ @session = session
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,11 @@
1
+ #
2
+ # automates the creation of a git repository on github.
3
+ require 'rubygems'
4
+ require 'mechanize'
5
+
6
+ module MechanicalGithub
7
+ VERSION="0.2.0"
8
+ end
9
+
10
+ # load all files
11
+ Dir["#{File.join(File.dirname(__FILE__), "mechanical_github")}/*.rb"].each { |file| require(file) }
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/mechanical_github.rb'}"
9
+ puts "Loading mechanical_github gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ # Time to add your specs!
4
+ # http://rspec.info/
5
+ describe "Place your specs here" do
6
+
7
+ it "find this spec in spec directory" do
8
+ violated "Be sure to write your specs"
9
+ end
10
+
11
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,10 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ gem 'rspec'
6
+ require 'spec'
7
+ end
8
+
9
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
10
+ require 'mechanical_github'
data/tasks/rspec.rake ADDED
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ require 'spec'
6
+ end
7
+ begin
8
+ require 'spec/rake/spectask'
9
+ rescue LoadError
10
+ puts <<-EOS
11
+ To use rspec for testing you must install rspec gem:
12
+ gem install rspec
13
+ EOS
14
+ exit(0)
15
+ end
16
+
17
+ desc "Run the specs under spec/models"
18
+ Spec::Rake::SpecTask.new do |t|
19
+ t.spec_opts = ['--options', "spec/spec.opts"]
20
+ t.spec_files = FileList['spec/**/*_spec.rb']
21
+ end
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: drnic-mechanical_github
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Dr Nic Williams
8
+ - Lincoln Stoll
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-01-23 00:00:00 -08:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: mechanize
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: newgem
27
+ version_requirement:
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.2.3
33
+ version:
34
+ - !ruby/object:Gem::Dependency
35
+ name: hoe
36
+ version_requirement:
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 1.8.0
42
+ version:
43
+ description: This gem provides a automated API for working with github.
44
+ email:
45
+ - drnicwilliams@gmail.com
46
+ - lstoll@lstoll.net
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files:
52
+ - History.txt
53
+ - Manifest.txt
54
+ - PostInstall.txt
55
+ - README.rdoc
56
+ files:
57
+ - History.txt
58
+ - Manifest.txt
59
+ - PostInstall.txt
60
+ - README.rdoc
61
+ - Rakefile
62
+ - Rakefile.orig
63
+ - features/development.feature
64
+ - features/steps/common.rb
65
+ - features/steps/env.rb
66
+ - lib/mechanical_github.rb
67
+ - lib/mechanical_github/repository.rb
68
+ - lib/mechanical_github/session.rb
69
+ - lib/mechanical_github/wiki.rb
70
+ - pkg/mechanical_github-0.0.1.gem
71
+ - script/console
72
+ - script/destroy
73
+ - script/generate
74
+ - spec/mechanical_github_spec.rb
75
+ - spec/spec.opts
76
+ - spec/spec_helper.rb
77
+ - tasks/rspec.rake
78
+ has_rdoc: true
79
+ homepage: http://drnic.github.com/mechanical_github
80
+ post_install_message:
81
+ rdoc_options:
82
+ - --main
83
+ - README.rdoc
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ version:
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: "0"
97
+ version:
98
+ requirements: []
99
+
100
+ rubyforge_project: mechanical_github
101
+ rubygems_version: 1.2.0
102
+ signing_key:
103
+ specification_version: 2
104
+ summary: This gem provides a automated API for working with github.
105
+ test_files: []
106
+