meta_methods 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 1.9.3
1
+ 2.1.4
data/CHANGES CHANGED
@@ -11,4 +11,8 @@
11
11
  == Version 1.1.0
12
12
 
13
13
  * Class names change.
14
- * Adding tests.
14
+ * Adding tests.
15
+
16
+ == Version 1.1.1
17
+
18
+ * Bug fixes.
@@ -1,101 +1,74 @@
1
- module MetaMethods::Core
2
- def metaclass object
3
- # class << object
4
- # self
5
- # end
6
- object.singleton_class
7
- end
1
+ module MetaMethods
2
+ module Core
3
+ def define_attribute(object, key, value)
4
+ object.singleton_class.send :attr_accessor, key.to_sym # creates accessor
8
5
 
9
- # def define_attributes(type, object, hash, create_instance=true)
10
- # hash.each_pair do |key, value|
11
- # define_attribute(type, object, key, value, create_instance)
12
- # end
13
- # end
14
- #
15
- # def define_attribute(type, object, key, value, create_instance=true)
16
- # if create_instance
17
- # metaclass(object).send type, key.to_sym
18
- #
19
- # object.instance_variable_set("@#{key}".to_sym, value)
20
- # else
21
- # metaclass(object).class_eval <<-CODE
22
- # def #{key}
23
- # "#{value}"
24
- # end
25
- # CODE
26
- # end
27
- # end
28
-
29
- def define_attribute(object, key, value)
30
- object.singleton_class.send :attr_accessor, key.to_sym # creates accessor
31
-
32
- object.send "#{key}=".to_sym, value # sets up value for attribute
33
- end
6
+ object.send "#{key}=".to_sym, value # sets up value for attribute
7
+ end
34
8
 
35
- def define_attributes(object, hash)
36
- hash.each_pair do |key, value|
37
- define_attribute(object, key, value)
9
+ def define_attributes(object, hash)
10
+ hash.each_pair do |key, value|
11
+ define_attribute(object, key, value)
12
+ end
38
13
  end
39
- end
40
14
 
41
- def locals_to_hash object, content
42
- scope = object.instance_eval { binding }
15
+ def locals_to_hash object, content
16
+ scope = object.instance_eval { binding }
43
17
 
44
- eval(content, scope)
18
+ eval(content, scope)
45
19
 
46
- extract_values(defined_vars(scope), scope)
47
- end
20
+ extract_values(defined_vars(scope), scope)
21
+ end
48
22
 
49
- def evaluate_dsl(create_block, destroy_block, execute_block)
23
+ def evaluate_dsl(create_block, destroy_block, execute_block)
24
+ begin
25
+ created_object = create_block.kind_of?(Proc) ? create_block.call : create_block
50
26
 
51
- begin
52
- created_object = create_block.kind_of?(Proc) ? create_block.call : create_block
27
+ created_object.instance_variable_set(:@parent, block_parent(execute_block))
53
28
 
54
- created_object.instance_variable_set(:@parent, block_parent(execute_block))
29
+ def created_object.method_missing(sym, *args, &block)
30
+ @parent.send sym, *args, &block
31
+ end
55
32
 
56
- def created_object.method_missing(sym, *args, &block)
57
- @parent.send sym, *args, &block
58
- end
33
+ def created_object.respond_to?(sym, include_private = false)
34
+ @parent.respond_to? sym, include_private
35
+ end
59
36
 
60
- def created_object.respond_to?(sym, include_private = false)
61
- @parent.respond_to? sym, include_private
37
+ created_object.instance_eval(&execute_block)
38
+ ensure
39
+ destroy_block.call(created_object) if destroy_block && created_object
62
40
  end
63
-
64
- created_object.instance_eval(&execute_block)
65
- ensure
66
- destroy_block.call(created_object) if destroy_block && created_object
67
41
  end
68
- end
69
42
 
70
- def block_parent block
71
- block_binding = block.binding
43
+ def block_parent block
44
+ block_binding = block.binding
72
45
 
73
- block_binding.eval 'self'
74
- end
46
+ block_binding.eval 'self'
47
+ end
75
48
 
76
- private
49
+ private
77
50
 
78
- def defined_vars scope
79
- eval("local_variables", scope) - Kernel.local_variables - %w(content)
80
- end
51
+ def defined_vars scope
52
+ eval("local_variables", scope) - Kernel.local_variables - %w(content)
53
+ end
81
54
 
82
- def extract_values vars_list, scope
83
- vars_values_list = vars_list.collect { |name| [name, get_property(name, scope)] }
55
+ def extract_values vars_list, scope
56
+ vars_values_list = vars_list.collect { |name| [name, get_property(name, scope)] }
84
57
 
