morph 0.1.4 → 0.1.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/CHANGELOG +2 -0
- data/README +1 -1
- data/examples/hubbit.rb +3 -1
- data/lib/morph.rb +29 -16
- data/morph.gemspec +3 -3
- data/spec/morph_spec.rb +4 -0
- metadata +2 -2
data/CHANGELOG
CHANGED
data/README
CHANGED
data/examples/hubbit.rb
CHANGED
data/lib/morph.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Morph
|
2
|
-
VERSION = "0.1.
|
2
|
+
VERSION = "0.1.5"
|
3
3
|
|
4
4
|
def self.included(base)
|
5
5
|
base.extend ClassMethods
|
@@ -24,6 +24,15 @@ module Morph
|
|
24
24
|
class_eval { define_method name, &block }
|
25
25
|
end
|
26
26
|
|
27
|
+
def show_ruby
|
28
|
+
begin
|
29
|
+
require 'ruby2ruby'
|
30
|
+
puts Ruby2Ruby.translate(self)
|
31
|
+
rescue LoadError
|
32
|
+
puts "You need to install the ruby2ruby gem before calling show_ruby"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
27
36
|
protected
|
28
37
|
|
29
38
|
def method_added symbol
|
@@ -38,13 +47,8 @@ module Morph
|
|
38
47
|
|
39
48
|
module MethodMissing
|
40
49
|
def method_missing symbol, *args
|
41
|
-
is_writer = symbol.to_s =~
|
42
|
-
|
43
|
-
if is_writer
|
44
|
-
morph_method_missing symbol, *args
|
45
|
-
else
|
46
|
-
super
|
47
|
-
end
|
50
|
+
is_writer = symbol.to_s =~ /=$/
|
51
|
+
is_writer ? morph_method_missing(symbol, *args) : super
|
48
52
|
end
|
49
53
|
end
|
50
54
|
|
@@ -69,16 +73,25 @@ module Morph
|
|
69
73
|
# p order # -> #<Order:0x33c50c @lemon=false, @milk="yes please",
|
70
74
|
# @payment_type="will wash dishes", @sugars=2, @drink="tea">
|
71
75
|
#
|
72
|
-
def morph
|
73
|
-
if
|
74
|
-
|
76
|
+
def morph attributes_or_label, value=nil
|
77
|
+
if attributes_or_label.is_a? Hash
|
78
|
+
attributes_or_label.each { |a, v| morph(a, v) }
|
75
79
|
else
|
76
|
-
|
77
|
-
attribute = label.is_a?(String) ? convert_to_morph_method_name(label) : label
|
80
|
+
attribute = convert_to_morph_method_name(attributes_or_label)
|
78
81
|
send("#{attribute}=".to_sym, value)
|
79
82
|
end
|
80
83
|
end
|
81
84
|
|
85
|
+
def morph_attributes
|
86
|
+
attributes = self.class.morph_methods.inject({}) do |hash, attribute|
|
87
|
+
unless attribute =~ /=\Z/
|
88
|
+
symbol = attribute.to_sym
|
89
|
+
hash[symbol] = send(symbol)
|
90
|
+
end
|
91
|
+
hash
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
82
95
|
protected
|
83
96
|
|
84
97
|
def morph_method_missing symbol, *args
|
@@ -88,7 +101,7 @@ module Morph
|
|
88
101
|
raise "'#{attribute}' is an instance_method on Object, cannot create accessor methods for '#{attribute}'"
|
89
102
|
elsif argument_provided? args
|
90
103
|
base = self.class
|
91
|
-
base.adding_morph_method= true
|
104
|
+
base.adding_morph_method = true
|
92
105
|
|
93
106
|
if block_given?
|
94
107
|
yield base, attribute
|
@@ -96,7 +109,7 @@ module Morph
|
|
96
109
|
base.class_eval "attr_accessor :#{attribute}"
|
97
110
|
send(symbol, *args)
|
98
111
|
end
|
99
|
-
base.adding_morph_method= false
|
112
|
+
base.adding_morph_method = false
|
100
113
|
end
|
101
114
|
end
|
102
115
|
|
@@ -107,7 +120,7 @@ module Morph
|
|
107
120
|
end
|
108
121
|
|
109
122
|
def convert_to_morph_method_name label
|
110
|
-
name = label.downcase.tr('()*',' ').gsub('%','percentage').strip.chomp(':').strip.gsub(/\s/,'_').squeeze('_')
|
123
|
+
name = label.to_s.downcase.tr('()*',' ').gsub('%','percentage').strip.chomp(':').strip.gsub(/\s/,'_').squeeze('_')
|
111
124
|
name = '_'+name if name =~ /^\d/
|
112
125
|
name
|
113
126
|
end
|
data/morph.gemspec
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
|
2
|
-
# Gem::Specification for Morph-0.1.
|
2
|
+
# Gem::Specification for Morph-0.1.5
|
3
3
|
# Originally generated by Echoe
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = %q{morph}
|
7
|
-
s.version = "0.1.
|
7
|
+
s.version = "0.1.5"
|
8
8
|
|
9
9
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.authors = ["Rob McKinnon"]
|
13
|
-
s.date = %q{2008-04-
|
13
|
+
s.date = %q{2008-04-14}
|
14
14
|
s.description = %q{Morph allows you to emerge class definitions via calling assignment methods; mix with Hpricot for screen scrapping fun.}
|
15
15
|
s.email = ["rob ~@nospam@~ rubyforge.org"]
|
16
16
|
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README"]
|
data/spec/morph_spec.rb
CHANGED
@@ -15,6 +15,10 @@ describe Morph, "when writer method that didn't exist before is called with non-
|
|
15
15
|
it 'should return assigned value when reader method called' do
|
16
16
|
@morph.noise.should == @quack
|
17
17
|
end
|
18
|
+
|
19
|
+
it 'should return hash of attributes when morph_attributes called' do
|
20
|
+
@morph.morph_attributes.should == {@attribute.to_sym => @quack}
|
21
|
+
end
|
18
22
|
end
|
19
23
|
|
20
24
|
describe Morph, "when writer method that didn't exist before is called with nil value" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: morph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob McKinnon
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-04-
|
12
|
+
date: 2008-04-14 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|