diff_influence 0.3.0 → 0.4.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.
data/.diff-influence ADDED
@@ -0,0 +1,13 @@
1
+ ---
2
+ :commits: []
3
+ :search_directories:
4
+ - app
5
+ - lib
6
+ :search_extensions:
7
+ - rb
8
+ - ruby
9
+ :ignore_methods:
10
+ - new
11
+ - index
12
+ :os_grep: false
13
+ :debug: false
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
+ /.ruby-version
3
4
  /Gemfile.lock
4
5
  /_yardoc/
5
6
  /coverage/
data/README.md CHANGED
@@ -30,24 +30,48 @@ Or install it yourself as:
30
30
 
31
31
  ```
32
32
  ==============================================================================
33
- []: optional
33
+ []: optional(overrides .diff-influence)
34
34
 
35
35
  Usage: diff-influence [Options]
36
36
 
37
37
  Options:
38
38
 
39
- -c --commit commit_id,commit_id git commit id(s) uses diff (default: none)
40
- -p --path path,path,... path(s) to search file (default: app,lib)
41
- -e --ext extension,extension,... extension(s) to search file (default: rb)
42
- -g --grep use grep command with OS
43
- -d --debug print debugging information to console
39
+ -c --commit id1,id2,... git commit id(s) uses diff (default: none)
40
+ -d --dir dir1,dir2,... path(s) to search file (default: app,lib)
41
+ -e --ext ext1,ext2,... extension(s) to search file (default: rb)
42
+ -i --ignore method1,method2,... ignore methods (default: new, index)
43
+ -g --grep use grep command with OS
44
+ -P --print print config values
45
+ -D --debug print debugging information to console
44
46
 
45
47
  Feature Options:
46
48
 
47
- -o --output path to output file (default: STDOUT)
49
+ -o --output path to output file (default: STDOUT)
48
50
  ==============================================================================
49
51
  ```
50
52
 
53
+ ## Permanent Options ##
54
+
55
+ Diff Influence laad _.diff-influece_ file in the root of your repository
56
+ or home.
57
+
58
+ ```yaml
59
+ ---
60
+ :commits: []
61
+ :search_directories:
62
+ - app
63
+ - lib
64
+ :search_extensions:
65
+ - rb
66
+ :ignore_methods:
67
+ - new
68
+ - index
69
+ :os_grep: false
70
+ :debug: false
71
+ ```
72
+
73
+ You can display examples of _.diff-influence_ file definitions using the -P option.
74
+
51
75
  ## Authors ##
52
76
 
