cobradeps 0.1.1 → 0.2.1

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: 995be0ba3bdb1d3cdcae0a097b800a46534db785
4
- data.tar.gz: c338653327cf27c0ae37d6e683d53744f5b4ce18
3
+ metadata.gz: 6a9c8b4c793f5ec42669a805a30f7009afe7b21d
4
+ data.tar.gz: e1a3483db3d315cf506d9f8f8e4bcda2c2ddcc62
5
5
  SHA512:
6
- metadata.gz: 5efcc9f3c41d77dfa4a04a0a9361c01f2b6b7ea4025b913be9b4556c1840b4e45b380b6983b8f868f2dab8c6d009a8f38797a27167e46e537f3ee7d9fa6657a6
7
- data.tar.gz: bd4b369f022a5999f61f9c7507155baec464dbfd511fd92848b56369e614c241eb254054e31e8c7e26dc583974aff862537800a5c63729a9f7f8915ff6dcd79a
6
+ metadata.gz: c409d6abcc223fb5ac10b74bc034a2c73d3b7e7b4509bc8f513bae0c9a333fbc6bcdcb044c682099e5ef7d7cde1b143e3f9d835c0d3fcb7f053c1fdf73522e4f
7
+ data.tar.gz: d488aa0db1af3ac1a164eec3b675fa1d21d2eeb0d5a80c30bb92c7d723482999e1a31eae33bbd1d4c2a6dbd648cce05ac89c3bf3b19312a3590a72f33401e8e1
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # cobradeps [![Build Status](https://travis-ci.org/shageman/cobradeps.svg?branch=master)](https://travis-ci.org/shageman/cobradeps) [![Gem Version](https://badge.fury.io/rb/cobradeps.svg)](http://badge.fury.io/rb/cobradeps) [![Code Climate](https://codeclimate.com/github/shageman/cobradeps.png)](https://codeclimate.com/github/shageman/cobradeps) [![Dependency Status](https://gemnasium.com/shageman/cobradeps.svg)](https://gemnasium.com/shageman/cobradeps)
2
2
 
