cldwalker-alias 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT LICENSE
2
2
 
3
- Copyright (c) 2008 Gabriel Horner
3
+ Copyright (c) 2009 Gabriel Horner
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
data/README.rdoc CHANGED
@@ -30,6 +30,41 @@ call methods as if they were top level keys in the config:
30
30
  a.instance_method = {'String'=>{'downcase'=>'dc' }, 'Array'=>{'select'=>'s'}}
31
31
  end
32
32
 
33
+ == Irb/Console Use
34
+
35
+ To use in irb or your own console, simply include the console class:
36
+
37
+ irb>>include Alias::Console
38
+ => Object
39
+
40
+ Currently only two methods are imported: search and create.
41
+ Search lists your aliases and create, well, creates aliases.
42
+
43
+ Create:
44
+
45
+ irb>>create :constant, "Alias"=>"A"
46
+ =>nil
47
+
48
+ irb>>A
49
+ =>Alias
50
+
51
+ Search:
52
+
53
+ # Searches all alias types for an Alias
54
+ irb>>search :alias=>'A'
55
+ A = Alias (type: constant)
56
+
57
+ #Searches all alias types for any aliases with an A
58
+ irb>>search :alias=>/A/
59
+ A = Alias (type: constant)
60
+ AB = ActiveRecord::Base (type: constant)
61
+
62
+ #Searches only class_method types named 'find'
63
+ irb>>search :type=>'class_method', :name=>'find'
64
+ [] = find (type: class_method, class: ActiveRecord::Base)
65
+
66
+
67
+
33
68
  == Configuration
34
69
 
35
70
  For an example config file see aliases.yml.example.
@@ -67,8 +102,8 @@ See creator.rb for more methods you can hook into.
67
102
 
68
103
  == Todo
69
104
 
70
- * Provide an auto_alias method for creators.
71
- * List and search your aliases which can be easy to forget.
72
105
  * Alias/forward methods from one object to another. This will be useful for creating
73
106
  'commands' in irb.
107
+ * Provide an auto_alias method for creators.
108
+ * Save aliases to file (for console use).
74
109
  * Add more RDoc documentation.
data/Rakefile CHANGED
@@ -24,7 +24,8 @@ begin
24
24
  s.summary = s.description
25
25
  s.authors = ["Gabriel Horner"]
26
26
  s.has_rdoc = true
27
- s.files = FileList["Rakefile", "README.rdoc", "LICENSE.txt", "aliases.yml.example", "{lib,test}/**/*"]
27
+ s.extra_rdoc_files = ["README.rdoc", "LICENSE.txt"]
28
+ s.files = FileList["Rakefile", "VERSION.yml", "README.rdoc", "LICENSE.txt", "aliases.yml.example", "{lib,test}/**/*"]
28
29
  end
29
30
 
30
31
  rescue LoadError
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :major: 0
3
+ :minor: 1
4
+ :patch: 2
@@ -0,0 +1,56 @@
1
+ #Usage: include Alias::Console wherever you want to use these methods
2
+ module Alias
3
+ module Console
4
+ def self.included(base)
5
+ base.extend self
6
+ end
7
+
8
+ def create(*args)
9
+ Alias.manager.create_aliases(*args)
10
+ end
11
+
12
+ #options: type, raw, class, sort
13
+ #s 'man', :type=>'instance_method'
14
+ #s /ma/, :raw=>true
15
+ def search(*args)
16
+ options = args[-1].is_a?(Hash) ? args[-1].slice_off!(:raw, :sort) : {}
17
+ if args[0] && ! (args[0].is_a?(Hash) && args[0].empty?)
18
+ if args[0].is_a?(String) or args[0].is_a?(Regexp)
19
+ search_hash = {:name=>args[0]}
20
+ search_hash.merge!(args[1]) if args[1].is_a?(Hash)
21
+ elsif args[0].is_a?(Hash)
22
+ search_hash = args[0]
23
+ end
24
+ result = Alias.manager.search(search_hash)
25
+ else
26
+ result = Alias.manager.list
27
+ end
28
+
29
+ if options[:sort]
30
+ result = result.sort {|a,b|
31
+ (a[options[:sort]].nil? || b[options[:sort]].nil?) ? 1 :
32
+ (a[options[:sort]]) <=> b[options[:sort]]
33
+ }
34
+ end
35
+ if options[:raw]
36
+ result
37
+ else
38
+ format_search(result, options)
39
+ nil
40
+ end
41
+ end
42
+
43
+ def format_search(result, options)
44
+ body = ''
45
+ if result.empty?
46
+ body = "No results"
47
+ else
48
+ result.each do |e|
49
+ h = e.slice_off!(:name, :alias)
50
+ body += "#{h[:alias]} = #{h[:name]} (" + e.map {|k,v| "#{k}: #{v}"}.join(", ") + ")\n"
51
+ end
52
+ end
53
+ puts body
54
+ end
55
+ end
56
+ end
@@ -26,6 +26,10 @@ module Alias
26
26
  make_shortest_aliases(array_to_alias)
