flog 2.2.0 → 2.3.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.
metadata CHANGED
@@ -1,15 +1,36 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flog
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
8
8
  autorequire:
9
9
  bindir: bin
10
- cert_chain: []
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDPjCCAiagAwIBAgIBADANBgkqhkiG9w0BAQUFADBFMRMwEQYDVQQDDApyeWFu
14
+ ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
15
+ GRYDY29tMB4XDTA5MDMwNjE4NTMxNVoXDTEwMDMwNjE4NTMxNVowRTETMBEGA1UE
16
+ AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
17
+ JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
18
+ b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
19
+ taCPaLmfYIaFcHHCSY4hYDJijRQkLxPeB3xbOfzfLoBDbjvx5JxgJxUjmGa7xhcT
20
+ oOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh
21
+ GiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt
22
+ qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
23
+ gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
24
+ HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBBQUAA4IB
25
+ AQAY59gYvDxqSqgC92nAP9P8dnGgfZgLxP237xS6XxFGJSghdz/nI6pusfCWKM8m
26
+ vzjjH2wUMSSf3tNudQ3rCGLf2epkcU13/rguI88wO6MrE0wi4ZqLQX+eZQFskJb/
27
+ w6x9W1ur8eR01s397LSMexySDBrJOh34cm2AlfKr/jokKCTwcM0OvVZnAutaovC0
28
+ l1SVZ0ecg88bsWHA0Yhh7NFxK1utWoIhtB6AFC/+trM0FQEB/jZkIS8SaNzn96Rl
29
+ n0sZEf77FLf5peR8TP/PtmIg7Cyqz23sLM4mCOoTGIy5OcZ8TdyiyINUHtb5ej/T
30
+ FBHgymkyj/AOSqKRIpXPhjC6
31
+ -----END CERTIFICATE-----
11
32
 
12
- date: 2009-08-14 00:00:00 -07:00
33
+ date: 2009-12-09 00:00:00 -08:00
13
34
  default_executable:
14
35
  dependencies:
15
36
  - !ruby/object:Gem::Dependency
@@ -40,7 +61,7 @@ dependencies:
40
61
  requirements:
41
62
  - - ">="
42
63
  - !ruby/object:Gem::Version
43
- version: 2.3.3
64
+ version: 2.4.0
44
65
  version:
45
66
  description: |-
46
67
  Flog reports the most tortured code in an easy to read pain
@@ -56,32 +77,16 @@ extra_rdoc_files:
56
77
  - Manifest.txt
57
78
  - README.txt
58
79
  files:
80
+ - .autotest
59
81
  - History.txt
60
82
  - Manifest.txt
61
83
  - README.txt
62
84
  - Rakefile
63
85
  - bin/flog
64
- - gem_updater.rb
65
86
  - lib/flog.rb
66
87
  - lib/flog_task.rb
67
88
  - lib/gauntlet_flog.rb
68
- - unpack.rb
69
- - update_scores.rb
70
- - spec_fixtures/collection/bigger_example/acts/date_range.rb
71
- - spec_fixtures/collection/bigger_example/acts/range.rb
72
- - spec_fixtures/collection/bigger_example/association_extensions/date_ranged.rb
73
- - spec_fixtures/collection/bigger_example/association_extensions/ranged.rb
74
- - spec_fixtures/collection/bigger_example/reflection_extensions/ranged.rb
75
- - spec_fixtures/directory/bot_filter.rb
76
- - spec_fixtures/directory/bot_parser.rb
77
- - spec_fixtures/directory/bot_parser_format.rb
78
- - spec_fixtures/directory/bot_sender.rb
79
- - spec_fixtures/empty/empty.rb
80
- - spec_fixtures/simple/simple.rb
81
89
  - test/test_flog.rb
82
- - test/test_flog_command.rb
83
- - test/test_flog_integration.rb
84
- - test/test_helper.rb
85
90
  has_rdoc: true
86
91
  homepage: http://ruby.sadi.st/
87
92
  licenses: []
@@ -113,6 +118,3 @@ specification_version: 3
113
118
  summary: Flog reports the most tortured code in an easy to read pain report
114
119
  test_files:
115
120
  - test/test_flog.rb