85
- hash = {}
86
- vars_values_list.each do |var, value|
87
- hash[var.to_sym] = value
88
- end
58
+ hash = {}
59
+ vars_values_list.each do |var, value|
60
+ hash[var.to_sym] = value
61
+ end
89
62
 
90
- hash
91
- end
63
+ hash
64
+ end
92
65
 
93
- def get_property name, scope
94
- begin
95
- eval(name.to_s, scope)
96
- rescue NameError
97
- nil
66
+ def get_property name, scope
67
+ begin
68
+ eval(name.to_s, scope)
69
+ rescue NameError
70
+ nil
71
+ end
98
72
  end
99
73
  end
100
-
101
74
  end
@@ -1,3 +1,3 @@
1
1
  class MetaMethods
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.1"
3
3
  end
@@ -1,4 +1,4 @@
1
- require 'meta_methods'
1
+ require 'meta_methods/core'
2
2
 
3
3
  class MetaMethodsDemo
4
4
  include MetaMethods::Core
@@ -19,9 +19,9 @@ describe MetaMethodsDemo do
19
19
  it "creates new attributes on object" do
20
20
  object = Object.new
21
21
 
22
- subject.define_attributes object,
22
+ subject.define_attributes(object,
23
23
  {new_attribute1: "new_attribute_value1",
24
- new_attribute2: "new_attribute_value2" }
24
+ new_attribute2: "new_attribute_value2" })
25
25
 
26
26
  expect(object.new_attribute1).to eq("new_attribute_value1")
27
27
  expect(object.new_attribute2).to eq("new_attribute_value2")
@@ -34,9 +34,34 @@ describe MetaMethodsDemo do
34
34
 
35
35
  hash = subject.locals_to_hash subject, s
36
36
 
37
- hash[:a].should == 1
38
- hash[:b].should == 2
39
- hash[:c].should be_nil
37
+ expect(hash[:a]).to eq 1
38
+ expect(hash[:b]).to eq 2
39
+ expect(hash[:c]).to be_nil
40
40
  end
41
41
  end
42
+
43
+ describe "#evaluate_dsl" do
44
+ it "calls all lambdas" do
45
+ create_block = lambda { created }
46
+ destroy_block = lambda {|object| p destroyed(object) }
47
+
48
+ execute_block = lambda {|object| p executed(object) }
49
+
50
+ subject.evaluate_dsl(create_block, destroy_block, execute_block)
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ def created
57
+ p "created"
58
+ end
59
+
60
+ def destroyed object
61
+ p "destroyed: #{object}"
62
+ end
63
+
64
+ def executed object
65
+ p "executed: #{object}"
66
+ end
42
67
  end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meta_methods
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Shvets
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-25 00:00:00.000000000 Z
11
+ date: 2014-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gemspec_deps_gen
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: gemcutter
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: Collection of methods for easing meta-programming
@@ -44,19 +44,19 @@ executables: []
44
44
  extensions: []
45
45
  extra_rdoc_files: []
46
46
  files:
47
- - .gitignore
48
- - .idea/.name
49
- - .idea/.rakeTasks
50
- - .idea/cssxfire.xml
51
- - .idea/encodings.xml
52
- - .idea/meta_methods.iml
53
- - .idea/misc.xml
54
- - .idea/modules.xml
55
- - .idea/scopes/scope_settings.xml
56
- - .idea/vcs.xml
57
- - .idea/workspace.xml
58
- - .ruby-gemset
59
- - .ruby-version
47
+ - ".gitignore"
48
+ - ".idea/.name"
49
+ - ".idea/.rakeTasks"
50
+ - ".idea/cssxfire.xml"
51
+ - ".idea/encodings.xml"
52
+ - ".idea/meta_methods.iml"
53
+ - ".idea/misc.xml"
54
+ - ".idea/modules.xml"
55
+ - ".idea/scopes/scope_settings.xml"
56
+ - ".idea/vcs.xml"
57
+ - ".idea/workspace.xml"
58
+ - ".ruby-gemset"
59
+ - ".ruby-version"
60
60
  - CHANGES
61
61
  - Gemfile
62
62
  - LICENSE
@@ -77,17 +77,17 @@ require_paths:
77
77
  - lib
78
78
  required_ruby_version: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  required_rubygems_version: !ruby/object:Gem::Requirement
84
84
  requirements:
85
- - - ! '>='
85
+ - - ">="
86
86
  - !ruby/object:Gem::Version
87
87
  version: '0'
88
88
  requirements: []
89
89
  rubyforge_project:
90
- rubygems_version: 2.2.2
90
+ rubygems_version: 2.4.2
91
91
  signing_key:
92
92
  specification_version: 4
93
93
  summary: Collection of methods for easing meta-programming