picky 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -74,7 +74,7 @@ module Cacher
74
74
  index.each_key do |token|
75
75
  i += 1
76
76
  if i == 5000
77
- puts "#{Time.now}: Generating partial tokens for token #{token}. This appears every 5000 tokens."
77
+ timed_exclaim "Generating partial tokens for token #{token}. This appears every 5000 tokens."
78
78
  i = 0
79
79
  end
80
80
  generate_for token, index, result
@@ -7,7 +7,7 @@ module Configuration
7
7
  attr_reader :name, :indexed_name, :virtual
8
8
  attr_accessor :type # convenience
9
9
  def initialize name, options = {}
10
- @name = name
10
+ @name = name.to_sym
11
11
 
12
12
  # TODO Dup the options?
13
13
  # TODO add source as option
@@ -18,7 +18,7 @@ module Configuration
18
18
  @indexed_name = options.delete(:indexed_field) || name # TODO Rename to indexed_as?
19
19
  @virtual = options.delete(:virtual) || false
20
20
 
21
- qualifiers = options[:qualifiers]
21
+ qualifiers = generate_qualifiers_from options
22
22
  Query::Qualifiers.add(name, qualifiers) if qualifiers
23
23
 
24
24
  # @remove = options[:remove] || false
@@ -26,6 +26,9 @@ module Configuration
26
26
 
27
27
  @options = options
28
28
  end
29
+ def generate_qualifiers_from options
30
+ options[:qualifiers] || options[:qualifier] && [options[:qualifier]] || [name]
31
+ end
29
32
  def source
30
33
  @source || type.source
31
34
  end
@@ -7,7 +7,9 @@ class Hash
7
7
  # TODO Still used? If yes, spec!
8
8
  #
9
9
  def dump_to path
10
- File.open(path, 'w:binary') { |out_file| Marshal.dump self, out_file }
10
+ File.open(path, 'w:binary') do |out_file|
11
+ Yajl::Encoder.encode self, out_file
12
+ end
11
13
  end
12
14
 
13
15
  # Use yajl's encoding.
@@ -0,0 +1,12 @@
1
+ module Kernel
2
+
3
+
4
+ def timed_exclaim text
5
+ exclaim "#{Time.now.strftime("%H:%M:%S")}: #{text}"
6
+ end
7
+
8
+ def exclaim text
9
+ puts text
10
+ end
11
+
12
+ end
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+ #
1
3
  require 'fileutils'
2
4
 
3
5
  module Picky
@@ -67,7 +69,13 @@ module Picky
67
69
  exclaim "Setting up Picky project \"#{name}\"."
68
70
  create_target_directory
69
71
  copy_all_files
70
- exclaim "\"#{name}\" is a great project name! Have fun :)"
72
+ exclaim "\"#{name}\" is a great project name! Have fun :)\n"
73
+ exclaim "Next steps:"
74
+ exclaim ""
75
+ exclaim "cd #{name}"
76
+ exclaim "cat Gemfile # <- Do you need the mysql gem, for example?"
77
+ exclaim "bundle install"
78
+ exclaim "rake # <- shows you where Picky needs input from you."
71
79
  end
72
80
 
73
81
  #
@@ -154,6 +162,8 @@ module Picky
154
162
  exclaim "#{entry} \x1b[31mexists\x1b[m, skipping."
155
163
  end
156
164
 
165
+ # TODO Remove?
166
+ #
157
167
  def exclaim something
158
168
  puts something
159
169
  end
@@ -50,7 +50,7 @@ module Index
50
50
  # Identifier for this bundle.
51
51
  #
52
52
  def identifier
53
- "#{name}:#{type.name}:#{category.name}"
53
+ "#{name}: #{type.name} #{category.name}"
54
54
  end
55
55
 
56
56
  # Point to category.
@@ -152,7 +152,7 @@ module Index
152
152
  # Generates a cache path.
153
153
  #
154
154
  def cache_path text
155
- File.join cache_directory, "#{name}_#{text}.dump"
155
+ File.join cache_directory, "#{name}_#{text}.json"
156
156
  end
157
157
  def index_cache_path
158
158
  cache_path "#{category.name}_index"
@@ -172,18 +172,18 @@ module Index
172
172
  load_weights