116
- - test/test_flog_command.rb
117
- - test/test_flog_integration.rb
118
- - test/test_helper.rb
Binary file
@@ -1,161 +0,0 @@
1
- require 'rubygems/remote_fetcher'
2
-
3
- $u ||= false
4
-
5
- module GemUpdater
6
- GEMURL = URI.parse 'http://gems.rubyforge.org'
7
-
8
- @@index = nil
9
-
10
- def self.stupid_gems
11
- ["ruby-aes-table1-1.0.gem", # stupid dups usually because of "dash" renames
12
- "ruby-aes-unroll1-1.0.gem",
13
- "hpricot-scrub-0.2.0.gem",
14
- "extract_curves-0.0.1.gem",
15
- "extract_curves-0.0.1-i586-linux.gem",
16
- "extract_curves-0.0.1-mswin32.gem",
17
- "rfeedparser-ictv-0.9.931.gem",
18
- "spec_unit-0.0.1.gem"]
19
- end
20
-
21
- def self.initialize_dir
22
- Dir.mkdir "../gems" unless File.directory? "../gems"
23
- self.in_gem_dir do
24
- File.symlink ".", "cache" unless File.exist? "cache"
25
- end
26
- end
27
-
28
- def self.get_source_index
29
- return @@index if @@index
30
-
31
- dump = if $u or not File.exist? '.source_index' then
32
- url = GEMURL + "Marshal.#{Gem.marshal_version}.Z"
33
- dump = Gem::RemoteFetcher.fetcher.fetch_path url
34
- require 'zlib'
35
- dump = Gem.inflate dump
36
- open '.source_index', 'wb' do |io| io.write dump end
37
- dump
38
- else
39
- open '.source_index', 'rb' do |io| io.read end
40
- end
41
-
42
- @@index = Marshal.load dump
43
- end
44
-
45
- def self.get_latest_gems
46
- @@cache ||= get_source_index.latest_specs
47
- end
48
-
49
- def self.get_gems_by_name
50
- @@by_name ||= Hash[*get_latest_gems.map { |gem|
51
- [gem.name, gem, gem.full_name, gem]
52
- }.flatten]
53
- end
54
-
55
- def self.dependencies_of name
56
- index = self.get_source_index
57
- get_gems_by_name[name].dependencies.map { |dep| index.search(dep).last }
58
- end
59
-
60
- def self.dependent_upon name
61
- get_latest_gems.find_all { |gem|
62
- gem.dependencies.any? { |dep| dep.name == name }
63
- }
64
- end
65
-
66
- def self.update_gem_tarballs
67
- GemUpdater.initialize_dir
68
-
69
- latest = GemUpdater.get_latest_gems
70
-
71
- puts "updating mirror"
72
-
73
- self.in_gem_dir do
74
- gems = Dir["*.gem"]
75
- tgzs = Dir["*.tgz"]
76
-
77
- old = tgzs - latest.map { |spec| "#{spec.full_name}.tgz" }
78
- unless old.empty? then
79
- puts "deleting #{old.size} tgzs"
80
- old.each do |tgz|
81
- File.unlink tgz
82
- end
83
- end
84
-
85
- new = latest.map { |spec|
86
- "#{spec.full_name}.tgz"
87
- } - tgzs
88
-
89
- puts "fetching #{new.size} tgzs"
90
-
91
- latest.sort.each do |spec|
92
- full_name = spec.full_name
93
- tgz_name = "#{full_name}.tgz"
94
- gem_name = "#{full_name}.gem"
95
-
96
- next if tgzs.include? tgz_name
97
-
98
- unless gems.include? gem_name then
99
- begin
100
- warn "downloading #{full_name}"
101
- Gem::RemoteFetcher.fetcher.download(spec, GEMURL, Dir.pwd)
102
- rescue Gem::RemoteFetcher::FetchError
103
- warn " failed"
104
- next
105
- end
106
- end
107
-
108
- warn "converting #{gem_name} to tarball"
109
-
110
- unless File.directory? full_name then
111
- system "gem unpack cache/#{gem_name}"
112
- system "gem spec -l cache/#{gem_name} > #{full_name}/gemspec.rb"
113
- end
114
-
115
- system "tar zmcf #{tgz_name} #{full_name}"
116
- system "rm -rf #{full_name} #{gem_name}"
117
- end
118
- end
119
- end
120
-
121
- def self.each_gem filter = /^[\w-]+-\d+(\.\d+)*\.tgz$/
122
- self.in_gem_dir do
123
- Dir["*.tgz"].each do |tgz|
124
- next unless tgz =~ filter
125
-
126
- yield File.basename(tgz, ".tgz")
127
- end
128
- end
129
- end
130
-
131
- def self.with_gem name
132
- self.in_gem_dir do
133
- begin
134
- system "tar zxmf #{name}.tgz 2> /dev/null"
135
- Dir.chdir name do
136
- yield name
137
- end
138
- ensure
139
- system "rm -r #{name}"
140
- end
141
- end
142
- end
143
-
144
- def self.load_yaml path, default = {}
145
- YAML.load(File.read(path)) rescue default
146
- end
147
-
148
- def self.save_yaml path, data
149
- File.open("#{path}.new", 'w') do |f|
150
- warn "*** saving #{path}"
151
- YAML.dump data, f
152
- end
153
- File.rename "#{path}.new", path
154
- end
155
-
156
- def self.in_gem_dir
157
- Dir.chdir "../gems" do
158
- yield
159
- end
160
- end
161
- end
@@ -1,199 +0,0 @@
1
- module Centerstone #:nodoc:
2
- module Acts #:nodoc:
3
- module DateRange
4
- include ActionView::Helpers::DateHelper
5
-
6
- def self.included(base) # :nodoc:
7
- base.extend ClassMethods
8
- unless ActiveRecord::Base.respond_to?(:end_dated_association_date)
9
- class << ActiveRecord::Base
10
- attr :end_dated_association_date, true
11
- end
12
- ActiveRecord::Base.end_dated_association_date = Proc.new { Time.now }
13
- end
14
- end
15
-
16
- module InstanceMethods
17
- def self.included(base) # :nodoc:
18
- base.extend ClassMethods
19
- end
20
-
21
- %w{begin end}.each do |bound|
22
- define_method "acts_as_range_#{bound}" do
23
- send(self.class.send("acts_as_range_#{bound}_attr").to_sym)
24
- end
25
-
26
- define_method "acts_as_range_#{bound}=" do |val|
27
- send((self.class.send("acts_as_range_#{bound}_attr").to_s + '=').to_sym, val)
28
- end
29
- end
30
-
31
- # does the range for this object include the specified point in time?
32
- def include?(t)
33
- true if self.class.find(self.id, :on => t)
34
- rescue
35
- false
36
- end
37
-
38
- # expire this object
39
- def expire(time = Time.now)
40
- return false if acts_as_range_end
41
- if time.is_a?(Time)
42
- self.acts_as_range_end = 1.second.ago(time)
43
- elsif time.is_a?(Date)
44
- self.acts_as_range_end = time - 1
45
- end
46
- save!
47
- end
48
-
49
- # see if this object is expired
50
- def expired?(time = Time.now)
51
- return false if not acts_as_range_end
52
- return acts_as_range_end <= time
53
- end
54
-
55
- # return a description of how long this object (has) lived (as of some specified point in time)
56
- def lifetime(time = Time.now)
57
- return 'forever' if acts_as_range_begin.nil?
58
- return 'in future' if acts_as_range_end.nil? and acts_as_range_begin > time
59
- distance_of_time_in_words(acts_as_range_begin, acts_as_range_end || time)
60
- end
61
-
62
- def limit_date_range(&block)
63
- time = [ acts_as_range_begin, acts_as_range_end ]
64
- prior, ActiveRecord::Base.end_dated_association_date = ActiveRecord::Base.end_dated_association_date, Proc.new { time }
65
- yield
66
- ensure
67
- ActiveRecord::Base.end_dated_association_date = prior
68
- end
69
-
70
- def destroy_without_callbacks
71
- unless new_record?
72
- if acts_as_range_configuration[:end_dated]
73
- now = self.default_timezone == :utc ? Time.now.utc : Time.now
74
- self.class.update_all self.class.send(:sanitize_sql, ["#{acts_as_range_end_attr} = ?", now]), "id = #{quote_value(id)}"
75
- else
76
- super
77
- end
78
- end
79
- freeze
80
- end
81
-
82
-
83
- module ClassMethods
84
-
85
- # find objects with intervals including the current time
86
- def with_current_time_scope(&block)
87
- t = ActiveRecord::Base.end_dated_association_date.call
88
- if t.respond_to? :first
89
- with_overlapping_scope(t.first, t.last, &block)
90
- else
91
- with_containing_scope(t, t, &block)
92
- end
93
- end
94
-
95
- end
96
- end
97
-
98
- module ClassMethods
99
- def acts_as_date_range(options = {})
100
- return if acts_as_date_range? # don't let this be done twice
101
- raise "options must be a Hash" unless options.is_a?(Hash)
102
-
103
- acts_as_range({ :begin => :begin_time, :end => :end_time }.update(options))
104
- acts_as_date_range_configure_class(options)
105
- end
106
-
107
- def acts_as_date_range?
108
- included_modules.include?(InstanceMethods)
109
- end
110
-
111
- def sequentialized?
112
- sequentialized_on ? true : false
113
- end
114
-
115
- def sequentialized_on
116
- acts_as_range_configuration[:sequentialize]
117
- end
118
-
119
- protected
120
-
121
- def acts_as_date_range_singleton_sequentialize_class
122
- before_validation_on_create do |obj|
123
- obj.acts_as_range_begin ||= Time.now
124
- true
125
- end
126
-
127
- before_create do |obj|
128
- # Expiring any open object
129
- obj.class.find(:all, :conditions => "#{acts_as_range_end_attr} is null").each {|o| o.expire(obj.acts_as_range_begin)}
130
- true
131
- end
132
-
133
- validate_on_create do |obj|
134
- # If any record defines a date after the begin_date then data is corrupt
135
- if obj.class.count(:conditions => ["#{acts_as_range_begin_attr} >= ? or #{acts_as_range_end_attr} > ?",
136
- obj.acts_as_range_begin, obj.acts_as_range_begin]) > 0
137
- obj.errors.add(acts_as_range_begin_attr, 'Begin time is before other keys begin time or end time')
138
- end
139
- true
140
- end
141
- end
142
-
143
- module ParamExtension
144
- def to_sql
145
- collect { |elem| "#{elem} = ?" }.join(' and ')
146
- end
147
-
148
- def to_attributes_for(obj)
149
- collect { |elem| obj.attributes[elem.to_s] }
150
- end
151
- end
152
-
153
-
154
- def acts_as_date_range_param_sequentialize_class(*params)
155
- params.extend(ParamExtension)
156
-
157
- before_validation_on_create do |obj|
158
- obj.acts_as_range_begin ||= Time.now
159
- true
160
- end
161
-
162
- before_create do |obj|
163
- # Expiring any open object
164
- obj.class.find(:all, :conditions => ["#{acts_as_range_end_attr} is null and #{params.to_sql}",
165
- params.to_attributes_for(obj)].flatten).each do |o|
166
- o.expire(obj.acts_as_range_begin)
167
- end
168
- true
169
- end
170
-
171
- validate_on_create do |obj|
172
- # If any record defines a date after the begin_date then data is corrupt
173
- if obj.class.count(:conditions => ["#{params.to_sql} and (#{acts_as_range_begin_attr} >= ? or #{acts_as_range_end_attr} > ?)",
174
- params.to_attributes_for(obj), obj.acts_as_range_begin, obj.acts_as_range_begin].flatten) > 0
175
- obj.errors.add(acts_as_range_begin_attr, 'Begin time is before other begin time or end time')
176
- end
177
- true
178
- end
179
- end
180
-
181
- def acts_as_date_range_sequentialize_class(*params)
182
- params.flatten!
183
- if params == [true]
184
- acts_as_date_range_singleton_sequentialize_class
185
- else
186
- acts_as_date_range_param_sequentialize_class(*params)
187
- end
188
- end
189
-
190
- def acts_as_date_range_configure_class(options = {})
191
- write_inheritable_attribute(:acts_as_date_range_configuration, options)
192
- include InstanceMethods
193
-
194
- acts_as_date_range_sequentialize_class(options[:sequentialize]) if options[:sequentialize]
195
- end
196
- end
197
- end
198
- end
199
- end