kinda-core 0.0.4 → 0.0.5

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.
data/README.rdoc CHANGED
@@ -1,6 +1,3 @@
1
- Author:: Manuel Vila (mailto:mvila@3base.com)
2
- License:: Don't know yet
3
-
4
1
  = Core
5
2
 
6
3
  Basic helpers used by other kinda projects.
@@ -11,4 +8,4 @@ Basic helpers used by other kinda projects.
11
8
 
12
9
  == Usage
13
10
 
14
- Still very alpha so documentation will come later.
11
+ Still very alpha, documentation will come later.
data/Rakefile ADDED
@@ -0,0 +1,20 @@
1
+ require "rake/testtask"
2
+
3
+ begin
4
+ require "hanna/rdoctask"
5
+ rescue LoadError
6
+ require "rake/rdoctask"
7
+ end
8
+
9
+ task :default => [:test]
10
+
11
+ Rake::TestTask.new do |t|
12
+ t.test_files = Dir["test/*_test.rb"]
13
+ end
14
+
15
+ Rake::RDocTask.new do |t|
16
+ t.title = "Core Documentation"
17
+ t.main = "README.rdoc"
18
+ t.rdoc_files.include("README.rdoc", "lib/**/*.rb")
19
+ t.rdoc_dir = "doc"
20
+ end
data/lib/core.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  require File.join(File.dirname(__FILE__), 'core', 'module')
2
+ require File.join(File.dirname(__FILE__), 'core', 'object')
2
3
  ruby_files = Dir.glob(File.join(File.dirname(__FILE__), 'core', '*.rb'))
3
4
  ruby_files.each { |file| require file }
4
5
 
5
- module Kinda
6
+ module Kinda #:nodoc:
7
+ # Basic helpers used by other kinda projects
6
8
  module Core
7
9
  include Accessor
8
10
  include Forwardable
data/lib/core/accessor.rb CHANGED
@@ -1,14 +1,8 @@
1
- module Kinda
2
- module Core
1
+ module Kinda #:nodoc:
2
+ module Core #:nodoc:
3
+ # Improves the Ruby buit-in accessor methods
3
4
  module Accessor
4
- module ClassMethods
5
- # attr_reader(:name, :age, :size)
6
- # attr_reader(:name => :@name) is the default behaviour but you can use:
7
- # attr_reader (:name => @the_name) to use a different instance variable
8
- # attr_reader(:name => :first_name) or even an another attribute.
9
- # But more interesting, you can delegate to another object:
10
- # attr_reader(:name => [:father, :name])
11
- # attr_reader(:name => [:mother, :husband, :name])
5
+ ClassMethods = inheritable_extend do
12
6
  def __attr_reader__(*attributes, with_filter, &block)
13
7
  attributes.each do |attribute|
14
8
  if attribute.is_a?(Hash)
@@ -17,7 +11,7 @@ module Kinda
17
11
  source = "@#{attribute}"
18
12
  end
19
13
  proc = if with_filter || !block
20
- ::Proc.new do |*args|
14
+ Proc.new do |*args|
21
15
  return send("#{attribute}=", *args) unless args.empty?
22
16
  value = if source[0] == '@'
23
17
  instance_variable_get(source)
@@ -31,10 +25,19 @@ module Kinda
31
25
  else
32
26
  block
33
27
  end
34
- to_class.send(:define_method, attribute, &proc)
28
+ send(:define_method, attribute, &proc)
35
29
  end
36
30
  end
31
+
32
+ private :__attr_reader__
37
33
 
34
+ # attr_reader(:name, :age, :size)
35
+ # attr_reader(:name => :@name) is the default behaviour but you can use:
36
+ # attr_reader (:name => @the_name) to use a different instance variable
37
+ # attr_reader(:name => :first_name) or even an another attribute.
38
+ # More interesting, you can delegate to another object:
39
+ # attr_reader(:name => [:father, :name])
40
+ # attr_reader(:name => [:mother, :husband, :name])
38
41
  def attr_reader(*attributes, &block)
39
42
  __attr_reader__(*attributes, false, &block)
40
43
  end
@@ -51,7 +54,7 @@ module Kinda
51
54
  target = "@#{attribute}"