173
173
  end
174
174
  def load_the index_method_name, path
175
- self.send "#{index_method_name}=", Marshal.load(File.open(path, "r:binary")) if File.exists? path
175
+ self.send "#{index_method_name}=", Yajl::Parser.parse(File.open(path, 'r'), :symbolize_keys => true)
176
176
  end
177
177
  def load_index
178
- puts "#{Time.now}: Loading the index for #{identifier} from the cache."
178
+ timed_exclaim "Loading the index for #{identifier} from the cache."
179
179
  load_the :index, index_cache_path
180
180
  end
181
181
  def load_similarity
182
- puts "#{Time.now}: Loading the similarity for #{identifier} from the cache."
182
+ timed_exclaim "Loading the similarity for #{identifier} from the cache."
183
183
  load_the :similarity, similarity_cache_path
184
184
  end
185
185
  def load_weights
186
- puts "#{Time.now}: Loading the weights for #{identifier} from the cache."
186
+ timed_exclaim "Loading the weights for #{identifier} from the cache."
187
187
  load_the :weights, weights_cache_path
188
188
  end
189
189
 
@@ -195,13 +195,15 @@ module Index
195
195
  # * generates derived indexes
196
196
  # * dumps all the indexes into files
197
197
  #
198
+ # TODO Rename to Source!!!
199
+ #
198
200
  def generate_caches_from_db
199
201
  cache_from_db_generation_message
200
202
  load_from_index_file
201
203
  generate_caches_from_memory
202
204
  end
203
205
  def cache_from_db_generation_message
204
- puts "#{Time.now}: Generating caches from db for #{identifier}."
206
+ timed_exclaim "CACHE FROM SOURCE #{identifier}."
205
207
  end
206
208
  # Generates derived indexes from the index and dumps.
207
209
  #
@@ -212,7 +214,7 @@ module Index
212
214
  generate_derived
213
215
  end
214
216
  def cache_from_memory_generation_message
215
- puts "#{Time.now}: Generating derived caches from memory for #{identifier}."
217
+ timed_exclaim "CACHE FROM MEMORY #{identifier}."
216
218
  end
217
219
 
218
220
  # Generates the weights and similarity from the main index.
@@ -34,19 +34,19 @@ module Index
34
34
  end
35
35
 
36
36
  def identifier
37
- "#{type.name}:#{name}"
37
+ "#{type.name} #{name}"
38
38
  end
39
39
 
40
40
  # Generates all caches for this category.
41
41
  #
42
42
  def generate_caches
43
- timed_exclaim "Loading data from db for #{identifier}."
43
+ timed_exclaim "LOAD #{identifier}."
44
44
  generate_caches_from_db
45
- timed_exclaim "Generating partial for #{identifier}."
45
+ timed_exclaim "PARTIAL #{identifier}."
46
46
  generate_partial
47
- timed_exclaim "Generating caches from memory for #{identifier}."
47
+ timed_exclaim "CACHE #{identifier}."
48
48
  generate_caches_from_memory
49
- timed_exclaim "Dumping all caches for #{identifier}."
49
+ timed_exclaim "DUMP #{identifier}."
50
50
  dump_caches
51
51
  end
52
52
  def generate_caches_from_db
@@ -62,16 +62,6 @@ module Index
62
62
  exact.dump
63
63
  partial.dump
64
64
  end
65
- # TODO move to Kernel?
66
- #
67
- def timed_exclaim text
68
- exclaim "#{Time.now}: #{text}"
69
- end
70
- # TODO move to Kernel?
71
- #
72
- def exclaim text
73
- puts text
74
- end
75
65
 
76
66
  # Used for testing.
77
67
  #
@@ -35,7 +35,7 @@ module Indexers
35
35
  @field.source || raise_no_source
36
36
  end
37
37
  def raise_no_source
38
- raise NoSourceSpecifiedException.new "No source given for #{@type.name}:#{@field.name}." # TODO field.identifier
38
+ raise NoSourceSpecifiedException.new "No source given for index:#{@type.name}, field:#{@field.name}." # TODO field.identifier
39
39
  end
40
40
 
41
41
  # Selects the original id (indexed id) and a column to process. The column data is called "token".
