gemstory 0.1.0.beta2 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0622838fa4fac5639133dc533fd7c54d3a7a82a17f1cbed58547675a892b52a5'
4
- data.tar.gz: 5a6a37f568a87c4ec3aebf479ca4d2029fb9181ad826e0bb2db5282cbf5ff977
3
+ metadata.gz: 66652c50f8e1074651114aad547f9d51cc32cb14b1b578ace9d33bb4a235920d
4
+ data.tar.gz: 2699c4d3c9bf92f8ce695e0ca42aef0ec5aa7b8f960a61954f3c04518935586d
5
5
  SHA512:
6
- metadata.gz: 0f63a83f5d336a9d938e35e9db75790e25c8da0085e3b45f808c46d1147f9b480ca30a4a773562f8540f0dfd2a9abd4a6c2782ef68e91bf1f1219c6f09782786
7
- data.tar.gz: c2e3cbc6e5581c3e85f7a55496090ee5238adc453178f3cbf2d7f8b5159d3ba3b717e62699ff1a92270a1e7ceb2b8709a0eb192bd370eb19bbab79042bb77b61
6
+ metadata.gz: 4d51b6e2eefc119be82487cabcc4767a09b7dffd78306b73c8b57d58fb0a188ac8e9fda24124e9de15777f7e46645dea42f38fa54822eb0efe191f6d097e8695
7
+ data.tar.gz: 05cd3ce1949cd798cdee608c2a84b41ae1778404c0dd490fe4a2d400730814a5cfcd9893a2cbc1be6d3a86382af10d1125697519c046efff94dae702686d7fbf
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gemstory (0.1.0.beta1)
4
+ gemstory (0.1.0.beta3)
5
5
  thor (~> 0.20.0)
6
6
 
7
7
  GEM
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  # spec.bindir = "exe"
32
32
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
33
33
  #spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
34
- spec.require_paths = ["lib"]
34
+ spec.require_paths = ['lib']
35
35
 
36
36
  spec.add_runtime_dependency 'thor', '~> 0.20.0'
37
37
 
@@ -1,4 +1,6 @@
1
1
  require 'gemstory/version'
2
2
  require 'gemstory/reader'
3
- require 'gemstory/printer'
3
+ require 'gemstory/printer/helpers'
4
+ require 'gemstory/printer/horizontal'
5
+ require 'gemstory/printer/vertical'
4
6
  require 'gemstory/cli'
@@ -2,16 +2,25 @@ require 'thor'
2
2
 
3
3
  module Gemstory
4
4
  class Cli < Thor
5
- attr_reader :history
5
+ attr_reader :history, :printer
6
6
 
7
7
  def initialize(argv)
8
- @history = Gemstory::Reader.new
8
+ @history = Reader.new(argv)
9
+
10
+ if argv.empty?
11
+ @printer = Printer::Horizontal
12
+ elsif argv.length == 1
13
+ @printer = Printer::Vertical
14
+ else
15
+ @printer = Printer::Horizontal
16
+ end
9
17
  end
10
18
 
11
19
  desc "execute", "Will print the history of your gems"
12
20
  def execute
13
21
  @history.call
14
- Gemstory::Printer.new(@history).call
22
+
23
+ @printer.new(@history).call
15
24
  end
16
25
  end
17
26
  end
