synt 0.1.3 → 0.3.0

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: 07d8eb90258e1d9b95e1f14d9d93a0f742426c98
4
- data.tar.gz: 48febfb847f4d9031c8b0335c8ffe408728bf8ca
3
+ metadata.gz: 656ca89214a981b499724da4bfeaf43c2de085d4
4
+ data.tar.gz: 59fcdcb6c52321be7441cc3ddcc69dfb1c282dfd
5
5
  SHA512:
6
- metadata.gz: d46ef30ae4c429863047b957d1eea15ff1e4c19cde044b93ad785a85d3818904d5df97531c48ac0e56675784fb98237d22a9db9c03c38fbe77badcd6c1714050
7
- data.tar.gz: 3f1e5c9381a6d790d6f9da8f52929a1160a77f29f931e348a987cf8614dd27c4f3b12e29bb803466624e4a010b7a47dbf568bfdc500110f9d28584b321595ca4
6
+ metadata.gz: bb0b5d506e958cd1801a98d853228b0975fcf6adf38fa6f11506285759b4763a7ecc1d74c2f9a5e76c547c2be10721946fdc8404070c663459e7377035d83a7e
7
+ data.tar.gz: 30477ea25ef2156e7bf43e5ec000a8ea7ac39758d97254900811c575926e22117d028c45dd70e79aa8b2b61c6ba00549a45e954667043cd5737b85780453e8bb
@@ -0,0 +1 @@
1
+ 2.1.5
data/Gemfile CHANGED
@@ -2,7 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  gem 'slop', '3.6.0'
4
4
  gem 'manowar', '0.0.1'
5
- gem 'rspec', '3.0.0', require: false, group: :development
6
- gem 'rubocop', '0.25.0', require: false, group: :development
7
- gem 'simplecov', '0.9.0', require: false, group: :development
8
- gem 'simplecov-lcov', require: false, group: :development
5
+ gem 'rspec', '3.1.0', require: false, group: :development
6
+ gem 'rubocop', '0.28.0', require: false, group: :development
7
+ gem 'simplecov', '0.9.1', require: false, group: :development
8
+ gem 'simplecov-lcov', '0.4.0', require: false, group: :development
@@ -2,39 +2,42 @@ GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
4
  ast (2.0.0)
5
+ astrolabe (1.3.0)
6
+ parser (>= 2.2.0.pre.3, < 3.0)
5
7
  diff-lcs (1.2.5)
6
8
  docile (1.1.5)
7
9
  manowar (0.0.1)
8
10
  multi_json (1.10.1)
9
- parser (2.2.0.pre.4)
11
+ parser (2.2.0.1)
10
12
  ast (>= 1.1, < 3.0)
11
13
  slop (~> 3.4, >= 3.4.5)
12
14
  powerpack (0.0.9)
13
15
  rainbow (2.0.0)
14
- rspec (3.0.0)
15
- rspec-core (~> 3.0.0)
16
- rspec-expectations (~> 3.0.0)
17
- rspec-mocks (~> 3.0.0)
18
- rspec-core (3.0.3)
19
- rspec-support (~> 3.0.0)
20
- rspec-expectations (3.0.3)
16
+ rspec (3.1.0)
17
+ rspec-core (~> 3.1.0)
18
+ rspec-expectations (~> 3.1.0)
19
+ rspec-mocks (~> 3.1.0)
20
+ rspec-core (3.1.7)
21
+ rspec-support (~> 3.1.0)
22
+ rspec-expectations (3.1.2)
21
23
  diff-lcs (>= 1.2.0, < 2.0)
22
- rspec-support (~> 3.0.0)
23
- rspec-mocks (3.0.3)
24
- rspec-support (~> 3.0.0)
25
- rspec-support (3.0.3)
26
- rubocop (0.25.0)
27
- parser (>= 2.2.0.pre.4, < 3.0)
24
+ rspec-support (~> 3.1.0)
25
+ rspec-mocks (3.1.3)
26
+ rspec-support (~> 3.1.0)
27
+ rspec-support (3.1.2)
28
+ rubocop (0.28.0)
29
+ astrolabe (~> 1.3)
30
+ parser (>= 2.2.0.pre.7, < 3.0)
28
31
  powerpack (~> 0.0.6)
29
32
  rainbow (>= 1.99.1, < 3.0)
30
33
  ruby-progressbar (~> 1.4)