@@ -61,7 +61,7 @@ module Indexers
61
61
  end
62
62
 
63
63
  def indexing_message
64
- puts "#{Time.now}: Indexing #{@type.name}:#{@field.name}:#{@field.indexed_name}." # TODO field.identifier
64
+ timed_exclaim "INDEX #{@type.name}, #{@field.name}" #:#{@field.indexed_name}." # TODO field.identifier
65
65
  end
66
66
 
67
67
  end
@@ -21,7 +21,7 @@ module Indexers
21
21
  # TODO Rewrite such that it works in batches.
22
22
  #
23
23
  def index
24
- puts "#{Time.now}: Indexing solr for #{type.name}:#{fields.join(', ')}"
24
+ timed_exclaim "Indexing solr for #{type.name}:#{fields.join(', ')}"
25
25
  statement = "SELECT indexed_id, #{fields.join(',')} FROM #{type.snapshot_table_name}"
26
26
 
27
27
  # TODO Rewrite.
data/lib/picky/indexes.rb CHANGED
@@ -16,7 +16,7 @@ module Indexes
16
16
 
17
17
  # Run in parallel.
18
18
  #
19
- puts "Indexing using #{Cores.max_processors} processors."
19
+ timed_exclaim "Indexing using #{Cores.max_processors} processors."
20
20
  Cores.forked self.fields, :randomly => true do |field|
21
21
  # Reestablish DB connection.
22
22
  #
data/lib/picky/loader.rb CHANGED
@@ -90,6 +90,7 @@ module Loader
90
90
 
91
91
  # Load extensions.
92
92
  #
93
+ load_relative 'extensions/object'
93
94
  load_relative 'extensions/array'
94
95
  load_relative 'extensions/symbol'
95
96
  load_relative 'extensions/module'
@@ -58,10 +58,11 @@ module Query
58
58
  [identifier, *@token.to_result]
59
59
  end
60
60
 
61
- # exact/title:Flarbl:flarbl
61
+ # Example:
62
+ # "exact title:Peter*:peter"
62
63
  #
63
64
  def to_s
64
- "#{bundle.name}/#{to_result.join(':')}"
65
+ "#{bundle.name} #{to_result.join(':')}"
65
66
  end
66
67
 
67
68
  end
@@ -13,7 +13,7 @@ module Query
13
13
  #
14
14
  def initialize normalized_qualifier, codes
15
15
  @normalized_qualifier = normalized_qualifier
16
- @codes = codes
16
+ @codes = codes.map &:to_sym
17
17
  end
18
18
 
19
19
  # Will overwrite if the key is present in the hash.
@@ -9,15 +9,21 @@ gem 'rack-mount', '~> 0.6.9'
9
9
  gem 'text', '~> 0.2.0'
10
10
  gem 'yajl-ruby', '~> 0.7.8', :require => 'yajl'
11
11
 
12
- # Should be optional, but isn't yet.
12
+ # Should be optional, but isn't yet. Sorry.
13
13
  #
14
14
  gem 'activerecord', '~> 2.3.8', :require => 'active_record'
15
15
 
16
- # Optional.
16
+
17
+
18
+
19
+ # Optional. Makes rack faster.
17
20
  #
18
21
  gem 'rack_fast_escape', '2009.06.24'
19
22
 
20
- # Required by your project.
23
+ # Optional. Use your preferred web server.
21
24
  #
22
25
  gem 'unicorn'
26
+
27
+ # Optional. Use your preferred database adapter.
28
+ #
23
29
  gem 'mysql'