@@ -0,0 +1,25 @@
1
+ module Gemstory
2
+ module Printer
3
+ module Helpers
4
+ def compare_version(current_version, last_version)
5
+ last_version = Gem::Version.new(last_version)
6
+ current_version = Gem::Version.new(current_version)
7
+
8
+ if last_version < current_version
9
+ :up
10
+ elsif last_version > current_version
11
+ :down
12
+ else
13
+ :same
14
+ end
15
+
16
+ rescue
17
+ :up
18
+ end
19
+
20
+ def status_code
21
+ { up: " \u2191 ", down: " \u2193 ", next: " \u2192 " }
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,41 @@
1
+ module Gemstory
2
+ module Printer
3
+ class Horizontal
4
+ include Helpers
5
+
6
+ attr_reader :history
7
+
8
+ def initialize(history)
9
+ @history = history
10
+ end
11
+
12
+ def call
13
+ @history.history.sort.each do |name, changes|
14
+ print "#{name}"
15
+
16
+ (@history.max_gem_name_size - name.to_s.length).times { print ' ' }
17
+
18
+ print ": "
19
+
20
+ changes.each do |change|
21
+ version_status = :up
22
+
23
+ unless changes.index(change).zero?
24
+ print status_code[:next]
25
+
26
+ current_version = change[:version]
27
+ last_version = changes[changes.index(change) - 1][:version]
28
+ version_status = compare_version(current_version, last_version)
29
+ end
30
+
31
+ date_string = change[:date].strftime('%d.%m.%Y')
32
+
33
+ print "#{change[:version]}#{status_code[version_status]}(#{date_string})"
34
+ end
35
+
36
+ puts ' '
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,39 @@
1
+ module Gemstory
2
+ module Printer
3
+ class Vertical
4
+ include Helpers
5
+
6
+ attr_reader :history
7
+
8
+ def initialize(history)
9
+ @history = history
10
+ end
11
+
12
+ def call
13
+ if @history.history.empty?
14
+ puts 'Requested gem dosent exist in the Gemfile.lock'
15
+ else
16
+ gem_name = @history.history.first.first
17
+ commits = @history.history.first.last
18
+
19
+ puts gem_name
20
+ puts ' '
21
+
22
+ commits.each do |commit|
23
+ version_status = :up
24
+
25
+ unless commits.index(commit).zero?
26
+ current_version = commit[:version]
27
+ last_version = commits[commits.index(commit) - 1][:version]
28
+ version_status = compare_version(current_version, last_version)
29
+ end
30
+
31
+ date_string = commit[:date].strftime('%d.%m.%Y')
32
+
33
+ puts "#{status_code[version_status]} #{commit[:version]} #{date_string} #{commit[:commit]} #{commit[:author]}"
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -3,39 +3,19 @@ require 'date'
3
3
  module Gemstory
4
4
  class Reader
5
5
  attr_reader :logs, :line, :date, :max_gem_name_size,
6
- :commit, :section, :history, :dates, :log_count
6
+ :commit, :history, :author, :requested_gems
7
7
 
8
- SECTIONS = %w[GEM PLATFORMS DEPENDENCIES BUNDLED\ WITH].freeze
9
-
10
- def initialize
11
- @dates = []
8
+ def initialize(gems = [])
9
+ @requested_gems = gems
12
10
  @max_gem_name_size = 0
13
- @logs = `git log --reverse --follow -p -- Gemfile.lock`
14
- @log_count = `git rev-list --all --count Gemfile.lock`
15
- @history = {}
16
- end
17
-
18
- def compare_version(gem_name, version)
19
- return :up if @history[gem_name].empty?
20
-
21
- last_version = Gem::Version.new(@history[gem_name].last[:version])
22
- current_version = Gem::Version.new(version)
23
11
 
12
+ puts 'Reading Gemfile.lock history'
13
+ @logs = `git log --reverse --follow -p -- Gemfile.lock`
24
14
 
25
- if last_version < current_version
26
- :up
27
- elsif last_version > current_version
28
- :down
29
- else
30
- false
31
- end
32
-
33
- rescue
34
- :up
15
+ @history = {}
35
16
  end
36
17
 
37
18
  def add_line
38
- return unless gem?
39
19
  ruby_gem = line.slice(1, 1000)
40
20
  tab_length = ruby_gem[/\A */].size
41
21
 
@@ -45,26 +25,23 @@ module Gemstory
45
25
  gem_name_part = ruby_gem.match(/(.*)(?= \()/)
46
26
 
47
27
  if gem_name_part
48
- gem_name = gem_name_part[0]
28
+ gem_name = gem_name_part[0]
49
29
  version = ruby_gem.match(/(?<=\()(.*?)(?=\))/)[0]
50
30
  else
51
31
  gem_name = ruby_gem
52
32
  version = nil
53
33
  end
54
34
 
55
- @max_gem_name_size = gem_name.length if gem_name.length > @max_gem_name_size
35
+ unless @requested_gems.empty?
36
+ return unless @requested_gems.include? gem_name
37
+ end
56
38
 
57
- version_status = compare_version(gem_name.to_sym, version)
58
-
59
- return unless version_status
39
+ @max_gem_name_size = gem_name.length if gem_name.length > @max_gem_name_size
60
40
 
61
41
  @history[gem_name.to_sym] ||= []
62
42
 
63
43
  @history[gem_name.to_sym] << { date: @date, commit: @commit,
64
- version: version, change: version_status,
65
- hierarchy: tab_length }
66
-
67
- @history[gem_name.to_sym] = @history[gem_name.to_sym].sort_by { |changes| changes[:date] }
44
+ version: version, author: @author }
68
45
  end
69
46
 
70
47
  def gem?