27
27
  end
28
28
 
29
+ def to_searchable_array
30
+ @alias_map.map {|k,v| {:name=>k, :alias=>v}}
31
+ end
32
+
29
33
  def make_shortest_aliases(unaliased_strings)
30
34
  shortest_aliases = {}
31
35
  possible_alias = ''
@@ -43,10 +43,4 @@ class String
43
43
  self.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
44
44
  end
45
45
  end
46
- end
47
-
48
- class OpenStruct
49
- def to_hash
50
- @table
51
- end
52
46
  end
data/lib/alias/creator.rb CHANGED
@@ -6,38 +6,45 @@
6
6
  module Alias
7
7
  class Creator
8
8
 
9
- attr_accessor :verbose, :alias_map, :force
9
+ attr_accessor :verbose, :force, :searched_at, :modified_at, :alias_map
10
10
  def initialize(aliases_hash={})
11
- @alias_map = aliases_hash
11
+ self.alias_map = aliases_hash
12
12
  @verbose = false
13
13
  @force = false
14
14
  end
15
15
 
16
- # Options are:
17
- # * :auto_alias : Array of constants to alias by shortest available constant. For example,
18
- # if the constant A already exists, then Aardvark would be aliased to Aa.
19
- def self.create(aliases_hash, options={})
20
- obj = new(aliases_hash)
21
- obj.verbose = options['verbose'] if options['verbose']
22
- obj.force = options['force'] if options['force']
23
- obj.create(obj.alias_map)
24
- if options['auto_alias']
25
- obj.alias_map = obj.alias_map.merge(obj.auto_create(options['auto_alias']))
26
- end
27
- obj
16
+ def modified_since_last_search?
17
+ (@searched_at && @modified_at) ? (@modified_at > @searched_at) : true
18
+ end
19
+
20
+ def alias_map=(value)
21
+ @modified_at = Time.now
22
+ @alias_map = value
28
23
  end
29
24
 
30
- #needs to return generated aliases_hash
31
25
  def auto_create(array_to_alias)
32
26
  aliases_hash = generate_aliases(array_to_alias)
33
27
  create(aliases_hash)
34
28
  aliases_hash
35
29
  end
36
30
 
31
+ # Options are:
32
+ # * :auto_alias : Array of constants to alias by shortest available constant. For example,
33
+ # if the constant A already exists, then Aardvark would be aliased to Aa.
34
+ def manager_create(aliases_hash, options = {})
35
+ self.verbose = options['verbose'] if options['verbose']
36
+ self.force = options['force'] if options['force']
37
+ create(aliases_hash)
38
+ if options['auto_alias']
39
+ auto_create(options['auto_alias'])
40
+ end
41
+ end
42
+
37
43
  def create(aliases_hash)
38
44
  delete_invalid_aliases(aliases_hash)
