gemverse 0.0.1 → 0.1.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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -10
  3. data/Rakefile +8 -1
  4. data/lib/gemverse/timeline.rb +100 -17
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69db10da33808ff62ca728d7ada452de1283a465d9fbbce8b9919d88f976a9b4
4
- data.tar.gz: 1554b1c90f9c0e467bee55f2e98eff8ffae13e3b2090d8bd5bb21ab86b81b645
3
+ metadata.gz: fc5e183ec26ff8c35abfc0b6ed6e5bc9601dd8da9ae34fb9d7d12707145481a2
4
+ data.tar.gz: 56f2a4bb1b6ed29296fde5660cc7848babbd01b629794b00449769af27556180
5
5
  SHA512:
6
- metadata.gz: 4d640f9f26100ae1646431670fa275bf267bb9ab88727d754e0c3efffaa29c74c2ea1136da0516908de48020aead49e38aed93780a917c85c04361e84ac3b518
7
- data.tar.gz: 5fbf83a842f797c19b8054aa1b86c3891650bf5a1a6e9bb85dda0371755713fe38d0321db4c653a70951f72e64c5017eea6e831158d4ac1b6c2fdfdf4346ef38
6
+ metadata.gz: 40617aa75c1023d6a0ea8ac96985e2181115c24dd7ebed6d78b8d73cb9629c67f1f0f1a35682d9f17afec77efc9ff1205d92e2d70ab2bf672fe70c62d0d0a9aa
7
+ data.tar.gz: 75b0cd17afeeca3b83a5fc398c4896a644d07d033f01c128d117aa5ef539a50621197b047549ba7bc2356ecf44f4d3b3712718bcdee3f6adffdd09847de91e2d
data/README.md CHANGED
@@ -26,12 +26,16 @@ that returns data(sets) in the JSON format:
26
26
  require 'gemverse'
27
27
 
28
28
  ## get all gems owned by the author with the handle / known as gettalong
29
+ # same as https://rubygems.org/api/v1/owners/gettalong/gems.json
29
30
  data = Gems::API.gems_by( 'gettalong' )
30
- # same as https://rubygems.org/api/v1/owners/gettalong/gems.json
31
+ puts " #{data.size} record(s)"
32
+ #=> 24 record(s)
31
33
 
32
34
  ## get all versions of the hexapdf gem
35
+ # same as https://rubygems.org/api/v1/versions/hexpdf.json"
33
36
  data = Gems::API.versions( 'hexapdf' )
34
- # same as https://rubygems.org/api/v1/versions/hexpdf.json"
37
+ puts " #{data.size} record(s)"
38
+ #=> 71 record(s)
35
39
 
36
40
  #...
37
41
  ```
@@ -53,9 +57,10 @@ cache = Gems::Cache.new( './cache' )
53
57
 
54
58
  gems = Gems.find_by( owner: 'gettalong' )
55
59
  puts " #{gems.size} record(s)"
60
+ #=> 24 record(s)
56
61
 
57
62
  ## bonus: save gems in a "flat" tabular datafile using the comma-separated values (.csv) format
58
- gems.export( './profile/gettalong/gems.csv' )
63
+ gems.export( './profiles/gettalong/gems.csv' )
59
64
 
60
65
  ## fetch all gem versions and (auto-save)
61
66
  ## in a "flat" tabular datafile (e.g. <gem>/versions.csv)
@@ -70,15 +75,17 @@ cache.update_versions( gems: gems )
70
75
  ``` ruby
71
76
  cache = Gems::Cache.new( './gems' )
72
77
 
73
- gems = read_csv( './profile/gettalong/gems.csv' )
78
+ gems = read_csv( './profiles/gettalong/gems.csv' )
74
79
  puts " #{gems.size} record(s)"
80
+ #=> 24 record(s)
75
81
 
76
82
  versions = cache.read_versions( gems: gems )
77
83
  puts " #{versions.size} record(s)"
84
+ #=> 238 record(s)
78
85
 