@@ -75,54 +52,65 @@ module Gemstory
75
52
  @line.match(/^\+ /)
76
53
  end
77
54
 
78
- def date?
79
- matches = @line.match(/(?<=^Date: )(.*)/)
55
+ def author?
56
+ matches = @line.match(/(?<=^Author: )(.*)/)
80
57
 
81
58
  if matches
82
- @date = Date.parse(matches[0])
83
- @dates << @date
59
+ @author = matches[0]
84
60
  true
85
61
  else
86
62
  false
87
63
  end
88
64
  end
89
65
 
90
- def commit?
91
- matches = @line.match(/(?<=^commit )(.*)/)
66
+ def date?
67
+ matches = @line.match(/(?<=^Date: )(.*)/)
92
68
 
93
69
  if matches
94
- @commit = matches[0]
70
+ @date = Date.parse(matches[0])
95
71
  true
96
72
  else
97
73
  false
98
74
  end
99
75
  end
100
76
 
101
- def section?
102
- sections = SECTIONS.map { |section| section if line.include? section }.compact
103
-
104
- unless sections.empty?
105
- @section = sections.first
77
+ def commit?
78
+ matches = @line.match(/(?<=^commit )(.*)/)
79
+
80
+ if matches
81
+ @commit = matches[0]
106
82
  true
107
83
  else
108
84
  false
109
85
  end
110
86
  end
111
87
 
112
- def categorize
113
- section
114
- end
115
-
116
88
  def call
117
- puts 'Reading Gemfile.lock history'
89
+ puts 'Processing history'
90
+ puts ''
91
+
118
92
  @logs.each_line do |line|
119
93
  @line = line.strip
120
94
 
121
95
  next if commit?
122
96
  next if date?
97
+ next if author?
123
98
 
124
- add_line if new_line?
99
+ add_line if new_line? && gem?
125
100
  end
101
+
102
+ @history.each do |gem_name, commits|
103
+ sorted_commits = commits.sort_by { |commit| commit[:date] }
104
+
105
+ @history[gem_name] = sorted_commits.each_with_index.map do |commit, index|
106
+ if index.zero?
107
+ commit
108
+ else
109
+ commit unless commit[:version] == sorted_commits[index - 1][:version]
110
+ end
111
+ end.compact
112
+ end
113
+
126
114
  end
127
115
  end
128
116
  end
@@ -1,3 +1,3 @@
1
1
  module Gemstory
2
- VERSION = "0.1.0.beta2"
2
+ VERSION = '0.1.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemstory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.beta2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edwin Rozario
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-20 00:00:00.000000000 Z
11
+ date: 2018-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -102,7 +102,9 @@ files:
102
102
  - gemstory.gemspec
103
103
  - lib/gemstory.rb
104
104
  - lib/gemstory/cli.rb
105
- - lib/gemstory/printer.rb
105
+ - lib/gemstory/printer/helpers.rb
106
+ - lib/gemstory/printer/horizontal.rb
107
+ - lib/gemstory/printer/vertical.rb
106
108
  - lib/gemstory/reader.rb
107
109
  - lib/gemstory/version.rb
108
110
  homepage: https://github.com/EdwinRozario/gemstory
@@ -121,9 +123,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
121
123
  version: '0'
122
124
  required_rubygems_version: !ruby/object:Gem::Requirement
123
125
  requirements:
124
- - - ">"
126
+ - - ">="
125
127
  - !ruby/object:Gem::Version
126
- version: 1.3.1
128
+ version: '0'
127
129
  requirements: []
128
130
  rubyforge_project:
129
131
  rubygems_version: 2.7.3
@@ -1,33 +0,0 @@
1
- module Gemstory
2
- class Printer
3
- attr_reader :history
4
-
5
- STATUS_CODE = { up: " \u2191 ", down: " \u2193 ", next: " \u2192 " }
6
-
7
- def initialize(history)
8
- @history = history
9
- end
10
-
11
- def call
12
- @history.history.sort.each do |name, changes|
13
- print "#{name}"
14
-
15
- (@history.max_gem_name_size - name.to_s.length).times { print ' ' }
16
-
17
- print ": "
18
-
19
- changes.each do |change|
20
- date_string = change[:date].strftime('%d.%m.%Y')
21
-
22
- unless changes.index(change).zero?
23
- print STATUS_CODE[:next]
24
- end
25
-
26
- print "#{change[:version]}#{STATUS_CODE[change[:change]]}(#{date_string})"
27
- end
28
-
29
- puts ' '
30
- end
31
- end
32
- end
33
- end