39
45
  delete_existing_aliases(aliases_hash) unless self.force
40
- @alias_map = aliases_hash
46
+ self.alias_map = alias_map.merge aliases_hash
47
+
41
48
  #td: create method for efficiently removing constants/methods in any namespace
42
49
  silence_warnings {
43
50
  create_aliases(aliases_hash)
@@ -61,6 +68,9 @@ module Alias
61
68
  raise "This abstract method must be overridden."
62
69
  end
63
70
 
71
+ #Should be overridden to support search
72
+ def to_searchable_array; []; end
73
+
64
74
  def delete_invalid_class_keys(klass_hash)
65
75
  klass_hash.each {|k,v|
66
76
  if Object.any_const_get(k).nil?
data/lib/alias/manager.rb CHANGED
@@ -8,33 +8,75 @@ module Alias
8
8
  @force = false
9
9
  end
10
10
 
11
- attr_accessor :alias_creators, :verbose, :force
11
+ attr_accessor :alias_creators, :verbose, :force, :indexed_aliases
12
12
  def alias_types; @alias_creators.keys; end
13
+ def alias_creator_objects; @alias_creators.values; end
14
+ def alias_map(type)
15
+ @alias_creators[type] && @alias_creators[type].alias_map
16
+ end
13
17
 
14
- def factory_create_aliases(alias_type, aliases_hash)
18
+ def create_creator(alias_type)
15
19
  creator_class_string = "Alias::#{alias_type.camelize}Creator"
16
- create_options = aliases_hash.slice_off!('auto_alias', 'verbose', 'force')
17
- create_options['verbose'] = @verbose unless create_options.has_key?('verbose')
18
20
  if creator_class = Object.any_const_get(creator_class_string)
19
- creator_class.create(aliases_hash, create_options)
21
+ creator_class.new
20
22
  else
21
23
  puts "Creator class '#{creator_class_string}' not found." if @verbose
22
24
  nil
23
25
  end
26
+
24
27
  end
25
28
 
26
29
  def create_aliases(alias_type, aliases_hash)
27
- aliases_hash = aliases_hash.dup
28
- if obj = factory_create_aliases(alias_type.to_s, aliases_hash.dup)
29
- @alias_creators[alias_type.to_sym] ||= obj
30
+ if (obj = @alias_creators[alias_type.to_sym] ||= create_creator(alias_type.to_s))
31
+ aliases_hash = aliases_hash.dup
32
+ create_options = aliases_hash.slice_off!('auto_alias', 'verbose', 'force')
33
+ create_options['verbose'] = @verbose unless create_options.has_key?('verbose')
34
+ obj.manager_create(aliases_hash, create_options)
35
+ end
36
+ end
37
+
38
+ def search(search_hash)
39
+ result = nil
40
+ search_hash.each do |k,v|
41
+ new_result = simple_search(k,v)
42
+ #AND's searches
43
+ result = intersection_of_two_arrays(new_result, result)
44
+ end
45
+ #duplicate results in case they are modified
46
+ result = result.map {|e| e.dup} if result
47
+ alias_creator_objects.each {|e| e.searched_at = Time.now }
48
+ result
49
+ end
50
+
51
+ def list
52
+ indexed_aliases.map {|e| e.dup}
53
+ end
54
+
55
+ def simple_search(field, search_term)
56
+ result = indexed_aliases.select {|e|
57
+ search_term.is_a?(Regexp) ? e[field] =~ search_term : e[field] == search_term
58
+ }
59
+ result
60
+ end
61
+
62
+ def intersection_of_two_arrays(arr1, arr2)
63
+ arr2.nil? ? arr1 : arr1.select {|e| arr2.include?(e)}
64
+ end
65
+
66
+ def indexed_aliases(reindex=true)
67
+ reindex ? @indexed_aliases = reindex_aliases(@indexed_aliases) : @indexed_aliases
68
+ end
30
69
 
31
- accessor_method = "#{alias_type}_aliases"
32
- if ! respond_to?(accessor_method)
33
- self.class.send :attr_accessor, accessor_method
70
+ def reindex_aliases(searchable_array=nil)
71
+ searchable_array ||= []
72
+ @alias_creators.map do |type, creator|
73
+ if creator.modified_since_last_search?
74
+ searchable_array.delete_if {|e| e[:type] == type.to_s}
75
+ new_arr = creator.to_searchable_array.each {|e| e[:type] = type.to_s}
76
+ searchable_array += new_arr
34
77
  end
35
- self.send("#{accessor_method}=", {}) if self.send(accessor_method).nil?
36
- self.send(accessor_method).merge! obj.alias_map
37
78
  end
79
+ searchable_array
38
80
  end
39
81
  end
40
82
  end
@@ -43,6 +43,14 @@ module Alias
43
43
  end
44
44
  end
45
45
 
46
+ def to_searchable_array
47
+ @alias_map.map {|klass,method_hash|
48
+ method_hash.map {|k,v|
49
+ {:class=>klass, :name=>k, :alias=>v}
50
+ }
51
+ }.flatten
52
+ end
53
+
46
54
  def create_method_aliases_per_class(klass, alias_hash)
47
55
  eval_string = ""
48
56
  alias_hash.each {|original_method, alias_methods|
data/lib/alias.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__))
2
2
  require 'yaml'
3
- require 'ostruct'
3
+ require 'config_struct'
4
4
  require 'alias/manager'
5
5
  require 'alias/creator'
6
6
  require 'alias/constant_creator'
@@ -8,6 +8,7 @@ require 'alias/method_creator_helper'
8
8
  require 'alias/instance_method_creator'
9
9
  require 'alias/class_method_creator'
10
10
  require 'alias/core_extensions'
11
+ require 'alias/console'
11
12
 
12
13
  module Alias
13
14
  extend self
@@ -23,18 +24,13 @@ module Alias
23
24
  file ? YAML::load(File.read(file)) : {}
24
25
  end
25
26
 
26
- def init(options={})
27
+ def init(options={}, &block)
27
28
  config_hash = load_config_file(options[:file])
28
29
  config.merge! config_hash
29
30
  config['verbose'] = options[:verbose] if !options[:verbose].nil?
30
31
 
31
- if block_given?
32
- obj = OpenStruct.new
33
- yield(obj)
34
- block_config = obj.to_hash.stringify_keys
35
- config.merge! block_config
36
- end
37
-
32
+ block_config = ConfigStruct.block_to_hash(block).stringify_keys
33
+ config.merge! block_config
38
34
  manager.verbose = config['verbose'] if config.has_key?('verbose')
39
35
  config.each do |k,v|
40
36
  next if ['verbose'].include?(k)
@@ -52,4 +48,4 @@ module Alias
52
48
  def manager
53
49
  @manager ||= Manager.new
54
50
  end
55
- end
51
+ end
@@ -0,0 +1,17 @@
1
+ require 'ostruct'
2
+
3
+ class ConfigStruct < OpenStruct
4
+ def self.block_to_hash(block=nil)
5
+ config = self.new
6
+ if block
7
+ block.call(config)
8
+ config.to_hash
9
+ else
10
+ {}
11
+ end
12
+ end
13
+
14
+ def to_hash
15
+ @table
16
+ end
17
+ end
data/test/alias_test.rb CHANGED
@@ -39,9 +39,9 @@ class AliasTest < Test::Unit::TestCase
39
39
 
40
40
  test "creates manager object and non-empty aliases" do
41
41
  Alias.init :file=>File.join(File.dirname(__FILE__),'aliases.yml')
42
- Alias.manager.instance_method_aliases.empty?.should_not be(true)
43
- Alias.manager.class_method_aliases.empty?.should_not be(true)
44
- Alias.manager.constant_aliases.empty?.should_not be(true)
42
+ Alias.manager.alias_map(:instance_method)
43
+ Alias.manager.alias_map(:class_method)
44
+ Alias.manager.alias_map(:constant)
45
45
  end
46
46
 
47
47
  test "with verbose option sets config and manager verbosity" do
@@ -0,0 +1,33 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper.rb')
2
+
3
+ class Alias::ConstantCreatorTest < Test::Unit::TestCase
4
+ context "AliasConstantCreator" do
5
+ before(:each) { @creator = Alias::ConstantCreator.new}
6
+
7
+ test "deletes existing aliases" do
8
+ h1 = {"Alias::ConstantCreator"=>"Alias::Creator", "Array"=>"Ar"}
9
+ @creator.delete_existing_aliases(h1)
10
+ h1.should == {"Array"=>"Ar"}
11
+ end
12
+
13
+ test "deletes existing alias unless it was created by the object" do
14
+ h1 = {"Array"=>"A"}
15
+ @creator.create(h1)
16
+ assert_not_equal A, ArgumentError
17
+ h2 = {"ArgumentError"=>"A"}
18
+ @creator.create(h2)
19
+ assert_equal A, ArgumentError
20
+ end
21
+
22
+ test "makes shortest aliases" do
23
+ eval "::Y = 'some value'"
24
+ expected_hash = {"Yo"=>"Y", "Man"=>"M", "Cool"=>"C", 'Yay'=>'Ya'}
25
+ @creator.make_shortest_aliases(['Yo','Yay','Cool','Man']).should == expected_hash
26
+ end
27
+
28
+ test "to_searchable_array is an array of hashes" do
29
+ @creator.alias_map = {'Alias'=>'A'}
30
+ @creator.to_searchable_array.should == [{:name=>'Alias', :alias=>'A'}]
31
+ end
32
+ end
33
+ end
data/test/creator_test.rb CHANGED
@@ -1,35 +1,70 @@
1
1
  require File.join(File.dirname(__FILE__), 'test_helper.rb')
2
2
 
3
3
  class Alias::CreatorTest < Test::Unit::TestCase
4
- context "AliasConstantCreator" do
5
- before(:each) { @creator = Alias::ConstantCreator.new}
4
+ test "Creator deletes invalid class keys" do
5
+ h1 = {'Alias::Creator'=>'whoop','Yay'=>'Haha'}
6
+ @creator = Alias::Creator.new
7
+ @creator.delete_invalid_class_keys(h1)
8
+ h1.should == {'Alias::Creator'=>'whoop'}
9
+ end
10
+
11
+ context "Creator" do
12
+ before(:each) { @creator = Alias::Creator.new}
13
+ test "calls delete_existing_aliases when no force" do
14
+ @creator.force = false
15
+ @creator.expects(:delete_existing_aliases)
16
+ @creator.expects(:create_aliases)
17
+ @creator.create({})
18
+ end
19
+
20
+ test "doesn't call delete_existing_aliases when force" do
21
+ @creator.force = true
22
+ @creator.expects(:delete_existing_aliases).never
23
+ @creator.expects(:create_aliases)
24
+ @creator.create({})
25
+ end
26
+
27
+ test "sets modified_at timestamp when creating aliases" do
28
+ stub_time = Time.new
29
+ Time.expects(:now).returns(stub_time)
30
+ @creator.expects(:create_aliases)
31
+ @creator.create({})
32
+ @creator.modified_at.should == stub_time
33
+ end
6
34
 
7
- test "deletes existing aliases" do
8
- h1 = {"Alias::ConstantCreator"=>"Alias::Creator", "Array"=>"Ar"}
9
- @creator.delete_existing_aliases(h1)
10
- h1.should == {"Array"=>"Ar"}
35
+ test "with modified_at > searched_at has been modified_since_last_search?" do
36
+ some_time = Time.new
37
+ @creator.modified_at = some_time + 100
38
+ @creator.searched_at = some_time
39
+ assert @creator.modified_since_last_search?
11
40
  end
12
41
 
13
- test "deletes existing alias unless it was created by the object" do
14
- h1 = {"Array"=>"A"}
15
- @creator.create(h1)
16
- assert_not_equal A, ArgumentError
17
- h2 = {"ArgumentError"=>"A"}
18
- @creator.create(h2)
19
- assert_equal A, ArgumentError
42
+ test "with modified_at greater than searched_at has been modified_since_last_search?" do
43
+ some_time = Time.new
44
+ @creator.modified_at = some_time + 100
45
+ @creator.searched_at = some_time
46
+ assert @creator.modified_since_last_search?
47
+ end
48
+
49
+ test "with modified_at less than searched_at has not been modified_since_last_search?" do
50
+ some_time = Time.new
51
+ @creator.modified_at = some_time
52
+ @creator.searched_at = some_time + 100
53
+ assert !@creator.modified_since_last_search?
54
+ end
55
+
56
+ test "with no searched_at has been modified_since_last_search?" do
57
+ @creator.modified_at = Time.new
58
+ @creator.searched_at = nil
59
+ assert @creator.modified_since_last_search?
60
+ end
61
+
62
+ test "sets modified_at when calling alias_map=" do
63
+ stub_time = Time.new
64
+ Time.expects(:now).returns(stub_time)
65
+ @creator.alias_map = {'blah'=>'b'}
66
+ @creator.modified_at.should == stub_time
20
67
  end
21
68
 
22
- test "makes shortest aliases" do
23
- eval "::Y = 'some value'"
24
- expected_hash = {"Yo"=>"Y", "Man"=>"M", "Cool"=>"C", 'Yay'=>'Ya'}
25
- @creator.make_shortest_aliases(['Yo','Yay','Cool','Man']).should == expected_hash
26
- end
27
69
  end
28
-
29
- test "Creator deletes invalid class keys" do
30
- h1 = {'Alias::Creator'=>'whoop','Yay'=>'Haha'}
31
- @creator = Alias::Creator.new
32
- @creator.delete_invalid_class_keys(h1)
33
- h1.should == {'Alias::Creator'=>'whoop'}
34
- end
35
70
  end
data/test/manager_test.rb CHANGED
@@ -4,49 +4,107 @@ class Alias::ManagerTest < Test::Unit::TestCase
4
4
  before(:each) { @manager = Alias::Manager.new}
5
5
 
6
6
  context "Manager" do
7
- test "verbosity trickles down to creator objects" do
8
- h1 = {'String'=>'Strang'}
9
- @manager.verbose = true
10
- @manager.create_aliases(:constant, h1)
11
- assert @manager.alias_creators[:constant].verbose
12
- end
7
+ test "verbosity trickles down to creator objects" do
8
+ h1 = {'String'=>'Strang'}
9
+ @manager.verbose = true
10
+ @manager.create_aliases(:constant, h1)
11
+ assert @manager.alias_creators[:constant].verbose
12
+ end
13
13
 
14
- test "force option sets force in creator object" do
15
- h1 = {'force'=>true}
16
- @manager.create_aliases(:constant, h1)
17
- assert @manager.alias_creators[:constant].force
18
- end
14
+ test "force option sets force in creator object" do
15
+ h1 = {'force'=>true}
16
+ @manager.create_aliases(:constant, h1)
17
+ assert @manager.alias_creators[:constant].force
18
+ end
19
19
 
20
- test "creates constant aliases" do
21
- h1 = {'Time'=>'T', 'auto_alias'=>['Date']}
22
- @manager.create_aliases(:constant, h1)
23
- @manager.constant_aliases.should == {'Time'=>'T', 'Date'=>'D'}
24
- end
20
+ test "creates constant aliases" do
21
+ h1 = {'Time'=>'T', 'auto_alias'=>['Date']}
22
+ @manager.create_aliases(:constant, h1)
23
+ @manager.alias_map(:constant).should == {'Time'=>'T', 'Date'=>'D'}
24
+ end
25
25
 
26
- test "creates instance method aliases" do
27
- Kernel.eval %[
28
- class ::SampleClass
29
- def whoop; 'WHOOP'; end
30
- end
31
- ]
32
- obj = SampleClass.new
33
- @manager.create_aliases(:instance_method, {'SampleClass'=>{:whoop=>:can_of_wass, :blah=>:bl}})
34
- @manager.instance_method_aliases.should == {'SampleClass'=>{:whoop=>:can_of_wass}}
35
- SampleClass.new.whoop.should == SampleClass.new.can_of_wass
36
- end
26
+ test "creates instance method aliases" do
27
+ Kernel.eval %[
28
+ class ::SampleClass
29
+ def whoop; 'WHOOP'; end
30
+ end
31
+ ]
32
+ obj = SampleClass.new
33
+ @manager.create_aliases(:instance_method, {'SampleClass'=>{:whoop=>:can_of_wass, :blah=>:bl}})
34
+ @manager.alias_map(:instance_method).should == {'SampleClass'=>{:whoop=>:can_of_wass}}
35
+ SampleClass.new.whoop.should == SampleClass.new.can_of_wass
36
+ end
37
37
 
38
- test "creates class method aliases" do
39
- Kernel.eval %[
40
- class ::SampleClass
41
- def self.cap; 'itup'; end
42
- end
43
- ]
44
- hash1 = {'SampleClass'=>{:cap=>:capohow}, 'Array'=>{:blah=>:bl}}
45
- @manager.create_aliases(:class_method, hash1)
46
- expected_result = {"SampleClass"=>{:cap=>:capohow}, "Array"=>{}}
47
- assert_equal expected_result, @manager.class_method_aliases
48
- SampleClass.capohow.should == SampleClass.cap
49
- end
38
+ test "creates class method aliases" do
39
+ Kernel.eval %[
40
+ class ::SampleClass
41
+ def self.cap; 'itup'; end
42
+ end
43
+ ]
44
+ hash1 = {'SampleClass'=>{:cap=>:capohow}, 'Array'=>{:blah=>:bl}}
45
+ @manager.create_aliases(:class_method, hash1)
46
+ expected_result = {"SampleClass"=>{:cap=>:capohow}, "Array"=>{}}
47
+ assert_equal expected_result, @manager.alias_map(:class_method)
48
+ SampleClass.capohow.should == SampleClass.cap
49
+ end
50
+
51
+ context "search" do
52
+ def setup_search
53
+ @manager.alias_creators = {:constant=>Alias::ConstantCreator.new}
54
+ @manager.expects(:indexed_aliases).returns([{:name=>'Array', :alias=>'A'}, {:name=>'Abbrev', :alias=>'Ab'}])
55
+ end
56
+
57
+ test "sets creator's searched_at" do
58
+ setup_search
59
+ assert @manager.alias_creators[:constant].searched_at.nil?
60
+ @manager.search :name=>'blah'
61
+ assert @manager.alias_creators[:constant].searched_at.is_a?(Time)
62
+ end
63
+
64
+ test "with string returns exact match" do
65
+ setup_search
66
+ @manager.search(:name=>'Array').should == [{:name=>'Array', :alias=>'A'}]
67
+ end
68
+
69
+ test "with regex returns multiple matches " do
70
+ setup_search
71
+ @manager.search(:name=>/A/).should == [{:name=>'Array', :alias=>'A'}, {:name=>'Abbrev', :alias=>'Ab'}]
72
+ end
73
+ end
74
+
75
+ context "when indexing search" do
76
+ def setup_index
77
+ @creator = Alias::ConstantCreator.new
78
+ @creator.alias_map = {'Array'=>'A', 'Abbrev'=>'Ab'}
79
+ @manager.alias_creators = {:constant=>@creator}
80
+ end
81
+
82
+ test "works when first initialized" do
83
+ setup_index
84
+ @creator.stubs(:modified_since_last_search?).returns(true)
85
+ expected_result = [{:type=>"constant", :name=>"Array", :alias=>"A"}, {:type=>"constant", :name=>"Abbrev", :alias=>"Ab"}]
86
+ assert @manager.indexed_aliases(false).nil?
87
+ @manager.indexed_aliases.should == expected_result
88
+ end
89
+
90
+ test "with modified creator, deletes old + adds new aliases" do
91
+ original_aliases = [{:type=>"constant", :name=>"Enumerable", :alias=>"E"}]
92
+ @manager.indexed_aliases = original_aliases
93
+ setup_index
94
+ @creator.stubs(:modified_since_last_search?).returns(true)
95
+ expected_result = [{:type=>"constant", :name=>"Array", :alias=>"A"}, {:type=>"constant", :name=>"Abbrev", :alias=>"Ab"}]
96
+ assert @manager.indexed_aliases(false).include?(original_aliases[0])
97
+ @manager.indexed_aliases.should == expected_result
98
+ assert !@manager.indexed_aliases.include?(original_aliases[0])
99
+ end
100
+
101
+ test "with unmodified creator, doesn't change any aliases" do
102
+ setup_index
103
+ @manager.indexed_aliases = [{:type=>"constant", :name=>"Enumerable", :alias=>"E"}]
104
+ @creator.stubs(:modified_since_last_search?).returns(false)
105
+ @manager.indexed_aliases.should == [{:type=>"constant", :name=>"Enumerable", :alias=>"E"}]
106
+ end
107
+ end
50
108
  end
51
-
109
+
52
110
  end
@@ -25,6 +25,11 @@ class Alias::MethodCreatorHelperTest < Test::Unit::TestCase
25
25
  @creator.create(h2)
26
26
  assert_equal 'blah', String.n('blah')
27
27
  end
28
+
29
+ test "to_searchable_array is an array of hashes" do
30
+ @creator.alias_map = {'String'=>{'name'=>'n'}}
31
+ @creator.to_searchable_array.should == [{:name=>'name', :alias=>'n', :class=>'String'}]
32
+ end
28
33
  end
29
34
 
30
35
  context "InstanceMethodCreator" do
data/test/test_helper.rb CHANGED
@@ -4,8 +4,8 @@ require 'context' #gem install jeremymcanally-context -s http://gems.github.com
4
4
  require 'mocha' #gem install mocha
5
5
  require 'matchy' #gem install jeremymcanally-stump -s http://gems.github.com
6
6
  require 'pending'
7
- $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
7
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
8
  require 'alias'
9
9
 
10
10
  class Test::Unit::TestCase
11
- end
11
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cldwalker-alias
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Horner
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-20 00:00:00 -08:00
12
+ date: 2009-02-23 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -19,15 +19,18 @@ executables: []
19
19
 
20
20
  extensions: []
21
21
 
22
- extra_rdoc_files: []
23
-
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ - LICENSE.txt
24
25
  files:
25
26
  - Rakefile
27
+ - VERSION.yml
26
28
  - README.rdoc
27
29
  - LICENSE.txt
28
30
  - aliases.yml.example
29
31
  - lib/alias
30
32
  - lib/alias/class_method_creator.rb
33
+ - lib/alias/console.rb
31
34
  - lib/alias/constant_creator.rb
32
35
  - lib/alias/core_extensions.rb
33
36
  - lib/alias/creator.rb
@@ -35,8 +38,10 @@ files:
35
38
  - lib/alias/manager.rb
36
39
  - lib/alias/method_creator_helper.rb
37
40
  - lib/alias.rb
41
+ - lib/config_struct.rb
38
42
  - test/alias_test.rb
39
43
  - test/aliases.yml
44
+ - test/constant_creator_test.rb
40
45
  - test/core_extensions_test.rb
41
46
  - test/creator_test.rb
42
47
  - test/manager_test.rb