@@ -0,0 +1,33 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activerecord (2.3.10)
5
+ activesupport (= 2.3.10)
6
+ activesupport (2.3.10)
7
+ mysql (2.8.1)
8
+ picky (0.2.3)
9
+ rack (1.2.1)
10
+ rack-mount (0.6.13)
11
+ rack (>= 1.0.0)
12
+ rack_fast_escape (2009.06.24)
13
+ url_escape
14
+ text (0.2.0)
15
+ unicorn (1.1.4)
16
+ rack
17
+ url_escape (2009.06.24)
18
+ yajl-ruby (0.7.8)
19
+
20
+ PLATFORMS
21
+ ruby
22
+
23
+ DEPENDENCIES
24
+ activerecord (~> 2.3.8)
25
+ bundler (>= 0.9.26)
26
+ mysql
27
+ picky (~> 0.2.0)
28
+ rack (~> 1.2.1)
29
+ rack-mount (~> 0.6.9)
30
+ rack_fast_escape (= 2009.06.24)
31
+ text (~> 0.2.0)
32
+ unicorn
33
+ yajl-ruby (~> 0.7.8)
@@ -1 +1,11 @@
1
- require 'picky-tasks'
1
+ require 'picky-tasks'
2
+
3
+ desc "Finds where Picky still needs input from you."
4
+ task :todo do
5
+ if system "grep -e 'TO#{}DO.*' -n --color=always -R *"
6
+ puts "Picky needs a bit of input from you there. Thanks."
7
+ else
8
+ puts "Picky seems to be fine (no TO#{}DOs found)."
9
+ end
10
+ end
11
+ task :default => :todo
@@ -1,14 +1,11 @@
1
1
  # encoding: utf-8
2
2
  #
3
- # This is your application.
4
- #
5
- # Have fun with Picky!
6
- #
7
- class PickySearch < Application # The App Constant needs to be identical in config.ru.
3
+ class PickySearch < Application
8
4
 
9
- # This is an example with books that you can adapt.
5
+ # TODO Adapt the generated example
6
+ # (a library books finder) to what you need.
10
7
  #
11
- # Note: Much more is possible, but let's start out super easy.
8
+ # Check the Wiki http://github.com/floere/picky/wiki for more options.
12
9
  #
13
10
  # Ask me if you have questions or specific requests.
14
11
  #
@@ -2,6 +2,9 @@
2
2
  #
3
3
  # Note: ActiveRecord is used. Sorry.
4
4
  #
5
+ # TODO Configure the database adapter
6
+ # or ignore and use a csv source.
7
+ #
5
8
  adapter: mysql
6
9
  host: localhost
7
10
  username: root
@@ -16,18 +16,19 @@ require 'picky'
16
16
  #
17
17
  Loader.load_application
18
18
 
19
- # Load the data. This loads data from cache files e.g. "some_index/*_index.dump" into Indexes[:some_index]
19
+ # Load the indexes into the memory.
20
20
  #
21
21
  Indexes.load_from_cache
22
22
 
23
- # Use Harakiri middleware to kill unicorn child after X requests.
23
+ # Use Harakiri middleware to kill worker child after X requests.
24
24
  #
25
- # See http://vimeo.com/12614970 for more info.
25
+ # Works only with web servers that fork worker children and which
26
+ # fork new children, like for example Unicorn.
26
27
  #
27
- Rack::Harakiri.after = 50
28
+ Rack::Harakiri.after = 50
28
29
  use Rack::Harakiri
29
30
 
30
- # Finalize the application and start accepting requests.
31
+ # Start accepting requests.
31
32
  #
32
33
  # Note: Needs to be the same constant name as in app/application.rb.
33
34
  #
@@ -6,6 +6,10 @@ stdout_path 'log/unicorn.stdout.log'
6
6
  timeout 10
7
7
  worker_processes 2
8
8
 
9
+ # After forking, the GC is disabled, because we
10
+ # kill off the workers after x requests and fork
11
+ # new ones – so the GC doesn't run.
12
+ #
9
13
  after_fork do |_, _|
10
14
  GC.disable
11
15
  end
@@ -106,7 +106,7 @@ describe Cacher::Partial::Subtoken do
106
106
  end
107
107
  end
108
108
  it "should be fast" do
109
- performance_of { @cacher.generate_from(@index) }.should < 0.005
109
+ performance_of { @cacher.generate_from(@index) }.should < 0.008
110
110
  end
111
111
  end
112
112
  describe "a bigger example with almost identical symbols" do
@@ -118,7 +118,7 @@ describe Cacher::Partial::Subtoken do
118
118
  end
119
119
  end
120
120
  it "should be fast" do
121
- performance_of { @cacher.generate_from(@index) }.should < 0.003
121
+ performance_of { @cacher.generate_from(@index) }.should < 0.0045
122
122
  end
123
123
  end
124
124
  end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+ describe "Configuration::Field" do
