rubycat 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5f74c79895ee48e5b1e1cfb023028b2ec00fdd19
4
- data.tar.gz: a9c8709bfb94a8fad89e2cdb2a882c1e5246b44b
3
+ metadata.gz: 6bc966e42b5b73ec39f11771083a4ffe56f99637
4
+ data.tar.gz: cd8fc699fa69c4ba3b823925832dd6db93a8bd5a
5
5
  SHA512:
6
- metadata.gz: c1684e88af7af86212fc31e5b681aa9c1d84b2440de20f4141d0b8c01d91b0055ff238d5ad59abcc17e79dcfac437be3e5eabc9fb06ac909666e5d033c682d0e
7
- data.tar.gz: f984352a7b026c94904986571e1eb3dbd55b700d4f78b70f1e9b7bd56b6f416190719ee2974ed6dc5ab0ab4d0a7cbcb68ed534bd4732eaa5fcffb11cee27c490
6
+ metadata.gz: 711cf038156b6c6d1c716416cc9a942204260f91a8c43836792479756c2706bd95acc5eaefbe3fdb5c2b306af1b70ff6456c42b034f0ad55df4fbdf4f5c8e6ce
7
+ data.tar.gz: 6c60ffb244dc8d0bca41359b80ee2838c8603d011089b2cf81db64cdc7a4cf12e5c828a81a0e45ed0b811a305655ce44ae5919b924e317e07193501c5e356be7
@@ -5,8 +5,10 @@ Rakefile
5
5
  lib/rubycat.rb
6
6
  lib/rubycat/card.rb
7
7
  lib/rubycat/catalog.rb
8
+ lib/rubycat/service/rubygems.rb
8
9
  lib/rubycat/version.rb
9
10
  test/data/RUBY.md
10
11
  test/helper.rb
11
12
  test/test_reader.rb
13
+ test/test_rubygems.rb
12
14
  test/test_version.rb
@@ -12,6 +12,11 @@ require 'rubycat/version' ## let version always go first
12
12
  require 'rubycat/card'
13
13
  require 'rubycat/catalog'
14
14
 
15
+ ## services / apis
16
+
17
+ require 'rubycat/service/rubygems'
18
+
19
+
15
20
 
16
21
  # say hello
17
22
  puts RubyCat.banner if defined?($RUBYLIBS_DEBUG) && $RUBYLIBS_DEBUG
@@ -5,19 +5,37 @@ module RubyCat
5
5
 
6
6
  class Card
7
7
 
8
+ ## read only
8
9
  attr_reader :name # e.g. sinatra
9
10
  attr_reader :gem_url # e.g. https://rubygems.org/gems/sinatra
10
11
  attr_reader :github_url # e.g. https://github.com/sinatra/sinatra
11
12
  attr_reader :categories # e.g.
12
13
 
14
+ attr_reader :desc # info/blurb/description/summary (use summary ??)
15
+ attr_reader :latest_version ## as string
16
+ attr_reader :latest_version_downloads
17
+ attr_reader :downloads ## total downloads
18
+ attr_reader :deps # runtime dependencies as a string for now (activerecord, activesupport etc.)
19
+
20
+
21
+ def to_hash
22
+ { name: @name,
23
+ gem_url: @gem_url,
24
+ github_url: @github_url,
25
+ categories: @categories,
26
+ desc: @desc,
27
+ latest_version: @latest_version,
28
+ latest_version_downloads: @latest_version_downloads,
29
+ downloads: @downloads,
30
+ deps: @deps }
31
+ end
32
+
33
+
13
34
 
14
35
  def initialize( card )
15
36
  @categories = card.categories
16
37
  @name = nil
17
38
 
18
- ## todo/fix: lotus/lotusrb - fix: make gem name higher priority
19
- ## for now uses github name
20
- ## also check/fallback to rubygems name (if no github entry)
21
39
 
22
40
  github_link = card.links.find {|it| it[0].include?( ':octocat:') }
23
41
 
@@ -44,15 +62,41 @@ class Card
44
62
  pp card
45
63
  end
46
64
 
