pinfo-rails 0.1.2

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 (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/pinfo +5 -0
  3. data/lib/pinfo-rails.rb +213 -0
  4. metadata +60 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bc5f098badf2e938684903e92faa611b7ba63a50
4
+ data.tar.gz: 85eedea1f0dcc2bfa9538f143b76f50b5c030c4f
5
+ SHA512:
6
+ metadata.gz: def8e089d956281cd0a60eace8194f23cba99ced65dea406f2a05b7f1587e8fedf0b409ae7afd90dd544c6c947ff3fcff8a19708fc52aa801912e324ce168a55
7
+ data.tar.gz: aa62b796e59a7c8d87d5ea43ec826726e85db61d2f3e02b4e15202e4f48eef3b5ec1f7559b53de3b2c11b98a54b2a2f3940a2985833c41d798262d6b5fc21b2b
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pinfo-rails'
4
+
5
+ puts PinfoRails::PinfoRails.info( ARGV )
@@ -0,0 +1,213 @@
1
+ # coding: utf-8
2
+ require 'colorize'
3
+ require 'optparse'
4
+ require 'ostruct'
5
+ require 'yaml'
6
+
7
+ module PinfoRails
8
+ NAME = 'pinfo-rails'.freeze
9
+ DATE = '2016-10-08'.freeze
10
+ INFO = 'Rails project info'.freeze
11
+ DESC = 'A gem to collect informations from a Rails project'.freeze
12
+ AUTHORS = [ [ 'Mattia Roccoberton', 'mat@blocknot.es', 'http://blocknot.es' ] ].freeze
13
+ VERSION = [ 0, 1, 2 ].freeze
14
+
15
+ FILES = {
16
+ conf_db: 'config/database.yml',
17
+ conf_env_dev: 'config/environments/development.rb',
18
+ conf_env_stag: 'config/environments/staging.rb',
19
+ conf_env_prod: 'config/environments/production.rb',
20
+ conf_dep: 'config/deploy.rb',
21
+ conf_dep_stag: 'config/deploy/staging.rb',
22
+ conf_dep_prod: 'config/deploy/production.rb',
23
+ gemfile: 'Gemfile'
24
+ }.freeze
25
+ PATTERNS = {
26
+ cache: /config.cache_classes.*/,
27
+ deploy_info: /branch\s*,.*|user\s*,.*|domain\s*,.*|server[^,]+/,
28
+ deploy_tool: /'capistrano'|"capistrano|'capistrano-rails'|"capistrano-rails"|'mina'|"mina"/,
29
+ deploy_user: /user.*/,
30
+ rails: /'rails'.*|"rails".*/
31
+ }.freeze
32
+
33
+ # pinfo-rails: A gem to collect informations from a Rails project
34
+ class PinfoRails
35
+ # main method
36
+ def self.info( args )
37
+ @conf = {}
38
+ @options = optparse( args )
39
+
40
+ @output = ''
41
+ @output += "[verbose mode]\n" if @options[:verbose]
42
+ if @options[:conf]
43
+ @output += "[with config: #{@options[:conf]}]\n"
44
+ if File.exist? @options[:conf]
45
+ lines = File.read( @options[:conf] ).split( "\n" ).reject { |l| l =~ /^\s*$|^\s*#.*$/ }.map { |l| "--#{l.strip}" }
46
+ @options = optparse( lines )
47
+ else
48
+ puts 'ERR: file not found'
49
+ exit
50
+ end
51
+ end
52
+
53
+ # Ruby version
54
+ printline( 'Ruby', { color: :green, mode: :bold }, RUBY_VERSION, @options[:verbose] ? 'p' + RUBY_PATCHLEVEL.to_s : nil )
55
+ # Rails version
56
+ printline( 'Rails', { color: :green, mode: :bold }, grep( FILES[:gemfile], PATTERNS[:rails] ) )
57
+ check_database
58
+ check_requirements
59
+ check_cache
60
+ check_deploy
61
+
62
+ @output
63
+ end
64
+
65
+ # support methods
66
+
67
+ def self.check_cache
68
+ if @options.info[:cache]
69
+ @output += "\n"
70
+ printline( 'Development', :cyan, grep( FILES[:conf_env_dev], PATTERNS[:cache] ) )
71
+ printline( 'Staging ', :yellow, grep( FILES[:conf_env_stag], PATTERNS[:cache] ) )
72
+ printline( 'Production ', :red, grep( FILES[:conf_env_prod], PATTERNS[:cache] ) )
73
+ end
74
+ end
75
+
76
+ def self.check_database
77
+ if File.exist? FILES[:conf_db]
78
+ if @options[:verbose]
79
+ printline FILES[:conf_db], {}, ' '
80
+ @output += cat FILES[:conf_db]
81
+ else
82
+ content = YAML.load_file( FILES[:conf_db] ) rescue nil
83
+ if content.nil?
84
+ @output += "ERR: invalid YAML file: #{FILES[:conf_db]}"
85
+ elsif content['development']
86
+ printline( 'DB (development)', :cyan, content['development']['adapter'], content['development']['database'] )
87
+ end
88
+ end
89
+ end
90
+ end
91
+
92
+ def self.check_deploy
93
+ if @options.info[:deploy]
94
+ @output += "\n"
95
+ printline( 'Deploy tool', { color: :green, mode: :bold }, grep( FILES[:gemfile], PATTERNS[:deploy_tool] ) )
96
+ if @options[:verbose]
97
+ printline FILES[:conf_dep], {}, ' '
98
+ @output += cat FILES[:conf_dep]
99
+ else
100
+ printline( 'Deploy user', :green, grep( FILES[:conf_dep], PATTERNS[:deploy_user] ) )
101
+ end
102
+ printline( 'Staging ', :yellow, grep( FILES[:conf_dep_stag], PATTERNS[:deploy_info] ) )
103
+ printline( 'Production ', :red, grep( FILES[:conf_dep_prod], PATTERNS[:deploy_info] ) )
104
+ end
105
+ end
106
+
107
+ def self.check_requirements
108
+ @options.reqs.split( ',' ).each do |req|
109
+ printline( 'Required', :blue, grep( FILES[:gemfile], Regexp.new( "['|\"][^'\"]*#{req}[^'\"]*['|\"]" ) ) )
110
+ end
111
+ end
112
+
113
+ def self.cat( file )
114
+ lines = []
115
+ if File.exist? file
116
+ File.read( file ).each_line do |line|
117
+ lines.push( line.rstrip ) unless line.strip =~ /^$|^#.*$/
118
+ end
119
+ lines.push( '' )
120
+ end
121
+ lines.join( "\n" )
122
+ end
123
+
124
+ def self.grep( file, expression )
125
+ lines = []
126
+ if File.exist? file
127
+ File.read( file ).each_line do |line|
128
+ lines.push( Regexp.last_match ) if !( line.strip =~ /^#.*$/ ) && line =~ expression
129
+ end
130
+ end
131
+ ( lines.length > 1 ? "\n " : '' ) + lines.join( "\n " )
132
+ end
133
+
134
+ def self.printline( intro, styles, *strings )
135
+ cnt = strings.reject { |s| s.nil? || s.empty? }.length
136
+ return unless cnt > 0
137
+ @output += '- ' + intro + ': '
138
+ @output += @options[:styles] ? strings.compact.map( &:to_s ).join( ', ' ).colorize( styles ) : strings.compact.map( &:to_s ).join( ', ' )
139
+ @output += "\n"
140
+ end
141
+
142
+ def self.optparse( args )
143
+ options = OpenStruct.new
144
+ options.library = []
145
+ options.inplace = false
146
+ options.encoding = 'utf8'
147
+ options.transfer_type = :auto
148
+ options.conf = nil
149
+ options.reqs = ''
150
+ options.styles = true
151
+ options.verbose = false
152
+ options.info = {
153
+ cache: true,
154
+ deploy: true
155
+ }
156
+
157
+ begin
158
+ opt_parser = OptionParser.new do |opts|
159
+ opts.banner = 'Usage: pinfo [options]'
160
+
161
+ opts.separator ''
162
+ opts.separator 'Specific options:'
163
+
164
+ opts.on('-cCONF', '--config=CONF', 'Config file') do |v|
165
+ options.conf = v
166
+ end
167
+ opts.on('-v', '--[no-]verbose', 'Run verbosely') do |v|
168
+ options.verbose = v
169
+ end
170
+ opts.separator ''
171
+ opts.on('-s', '--[no-]styles', 'With styles and colors (default)') do |v|
172
+ options.styles = v
173
+ end
174
+ opts.on('-rREQS', '--required=REQS', 'Search for specific gems') do |v|
175
+ options.reqs = v
176
+ end
177
+ opts.on('--[no-]cache', 'Show cache info') do |v|
178
+ options.info[:cache] = v
179
+ end
180
+ opts.on('--[no-]deploy', 'Show deploy info') do |v|
181
+ options.info[:deploy] = v
182
+ end
183
+
184
+ opts.separator ''
185
+ opts.separator 'Common options:'
186
+
187
+ opts.on_tail('-h', '--help', 'Show this message') do
188
+ puts opts
189
+ exit
190
+ end
191
+ opts.on_tail('--about', 'Show about') do
192
+ puts INFO + ' v' + VERSION.join('.') + "\n" + DESC + "\nby " + AUTHORS.first.join( ', ' )
193
+ exit
194
+ end
195
+ opts.on_tail('--version', 'Show version') do
196
+ puts VERSION.join('.')
197
+ exit
198
+ end
199
+ end
200
+ if File.exist? File.expand_path '~/.pinfo-rails.conf'
201
+ # global configuration
202
+ lines = File.read( File.expand_path( '~/.pinfo-rails.conf' ) ).split( "\n" ).reject { |l| l =~ /^\s*$|^\s*#.*$/ }.map { |l| "--#{l.strip}" }
203
+ opt_parser.parse!( lines )
204
+ end
205
+ opt_parser.parse!( args )
206
+ rescue Exception => e
207
+ puts 'ERR: ' + e.message
208
+ exit
209
+ end
210
+ options
211
+ end
212
+ end
213
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pinfo-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Mattia Roccoberton
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.8.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.8.0
27
+ description: A gem to collect informations from a Rails project
28
+ email: mat@blocknot.es
29
+ executables:
30
+ - pinfo
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - bin/pinfo
35
+ - lib/pinfo-rails.rb
36
+ homepage: http://rubygems.org/gems/pinfo-rails
37
+ licenses:
38
+ - MIT
39
+ metadata: {}
40
+ post_install_message:
41
+ rdoc_options: []
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 2.4.8
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: Rails project info
60
+ test_files: []