31
- ruby-progressbar (1.6.0)
32
- simplecov (0.9.0)
34
+ ruby-progressbar (1.7.1)
35
+ simplecov (0.9.1)
33
36
  docile (~> 1.1.0)
34
- multi_json
37
+ multi_json (~> 1.0)
35
38
  simplecov-html (~> 0.8.0)
36
39
  simplecov-html (0.8.0)
37
- simplecov-lcov (0.3.0)
40
+ simplecov-lcov (0.4.0)
38
41
  slop (3.6.0)
39
42
 
40
43
  PLATFORMS
@@ -42,8 +45,8 @@ PLATFORMS
42
45
 
43
46
  DEPENDENCIES
44
47
  manowar (= 0.0.1)
45
- rspec (= 3.0.0)
46
- rubocop (= 0.25.0)
47
- simplecov (= 0.9.0)
48
- simplecov-lcov
48
+ rspec (= 3.1.0)
49
+ rubocop (= 0.28.0)
50
+ simplecov (= 0.9.1)
51
+ simplecov-lcov (= 0.4.0)
49
52
  slop (= 3.6.0)
@@ -9,10 +9,10 @@ module Synt
9
9
  opts = CLI.parse
10
10
  diff = Similar.compare opts
11
11
 
12
- puts "Inputs are %#{diff} similar."
12
+ puts "Inputs are #{diff}% similar."
13
13
 
14
- if opts.threshold? && diff < opts[:threshold].to_f
15
- puts "Similarity threshold of #{opts[:threshold]} hit."
14
+ if opts.threshold? && diff < opts["min-threshold"].to_f
15
+ puts "Similarity threshold of #{opts["min-threshold"]}% hit."
16
16
  exit 1
17
17
  end
18
18
  end