3
+
4
+ context "unit specs" do
5
+ context "name symbol" do
6
+ before(:each) do
7
+ @field = Configuration::Field.new :some_name
8
+ end
9
+ describe "generate_qualifiers_from" do
10
+ context "with qualifiers" do
11
+ it "uses the qualifiers" do
12
+ @field.generate_qualifiers_from(:qualifiers => :some_qualifiers).should == :some_qualifiers
13
+ end
14
+ end
15
+ context "without qualifiers" do
16
+ context "with qualifier" do
17
+ it "uses the [qualifier]" do
18
+ @field.generate_qualifiers_from(:qualifier => :some_qualifier).should == [:some_qualifier]
19
+ end
20
+ end
21
+ context "without qualifier" do
22
+ context "with name" do
23
+ it "uses the [name]" do
24
+ @field.generate_qualifiers_from(:nork => :blark).should == [:some_name]
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ context "name string" do
32
+ before(:each) do
33
+ @field = Configuration::Field.new 'some_name'
34
+ end
35
+ describe "generate_qualifiers_from" do
36
+ context "without qualifiers" do
37
+ context "without qualifier" do
38
+ context "with name" do
39
+ it "uses the [name]" do
40
+ @field.generate_qualifiers_from(:nork => :blark).should == [:some_name]
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe Object do
4
+
5
+ before(:each) do
6
+ @object = Object.new
7
+ end
8
+
9
+ describe "exclaim" do
10
+ it "delegates to puts" do
11
+ @object.should_receive(:puts).once.with :bla
12
+
13
+ @object.exclaim :bla
14
+ end
15
+ end
16
+
17
+ describe "timed_exclaim" do
18
+ it "should exclaim right" do
19
+ Time.stub! :now => Time.parse('07-03-1977 12:34:56')
20
+ @object.should_receive(:exclaim).once.with "12:34:56: bla"
21
+
22
+ @object.timed_exclaim 'bla'
23
+ end
24
+ end
25
+
26
+ end
@@ -17,7 +17,7 @@ describe Symbol do
17
17
  it "should be fast" do
18
18
  timed do
19
19
  @token.each_subtoken do |subtoken| end
20
- end.should < 0.0004
20
+ end.should < 0.0005
21
21
  end
22
22
  end
23
23
 
@@ -14,7 +14,7 @@ describe Index::Bundle do
14
14
 
15
15
  describe 'identifier' do
16
16
  it 'should return a specific identifier' do
17
- @index.identifier.should == 'some_name:some_type:some_category'
17
+ @index.identifier.should == 'some_name: some_type some_category'
18
18
  end
19
19
  end
20
20
 
@@ -141,7 +141,7 @@ describe Index::Bundle do
141
141
  it 'should raise' do
142
142
  lambda do
143
143
  @index.raise_unless_cache_exists
144
- end.should raise_error("weights cache for some_name:some_type:some_category missing.")
144
+ end.should raise_error("weights cache for some_name: some_type some_category missing.")
145
145
  end
146
146
  end
147
147
  context 'similarity cache missing' do
@@ -153,7 +153,7 @@ describe Index::Bundle do
153
153
  it 'should raise' do
154
154
  lambda do
155
155
  @index.raise_unless_cache_exists
156
- end.should raise_error("similarity cache for some_name:some_type:some_category missing.")
156
+ end.should raise_error("similarity cache for some_name: some_type some_category missing.")
157
157
  end
158
158
  end
159
159
  context 'index cache missing' do
@@ -165,7 +165,7 @@ describe Index::Bundle do
165
165
  it 'should raise' do
166
166
  lambda do
167
167
  @index.raise_unless_cache_exists
168
- end.should raise_error("index cache for some_name:some_type:some_category missing.")
168
+ end.should raise_error("index cache for some_name: some_type some_category missing.")
169
169
  end
170
170
  end
171
171
  context 'all ok' do
@@ -210,17 +210,17 @@ describe Index::Bundle do
210
210
 
211
211
  describe 'weights_cache_path' do
212
212
  it 'should return the correct file name' do
213
- @index.weights_cache_path.should == 'some/search/root/index/test/some_type/some_name_some_category_weights.dump'
213
+ @index.weights_cache_path.should == 'some/search/root/index/test/some_type/some_name_some_category_weights.json'
214
214
  end