52
55
  end
53
56
  proc = if with_filter || !block
54
- ::Proc.new do |value|
57
+ Proc.new do |value|
55
58
  value = instance_exec(value, &block) if block
56
59
  if target[0] == '@'
57
60
  instance_variable_set(target, value)
@@ -64,9 +67,11 @@ module Kinda
64
67
  else
65
68
  block
66
69
  end
67
- to_class.send(:define_method, "#{attribute}=", &proc)
70
+ send(:define_method, "#{attribute}=", &proc)
68
71
  end
69
72
  end
73
+
74
+ private :__attr_writer__
70
75
 
71
76
  def attr_writer(*attributes, &block)
72
77
  __attr_writer__(*attributes, false, &block)
@@ -103,8 +108,7 @@ module Kinda
103
108
  end
104
109
  end
105
110
 
106
- include ClassMethods
107
- inheritable_extension ClassMethods
111
+ delegate_to_class ClassMethods.public_instance_methods
108
112
  end
109
113
  end
110
114
  end
@@ -3,7 +3,7 @@ require 'forwardable'
3
3
  module Kinda
4
4
  module Core
5
5
  module Forwardable
6
- module ClassMethods
6
+ ClassMethods = inheritable_extend do
7
7
  include ::Forwardable
8
8
 
9
9
  # Add a nice way to specify a different method for the accessor:
@@ -19,7 +19,7 @@ module Kinda
19
19
  end
20
20
  end
21
21
  end
22
-
22
+
23
23
  alias_method :delegate, :instance_delegate
24
24
 
25
25
  # Create both reader and writer delegate
@@ -79,8 +79,7 @@ module Kinda
79
79
  end
80
80
  end
81
81
 
82
- include ClassMethods
83
- inheritable_extension ClassMethods
82
+ delegate_to_class ClassMethods.public_instance_methods
84
83
  end
85
84
  end
86
85
  end
data/lib/core/functor.rb CHANGED
@@ -1,7 +1,7 @@
1
- # Thomas Sawyer's Functor Class slightly modified for Ruby 1.9
2
- # http://facets.rubyforge.org/apidoc/api/core/classes/Functor.html
3
1
  module Kinda
4
2
  module Core
3
+ # Thomas Sawyer's Functor Class slightly modified for Ruby 1.9
4
+ # http://facets.rubyforge.org/apidoc/api/core/classes/Functor.html
5
5
  class Functor < BasicObject
6
6
  def initialize(&proc)
7
7
  @proc = proc
data/lib/core/hash.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Kinda
2
2
  module Core
3
- module Hash
3
+ module HashExtension
4
4
  def delete_value(value)
5
5
  delete_if { |k, v| v == value }
6
6
  end
@@ -8,6 +8,6 @@ module Kinda
8
8
  end
9
9
  end
10
10
 
11
- class Hash
12
- include Kinda::Core::Hash
11
+ class Hash #:nodoc:
12
+ include Kinda::Core::HashExtension
13
13
  end
data/lib/core/module.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  module Kinda
2
2
  module Core
3
- module Module
3
+ module ModuleExtension
4
4
  def self.included(klass)
5
- klass.alias_method_chain :append_features, :module_extensions
5
+ klass.alias_method_chain :append_features, :inheritable_extensions
6
6
  end
7
7
 
8
8
  def alias_method_chain(target, feature)
@@ -37,22 +37,34 @@ module Kinda
37
37
  singleton_class.ancestors.take_while { |mod| !mod.is_a?(Class) }
38
38
  end
39
39
 
40
- def inheritable_extension(*mods)
41
- (@inheritable_extensions ||= []).unshift(mods.reverse).flatten!.uniq!
40
+ def inheritable_extend(*mods, &block)
41
+ if block
42
+ mod = Module.new
43
+ mod.extend extensions
44
+ mod.module_eval(&block)
45
+ mods << mod
46
+ end
47
+ extend *mods
48
+ (@inheritable_extensions ||= []).unshift(*mods.reverse).uniq!
49
+ mod
42
50
  end
43
51
 
44
- def append_features_with_module_extensions(target)
45
- append_features_without_module_extensions(target)
52
+ def append_features_with_inheritable_extensions(target)
53
+ append_features_without_inheritable_extensions(target)
46
54
  if @inheritable_extensions