@@ -16,15 +16,18 @@ module Synt::CLI
16
16
  API = proc {
17
17
  banner 'Usage: synt.rb [options]'
18
18
 
19
- on 'c=', 'compare=', 'File or String to compare to something.'
20
- on 't=', 'to=', 'File or String to compare against.'
21
- on 'a=', 'algorithm=', 'Similarity algorithm [default=jaccard,tanimoto].'
22
- on 'n=', 'ngram=', 'Specify what ngrams are generated and used for
23
- comparing token sequences.
24
- [default=1,2,4..5,10,...,all]'
25
- on 'd=', 'threshold=', 'Similarity threshold and exit with error.'
19
+ on 'c=', 'compare=', 'File to compare to something.'
20
+ on 't=', 'to=', 'File to compare against.'
21
+ on 's', 'string-compare', 'Compare strings instead of files.'
22
+ on 'a=', 'algorithm=', 'Similarity algorithm
23
+ [default=jaccard,tanimoto].'
24
+ on 'n=', 'ngram=', 'Specify what ngrams are generated and used for
25
+ comparing token sequences.
26
+ [default=1,2,4..5,10,...,all]'
27
+ on 'm=', 'min-threshold=', 'Similarity threshold % (ex: -m 70)
28
+ to exit with error.'
26
29
 
27
- on '-v', 'version', 'Print the version.' do
30
+ on '-v', 'version', 'Print the version.' do
28
31
  puts Synt::VERSION
29
32
  exit 0
30
33
  end
@@ -8,20 +8,13 @@ define 'Synt'
8
8
  module Synt::Similar
9
9
  extend self
10
10
 
11
- def determine string_or_file
12
- if File.exists? string_or_file
13
- IO.read string_or_file
14
- else
15
- string_or_file || ''
16
- end
17
- end
18
-
19
11
  def compare opts
20
12
  error 'no compare propery provided' unless opts[:compare]
21
13
  error 'no to propery provided' unless opts[:to]
22
14
 
23
- src = determine opts[:compare]
24
- cmp = determine opts[:to]
15
+ # TODO: string-compare sucks to reference..
16
+ src = parse_data opts["string-compare"], opts[:compare]
17
+ cmp = parse_data opts["string-compare"], opts[:to]
25
18
  algorithm = algorithms[(opts[:algorithm] || 'jaccard').to_sym]
26
19
  n_start, n_end = ngram_range opts[:ngram]
27
20
  src_t = normalize_ripper_tokens Synt::Parser.parse(src)
@@ -41,6 +34,14 @@ module Synt::Similar
41
34
  { jaccard: Jaccard, tanimoto: Tanimoto }
42
35
  end
43
36
 
37
+ def parse_data is_string, value
38
+ if is_string
39
+ value
40
+ else
41
+ IO.read value
42
+ end
43
+ end
44
+
44
45
  def generate_ngrams arr, start, nend
45
46
  nend = arr.length unless nend
46
47
  start = 1 unless start
@@ -1,3 +1,3 @@
1
1
  module Synt
2
- VERSION = "0.1.3"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -13,11 +13,12 @@ describe Synt::Similar do
13
13
  let(:dissimilar_a_path) { 'spec/fixtures/compare-rb-dissimilar-a.rb' }
14
14
  let(:dissimilar_b_path) { 'spec/fixtures/compare-rb-dissimilar-b.rb' }
15
15
 
16
+ # TODO: implement min-threshold behaviour
17
+
16
18
  context 'cli' do
17
19
  context 'comparing things' do
18
20
  context 'that are Files' do
19
21
  before do
20
- allow(File).to receive(:exists?).and_return(true)
21
22
  expect(IO).to receive(:read).and_return("42").twice
22
23
  end
23
24
 
@@ -28,27 +29,29 @@ describe Synt::Similar do
28
29
 
29
30
  context 'that are Strings' do
30
31
  before do
31
- allow(File).to receive(:exists?).and_return(false)
32
32
  expect(IO).to_not receive(:read)
33
33
  end
34
34
 
35
35
  it 'should not read any files' do
36
- subject.compare compare: "file/path.rb", to: "file/path2"
36
+ subject.compare compare: "file/path.rb",
37
+ to: "file/path2",
38
+ "string-compare" => true
37
39
  end
38
40
  end
39
41
  end
40
42
  end
41
43
 
42
44
  context 'duplicate code comparison' do
43
- let(:dupe) { file_to_s duplicate_path }
44
-
45
45
  algorithms.each do |algorithm|
46
46
  context "using the #{algorithm} algorithm" do
47
47
  ngram_types.each do |ngram|
48
48
  context "with an ngram of #{ngram}" do
49
49
  it 'is 100%' do
50
- sim = subject.compare compare: dupe, to: dupe,
51
- ngram: ngram, algorithm: algorithm
50
+ sim = subject.compare compare: duplicate_path,
51
+ to: duplicate_path,
52
+ ngram: ngram,
53
+ algorithm: algorithm
54
+
52
55
  expect(sim).to eq 100
53
56
  end
54
57
  end
@@ -58,13 +61,11 @@ describe Synt::Similar do
58
61
  end
59
62
 
60
63
  context 'similar code comparison' do
61
- let(:sim_a) { file_to_s similar_a_path }
62
- let(:sim_b) { file_to_s similar_b_path }
63
-
64
64
  algorithms.each do |algorithm|
65
65
  context "using the #{algorithm} algorithm" do
66
66
  it 'is ~81%' do
67
- sim = subject.compare compare: sim_a, to: sim_b,
67
+ sim = subject.compare compare: similar_a_path,
68
+ to: similar_b_path,
68
69
  algorithm: algorithm
69
70
  expect(80..82).to cover(sim)
70
71
  end
@@ -73,13 +74,11 @@ describe Synt::Similar do
73
74
  end
74
75
 
75
76
  context 'dissimilar code comparison' do
76
- let(:dissim_a) { file_to_s dissimilar_a_path }
77
- let(:dissim_b) { file_to_s dissimilar_b_path }
78
-
79
77
  algorithms.each do |algorithm|
80
78
  context "using the #{algorithm} algorithm" do
81
79
  it 'is ~22%' do
82
- sim = subject.compare compare: dissim_a, to: dissim_b,
80
+ sim = subject.compare compare: dissimilar_a_path,
81
+ to: dissimilar_b_path,
83
82
  algorithm: algorithm
84
83
  expect(21..23).to cover(sim)
85
84
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: synt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brent Lintner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-08 00:00:00.000000000 Z
11
+ date: 2015-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: manowar
@@ -61,6 +61,7 @@ extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
63
  - ".rubocop.yml"
64
+ - ".ruby-version"
64
65
  - Gemfile
65
66
  - Gemfile.lock
66
67
  - bin/lint
@@ -103,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
104
  version: '0'
104
105
  requirements: []
105
106
  rubyforge_project:
106
- rubygems_version: 2.2.2
107
+ rubygems_version: 2.4.3
107
108
  signing_key:
108
109
  specification_version: 4
109
110
  summary: Similar code analysis.