3
- Prints and exports the dependencies within component-based Ruby/Rails applications (#cobra)
3
+ Prints and exports the dependencies within component-based Ruby/Rails applications (#cbra)
4
4
 
5
5
  ## Installation
6
6
 
@@ -15,6 +15,22 @@ And then execute:
15
15
  Or install it yourself as:
16
16
 
17
17
  $ gem install cobradeps
18
+
19
+ ### Dependencies
20
+
21
+ You need [Graphviz](http://graphviz.org/) to generate the graph.png
22
+
23
+ #### OS X
24
+
25
+ If you're using OS X and homebrew, you just need to:
26
+
27
+ ```bash
28
+ brew install graphviz
29
+ ```
30
+
31
+ #### Other Operating Systems
32
+
33
+ For more information about installation on other operating systems, just check [Graphviz Download Page](http://graphviz.org/Download..php)
18
34
 
19
35
  ## Usage
20
36
 
@@ -35,6 +51,20 @@ There are sample #cobra folder structures in `spec/examples`. Here is the graph
35
51
 
36
52
  ![Letters graph](https://raw.githubusercontent.com/shageman/cobradeps/master/spec/examples/letters.png)
37
53
 
54
+ ## Using `path "..." do` blocks
55
+ The preferred method of referencing #cbra dependencies is via the path block syntax supported by bundler(http://teotti.com/gemfiles-hierarchy-in-ruby-on-rails-component-based-architecture/):
56
+
57
+ path "../" do
58
+ gem "B"
59
+ gem "C"
60
+ gem "D"
61
+ gem "E1"
62
+ gem "E2"
63
+ gem "F"
64
+ end
65
+
66
+ Note, that you only need to add direct dependencies when using the block syntax (and not transitive dependencies as discussed below).
67
+
38
68
  ## #cobra extension to Gemfile
39
69
 
40
70
  The :path option used for #cobras is typically a relative path. Because of that all gems and apps transitively including a
data/cobradeps.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'cobradeps'
7
- spec.version = '0.1.1'
7
+ spec.version = '0.2.1'
8
8
  spec.authors = ['Stephan Hagemann']
9
9
  spec.email = ['stephan.hagemann@gmail.com']
10
10
  spec.summary = %q{Prints and exports the dependencies within component-based Ruby/Rails applications}
data/lib/cobradeps.rb CHANGED
@@ -13,14 +13,17 @@ module Cbradeps
13
13
  outputs app.to_s
14
14
 
15
15
  outputs "\n\nDEPENDENCIES"
16
- cobra_deps = app.transitive_cobra_dependencies.to_set
16
+ cobra_deps = app.cobra_dependencies.to_a
17
17
 
18
- cobra_deps.each do |dep|
18
+ i = 0
19
+ while (i < cobra_deps.size) do
20
+ dep = cobra_deps[i]
19
21
  outputs "\n#{dep[:options][:path]}"
20
22
  gem = GemfileScraper.new(dep[:options][:path])
21
23
  outputs gem.to_s
22
24
 
23
- cobra_deps = cobra_deps.merge gem.cobra_dependencies
25
+ cobra_deps += gem.cobra_dependencies
26
+ i+=1
24
27
  end
25
28
 
26
29
  outputs "\n\n ALL PARTS"
@@ -45,36 +48,47 @@ module Cbradeps
45
48
 
46
49
  def self.graph(path)
47
50
  g = GraphViz.new(:G, :type => :digraph, concentrate: true)
51
+ gem_nodes = {}
48
52
 
49
53
  app = GemfileScraper.new(path)
50
54
 
51
55
  app_node = g.add_nodes(app.name)
52
- outputs "Added #{app.name} node"
56
+ gem_nodes[app.name] = app_node
57
+ outputs "Added #{app.name} app"
53
58
 
54
- cobra_deps = app.transitive_cobra_dependencies.to_set
55
- gem_nodes = {}
59
+ cobra_deps = app.cobra_dependencies.to_a
56
60
 
57
61
  cobra_deps.each do |dep|
58
62
  gem = GemfileScraper.new(dep[:options][:path])
59
- gem_node = g.add_nodes(gem.name)
60
- gem_nodes[gem.name] = gem_node
63
+ gem_nodes[gem.name] = g.add_nodes(gem.name)
61
64
  outputs "Added #{gem.name} node"
62
65
  if dep[:options][:direct]
63
66
  outputs "Added edge from #{app.name} to #{gem.name}"
64
- g.add_edges(app_node, gem_node)
67
+ g.add_edges(app_node, gem_nodes[gem.name])
65
68
  end
66
69
  end
67
70
 
68
- cobra_deps.each do |dep|
71
+ i = 0
72
+ while (i < cobra_deps.size) do
73
+ dep = cobra_deps[i]
69
74
  gem = GemfileScraper.new(dep[:options][:path])
70
- gem_node = gem_nodes[gem.name]
75
+ if !gem_nodes.has_key? gem.name
76
+ gem_nodes[gem.name] = g.add_nodes(gem.name)
77
+ outputs "Added #{gem.name} node"
78
+ end
71
79
 
72
80
  gem_cobra_deps = gem.cobra_dependencies
73
81
  gem_cobra_deps.each do |nest_dep|
74
82
  nest_gem = GemfileScraper.new(nest_dep[:options][:path])
75
- g.add_edges(gem_node, gem_nodes[nest_gem.name])
83
+ if !gem_nodes.has_key? nest_gem.name
84
+ gem_nodes[nest_gem.name] = g.add_nodes(nest_gem.name)
85
+ outputs "Added to #{nest_gem.name} node"
86
+ end
87
+ g.add_edges(gem_nodes[gem.name], gem_nodes[nest_gem.name])
76
88
  outputs "Added edge from #{gem.name} to #{nest_gem.name}"
77
89
  end
90
+ cobra_deps += gem.cobra_dependencies
91
+ i+=1
78
92
  end
79
93
  g
80
94
  end
@@ -19,6 +19,8 @@ module Cbradeps
19
19
  end
20
20
  end
21
21
 
22
+ private
23
+
22
24
  def transitive_cobra_dependencies
23
25
  gem_dependencies.inject([]) do |memo, dep|
24
26
  if !!dep[:options][:path]
@@ -30,8 +32,6 @@ module Cbradeps
30
32
  end
31
33
  end
32
34
 
33
- private
34
-
35
35
  def raw_gemspec
36
36
  path = File.expand_path(File.join(@root_path, "#{underscore(name)}.gemspec"))
37
37
  File.exist?(path) ? File.read(path) : ""
@@ -51,10 +51,20 @@ module Cbradeps
51
51
  end
52
52
 
53
53
  def gem_dependencies
54
+ in_path_block_dir = nil
54
55
  raw_gemfile.split("\n").inject([]) do |memo, line|
55
- match = line.match(/gem\s+["']([^'"]+)["'](.*)/)
56
- if match
57
- memo << {name: match[1], options: OptionParser.new(match[2]).parse}
56
+ if in_path_block_dir
57
+ if match = line.match(/gem\s+["']([^'"]+)["'](.*)/)
58
+ memo << {name: match[1], options: {path: "#{in_path_block_dir}/#{match[1]}", direct: true}}
59
+ elsif line.match(/end/)
60
+ in_path_block_dir = nil
61
+ end
62
+ else
63
+ if match = line.match(/gem\s+["']([^'"]+)["'](.*)/)
64
+ memo << {name: match[1], options: NonBlockOptionParser.new(match[2]).parse}
65
+ elsif match = line.match(/path\s+[\"\'\:]?([^\"\']*)[\"\']?\s+do/)
66
+ in_path_block_dir = match[1]
67
+ end
58
68
  end
59
69
  memo
60
70
  end
@@ -68,7 +78,7 @@ module Cbradeps
68
78
  downcase
69
79
  end
70
80
 
71
- class OptionParser
81
+ class NonBlockOptionParser
72
82
  def initialize(options)
73
83
  @options = options
74
84
  end
@@ -85,7 +95,7 @@ module Cbradeps
85
95
  end
86
96
 
87
97
  def direct
88
- match = @options.match(/direct(?:\s*=>|:)\s+true/)
98
+ match = @options.match(/group(?:\s*=>|:)\s+:direct/)
89
99
  match ? {direct: true} : {}
90
100
  end
91
101
  end
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cobradeps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephan Hagemann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-29 00:00:00.000000000 Z
11
+ date: 2015-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-graphviz
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.5'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.5'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description: |
@@ -76,14 +76,14 @@ executables:
76
76
  extensions: []
77
77
  extra_rdoc_files: []
78
78
  files:
79
- - bin/cobradeps
80
- - cobradeps.gemspec
81
79
  - Gemfile
82
- - lib/cobradeps/gemfile_scraper.rb
83
- - lib/cobradeps.rb
84
80
  - LICENSE
85
- - Rakefile
86
81
  - README.md
82
+ - Rakefile
83
+ - bin/cobradeps
84
+ - cobradeps.gemspec
85
+ - lib/cobradeps.rb
86
+ - lib/cobradeps/gemfile_scraper.rb
87
87
  homepage: https://github.com/shageman/cobradeps
88
88
  licenses:
89
89
  - MIT
@@ -94,17 +94,17 @@ require_paths:
94
94
  - lib
95
95
  required_ruby_version: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - '>='
97
+ - - ">="
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  required_rubygems_version: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - '>='
102
+ - - ">="
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  requirements: []
106
106
  rubyforge_project:
107
- rubygems_version: 2.0.3
107
+ rubygems_version: 2.4.6
108
108
  signing_key:
109
109
  specification_version: 4
110
110
  summary: Prints and exports the dependencies within component-based Ruby/Rails applications