215
215
  end
216
216
  describe 'similarity_cache_path' do
217
217
  it 'should return the correct file name' do
218
- @index.similarity_cache_path.should == 'some/search/root/index/test/some_type/some_name_some_category_similarity.dump'
218
+ @index.similarity_cache_path.should == 'some/search/root/index/test/some_type/some_name_some_category_similarity.json'
219
219
  end
220
220
  end
221
221
  describe 'index_cache_path' do
222
222
  it 'should return the correct file name' do
223
- @index.index_cache_path.should == 'some/search/root/index/test/some_type/some_name_some_category_index.dump'
223
+ @index.index_cache_path.should == 'some/search/root/index/test/some_type/some_name_some_category_index.json'
224
224
  end
225
225
  end
226
226
 
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Query::Qualifiers do
4
4
 
5
5
  before(:each) do
6
- Query::Qualifiers.instance << Query::Qualifier.new(:test1, [:t1, :tt1, :ttt1])
6
+ Query::Qualifiers.instance << Query::Qualifier.new(:test1, ['t1', 'tt1', 'ttt1'])
7
7
  Query::Qualifiers.instance << Query::Qualifier.new(:test2, [:t2, :tt2, :ttt2])
8
8
  Query::Qualifiers.instance << Query::Qualifier.new(:test3, [:t3, :tt3, :ttt3])
9
9
  Query::Qualifiers.instance.prepare
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 3
9
- version: 0.2.3
8
+ - 4
9
+ version: 0.2.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Florian Hanke
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-15 00:00:00 +02:00
17
+ date: 2010-10-24 00:00:00 +02:00
18
18
  default_executable: picky
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -68,6 +68,7 @@ files:
68
68
  - lib/picky/extensions/array.rb
69
69
  - lib/picky/extensions/hash.rb
70
70
  - lib/picky/extensions/module.rb
71
+ - lib/picky/extensions/object.rb
71
72
  - lib/picky/extensions/symbol.rb
72
73
  - lib/picky/generator.rb
73
74
  - lib/picky/helpers/cache.rb
@@ -134,6 +135,7 @@ files:
134
135
  - prototype_project/app/README
135
136
  - prototype_project/config.ru
136
137
  - prototype_project/Gemfile
138
+ - prototype_project/Gemfile.lock
137
139
  - prototype_project/log/README
138
140
  - prototype_project/Rakefile
139
141
  - prototype_project/script/console
@@ -150,11 +152,13 @@ files:
150
152
  - spec/lib/cacher/similarity_generator_spec.rb
151
153
  - spec/lib/cacher/weights/logarithmic_spec.rb
152
154
  - spec/lib/cacher/weights_generator_spec.rb
155
+ - spec/lib/configuration/field_spec.rb
153
156
  - spec/lib/configuration/type_spec.rb
154
157
  - spec/lib/cores_spec.rb
155
158
  - spec/lib/extensions/array_spec.rb
156
159
  - spec/lib/extensions/hash_spec.rb
157
160
  - spec/lib/extensions/module_spec.rb
161
+ - spec/lib/extensions/object_spec.rb
158
162
  - spec/lib/extensions/symbol_spec.rb
159
163
  - spec/lib/generator_spec.rb
160
164
  - spec/lib/helpers/cache_spec.rb
@@ -235,11 +239,13 @@ test_files:
235
239
  - spec/lib/cacher/similarity_generator_spec.rb
236
240
  - spec/lib/cacher/weights/logarithmic_spec.rb
237
241
  - spec/lib/cacher/weights_generator_spec.rb
242
+ - spec/lib/configuration/field_spec.rb
238
243
  - spec/lib/configuration/type_spec.rb
239
244
  - spec/lib/cores_spec.rb
240
245
  - spec/lib/extensions/array_spec.rb
241
246
  - spec/lib/extensions/hash_spec.rb
242
247
  - spec/lib/extensions/module_spec.rb
248
+ - spec/lib/extensions/object_spec.rb
243
249
  - spec/lib/extensions/symbol_spec.rb
244
250
  - spec/lib/generator_spec.rb
245
251
  - spec/lib/helpers/cache_spec.rb