octopussy 0.0.1 → 0.1.0

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/.document CHANGED
@@ -1,4 +1,3 @@
1
- README.rdoc
2
1
  lib/**/*.rb
3
2
  bin/*
4
3
  features/**/*.feature
data/README.markdown CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  # octopussy
3
2
 
4
3
  <img src='http://upload.wikimedia.org/wikipedia/en/b/bb/007Octopussyposter.jpg' style='float: right; margin: 0 0 10px 10px'/>
@@ -44,6 +43,11 @@ Some methods require authentication so you'll need to pass a login and an api_to
44
43
 
45
44
  Read the full [docs](http://rdoc.info/projects/pengwynn/octopussy) or check out the [examples](http://github.com/pengwynn/octopussy/tree/master/examples)
46
45
 
46
+ ## TODO
47
+
48
+ * Feed parsing
49
+ * More examples
50
+
47
51
  ## Note on Patches/Pull Requests
48
52
 
49
53
  * Fork the project.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.1.0
@@ -0,0 +1,58 @@
1
+ module Octopussy
2
+ class Event
3
+
4
+ def self.load_from_atom(entry)
5
+ entry = entry.to_mash if entry.is_a?(Hash)
6
+
7
+ event = Hashie::Mash.new({:user => entry.author})
8
+ event.published = (entry.published.is_a?(String) ? DateTime.parse(entry.published) : entry.published)
9
+
10
+ case entry.id
11
+ when /CreateEvent/
12
+ case entry.title
13
+ when /created tag/
14
+ event.event_type = 'create_tag'
15
+ event.tag = entry.links.first.split('/').pop
16
+ when /created branch/
17
+ event.event_type = 'create_branch'
18
+ event.branch = entry.links.first.split('/').pop
19
+ when /created repository/
20
+ event.event_type = 'create_repo'
21
+ end
22
+
23
+ when /MemberEvent/
24
+ event.event_type = 'member'
25
+ event.target_user = entry.title.split(" ")[2]
26
+ when /PushEvent/
27
+ event.event_type = 'push'
28
+ event.branch = entry.links.first.split('/').pop
29
+ when /ForkApplyEvent/
30
+ event.event_type = 'fork_apply'
31
+ event.branch = entry.links.first.split('/').pop
32
+ when /ForkEvent/
33
+ event.event_type = 'fork'
34
+ event.forked_from = Repo.new(entry.title.split(" forked ").pop)
35
+ when /WatchEvent/
36
+ event.event_type = 'watch'
37
+
38
+ when /FollowEvent/
39
+ event.event_type = 'follow'
40
+ event.target_user = entry.links.first.split("/").pop
41
+ when /IssuesEvent/
42
+ event.event_type = 'issue'
43
+ event.action = entry.title[/closed|opened|reopened/]
44
+ event.issue_number = entry.title[/\s\d+\s/].strip.to_i
45
+ when /GistEvent/
46
+ event.event_type = 'gist'
47
+ event.gist_number = entry.links.first.split('/').pop.to_i
48
+ when /WikiEvent/
49
+ event.event_type = 'wiki'
50
+ event.page = entry.links.first.split('/').pop
51
+ else
52
+
53
+ end
54
+ event.repo = Repo.from_url(entry.links.first) unless %w(follow gist).include?(event.event_type)
55
+ event
56
+ end
57
+ end
58
+ end
@@ -1,33 +1,49 @@
1
- class Repo
2
- attr_accessor :username, :name
3
-
4
- def initialize(repo)
5
- if repo.is_a?(String)
6
- repo = repo.split("/")
7
- @name = repo.pop
8
- @username = repo.pop
9
- elsif repo.is_a?(Repo)
10
- @username = repo.username
11
- @name = repo.name
12
- elsif repo.is_a?(Hash)
13
- @name = repo[:repo] ||= repo[:name]
14
- @username = repo[:username] ||= repo[:user] ||= repo[:owner]
1
+ module Octopussy
2
+ class Repo
3
+ attr_accessor :username, :name
4
+
5
+ def initialize(repo)
6
+ if repo.is_a?(String)
7
+ repo = repo.split("/")
8
+ @name = repo.pop
9
+ @username = repo.pop
10
+ elsif repo.is_a?(Repo)
11
+ @username = repo.username
12
+ @name = repo.name
13
+ elsif repo.is_a?(Hash)
14
+ @name = repo[:repo] ||= repo[:name]
15
+ @username = repo[:username] ||= repo[:user] ||= repo[:owner]
16
+ end
15
17
  end
16
- end
17
18
 
18
- def slug
19
- "#{@username}/#{@name}"
20
- end
19
+ def slug
20
+ "#{@username}/#{@name}"
21
+ end
21
22
 
22
- def user
23
- @username
24
- end
23
+ def to_s
24
+ self.slug
25
+ end
25
26
 
26
- def repo
27
- @name
28
- end
27
+ def url
28
+ "http://github.com/#{slug}"
29
+ end
29
30
 
30
- def user=(val)
31
- @username = val
31
+ def user
32
+ @username
33
+ end
34
+
35
+ def repo
36
+ @name
37
+ end
38
+
39
+ def user=(val)
40
+ @username = val
41
+ end
42
+
43
+ def self.from_url(url)
44
+ return if url.nil?
45
+ username, name = url.gsub("http://github.com/", "").split("/")
46
+ Repo.new("#{username}/#{name}")
47
+ end
32
48
  end
33
49
  end
data/lib/octopussy.rb CHANGED
@@ -131,4 +131,5 @@ module Octopussy
131
131
  end
132
132
 
133
133
  require File.join(directory, 'octopussy', 'repo')
134
+ require File.join(directory, 'octopussy', 'event')
134
135
  require File.join(directory, 'octopussy', 'client')
data/octopussy.gemspec ADDED
@@ -0,0 +1,101 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{octopussy}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Wynn Netherland", "Adam Stacoviak"]
12
+ s.date = %q{2009-12-12}
13
+ s.description = %q{Simple wrapper for the GitHub API v2}
14
+ s.email = %q{wynn.netherland@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.markdown"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "LICENSE",
23
+ "README.markdown",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "changelog.markdown",
27
+ "lib/octopussy.rb",
28
+ "lib/octopussy/client.rb",
29
+ "lib/octopussy/event.rb",
30
+ "lib/octopussy/repo.rb",
31
+ "octopussy.gemspec",
32
+ "test/fixtures/blob.json",
33
+ "test/fixtures/branches.json",
34
+ "test/fixtures/close_issue.json",
35
+ "test/fixtures/collaborators.json",
36
+ "test/fixtures/comment.json",
37
+ "test/fixtures/emails.json",
38
+ "test/fixtures/followers.json",
39
+ "test/fixtures/full_user.json",
40
+ "test/fixtures/issue.json",
41
+ "test/fixtures/issues.json",
42
+ "test/fixtures/keys.json",
43
+ "test/fixtures/labels.json",
44
+ "test/fixtures/languages.json",
45
+ "test/fixtures/network.json",
46
+ "test/fixtures/network_data.json",
47
+ "test/fixtures/network_meta.json",
48
+ "test/fixtures/open_issue.json",
49
+ "test/fixtures/raw_git_data.json",
50
+ "test/fixtures/reopen_issue.json",
51
+ "test/fixtures/repo.json",
52
+ "test/fixtures/repo_search.json",
53
+ "test/fixtures/repos.json",
54
+ "test/fixtures/search.json",
55
+ "test/fixtures/tags.json",
56
+ "test/fixtures/trees.json",
57
+ "test/fixtures/user.json",
58
+ "test/helper.rb",
59
+ "test/test_octopussy.rb",
60
+ "test/test_repo.rb"
61
+ ]
62
+ s.homepage = %q{http://github.com/pengwynn/octopussy}
63
+ s.rdoc_options = ["--charset=UTF-8"]
64
+ s.require_paths = ["lib"]
65
+ s.rubygems_version = %q{1.3.5}
66
+ s.summary = %q{Simple wrapper for the GitHub API}
67
+ s.test_files = [
68
+ "test/helper.rb",
69
+ "test/test_octopussy.rb",
70
+ "test/test_repo.rb"
71
+ ]
72
+
73
+ if s.respond_to? :specification_version then
74
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
75
+ s.specification_version = 3
76
+
77
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
78
+ s.add_runtime_dependency(%q<hashie>, ["~> 0.1.3"])
79
+ s.add_runtime_dependency(%q<httparty>, ["~> 0.4.5"])
80
+ s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 2.10.1"])
81
+ s.add_development_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
82
+ s.add_development_dependency(%q<mocha>, ["= 0.9.4"])
83
+ s.add_development_dependency(%q<fakeweb>, [">= 1.2.5"])
84
+ else
85
+ s.add_dependency(%q<hashie>, ["~> 0.1.3"])
86
+ s.add_dependency(%q<httparty>, ["~> 0.4.5"])
87
+ s.add_dependency(%q<thoughtbot-shoulda>, [">= 2.10.1"])
88
+ s.add_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
89
+ s.add_dependency(%q<mocha>, ["= 0.9.4"])
90
+ s.add_dependency(%q<fakeweb>, [">= 1.2.5"])
91
+ end
92
+ else
93
+ s.add_dependency(%q<hashie>, ["~> 0.1.3"])
94
+ s.add_dependency(%q<httparty>, ["~> 0.4.5"])
95
+ s.add_dependency(%q<thoughtbot-shoulda>, [">= 2.10.1"])
96
+ s.add_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
97
+ s.add_dependency(%q<mocha>, ["= 0.9.4"])
98
+ s.add_dependency(%q<fakeweb>, [">= 1.2.5"])
99
+ end
100
+ end
101
+
@@ -394,4 +394,221 @@ class TestOctopussy < Test::Unit::TestCase
394
394
 
395
395
  end
396
396
 
397
+ context "when consuming feeds" do
398
+
399
+ should "should set user and published time for the event" do
400
+ entry = Hashie::Mash.new({
401
+ :id => 'tag:github.com,2008:CreateEvent/110645788',
402
+ :published => '2009-12-12T11:24:14-08:00',
403
+ :updated => '2009-12-12T11:24:14-08:00',
404
+ :links => ['http://github.com/jnunemaker/twitter/tree/v0.7.10'],
405
+ :title => 'pengwynn created tag v0.7.10 at jnunemaker/twitter',
406
+ :author => 'pengwynn'
407
+ })
408
+
409
+ event = Octopussy::Event.load_from_atom(entry)
410
+ event.user.should == 'pengwynn'
411
+ event.published.year.should == 2009
412
+ event.published.month.should == 12
413
+ end
414
+
415
+ should "should create a create_repo event from an atom entry" do
416
+ entry = Hashie::Mash.new({
417
+ :id => 'tag:github.com,2008:CreateEvent/110645788',
418
+ :published => '2009-12-12T11:24:14-08:00',
419
+ :updated => '2009-12-12T11:24:14-08:00',
420
+ :links => ['http://github.com/Tanner/Team-1261---Java'],
421
+ :title => 'Tanner created repository Team-1261---Java',
422
+ :author => 'Tanner'
423
+ })
424
+
425
+ event = Octopussy::Event.load_from_atom(entry)
426
+ event.event_type.should == 'create_repo'
427
+ event.repo.username.should == 'Tanner'
428
+ event.repo.name.should == 'Team-1261---Java'
429
+ end
430
+
431
+ should "should create a create_tag event from an atom entry" do
432
+ entry = Hashie::Mash.new({
433
+ :id => 'tag:github.com,2008:CreateEvent/110645788',
434
+ :published => '2009-12-12T11:24:14-08:00',
435
+ :updated => '2009-12-12T11:24:14-08:00',
436
+ :links => ['http://github.com/jnunemaker/twitter/tree/v0.7.10'],
437
+ :title => 'pengwynn created tag v0.7.10 at jnunemaker/twitter',
438
+ :author => 'pengwynn'
439
+ })
440
+
441
+ event = Octopussy::Event.load_from_atom(entry)
442
+ event.event_type.should == 'create_tag'
443
+ event.repo.username.should == 'jnunemaker'
444
+ event.repo.name.should == 'twitter'
445
+ event.tag.should == 'v0.7.10'
446
+ end
447
+
448
+ should "should create a create_branch event from an atom entry" do
449
+ entry = Hashie::Mash.new({
450
+ :id => 'tag:github.com,2008:CreateEvent/110645788',
451
+ :published => '2009-12-12T11:24:14-08:00',
452
+ :updated => '2009-12-12T11:24:14-08:00',
453
+ :links => ['http://github.com/Fabi/cwcore/tree/cwcore-0.1'],
454
+ :title => 'cwcore created branch cwcore-0.1 at Fabi/cwcore',
455
+ :author => 'cwcore'
456
+ })
457
+
458
+ event = Octopussy::Event.load_from_atom(entry)
459
+ event.event_type.should == 'create_branch'
460
+ event.repo.username.should == 'Fabi'
461
+ event.repo.name.should == 'cwcore'
462
+ event.user.should == 'cwcore'
463
+ event.branch.should == 'cwcore-0.1'
464
+ end
465
+
466
+ should "should create a push event from an atom entry" do
467
+ entry = Hashie::Mash.new({
468
+ :id => 'tag:github.com,2008:PushEvent/110645788',
469
+ :published => '2009-12-12T11:24:14-08:00',
470
+ :updated => '2009-12-12T11:24:14-08:00',
471
+ :links => ['http://github.com/jnunemaker/twitter/commits/master'],
472
+ :title => 'pengwynn pushed to master at jnunemaker/twitter',
473
+ :author => 'pengwynn'
474
+ })
475
+
476
+ event = Octopussy::Event.load_from_atom(entry)
477
+ event.event_type.should == 'push'
478
+ event.repo.name.should == 'twitter'
479
+ event.branch.should == 'master'
480
+ end
481
+
482
+ should "should create a fork event from an atom entry" do
483
+ entry = Hashie::Mash.new({
484
+ :id => 'tag:github.com,2008:ForkEvent/110645788',
485
+ :published => '2009-12-12T11:24:14-08:00',
486
+ :updated => '2009-12-12T11:24:14-08:00',
487
+ :links => ['http://github.com/klauge/aeon/'],
488
+ :title => 'klauge forked djh/aeon',
489
+ :author => 'klauge'
490
+ })
491
+
492
+ event = Octopussy::Event.load_from_atom(entry)
493
+ event.event_type.should == 'fork'
494
+ event.repo.username.should == 'klauge'
495
+ event.repo.name.should == 'aeon'
496
+ event.forked_from.username.should == 'djh'
497
+ end
498
+
499
+ should "should create a watch event from an atom entry" do
500
+ entry = Hashie::Mash.new({
501
+ :id => 'tag:github.com,2008:WatchEvent/110645788',
502
+ :published => '2009-12-12T11:24:14-08:00',
503
+ :updated => '2009-12-12T11:24:14-08:00',
504
+ :links => ['http://github.com/bogolisk/egg'],
505
+ :title => 'jpablobr started watching bogolisk/egg',
506
+ :author => 'jpablobr'
507
+ })
508
+
509
+ event = Octopussy::Event.load_from_atom(entry)
510
+ event.event_type.should == 'watch'
511
+ event.repo.username.should == 'bogolisk'
512
+ event.repo.name.should == 'egg'
513
+ end
514
+
515
+ should "should create a follow event from an atom entry" do
516
+ entry = Hashie::Mash.new({
517
+ :id => 'tag:github.com,2008:FollowEvent/110645788',
518
+ :published => '2009-12-12T11:24:14-08:00',
519
+ :updated => '2009-12-12T11:24:14-08:00',
520
+ :links => ['http://github.com/swistak'],
521
+ :title => 'pengwynn started following swistak',
522
+ :author => 'pengwynn'
523
+ })
524
+
525
+ event = Octopussy::Event.load_from_atom(entry)
526
+ event.event_type.should == 'follow'
527
+ event.repo.should == nil
528
+ event.target_user.should == 'swistak'
529
+ end
530
+
531
+ should "should create an issues event from an atom entry" do
532
+ entry = Hashie::Mash.new({
533
+ :id => 'tag:github.com,2008:IssuesEvent/110645788',
534
+ :published => '2009-12-12T11:24:14-08:00',
535
+ :updated => '2009-12-12T11:24:14-08:00',
536
+ :links => ['http://github.com/jnunemaker/twitter/issues/19/find'],
537
+ :title => 'pengwynn closed issue 19 on jnunemaker/twitter',
538
+ :author => 'pengwynn'
539
+ })
540
+
541
+ event = Octopussy::Event.load_from_atom(entry)
542
+ event.event_type.should == 'issue'
543
+ event.repo.name.should == 'twitter'
544
+ event.action.should == 'closed'
545
+ event.issue_number.should == 19
546
+ end
547
+
548
+ should "should create a gist event from an atom entry" do
549
+ entry = Hashie::Mash.new({
550
+ :id => 'tag:github.com,2008:GistEvent/110645788',
551
+ :published => '2009-12-12T11:24:14-08:00',
552
+ :updated => '2009-12-12T11:24:14-08:00',
553
+ :links => ['http://gist.github.com/253987'],
554
+ :title => 'pengwynn created gist: 253987',
555
+ :author => 'pengwynn'
556
+ })
557
+
558
+ event = Octopussy::Event.load_from_atom(entry)
559
+ event.event_type.should == 'gist'
560
+ event.repo.should == nil
561
+ event.gist_number.should == 253987
562
+ end
563
+
564
+ should "should create a member event from an atom entry" do
565
+ entry = Hashie::Mash.new({
566
+ :id => 'tag:github.com,2008:MemberEvent/110645788',
567
+ :published => '2009-12-12T11:24:14-08:00',
568
+ :updated => '2009-12-12T11:24:14-08:00',
569
+ :links => ['http://github.com/pengwynn/octopussy'],
570
+ :title => 'pengwynn added adamstac to octopussy',
571
+ :author => 'pengwynn'
572
+ })
573
+
574
+ event = Octopussy::Event.load_from_atom(entry)
575
+ event.event_type.should == 'member'
576
+ event.repo.name.should == 'octopussy'
577
+ event.target_user.should == 'adamstac'
578
+ end
579
+
580
+ should "should create a fork_apply event from an atom entry" do
581
+ entry = Hashie::Mash.new({
582
+ :id => 'tag:github.com,2008:ForkApplyEvent/110645788',
583
+ :published => '2009-12-12T11:24:14-08:00',
584
+ :updated => '2009-12-12T11:24:14-08:00',
585
+ :links => ['http://github.com/pengwynn/linkedin/tree/integration'],
586
+ :title => 'pengwynn applied fork commits to linkedin/integration',
587
+ :author => 'pengwynn'
588
+ })
589
+
590
+ event = Octopussy::Event.load_from_atom(entry)
591
+ event.event_type.should == 'fork_apply'
592
+ event.repo.name.should == 'linkedin'
593
+ event.branch.should == 'integration'
594
+ end
595
+
596
+ should "should create a wiki event from an atom entry" do
597
+ entry = Hashie::Mash.new({
598
+ :id => 'tag:github.com,2008:WikiEvent/110645788',
599
+ :published => '2009-12-12T11:24:14-08:00',
600
+ :updated => '2009-12-12T11:24:14-08:00',
601
+ :links => ['http://github.com/dxw/Fammel/wikis/documentation'],
602
+ :title => 'dxw edited a page in the dxw/Fammel wiki',
603
+ :author => 'dxw'
604
+ })
605
+
606
+ event = Octopussy::Event.load_from_atom(entry)
607
+ event.event_type.should == 'wiki'
608
+ event.repo.name.should == 'Fammel'
609
+ event.page.should == 'documentation'
610
+ end
611
+ end
612
+
613
+
397
614
  end
data/test/test_repo.rb CHANGED
@@ -3,7 +3,7 @@ require 'helper'
3
3
  class TestRepo < Test::Unit::TestCase
4
4
  context "when passed a string containg a forward slash" do
5
5
  setup do
6
- @repo = Repo.new("pengwynn/linkedin")
6
+ @repo = Octopussy::Repo.new("pengwynn/linkedin")
7
7
  end
8
8
 
9
9
  should "set the username and repo name" do
@@ -16,12 +16,21 @@ class TestRepo < Test::Unit::TestCase
16
16
  @repo.user.should == "pengwynn"
17
17
  end
18
18
 
19
+ should "render slug as string" do
20
+ @repo.slug.should == "pengwynn/linkedin"
21
+ @repo.to_s.should == @repo.slug
22
+ end
23
+
24
+ should "render url as string" do
25
+ @repo.url.should == 'http://github.com/pengwynn/linkedin'
26
+ end
27
+
19
28
  end
20
29
 
21
30
  context "when passed a hash" do
22
31
 
23
32
  should "should set username and repo" do
24
- repo = Repo.new({:username => 'pengwynn', :name => 'linkedin'})
33
+ repo = Octopussy::Repo.new({:username => 'pengwynn', :name => 'linkedin'})
25
34
  repo.name.should == "linkedin"
26
35
  repo.username.should == "pengwynn"
27
36
  end
@@ -29,13 +38,13 @@ class TestRepo < Test::Unit::TestCase
29
38
 
30
39
  context "when passed a Repo" do
31
40
 
32
- should "description" do
33
- repo = Repo.new(Repo.new('pengwynn/linkedin'))
41
+ should "set username and repo" do
42
+ repo = Octopussy::Repo.new( Octopussy::Repo.new('pengwynn/linkedin'))
34
43
  repo.name.should == "linkedin"
35
44
  repo.username.should == "pengwynn"
36
45
  end
37
46
  end
38
-
47
+
39
48
 
40
49
 
41
50
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: octopussy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wynn Netherland
@@ -92,7 +92,9 @@ files:
92
92
  - changelog.markdown
93
93
  - lib/octopussy.rb
94
94
  - lib/octopussy/client.rb
95
+ - lib/octopussy/event.rb
95
96
  - lib/octopussy/repo.rb
97
+ - octopussy.gemspec
96
98
  - test/fixtures/blob.json
97
99
  - test/fixtures/branches.json
98
100
  - test/fixtures/close_issue.json