47
55
  target.extend *@inheritable_extensions
48
- target.inheritable_extension *@inheritable_extensions.reverse
56
+ target.inheritable_extend *@inheritable_extensions.reverse
49
57
  end
50
58
  end
51
59
 
52
- def delegate_to_class(source, target=source)
53
- define_method(source) do |*args, &block|
54
- singleton_class_eval do
55
- send(target, *args, &block)
60
+ # delegate_to_class :singleton_method_added => :method_added
61
+ # delegate_to_class [:attr_reader, :attr_writer]
62
+ # delegate_to_class ClassMethods.instance_methods
63
+ def delegate_to_class(*sources)
64
+ sources, target = sources.first.first if sources.first.is_a?(Hash)
65
+ [*sources].flatten.each do |source|
66
+ define_method(source) do |*args, &block|
67
+ singleton_class_send(target || source, *args, &block)
56
68
  end
57
69
  end
58
70
  end
@@ -75,7 +87,7 @@ module Kinda
75
87
  end
76
88
  end
77
89
 
78
- class Module
79
- include Kinda::Core::Module
90
+ class Module #:nodoc:
91
+ include Kinda::Core::ModuleExtension
80
92
  end
81
93
 
data/lib/core/object.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Kinda
2
2
  module Core
3
- module Object
3
+ module ObjectExtension
4
4
  def self.included(klass)
5
5
  klass.alias_method_chain :extend, :flexible_arguments
6
6
  end
@@ -17,6 +17,10 @@ module Kinda
17
17
  singleton_class.class_eval(&block)
18
18
  end
19
19
 
20
+ def singleton_class_send(method_name, *args, &block)
21
+ singleton_class_eval { send(method_name, *args, &block) }
22
+ end
23
+
20
24
  def to_class
21
25
  kind_of?(Module) ? self : singleton_class
22
26
  end
@@ -58,6 +62,6 @@ module Kinda
58
62
  end
59
63
  end
60
64
 
61
- class Object
62
- include Kinda::Core::Object
65
+ class Object #:nodoc:
66
+ include Kinda::Core::ObjectExtension
63
67
  end
data/lib/core/proc.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Kinda
2
2
  module Core
3
- module Proc
3
+ module ProcExtension
4
4
  def call_with_this(this, *args, &block)
5
5
  binding_self = binding.eval('self')
6
6
  binding_self.push_this(this)
@@ -12,6 +12,6 @@ module Kinda
12
12
  end
13
13
  end
14
14
 
15
- class Proc
16
- include Kinda::Core::Proc
15
+ class Proc #:nodoc:
16
+ include Kinda::Core::ProcExtension
17
17
  end
data/lib/core/this.rb CHANGED
@@ -57,6 +57,6 @@ module Kinda
57
57
  end
58
58
  end
59
59
 
60
- class Object
60
+ class Object #:nodoc:
61
61
  include Kinda::Core::This
62
62
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kinda-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manuel Vila
@@ -22,7 +22,9 @@ extensions: []
22
22
  extra_rdoc_files:
23
23
  - README.rdoc
24
24
  files:
25
+ - Rakefile
25
26
  - lib/core.rb
27
+ - lib/kinda-core.rb
26
28
  - lib/core/accessor.rb
27
29
  - lib/core/forwardable.rb
28
30
  - lib/core/functor.rb
@@ -32,10 +34,10 @@ files:
32
34
  - lib/core/object.rb
33
35
  - lib/core/proc.rb
34
36
  - lib/core/this.rb
35
- - lib/kinda-core.rb
36
37
  - README.rdoc
37
38
  has_rdoc: true
38
39
  homepage: http://github.com/kinda/core
40
+ licenses:
39
41
  post_install_message:
40
42
  rdoc_options: []
41
43
 
@@ -56,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
56
58
  requirements: []
57
59
 
58
60
  rubyforge_project: kinda-core
59
- rubygems_version: 1.2.0
61
+ rubygems_version: 1.3.5
60
62
  signing_key:
61
63
  specification_version: 2
62
64
  summary: Basic helpers used by other kinda projects