snuffle 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,7 @@
1
+ require 'simplecov'
2
+
3
+ SimpleCov.start
4
+
5
+ require 'rubygems'
6
+ require 'rspec'
7
+ require 'snuffle'
data/test.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'snuffle'
2
+
3
+ def source_file
4
+ @source_file ||= Snuffle::SourceFile.new(path_to_file: "spec/fixtures/program_2.rb")
5
+ end
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