47
- gem_link = card.links.find {|it| it[0] == ':gem:' }
48
- if gem_link
49
- @gem_url = gem_link[1]
50
- puts "gem_url: #{@gem_url}"
51
- else
52
- puts "*** no gem_url found"
53
- pp card
54
- end
65
+ gem_link = card.links.find {|it| it[0] == ':gem:' }
66
+ if gem_link
67
+ @gem_url = gem_link[1]
68
+ puts "gem_url: #{@gem_url}"
69
+
70
+ uri = URI.parse( @gem_url )
71
+ names = uri.path[1..-1].split('/') ## cut off leading / and split
72
+ pp names
73
+ ## assume last name entry is name of gem
74
+ @name = names[-1]
75
+ else
76
+ puts "*** no gem_url found"
77
+ pp card
78
+ end
55
79
  end
80
+
81
+
82
+ def sync_gems_info( json )
83
+ @desc = json['info']
84
+ @latest_version = json['version']
85
+ @latest_version_downloads = json['version_downloads']
86
+ @downloads = json['downloads']
87
+
88
+ deps_runtime = json['dependencies']['runtime']
89
+ if deps_runtime && deps_runtime.size > 0
90
+ deps = []
91
+ deps_runtime.each do |dep|
92
+ deps << dep['name']
93
+ end
94
+ @deps = deps.join(', ')
95
+ else
96
+ @deps = nil
97
+ end
98
+ end # method sync_gems_info
99
+
56
100
  end ## class Card
57
101
 
58
102
 
@@ -5,6 +5,8 @@ module RubyCat
5
5
 
6
6
  class Catalog
7
7
 
8
+ attr_reader :cards
9
+
8
10
  def initialize
9
11
  @cards = []
10
12
  end
@@ -13,6 +15,28 @@ class Catalog
13
15
  @cards += cards.map { |card| Card.new(card) } ## convert to RubyCat card
14
16
  end
15
17
 
18
+ def sync( opts={} ) ## change name to populate/autofill, etc. ??
19
+ ## get (extra) data from rubygems via api
20
+
21
+ gems = RubyGemsService.new
22
+
23
+ @cards.each_with_index do |card,i|
24
+
25
+ if card.gem_url
26
+ json = gems.info( card.name )
27
+ pp json
28
+
29
+ card.sync_gems_info( json )
30
+ end
31
+
32
+ pp card
33
+
34
+ ### for debugging/testing; stop after processing x (e.g. 2) recs
35
+ break if opts[:limit] && i >= opts[:limit].to_i ## e.g. i > 2 etc.
36
+ end
37
+ end # method sync
38
+
39
+
16
40
  def render
17
41
  ## render to json
18
42
  puts "--snip--"
@@ -20,13 +44,8 @@ class Catalog
20
44
  ary = []
21
45
 
22
46
  @cards.each do |card|
23
- h = {
24
- name: card.name,
25
- gem_url: card.gem_url,
26
- github_url: card.github_url,
27
- categories: card.categories
28
- }
29
- pp h
47
+ h = card.to_hash
48
+ ## pp h
30
49
  ary << h
31
50
  end
32
51
 
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ ### add to RubyCat module/namespace - why?? why not??
5
+
6
+
7
+ class RubyGemsService
8
+
9
+ def initialize
10
+ @worker = Fetcher::Worker.new
11
+ @api_base = 'http://rubygems.org/api/v1'
12
+ end
13
+
14
+ def info( name )
15
+ api_url = "#{@api_base}/gems/#{name}.json"
16
+
17
+ ### fix/todo: add read_json! -- !!!! to fetcher
18
+ txt = @worker.read_utf8!( api_url )
19
+ pp txt
20
+
21
+ json = JSON.parse( txt )
22
+ ## pp json
23
+ json ## return parsed json hash (or raise HTTP excep)
24
+ end
25
+ end ## class RubyGemsService
26
+
@@ -3,7 +3,7 @@
3
3
  module RubyCat
4
4
 
5
5
  MAJOR = 0 ## todo: namespace inside version or something - why? why not??
6
- MINOR = 1
6
+ MINOR = 2
7
7
  PATCH = 0
8
8
  VERSION = [MAJOR,MINOR,PATCH].join('.')
9
9
 
@@ -79,7 +79,7 @@ Fun / Hack:
79
79
 
80
80
  Future:
81
81
 
82
- - [Mustermann](http://rkh.github.io/mustermann), [:octocat:](https://github.com/rkh/mustermann) - your personal string matching expert; can be used as a plugin for Sinatra 1.x and will power Sinatra 2.0; by Konstantin Haase et al
82
+ - [Mustermann](http://rkh.github.io/mustermann), [:octocat:](https://github.com/rkh/mustermann), [:gem:](https://rubygems.org/gems/mustermann) - your personal string matching expert; can be used as a plugin for Sinatra 1.x and will power Sinatra 2.0; by Konstantin Haase et al
83
83
 
84
84
 
85
85
  ## Volt
@@ -95,6 +95,8 @@ _Client/Server Isomorphic Framework_
95
95
 
96
96
  - [Lattice :octocat:](https://github.com/celluloid/lattice), [:gem:](https://rubygems.org/gems/lattice), [:book:](http://rubydoc.info/gems/lattice) - an actor-based web framework built on top of celluloid, reel, and webmachine; designed for realtime apps, end-to-end streaming, and websockets by Tony Arcieri et al
97
97
 
98
+ - [Angelo :octocat:](https://github.com/kenichi/angelo), [:gem:](https://rubygems.org/gems/angelo) - sinatra-like mini-language for reel (built upon Celluloid::IO, no rack); supports web sockets and server sent events (SSE) by Kenichi Nakamura
99
+
98
100
 
99
101
 
100
102
  ## Web Service Frameworks
@@ -143,7 +145,7 @@ _JSON HTTP API Builder_
143
145
 
144
146
  ## Thanks
145
147
 
146
- Josep M. Blanquer
148
+ Tony Arcieri • Josep M. Blanquer
147
149
 
148
150
  ## Meta
149
151
 
@@ -12,7 +12,7 @@ class TestReader < MiniTest::Test
12
12
 
13
13
  def test_ruby
14
14
 
15
- r = CatalogDb::CardReader.from_file( "#{CatalogDb.root}/test/data/RUBY.md" )
15
+ r = CatalogDb::CardReader.from_file( "#{RubyCat.root}/test/data/RUBY.md" )
16
16
  cards = r.read
17
17
 
18
18
  pp cards
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+
3
+ ###
4
+ # to run use
5
+ # ruby -I ./lib -I ./test test/test_rubygems.rb
6
+
7
+
8
+ require 'helper'
9
+
10
+
11
+
12
+ class TestRubyGems < MiniTest::Test
13
+
14
+ def test_ruby
15
+
16
+ r = CatalogDb::CardReader.from_file( "#{RubyCat.root}/test/data/RUBY.md" )
17
+ cards = r.read
18
+
19
+ pp cards
20
+
21
+ c = cards[0]
22
+
23
+ assert_equal [["Rack HQ", "http://rack.github.io"],
24
+ [":octocat:", "https://github.com/rack"],
25
+ [":gem:", "https://rubygems.org/gems/rack"],
26
+ [":book:", "http://rubydoc.info/gems/rack"]], c.links
27
+
28
+ assert_equal 'Webframeworks › Rack', c.categories
29
+
30
+ cat = RubyCat::Catalog.new
31
+ cat.add( cards )
32
+ cat.render
33
+
34
+ ## try sync w/ RubyGemsService/API
35
+ cat.sync( limit: 2 ) ## only sync first three recs
36
+ ## cat.sync
37
+
38
+ cat.render ## dump w/ new (updated) values
39
+
40
+ assert true # if we get here - test success
41
+ end
42
+
43
+ end # class TestRubyGems
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubycat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-30 00:00:00.000000000 Z
11
+ date: 2015-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: catalogdb
@@ -98,10 +98,12 @@ files:
98
98
  - lib/rubycat.rb
99
99
  - lib/rubycat/card.rb
100
100
  - lib/rubycat/catalog.rb
101
+ - lib/rubycat/service/rubygems.rb
101
102
  - lib/rubycat/version.rb
102
103
  - test/data/RUBY.md
103
104
  - test/helper.rb
104
105
  - test/test_reader.rb
106
+ - test/test_rubygems.rb
105
107
  - test/test_version.rb
106
108
  homepage: https://github.com/textkit/rubycat
107
109
  licenses:
@@ -131,5 +133,6 @@ specification_version: 4
131
133
  summary: rubycat - ruby (library) catalog (cards) command line tool (using the catalog.db
132
134
  machinery)
133
135
  test_files:
136
+ - test/test_rubygems.rb
134
137
  - test/test_version.rb
135
138
  - test/test_reader.rb