53
77
  [metalels](https://github.com/metalels)
data/bin/console CHANGED
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "diff_influence"
3
+ require 'bundler/setup'
4
+ require 'diff_influence'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
- if RUBY_VERSION < "1.9.0"
10
- require "irb"
9
+ if RUBY_VERSION < '2.0.0'
10
+ require 'irb'
11
11
  IRB.start
12
12
  else
13
- require "pry"
13
+ require 'pry'
14
14
  Pry.start
15
15
  end
@@ -1,6 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- src = File.read "lib/diff_influence/core.rb"
4
- src = src.gsub(/(\w+):\s/, ':\1 => ')
5
- src = src.gsub(/\.lines/, '.lines.to_a')
6
- File.write "lib/diff_influence/core_1x.rb", src
3
+ %w(lib/diff_influence/core.rb lib/diff_influence/config.rb).each do |src_file|
4
+ src = File.read src_file
5
+ src = src.gsub(/(\w+):\s/, ':\1 => ')
6
+ src = src.gsub(/\.lines/, '.lines.to_a')
7
+ File.write src_file.gsub('.rb', '_1x.rb'), src
8
+ src = nil
9
+ end
data/exe/diff-influence CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "diff_influence"
3
+ require 'diff_influence'
4
4
 
5
- DiffInfluence::Config.parse_options ARGV
5
+ DiffInfluence::Config.load_conf
6
+ DiffInfluence::Config.parse_args ARGV
6
7
  DiffInfluence::Core.exec
@@ -1,8 +1,9 @@
1
- require "diff_influence/version"
2
- require "diff_influence/config"
1
+ require 'diff_influence/version'
3
2
 
4
- if RUBY_VERSION < "2.0.0"
5
- require "diff_influence/core_1x"
6
- else
7
- require "diff_influence/core"
3
+ %w(config core).each do |src_name|
4
+ if RUBY_VERSION < '2.0.0'
5
+ require "diff_influence/#{src_name}_1x"
6
+ else
7
+ require "diff_influence/#{src_name}"
8
+ end
8
9
  end
@@ -1,5 +1,6 @@
1
1
  module DiffInfluence
2
2
  module Config
3
+ require 'yaml'
3
4
  require 'pathname'
4
5
  USAGE=<<-EOS
5
6
  ==============================================================================
@@ -9,15 +10,17 @@ Usage: diff_influence [Options]
9
10
 
10
11
  Options:
11
12
 
12
- -c --commit commit_id,commit_id git commit id(s) uses diff (default: none)
13
- -p --path path,path,... path(s) to search file (default: app,lib)
14
- -e --ext extension,extension,... extension(s) to search file (default: rb)
15
- -g --grep use grep command with OS
16
- -d --debug print debugging information to console
13
+ -c --commit id1,id2,... git commit id(s) uses diff (default: none)
14
+ -d --dir dir1,dir2,... path(s) to search file (default: app,lib)
15
+ -e --ext ext1,ext2,... extension(s) to search file (default: rb)
16
+ -i --ignore method1,method2,... ignore methods (default: new, index)
17
+ -g --grep use grep command with OS
18
+ -P --print print config values
19
+ -D --debug print debugging information to console
17
20
 
18
21
  Feature Options:
19
22
 
20
- -o --output path to output file (default: STDOUT)
23
+ -o --output path to output file (default: STDOUT)
21
24
  ==============================================================================
22
25
  EOS
23
26
 
@@ -36,52 +39,87 @@ Usage: diff_influence [Options]
36
39
  end
37
40
 
38
41
  def self.commits=(value)
39
- @@commits = value.split(",").map{|v| v.chomp.strip}
42
+ @@commits = self.flexible_value value
40
43
  end
41
44
 
42
- def self.search_paths
43
- @@search_paths ||= ["app", "lib"]
45
+ def self.search_directories
46
+ @@search_directories ||= %w(app lib)
44
47
  end
45
48
 
46
- def self.search_paths=(value)
47
- @@search_paths = value.split(",").map{|v| v.chomp.strip}
49
+ def self.search_directories=(value)
50
+ @@search_directories = self.flexible_value value
48
51
  end
49
52
 
50
53
  def self.search_extensions
51
- @@search_extensions ||= ["rb"]
54
+ @@search_extensions ||= %w(rb)
52
55
  end
53
56
 
54
57
  def self.search_extensions=(value)
55
- @@search_extensionss = value.split(",").map{|v| v.chomp.strip}
58
+ @@search_extensions = self.flexible_value value
56
59
  end
57
60
 
58
61
  def self.output
59
62
  @@output ||= nil
60
63
  end
61
64
 
65
+ def self.output=(value)
66
+ @@output = value
67
+ end
68
+
62
69
  def self.os_grep
63
70
  @@os_grep ||= false
64
71
  end
65
72
 
73
+ def self.os_grep=(value)
74
+ @@os_grep = value
75
+ end
76
+
66
77
  def self.debug
67
78
  @@debug ||= false
68
79
  end
69
80
 
70
- def self.parse_options(argv)
81
+ def self.debug=(value)
82
+ @@debug =value
83
+ end
84
+
85
+ def self.ignore_methods
86
+ @@ignore_methods ||= %w(new index)
87
+ end
88
+
89
+ def self.ignore_methods=(value)
90
+ @@ignore_methods = self.flexible_value value
91
+ end
92
+
93
+ def self.load_conf
94
+ ['.diff-influence', "#{File.expand_path("~")}/\.diff-influence"].each do |conf_file|
95
+ if File.exist? conf_file
96
+ puts "#{conf_file} reading..." if self.debug
97
+ self.load_conf_file conf_file
98
+ break
99
+ end
100
+ end
101
+ end
102
+
103
+ def self.parse_args(argv)
71
104
  while arg = argv.shift
72
105
  case arg
73
106
  when /\A--commit\z/, /\A-c\z/
74
107
  self.commits = argv.shift
75
- when /\A--path\z/, /\A-p\z/
76
- self.search_paths = argv.shift
108
+ when /\A--dir\z/, /\A-d\z/
109
+ self.search_directories = argv.shift
77
110
  when /\A--ext\z/, /\A-e\z/
78
111
  self.search_extensions = argv.shift
112
+ when /\A--ignore\z/, /\A-i\z/
113
+ self.ignore_methods = argv.shift
79
114
  when /\A--output\z/, /\A-o\z/
80
- @@output = argv.shift
115
+ self.output = argv.shift
81
116
  when /\A--grep\z/, /\A-g\z/
82
- @@os_grep = true
83
- when /\A--debug\z/, /\A-d\z/
84
- @@debug = true
117
+ self.os_grep = true
118
+ when /\A--debug\z/, /\A-D\z/
119
+ self.debug = true
120
+ when /\A--print\z/, /\A-P\z/
121
+ self.print
122
+ self.exit_with_message 0, false
85
123
  when /\A--help\z/, /\A-h\z/
86
124
  self.exit_with_message 0, true
87
125
  else
@@ -91,5 +129,60 @@ Usage: diff_influence [Options]
91
129
  end
92
130
  true
93
131
  end
132
+
133
+ def self.print
134
+ yaml_obj = {
135
+ commits: self.commits,
136
+ search_directories: self.search_directories,
137
+ search_extensions: self.search_extensions,
138
+ ignore_methods: self.ignore_methods,
139
+ os_grep: self.os_grep,
140
+ debug: self.debug
141
+ }
142
+ yaml_obj[:output] = self.output if self.output
143
+ puts <<-EOS
144
+ ======== Diff Influence Config ========
145
+ target commits: #{self.commits.inspect}
146
+ search directories: #{self.search_directories.inspect}
147
+ search extensions: #{self.search_extensions.inspect}
148
+ ignore methods: #{self.ignore_methods.inspect}
149
+ output file: #{self.output}
150
+ os grep mode: #{self.os_grep}
151
+ debug mode: #{self.debug}
152
+ =======================================
153
+
154
+ >>>>> sample .diff_influence
155
+ #{YAML.dump yaml_obj}
156
+ <<<<<
157
+ EOS
158
+ yaml_obj = nil
159
+ end
160
+
161
+ private
162
+ def self.flexible_value(value)
163
+ case value
164
+ when Array
165
+ value
166
+ when String
167
+ value.split(',').map{|v| v.chomp.strip}
168
+ else
169
+ nil
170
+ end
171
+ end
172
+
173
+ def self.load_conf_file(file_path)
174
+ if settings = YAML.load_file(file_path)
175
+ settings.each do |k, v|
176
+ self.send "#{k}=", v
177
+ end
178
+ end
179
+ rescue Errno::ENOENT
180
+ nil
181
+ rescue => e
182
+ puts e if self.debug
183
+ puts "Cant load config file #{file_path}"
184
+ exit 1
185
+ end
186
+
94
187
  end
95
188
  end
@@ -0,0 +1,186 @@
1
+ module DiffInfluence
2
+ module Config
3
+ require 'yaml'
4
+ require 'pathname'
5
+ USAGE=<<-EOS
6
+ ==============================================================================
7
+ []: optional
8
+
9
+ :Usage => diff_influence [Options]
10
+
11
+ :Options =>
12
+ -c --commit id1,id2,... git commit id(s) uses diff (:default => none)
13
+ -d --dir dir1,dir2,... path(s) to search file (:default => app,lib)
14
+ -e --ext ext1,ext2,... extension(s) to search file (:default => rb)
15
+ -i --ignore method1,method2,... ignore methods (:default => new, index)
16
+ -g --grep use grep command with OS
17
+ -P --print print config values
18
+ -D --debug print debugging information to console
19
+
20
+ Feature :Options =>
21
+ -o --output path to output file (:default => STDOUT)
22
+ ==============================================================================
23
+ EOS
24
+
25
+ def self.exit_with_message(code, usage=false, msg=nil)
26
+ puts msg unless msg.nil?
27
+ puts USAGE if usage
28
+ exit code
29
+ end
30
+
31
+ def self.root
32
+ @@root ||= Pathname.pwd
33
+ end
34
+
35
+ def self.commits
36
+ @@commits ||= []
37
+ end
38
+
39
+ def self.commits=(value)
40
+ @@commits = self.flexible_value value
41
+ end
42
+
43
+ def self.search_directories
44
+ @@search_directories ||= %w(app lib)
45
+ end
46
+
47
+ def self.search_directories=(value)
48
+ @@search_directories = self.flexible_value value
49
+ end
50
+
51
+ def self.search_extensions
52
+ @@search_extensions ||= %w(rb)
53
+ end
54
+
55
+ def self.search_extensions=(value)
56
+ @@search_extensions = self.flexible_value value
57
+ end
58
+
59
+ def self.output
60
+ @@output ||= nil
61
+ end
62
+
63
+ def self.output=(value)
64
+ @@output = value
65
+ end
66
+
67
+ def self.os_grep
68
+ @@os_grep ||= false
69
+ end
70
+
71
+ def self.os_grep=(value)
72
+ @@os_grep = value
73
+ end
74
+
75
+ def self.debug
76
+ @@debug ||= false
77
+ end
78
+
79
+ def self.debug=(value)
80
+ @@debug =value
81
+ end
82
+
83
+ def self.ignore_methods
84
+ @@ignore_methods ||= %w(new index)
85
+ end
86
+
87
+ def self.ignore_methods=(value)
88
+ @@ignore_methods = self.flexible_value value
89
+ end
90
+
91
+ def self.load_conf
92
+ ['.diff-influence', "#{File.expand_path("~")}/\.diff-influence"].each do |conf_file|
93
+ if File.exist? conf_file
94
+ puts "#{conf_file} reading..." if self.debug
95
+ self.load_conf_file conf_file
96
+ break
97
+ end
98
+ end
99
+ end
100
+
101
+ def self.parse_args(argv)
102
+ while arg = argv.shift
103
+ case arg
104
+ when /\A--commit\z/, /\A-c\z/
105
+ self.commits = argv.shift
106
+ when /\A--dir\z/, /\A-d\z/
107
+ self.search_directories = argv.shift
108
+ when /\A--ext\z/, /\A-e\z/
109
+ self.search_extensions = argv.shift
110
+ when /\A--ignore\z/, /\A-i\z/
111
+ self.ignore_methods = argv.shift
112
+ when /\A--output\z/, /\A-o\z/
113
+ self.output = argv.shift
114
+ when /\A--grep\z/, /\A-g\z/
115
+ self.os_grep = true
116
+ when /\A--debug\z/, /\A-D\z/
117
+ self.debug = true
118
+ when /\A--print\z/, /\A-P\z/
119
+ self.print
120
+ self.exit_with_message 0, false
121
+ when /\A--help\z/, /\A-h\z/
122
+ self.exit_with_message 0, true
123
+ else
124
+ puts "unknown option #{arg}"
125
+ self.exit_with_message 2, true
126
+ end
127
+ end
128
+ true
129
+ end
130
+
131
+ def self.print
132
+ yaml_obj = {
133
+ :commits => self.commits,
134
+ :search_directories => self.search_directories,
135
+ :search_extensions => self.search_extensions,
136
+ :ignore_methods => self.ignore_methods,
137
+ :os_grep => self.os_grep,
138
+ :debug => self.debug
139
+ }
140
+ yaml_obj[:output] = self.output if self.output
141
+ puts <<-EOS
142
+ ======== Diff Influence Config ========
143
+ target :commits => #{self.commits.inspect}
144
+ search :directories => #{self.search_directories.inspect}
145
+ search :extensions => #{self.search_extensions.inspect}
146
+ ignore :methods => #{self.ignore_methods.inspect}
147
+ output :file => #{self.output}
148
+ os grep :mode => #{self.os_grep}
149
+ debug :mode => #{self.debug}
150
+ =======================================
151
+
152
+ >>>>> sample .diff_influence
153
+ #{YAML.dump yaml_obj}
154
+ <<<<<
155
+ EOS
156
+ yaml_obj = nil
157
+ end
158
+
159
+ private
160
+ def self.flexible_value(value)
161
+ case value
162
+ when Array
163
+ value
164
+ when String
165
+ value.split(',').map{|v| v.chomp.strip}
166
+ else
167
+ nil
168
+ end
169
+ end
170
+
171
+ def self.load_conf_file(file_path)
172
+ if settings = YAML.load_file(file_path)
173
+ settings.each do |k, v|
174
+ self.send "#{k}=", v
175
+ end
176
+ end
177
+ rescue Errno::ENOENT
178
+ nil
179
+ rescue => e
180
+ puts e if self.debug
181
+ puts "Cant load config file #{file_path}"
182
+ exit 1
183
+ end
184
+
185
+ end
186
+ end
@@ -1,17 +1,13 @@
1
1
  module DiffInfluence
2
2
  module Core
3
3
  EMeth=Struct.new(:name, :type, :raw, :index)
4
- EMeth.class_eval do
5
- def initialize(attr={})
6
- self.name = attr[:name]
7
- self.type = attr[:type]
8
- self.raw = attr[:raw]
9
- self.index = attr[:index]
10
- end
4
+
5
+ def self.config
6
+ DiffInfluence::Config
11
7
  end
12
8
 
13
9
  def self.debug_log(msg)
14
- puts "[DEBUG] #{msg}" if DiffInfluence::Config.debug
10
+ puts "[DEBUG] #{msg}" if self.config.debug
15
11
  end
16
12
 
17
13
  def self.git_status
@@ -19,11 +15,19 @@ module DiffInfluence
19
15
  end
20
16
 
21
17
  def self.file_paths
22
- @@files ||= self.git_status.lines.map{|line| line.split.last}
18
+ @@files ||= self.git_status.lines.map {|line|
19
+ path = line.split.last
20
+ case path
21
+ when *self.config.search_directories.map{|d| /\A#{d}/}
22
+ path
23
+ else
24
+ nil
25
+ end
26
+ }.compact
23
27
  end
24
28
 
25
29
  def self.git_diff(file_path)
26
- `git --no-pager diff --no-ext-diff -U1000000 #{DiffInfluence::Config.commits.join(" ")} #{file_path}`
30
+ `git --no-pager diff --no-ext-diff -U1000000 #{self.config.commits.join(' ')} #{file_path}`
27
31
  end
28
32
 
29
33
  def self.search_methods(file_path)
@@ -34,7 +38,7 @@ module DiffInfluence
34
38
  lines.each_with_index do |line, idx|
35
39
  method_line = line =~ /(\s|\t|;)def\s/
36
40
  if method_line
37
- last_method = lines[idx].split("def ").last.chomp.gsub("self\.","")
41
+ last_method = lines[idx].split('def ').last.chomp.gsub('self.', '').gsub(/\(.*\z/, '')
38
42
  self.debug_log "Method line => #{last_method}"
39
43
  end
40
44
  case line
@@ -46,17 +50,12 @@ module DiffInfluence
46
50
  self.debug_log "idx:#{idx}, cnt:#{cnt}, #{line}"
47
51
 
48
52
  t = if method_line
49
- line =~ /\A\-/ ? "remove" : "add"
53
+ line =~ /\A\-/ ? 'remove' : 'add'
50
54
  else
51
- "effect"
55
+ 'effect'
52
56
  end
53
57
 
54
- methods.push EMeth.new(
55
- name: last_method,
56
- type: t,
57
- raw: line,
58
- index: cnt
59
- )
58
+ methods.push EMeth.new(last_method,t,line,cnt)
60
59
  else
61
60
  cnt += 1
62
61
  end
@@ -65,16 +64,16 @@ module DiffInfluence
65
64
  methods
66
65
  end
67
66
 
68
- def self.os_grep(keyword="")
69
- DiffInfluence::Config.search_paths.each do |pd|
70
- puts `grep -r -E '(\\.|@)#{keyword}(\\s|\\()' #{pd}`
67
+ def self.os_grep(keyword='')
68
+ self.config.search_directories.each do |pd|
69
+ puts `grep -r -E '(\\.|@)#{Regexp.escape(keyword)}(\\s|\\()' #{pd}`
71
70
  end
72
71
  end
73
72
 
74
- def self.native_grep(keyword="")
73
+ def self.native_grep(keyword='')
75
74
  self.files.each do |file|
76
75
  File.readlines(file).each_with_index do |line, idx|
77
- if line =~ /(\.|@)#{keyword}(\s|\()/
76
+ if line =~ /(\.|@)#{Regexp.escape(keyword)}(\s|\()/
78
77
  puts "#{file}:#{idx+1} #{line}"
79
78
  end
80
79
  end
@@ -82,32 +81,41 @@ module DiffInfluence
82
81
  end
83
82
 
84
83
  def self.files
85
- @@files ||= Dir.glob(DiffInfluence::Config.search_paths.map{|d| "#{d}/**/**.{#{DiffInfluence::Config.search_extensions.join(",")}}"})
84
+ @@files ||= Dir.glob(self.config.search_directories.map{|d| "#{d}/**/**.{#{self.config.search_extensions.join(',')}}"})
86
85
  end
87
86
 
88
87
  def self.influence_search(file_path)
89
88
  searched_methods = []
90
89
  self.search_methods(file_path).each do |method|
91
- if method.name.nil? || method.name.empty? || searched_methods.include?(method.name)
90
+ if(
91
+ method.name.nil? || method.name.empty? ||
92
+ self.config.ignore_methods.include?(method.name) ||
93
+ searched_methods.include?(method.name)
94
+ )
92
95
  next
93
96
  else
94
97
  searched_methods.push method.name
95
98
  end
96
99
  puts "### Searching method[#{method.name}] (from #{file_path}:#{method.index})"
97
- if DiffInfluence::Config.os_grep
98
- self.os_grep method.name
99
- else
100
- self.native_grep method.name
101
- end
100
+ self.grep method.name
102
101
  puts
103
102
  end
104
103
  end
105
104
 
105
+ def self.grep(method_name)
106
+ if self.config.os_grep
107
+ self.os_grep method_name
108
+ else
109
+ self.native_grep method_name
110
+ end
111
+ end
112
+
106
113
  def self.exec
107
114
  self.file_paths.each do |fp|
108
115
  self.influence_search fp
109
116
  end
110
117
  exit 0
111
118
  end
119
+
112
120
  end
113
121
  end
@@ -1,17 +1,13 @@
1
1
  module DiffInfluence
2
2
  module Core
3
3
  EMeth=Struct.new(:name, :type, :raw, :index)
4
- EMeth.class_eval do
5
- def initialize(attr={})
6
- self.name = attr[:name]
7
- self.type = attr[:type]
8
- self.raw = attr[:raw]
9
- self.index = attr[:index]
10
- end
4
+
5
+ def self.config
6
+ DiffInfluence::Config
11
7
  end
12
8
 
13
9
  def self.debug_log(msg)
14
- puts "[DEBUG] #{msg}" if DiffInfluence::Config.debug
10
+ puts "[DEBUG] #{msg}" if self.config.debug
15
11
  end
16
12
 
17
13
  def self.git_status
@@ -19,11 +15,19 @@ module DiffInfluence
19
15
  end
20
16
 
21
17
  def self.file_paths
22
- @@files ||= self.git_status.lines.to_a.map{|line| line.split.last}
18
+ @@files ||= self.git_status.lines.to_a.map {|line|
19
+ path = line.split.last
20
+ case path
21
+ when *self.config.search_directories.map{|d| /\A#{d}/}
22
+ path
23
+ else
24
+ nil
25
+ end
26
+ }.compact
23
27
  end
24
28
 
25
29
  def self.git_diff(file_path)
26
- `git --no-pager diff --no-ext-diff -U1000000 #{DiffInfluence::Config.commits.join(" ")} #{file_path}`
30
+ `git --no-pager diff --no-ext-diff -U1000000 #{self.config.commits.join(' ')} #{file_path}`
27
31
  end
28
32
 
29
33
  def self.search_methods(file_path)
@@ -34,7 +38,7 @@ module DiffInfluence
34
38
  lines.each_with_index do |line, idx|
35
39
  method_line = line =~ /(\s|\t|;)def\s/
36
40
  if method_line
37
- last_method = lines[idx].split("def ").last.chomp.gsub("self\.","")
41
+ last_method = lines[idx].split('def ').last.chomp.gsub('self.', '').gsub(/\(.*\z/, '')
38
42
  self.debug_log "Method line => #{last_method}"
39
43
  end
40
44
  case line
@@ -46,17 +50,12 @@ module DiffInfluence
46
50
  self.debug_log "idx:#{idx}, cnt:#{cnt}, #{line}"
47
51
 
48
52
  t = if method_line
49
- line =~ /\A\-/ ? "remove" : "add"
53
+ line =~ /\A\-/ ? 'remove' : 'add'
50
54
  else
51
- "effect"
55
+ 'effect'
52
56
  end
53
57
 
54
- methods.push EMeth.new(
55
- :name => last_method,
56
- :type => t,
57
- :raw => line,
58
- :index => cnt
59
- )
58
+ methods.push EMeth.new(last_method,t,line,cnt)
60
59
  else
61
60
  cnt += 1
62
61
  end
@@ -65,16 +64,16 @@ module DiffInfluence
65
64
  methods
66
65
  end
67
66
 
68
- def self.os_grep(keyword="")
69
- DiffInfluence::Config.search_paths.each do |pd|
70
- puts `grep -r -E '(\\.|@)#{keyword}(\\s|\\()' #{pd}`
67
+ def self.os_grep(keyword='')
68
+ self.config.search_directories.each do |pd|
69
+ puts `grep -r -E '(\\.|@)#{Regexp.escape(keyword)}(\\s|\\()' #{pd}`
71
70
  end
72
71
  end
73
72
 
74
- def self.native_grep(keyword="")
73
+ def self.native_grep(keyword='')
75
74
  self.files.each do |file|
76
75
  File.readlines(file).each_with_index do |line, idx|
77
- if line =~ /(\.|@)#{keyword}(\s|\()/
76
+ if line =~ /(\.|@)#{Regexp.escape(keyword)}(\s|\()/
78
77
  puts "#{file}:#{idx+1} #{line}"
79
78
  end
80
79
  end
@@ -82,32 +81,41 @@ module DiffInfluence
82
81
  end
83
82
 
84
83
  def self.files
85
- @@files ||= Dir.glob(DiffInfluence::Config.search_paths.map{|d| "#{d}/**/**.{#{DiffInfluence::Config.search_extensions.join(",")}}"})
84
+ @@files ||= Dir.glob(self.config.search_directories.map{|d| "#{d}/**/**.{#{self.config.search_extensions.join(',')}}"})
86
85
  end
87
86
 
88
87
  def self.influence_search(file_path)
89
88
  searched_methods = []
90
89
  self.search_methods(file_path).each do |method|
91
- if method.name.nil? || method.name.empty? || searched_methods.include?(method.name)
90
+ if(
91
+ method.name.nil? || method.name.empty? ||
92
+ self.config.ignore_methods.include?(method.name) ||
93
+ searched_methods.include?(method.name)
94
+ )
92
95
  next
93
96
  else
94
97
  searched_methods.push method.name
95
98
  end
96
99
  puts "### Searching method[#{method.name}] (from #{file_path}:#{method.index})"
97
- if DiffInfluence::Config.os_grep
98
- self.os_grep method.name
99
- else
100
- self.native_grep method.name
101
- end
100
+ self.grep method.name
102
101
  puts
103
102
  end
104
103
  end
105
104
 
105
+ def self.grep(method_name)
106
+ if self.config.os_grep
107
+ self.os_grep method_name
108
+ else
109
+ self.native_grep method_name
110
+ end
111
+ end
112
+
106
113
  def self.exec
107
114
  self.file_paths.each do |fp|
108
115
  self.influence_search fp
109
116
  end
110
117
  exit 0
111
118
  end
119
+
112
120
  end
113
121
  end
@@ -1,3 +1,3 @@
1
1
  module DiffInfluence
2
- VERSION = "0.3.0"
2
+ VERSION = '0.4.0'
3
3
  end
metadata CHANGED
@@ -1,83 +1,96 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: diff_influence
3
- version: !ruby/object:Gem::Version
4
- version: 0.3.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 15
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
5
11
  platform: ruby
6
- authors:
12
+ authors:
7
13
  - metalels
8
14
  autorequire:
9
15
  bindir: exe
10
16
  cert_chain: []
11
- date: 2017-02-17 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2017-02-20 00:00:00 +09:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
14
22
  name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.12'
20
- type: :development
21
23
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.12'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '10.0'
24
+ version_requirements: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 23
30
+ segments:
31
+ - 1
32
+ - 12
33
+ version: "1.12"
34
34
  type: :development
35
+ requirement: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
35
38
  prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '10.0'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '3.0'
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 35
45
+ segments:
46
+ - 10
47
+ - 0
48
+ version: "10.0"
48
49
  type: :development
50
+ requirement: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: rspec
49
53
  prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '3.0'
55
- - !ruby/object:Gem::Dependency
56
- name: pry
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
54
+ version_requirements: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ hash: 7
60
+ segments:
61
+ - 3
62
+ - 0
63
+ version: "3.0"
62
64
  type: :development
65
+ requirement: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ name: pry
63
68
  prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
69
+ version_requirements: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
66
72
  - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
73
+ - !ruby/object:Gem::Version
74
+ hash: 3
75
+ segments:
76
+ - 0
77
+ version: "0"
78
+ type: :development
79
+ requirement: *id004
69
80
  description: search diff influence.
70
- email:
81
+ email:
71
82
  - metalels86@gmail.com
72
- executables:
83
+ executables:
73
84
  - diff-influence
74
85
  extensions: []
86
+
75
87
  extra_rdoc_files: []
76
- files:
77
- - ".gitignore"
78
- - ".rspec"
79
- - ".ruby-version"
80
- - ".travis.yml"
88
+
89
+ files:
90
+ - .diff-influence
91
+ - .gitignore
92
+ - .rspec
93
+ - .travis.yml
81
94
  - Gemfile
82
95
  - LICENSE
83
96
  - README.md
@@ -89,30 +102,43 @@ files:
89
102
  - exe/diff-influence
90
103
  - lib/diff_influence.rb
91
104
  - lib/diff_influence/config.rb
105
+ - lib/diff_influence/config_1x.rb
92
106
  - lib/diff_influence/core.rb
93
107
  - lib/diff_influence/core_1x.rb
94
108
  - lib/diff_influence/version.rb
109
+ has_rdoc: true
95
110
  homepage: https://github.com/metalels/diff_influence
96
111
  licenses: []
97
- metadata: {}
112
+
98
113
  post_install_message:
99
114
  rdoc_options: []
100
- require_paths:
115
+
116
+ require_paths:
101
117
  - lib
102
- required_ruby_version: !ruby/object:Gem::Requirement
103
- requirements:
118
+ required_ruby_version: !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
104
121
  - - ">="
105
- - !ruby/object:Gem::Version
106
- version: '0'
107
- required_rubygems_version: !ruby/object:Gem::Requirement
108
- requirements:
122
+ - !ruby/object:Gem::Version
123
+ hash: 3
124
+ segments:
125
+ - 0
126
+ version: "0"
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
109
130
  - - ">="
110
- - !ruby/object:Gem::Version
111
- version: '0'
131
+ - !ruby/object:Gem::Version
132
+ hash: 3
133
+ segments:
134
+ - 0
135
+ version: "0"
112
136
  requirements: []
137
+
113
138
  rubyforge_project:
114
- rubygems_version: 2.5.1
139
+ rubygems_version: 1.6.2
115
140
  signing_key:
116
- specification_version: 4
141
+ specification_version: 3
117
142
  summary: search diff influence.
118
143
  test_files: []
144
+
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: ded887aba89fc0d05fad74e61bb45011e6d30006
4
- data.tar.gz: 4489751b59a9e8f84022dd27fa8df69f9c03d216
5
- SHA512:
6
- metadata.gz: 834c1c313cbe4cbee59e1d6b4ed41a654cfd4ee1c8013c50cd09a634566ad95d6bad8111e4133d8d5e44e643e449c159538eb39207412b69ae7ed8965b6150c1
7
- data.tar.gz: 7ed8af9057c906a990d3448582a20f77de7818ecd39bf66de8a1c4070ccf4f0fc4b632cd7c95a8dce2fe6cae736e144427b4c866011647af0ca76e180e23075b
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 2.3.1