79
86
  timeline = Gems::Timeline.new( versions,
80
87
  title: "Thomas Leitner's Timeline" )
81
- timeline.save( "./profile/gettalong/README.md" )
88
+ timeline.save( "./profiles/gettalong/README.md" )
82
89
  ```
83
90
 
84
91
 
@@ -94,7 +101,7 @@ gems.
94
101
  ``` ruby
95
102
  cache = Gems::Cache.new( './cache' )
96
103
 
97
- gems = read_csv( './collection/cocos.csv' )
104
+ gems = read_csv( './collections/cocos.csv' )
98
105
  puts " #{gems.size} record(s)"
99
106
 
100
107
  versions = cache.read_versions( gems: gems )
@@ -102,18 +109,27 @@ puts " #{versions.size} record(s)"
102
109
 
103
110
  timeline = Gems::Timeline.new( versions,
104
111
  title: 'Ruby Code Commons (COCOS) Timeline' )
105
- timeline.save( "./collection/cocos/README.md" )
112
+ timeline.save( "./collections/cocos/README.md" )
106
113
  ```
107
114
 
108
115
  That's it.
109
116
 
110
117
 
118
+
111
119
  See
112
- [Thomas Leitner's Timeline](samples/gems_gettalong),
113
- [Jan Lelis's Timeline](samples/gems_janlelis),
114
- [Ruby Code Commons (COCOS) Timeline](samples/gems_cocos), and some more
120
+ [Thomas Leitner's Timeline](https://github.com/rubycocos/gems/tree/master/profiles/gettalong),
121
+ [Jan Lelis's Timeline](https://github.com/rubycocos/gems/tree/master/profiles/janlelis),
122
+ [Ruby Code Commons (COCOS) Timeline](https://github.com/rubycocos/gems/tree/master/collections/cocos), and some more
115
123
  for some real-world timeline samples.
116
124
 
125
+ Or the [Gerald Bauer's Gem Timeline (By Week) - 244 Gems, 1652 Updates](https://geraldb.github.io/gems/) page.
126
+
127
+ Or the gems leaderboard at the [Vienna.rb / Wien.rb - Ruby Meetup / Stammtisch in Vienna, Austria](https://viennarb.github.io/) page.
128
+
129
+
130
+
131
+ Yes, you can. [Tell us about your gem timeline / leaderboard sample(s) »](https://github.com/rubycocos/git/issues).
132
+
117
133
 
118
134
 
119
135
  ## License
data/Rakefile CHANGED
@@ -1,8 +1,15 @@
1
1
  require 'hoe'
2
2
 
3
+ ###
4
+ # hack/ quick fix for broken intuit_values - overwrite with dummy
5
+ class Hoe
6
+ def intuit_values( input ); end
7
+ end
8
+
9
+
3
10
  Hoe.spec 'gemverse' do
4
11
 
5
- self.version = '0.0.1' # note: for now add version inline
12
+ self.version = '0.1.1' # note: for now add version inline
6
13
 
7
14
  self.summary = "gemverse gem - gem universe incl. rubygems API V1 wrapper lite; gem version cache, gem timeline reports, 'n' more"
8
15
  self.description = summary
@@ -13,40 +13,68 @@ class Timeline
13
13
  end
14
14
 
15
15
 
16
- def save( path )
17
- buf = build
16
+ def save( path, title: nil )
17
+ buf = build_by_month( title: title )
18
18
  write_text( path, buf )
19
19
  end
20
20
 
21
21
 
22
- def build
23
- ## step 1 - build document model - versions by year & week
24
- ## and split into new & update
25
- model = {}
26
-
27
- @versions.each do |rec|
22
+ def _gems_by_month
23
+ model = {}
24
+ @versions.each do |rec|
28
25
 
29
26
  date = Date.strptime( rec['created'], '%Y-%m-%d' )
30
- year = date.year.to_s
31
- week = date.strftime('%V') ## note: return zero-padded string e.g. 01, 02, etc.
27
+ year = date.year.to_s
28
+ month = date.strftime('%m') ## note: return zero-padded string e.g. 01, 02, etc.
32
29
 
33
- by_year = model[ year ] ||= {}
34
- by_week = by_year[ week ] ||= { 'new' => [],
35
- 'updated' => [] }
30
+ by_year = model[ year ] ||= {}
31
+ by_month = by_year[ month ] ||= { 'new' => [],
32
+ 'updated' => [] }
36
33
 
37
34
  if rec['count'].to_i == 1
38
- by_week[ 'new' ] << rec
35
+ by_month[ 'new' ] << rec
39
36
  else
40
- by_week[ 'updated' ] << rec
37
+ by_month[ 'updated' ] << rec
41
38
  end
42
39
  end
40
+ model
41
+ end
42
+
43
+
44
+ def _gems_by_week
45
+ model = {}
46
+ @versions.each do |rec|
47
+
48
+ date = Date.strptime( rec['created'], '%Y-%m-%d' )
49
+ year = date.year.to_s
50
+ week = date.strftime('%V') ## note: return zero-padded string e.g. 01, 02, etc.
51
+
52
+ by_year = model[ year ] ||= {}
53
+ by_week = by_year[ week ] ||= { 'new' => [],
54
+ 'updated' => [] }
55
+
56
+ if rec['count'].to_i == 1
57
+ by_week[ 'new' ] << rec
58
+ else
59
+ by_week[ 'updated' ] << rec
60
+ end
61
+ end
62
+ model
63
+ end
64
+
65
+
66
+
67
+ def build_by_week( title: 'Timeline' )
68
+ ## step 1 - build document model - versions by year & week
69
+ ## and split into new & update
70
+ model = _gems_by_week
43
71
 
44
72
  ## pp model
45
73
 
46
74
  ## step 2 - build document
47
75
 
48
76
  buf = String.new
49
- buf << "# Timeline \n\n"
77
+ buf << "# #{title} \n\n"
50
78
 
51
79
  ## add breadcrumps for years
52
80
  buf << model.keys.map do |year|
@@ -85,7 +113,62 @@ class Timeline
85
113
  end
86
114
 
87
115
  buf
88
- end # method build
116
+ end # method build_by_week
117
+
118
+
119
+
120
+ def build_by_month( title: 'Timeline' )
121
+ ## step 1 - build document model - versions by year & month
122
+ ## and split into new & update
123
+ model = _gems_by_month
124
+
125
+ ## pp model
126
+
127
+ ## step 2 - build document
128
+
129
+ buf = String.new
130
+ buf << "# #{title} \n\n"
131
+
132
+ ## add breadcrumps for years
133
+ buf << model.keys.map do |year|
134
+ "[#{year}](##{year})"
135
+ end.join( ' · ' )
136
+ buf << "\n\n"
137
+
138
+ ## add new gems by year
139
+ buf << "## New Gems By Year\n\n"
140
+
141
+ model.each do |year, by_month|
142
+ ## get totals for year
143
+ gems_new = by_month.values.reduce( [] ) do |acc,gems|
144
+ acc + gems['new']
145
+ end
146
+
147
+ buf << "**#{year}** - "
148
+
149
+ buf << if gems_new.size > 0
150
+ _build_gems_new( gems_new )
151
+ else
152
+ "Ø \n\n"
153
+ end
154
+ end
155
+
156
+
157
+ model.each do |year, by_month|
158
+ buf << "## #{year}\n\n"
159
+
160
+ by_month.each do |month, gems|
161
+ buf << "**Month #{month}**\n\n"
162
+
163
+ buf << _build_gems_new( gems['new'] )
164
+ buf << _build_gems_updated( gems['updated'] )
165
+ end
166
+ end
167
+
168
+ buf
169
+ end # method build_by_month
170
+
171
+
89
172
 
90
173
 
91
174
  def _build_gem( gem )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemverse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-20 00:00:00.000000000 Z
11
+ date: 2023-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocos