snuffle 0.9.1
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 +7 -0
- data/.gitignore +23 -0
- data/.rspec +2 -0
- data/CODE_OF_CONDUCT.md +12 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +45 -0
- data/Rakefile +2 -0
- data/bin/snuffle +3 -0
- data/lib/snuffle.rb +23 -0
- data/lib/snuffle/cli.rb +74 -0
- data/lib/snuffle/cohort.rb +42 -0
- data/lib/snuffle/elements/hash.rb +37 -0
- data/lib/snuffle/formatters/base.rb +57 -0
- data/lib/snuffle/formatters/csv.rb +31 -0
- data/lib/snuffle/formatters/html.rb +48 -0
- data/lib/snuffle/formatters/html_index.rb +39 -0
- data/lib/snuffle/formatters/templates/index.html.haml +71 -0
- data/lib/snuffle/formatters/templates/output.html.haml +56 -0
- data/lib/snuffle/formatters/text.rb +30 -0
- data/lib/snuffle/line_of_code.rb +23 -0
- data/lib/snuffle/node.rb +46 -0
- data/lib/snuffle/source_file.rb +112 -0
- data/lib/snuffle/summary.rb +13 -0
- data/lib/snuffle/util/histogram.rb +17 -0
- data/lib/snuffle/version.rb +3 -0
- data/snuffle.gemspec +35 -0
- data/spec/fixtures/account.rb +1390 -0
- data/spec/fixtures/program_1.rb +31 -0
- data/spec/fixtures/program_2.rb +67 -0
- data/spec/fixtures/program_3.rb +68 -0
- data/spec/snuffle/elements/hash_spec.rb +16 -0
- data/spec/snuffle/line_of_code_spec.rb +38 -0
- data/spec/snuffle/source_file_spec.rb +50 -0
- data/spec/snuffle/util/histogram_spec.rb +25 -0
- data/spec/spec_helper.rb +7 -0
- data/test.rb +5 -0
- metadata +260 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
class Song
|
2
|
+
|
3
|
+
attr_accessor :title, :year, :artist, :options
|
4
|
+
|
5
|
+
def initialize(title, year, artist, options={})
|
6
|
+
self.title = title
|
7
|
+
self.year = year
|
8
|
+
self.artist = artist
|
9
|
+
self.options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def can_be_playlisted?
|
13
|
+
metadata[:playlist]
|
14
|
+
end
|
15
|
+
|
16
|
+
def can_be_downloaded?
|
17
|
+
metadata[:download]
|
18
|
+
end
|
19
|
+
|
20
|
+
def drm_enabled?
|
21
|
+
options['drm_enabled']
|
22
|
+
end
|
23
|
+
|
24
|
+
def metadata
|
25
|
+
{
|
26
|
+
:playlist => options[:available_to_playlist],
|
27
|
+
:download => options[:downloadable]
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
class Customer
|
2
|
+
|
3
|
+
attr_accessor :customer_id, :customer_name, :company_name
|
4
|
+
attr_accessor :street_address_1, :street_address_2
|
5
|
+
# attr_accessor :city, :state, :postal_code
|
6
|
+
|
7
|
+
MY_CONSTANT = "TheOtherZachIsThePrimaryZach"
|
8
|
+
|
9
|
+
def my_condition
|
10
|
+
puts "MAGIC" if true == false
|
11
|
+
end
|
12
|
+
|
13
|
+
def address_is_residence?
|
14
|
+
self.company_name.nil?
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_coords_for_address
|
18
|
+
# fake_api_call(city: city, state: state, postal_code: postal_code)
|
19
|
+
end
|
20
|
+
|
21
|
+
def neighborhood
|
22
|
+
make_neighborhood_api_call(state: self.state, city: self.city, postal_code: self.postal_code)
|
23
|
+
end
|
24
|
+
|
25
|
+
def something_else
|
26
|
+
# fake_neighborhood_api_call(city: self.city, state: self.state)
|
27
|
+
end
|
28
|
+
|
29
|
+
def and_something_else_again
|
30
|
+
fake_neighborhood_api_call(city: self.city)
|
31
|
+
end
|
32
|
+
|
33
|
+
def and_something_else_again_and_again
|
34
|
+
fake_neighborhood_api_call(state: self.state)
|
35
|
+
end
|
36
|
+
|
37
|
+
def fake_neighborhood_api_call(args={})
|
38
|
+
"Probably River North"
|
39
|
+
end
|
40
|
+
|
41
|
+
def fake_api_call(args={})
|
42
|
+
[112.32, 124.11]
|
43
|
+
end
|
44
|
+
|
45
|
+
def business_card_api_call
|
46
|
+
{name: customer_name, business: company_name}
|
47
|
+
end
|
48
|
+
|
49
|
+
def letterhead_api_call
|
50
|
+
{name: customer_name, business: company_name}
|
51
|
+
end
|
52
|
+
|
53
|
+
def letterhead
|
54
|
+
"#{customer_name}\r#{company_name}"
|
55
|
+
end
|
56
|
+
|
57
|
+
def address
|
58
|
+
string = ""
|
59
|
+
string << self.customer_name
|
60
|
+
string << self.company_name if address_is_residence?
|
61
|
+
string << self.street_address_1
|
62
|
+
string << self.street_address_2 if street_address_2.present?
|
63
|
+
# string << "#{self.city}, #{self.state} #{self.postal_code}"
|
64
|
+
string.join", "
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# Should only match name, business
|
2
|
+
class Customer
|
3
|
+
|
4
|
+
attr_accessor :customer_id, :customer_name, :company_name
|
5
|
+
attr_accessor :street_address_1, :street_address_2
|
6
|
+
attr_accessor :city, :state, :postal_code
|
7
|
+
|
8
|
+
MY_CONSTANT = "TheOtherZachIsThePrimaryZach"
|
9
|
+
|
10
|
+
def my_condition
|
11
|
+
puts "MAGIC" if true == false
|
12
|
+
end
|
13
|
+
|
14
|
+
def address_is_residence?
|
15
|
+
self.company_name.nil?
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_coords_for_address
|
19
|
+
fake_api_call(city: city, state: state, postal_code: postal_code)
|
20
|
+
end
|
21
|
+
|
22
|
+
def neighborhood
|
23
|
+
make_neighborhood_api_call(state: self.state, city: self.city, postal_code: self.postal_code)
|
24
|
+
end
|
25
|
+
|
26
|
+
def something_else
|
27
|
+
fake_neighborhood_api_call(city: self.city, state: self.state)
|
28
|
+
end
|
29
|
+
|
30
|
+
def and_something_else_again
|
31
|
+
fake_neighborhood_api_call(city: self.city)
|
32
|
+
end
|
33
|
+
|
34
|
+
def and_something_else_again_and_again
|
35
|
+
fake_neighborhood_api_call(state: self.state)
|
36
|
+
end
|
37
|
+
|
38
|
+
def fake_neighborhood_api_call(args={})
|
39
|
+
"Probably River North"
|
40
|
+
end
|
41
|
+
|
42
|
+
def fake_api_call(args={})
|
43
|
+
[112.32, 124.11]
|
44
|
+
end
|
45
|
+
|
46
|
+
def business_card_api_call
|
47
|
+
{name: customer_name, business: company_name}
|
48
|
+
end
|
49
|
+
|
50
|
+
def letterhead_api_call
|
51
|
+
{name: customer_name, business: company_name}
|
52
|
+
end
|
53
|
+
|
54
|
+
def letterhead
|
55
|
+
"#{customer_name}\r#{company_name}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def address
|
59
|
+
string = ""
|
60
|
+
string << self.customer_name
|
61
|
+
string << self.company_name if address_is_residence?
|
62
|
+
string << self.street_address_1
|
63
|
+
string << self.street_address_2 if street_address_2.present?
|
64
|
+
# string << "#{self.city}, #{self.state} #{self.postal_code}"
|
65
|
+
string.join", "
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pry'
|
3
|
+
|
4
|
+
describe Snuffle::Element::Hash do
|
5
|
+
|
6
|
+
let(:hash) { Snuffle::Element::Hash.new(nil) }
|
7
|
+
|
8
|
+
describe "#pairs" do
|
9
|
+
it "creates hash pairs from its keys and values" do
|
10
|
+
expect(hash).to receive(:keys) {[:foo, :bar]}
|
11
|
+
expect(hash).to receive(:values) {[1, 2]}
|
12
|
+
expect(hash.pairs).to eq({foo: 1, bar: 2})
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pry'
|
3
|
+
|
4
|
+
describe Snuffle::LineOfCode do
|
5
|
+
|
6
|
+
class SourceFileMock
|
7
|
+
include Ephemeral::Base
|
8
|
+
collects :lines_of_code, class_name: "Snuffle::LineOfCode"
|
9
|
+
attr_accessor :locs
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:source_file) { SourceFileMock.new }
|
13
|
+
|
14
|
+
let(:loc_1) { Snuffle::LineOfCode.new(range: (0..24) ) }
|
15
|
+
let(:loc_2) { Snuffle::LineOfCode.new(range: (25..34)) }
|
16
|
+
let(:loc_3) { Snuffle::LineOfCode.new(range: (35..44)) }
|
17
|
+
|
18
|
+
before do
|
19
|
+
source_file.lines_of_code << loc_1
|
20
|
+
source_file.lines_of_code << loc_2
|
21
|
+
source_file.lines_of_code << loc_3
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ".find" do
|
25
|
+
|
26
|
+
it "locates a range within a line" do
|
27
|
+
locs = Snuffle::LineOfCode.containing(source_file.lines_of_code, 26, 34)
|
28
|
+
expect(locs).to eq([loc_2])
|
29
|
+
end
|
30
|
+
|
31
|
+
it "locates a range spanning lines" do
|
32
|
+
locs = Snuffle::LineOfCode.containing(source_file.lines_of_code, 26, 42)
|
33
|
+
expect(locs).to eq([loc_2, loc_3])
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pry'
|
3
|
+
|
4
|
+
describe Snuffle::SourceFile do
|
5
|
+
|
6
|
+
let(:program_2) {Snuffle::SourceFile.new(path_to_file: "spec/fixtures/program_2.rb") }
|
7
|
+
let(:program_3) {Snuffle::SourceFile.new(path_to_file: "spec/fixtures/program_3.rb") }
|
8
|
+
|
9
|
+
describe "#object_candidates" do
|
10
|
+
|
11
|
+
it "does not match hash values with non-hash values" do
|
12
|
+
attr_accessor_args = ['city', 'postal_code', 'state']
|
13
|
+
values = program_2.summary.object_candidates
|
14
|
+
expect(values.include?(attr_accessor_args)).to be_falsey
|
15
|
+
end
|
16
|
+
|
17
|
+
it "matches elements with the same type" do
|
18
|
+
args = ['company_name', 'customer_name']
|
19
|
+
values = program_3.summary.object_candidates
|
20
|
+
expect(values.include?(args)).to be_truthy
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#class_name" do
|
26
|
+
|
27
|
+
let(:top_level) { "require 'something'; class Foo; def bar; puts 'hi'; end; end"}
|
28
|
+
let(:namespaced_1) { "require 'something'; class Foo::Bar; def bar; puts 'hi'; end; end"}
|
29
|
+
let(:namespaced_2) { "require 'something'; module Foo; module Bar; class Baz; def bar; puts 'hi'; end; end; end; end"}
|
30
|
+
let(:source_file) { Snuffle::SourceFile.new }
|
31
|
+
|
32
|
+
it "picks up a non-nested class name" do
|
33
|
+
source_file.source = top_level
|
34
|
+
expect(source_file.class_name).to eq("Foo")
|
35
|
+
end
|
36
|
+
|
37
|
+
it "picks up a namespaced class name" do
|
38
|
+
source_file.source = namespaced_1
|
39
|
+
expect(source_file.class_name).to eq("Foo::Bar")
|
40
|
+
end
|
41
|
+
|
42
|
+
it "picks up a class name inside nested modules" do
|
43
|
+
source_file.source = namespaced_2
|
44
|
+
expect(source_file.class_name).to eq("Foo::Bar::Baz")
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Snuffle::Util::Histogram do
|
4
|
+
|
5
|
+
describe ".from" do
|
6
|
+
|
7
|
+
it "creates a histogram" do
|
8
|
+
arrays = [
|
9
|
+
['a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd'],
|
10
|
+
['a', 'b', 'c', 'd']
|
11
|
+
]
|
12
|
+
results = Snuffle::Util::Histogram::from(arrays)
|
13
|
+
expect(results).to eq(
|
14
|
+
{
|
15
|
+
'a' => 2,
|
16
|
+
'b' => 3,
|
17
|
+
'c' => 4,
|
18
|
+
'd' => 5
|
19
|
+
}
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
data/spec/spec_helper.rb
ADDED
data/test.rb
ADDED
metadata
ADDED
@@ -0,0 +1,260 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: snuffle
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Coraline Ada Ehmke
|
8
|
+
- Kerri Miller
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-07-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: parser
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: thor
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: ephemeral
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 2.3.2
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 2.3.2
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: poro_plus
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rouge
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: text-table
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :runtime
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: haml
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :runtime
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: bundler
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - "~>"
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '1.6'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '1.6'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: rake
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: rspec
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: simplecov
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ">="
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
type: :development
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - ">="
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: pry
|
170
|
+
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
type: :development
|
176
|
+
prerelease: false
|
177
|
+
version_requirements: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - ">="
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
description: Snuffle detects data clumps and other hints of extractable objects in
|
183
|
+
your Ruby code.
|
184
|
+
email:
|
185
|
+
- coraline@idolhands.com
|
186
|
+
executables:
|
187
|
+
- snuffle
|
188
|
+
extensions: []
|
189
|
+
extra_rdoc_files: []
|
190
|
+
files:
|
191
|
+
- ".gitignore"
|
192
|
+
- ".rspec"
|
193
|
+
- CODE_OF_CONDUCT.md
|
194
|
+
- Gemfile
|
195
|
+
- LICENSE.txt
|
196
|
+
- README.md
|
197
|
+
- Rakefile
|
198
|
+
- bin/snuffle
|
199
|
+
- lib/snuffle.rb
|
200
|
+
- lib/snuffle/cli.rb
|
201
|
+
- lib/snuffle/cohort.rb
|
202
|
+
- lib/snuffle/elements/hash.rb
|
203
|
+
- lib/snuffle/formatters/base.rb
|
204
|
+
- lib/snuffle/formatters/csv.rb
|
205
|
+
- lib/snuffle/formatters/html.rb
|
206
|
+
- lib/snuffle/formatters/html_index.rb
|
207
|
+
- lib/snuffle/formatters/templates/index.html.haml
|
208
|
+
- lib/snuffle/formatters/templates/output.html.haml
|
209
|
+
- lib/snuffle/formatters/text.rb
|
210
|
+
- lib/snuffle/line_of_code.rb
|
211
|
+
- lib/snuffle/node.rb
|
212
|
+
- lib/snuffle/source_file.rb
|
213
|
+
- lib/snuffle/summary.rb
|
214
|
+
- lib/snuffle/util/histogram.rb
|
215
|
+
- lib/snuffle/version.rb
|
216
|
+
- snuffle.gemspec
|
217
|
+
- spec/fixtures/account.rb
|
218
|
+
- spec/fixtures/program_1.rb
|
219
|
+
- spec/fixtures/program_2.rb
|
220
|
+
- spec/fixtures/program_3.rb
|
221
|
+
- spec/snuffle/elements/hash_spec.rb
|
222
|
+
- spec/snuffle/line_of_code_spec.rb
|
223
|
+
- spec/snuffle/source_file_spec.rb
|
224
|
+
- spec/snuffle/util/histogram_spec.rb
|
225
|
+
- spec/spec_helper.rb
|
226
|
+
- test.rb
|
227
|
+
homepage: ''
|
228
|
+
licenses:
|
229
|
+
- MIT
|
230
|
+
metadata: {}
|
231
|
+
post_install_message:
|
232
|
+
rdoc_options: []
|
233
|
+
require_paths:
|
234
|
+
- lib
|
235
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
236
|
+
requirements:
|
237
|
+
- - ">="
|
238
|
+
- !ruby/object:Gem::Version
|
239
|
+
version: '0'
|
240
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
241
|
+
requirements:
|
242
|
+
- - ">="
|
243
|
+
- !ruby/object:Gem::Version
|
244
|
+
version: '0'
|
245
|
+
requirements: []
|
246
|
+
rubyforge_project:
|
247
|
+
rubygems_version: 2.2.2
|
248
|
+
signing_key:
|
249
|
+
specification_version: 4
|
250
|
+
summary: Snuffle detects data clumps in your Ruby code.
|
251
|
+
test_files:
|
252
|
+
- spec/fixtures/account.rb
|
253
|
+
- spec/fixtures/program_1.rb
|
254
|
+
- spec/fixtures/program_2.rb
|
255
|
+
- spec/fixtures/program_3.rb
|
256
|
+
- spec/snuffle/elements/hash_spec.rb
|
257
|
+
- spec/snuffle/line_of_code_spec.rb
|
258
|
+
- spec/snuffle/source_file_spec.rb
|
259
|
+
- spec/snuffle/util/histogram_spec.rb
|
260
|
+
- spec/spec_helper.rb
|