morph 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +2 -0
- data/README +19 -6
- data/examples/forger.rb +1 -1
- data/examples/hubbit.rb +1 -2
- data/lib/morph.rb +28 -4
- data/morph.gemspec +7 -6
- data/spec/morph_spec.rb +17 -0
- metadata +7 -4
data/CHANGELOG
CHANGED
data/README
CHANGED
@@ -60,16 +60,29 @@ So, a new company method has appeared:
|
|
60
60
|
dhh.company #=> "37signals"
|
61
61
|
|
62
62
|
|
63
|
+
How about adding a hash of attribute values?
|
64
|
+
|
65
|
+
why.morph :drink => 'tea', :spoons_of_sugar => 2, :milk => 'prefer soya thanks'
|
66
|
+
|
67
|
+
why.drink # => "tea"
|
68
|
+
why.spoons_of_sugar # => 2
|
69
|
+
why.milk # => "prefer soya thanks"
|
70
|
+
|
71
|
+
|
63
72
|
Time to print the nascent attribute definitions:
|
64
73
|
|
65
74
|
puts Hubbit.print_morph_methods
|
66
75
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
76
|
+
attr_accessor :blog
|
77
|
+
attr_accessor :company
|
78
|
+
attr_accessor :drink
|
79
|
+
attr_accessor :email
|
80
|
+
attr_accessor :location
|
81
|
+
attr_accessor :milk
|
82
|
+
attr_accessor :name
|
83
|
+
attr_accessor :projects
|
84
|
+
attr_accessor :spoons_of_sugar
|
85
|
+
=> nil
|
73
86
|
|
74
87
|
|
75
88
|
See examples/ directory for more example code.
|
data/examples/forger.rb
CHANGED
data/examples/hubbit.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'hpricot'; require 'open-uri'; require 'morph'
|
1
|
+
require 'rubygems'; require 'hpricot'; require 'open-uri'; require 'morph'
|
2
2
|
|
3
3
|
# An example of Morph playing with Hpricot
|
4
4
|
class Hubbit
|
@@ -27,4 +27,3 @@ end
|
|
27
27
|
|
28
28
|
# why = Hubbit 'why'
|
29
29
|
# dhh = Hubbit 'dhh'
|
30
|
-
|
data/lib/morph.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Morph
|
2
|
-
VERSION = "0.1.
|
2
|
+
VERSION = "0.1.3"
|
3
3
|
|
4
4
|
def self.included(base)
|
5
5
|
base.extend ClassMethods
|
@@ -58,9 +58,33 @@ module Morph
|
|
58
58
|
|
59
59
|
module InstanceMethods
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
61
|
+
#
|
62
|
+
# Set attribute value(s). Adds accessor methods to class if
|
63
|
+
# they are not already present.
|
64
|
+
#
|
65
|
+
# Can be called with a +string+ and a value, a +symbol+ and a value,
|
66
|
+
# or with a +hash+ of attribute to value pairs. For example.
|
67
|
+
#
|
68
|
+
# require 'rubygems'; require 'morph'
|
69
|
+
#
|
70
|
+
# class Order; include Morph; end
|
71
|
+
#
|
72
|
+
# order = Order.new
|
73
|
+
# order.morph :drink => 'tea', :sugars => 2, 'milk' => 'yes please'
|
74
|
+
# order.morph 'Payment type:', 'will wash dishes'
|
75
|
+
# order.morph :lemon, false
|
76
|
+
#
|
77
|
+
# p order # -> #<Order:0x33c50c @lemon=false, @milk="yes please",
|
78
|
+
# @payment_type="will wash dishes", @sugars=2, @drink="tea">
|
79
|
+
#
|
80
|
+
def morph attributes, value=nil
|
81
|
+
if attributes.is_a? Hash
|
82
|
+
attributes.each { |a, v| morph(a, v) }
|
83
|
+
else
|
84
|
+
label = attributes
|
85
|
+
attribute = label.is_a?(String) ? self.class.convert_to_morph_method_name(label) : label
|
86
|
+
send("#{attribute}=".to_sym, value)
|
87
|
+
end
|
64
88
|
end
|
65
89
|
|
66
90
|
def method_missing symbol, *args
|
data/morph.gemspec
CHANGED
@@ -1,22 +1,23 @@
|
|
1
1
|
|
2
|
-
# Gem::Specification for Morph-0.1.
|
2
|
+
# Gem::Specification for Morph-0.1.3
|
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.3"
|
8
8
|
|
9
9
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
10
10
|
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
12
|
s.authors = ["Rob McKinnon"]
|
12
|
-
s.date = %q{2008-
|
13
|
+
s.date = %q{2008-04-02}
|
13
14
|
s.description = %q{Morph allows you to emerge class definitions via calling assignment methods.}
|
14
15
|
s.email = ["rob ~@nospam@~ rubyforge.org"]
|
16
|
+
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README"]
|
15
17
|
s.files = ["CHANGELOG", "examples/forger.rb", "examples/hubbit.rb", "lib/morph.rb", "LICENSE", "README", "spec/morph_spec.rb", "spec/spec.opts", "Manifest", "morph.gemspec"]
|
16
18
|
s.has_rdoc = true
|
17
|
-
s.rdoc_options += ['--quiet', '--inline-source', '--main', 'README']
|
18
|
-
s.extra_rdoc_files = ["README", "CHANGELOG", "LICENSE"]
|
19
19
|
s.homepage = %q{}
|
20
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Morph", "--main", "README", "--inline-source"]
|
20
21
|
s.require_paths = ["lib"]
|
21
22
|
s.rubyforge_project = %q{morph}
|
22
23
|
s.rubygems_version = %q{1.0.1}
|
@@ -39,7 +40,7 @@ end
|
|
39
40
|
# m.description = File.readlines("README").first
|
40
41
|
# m.rubyforge_name = "morph"
|
41
42
|
# m.rdoc_options << '--inline-source'
|
42
|
-
# m.rdoc_pattern = ["README", "CHANGELOG", "LICENSE"
|
43
|
+
# m.rdoc_pattern = ["README", "CHANGELOG", "LICENSE"]
|
43
44
|
# end
|
44
45
|
#
|
45
46
|
# rescue LoadError
|
data/spec/morph_spec.rb
CHANGED
@@ -56,6 +56,23 @@ describe Morph, 'when morph method used to set attribute value' do
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
describe Morph, 'when morph method used to set an attribute value hash' do
|
60
|
+
before :each do
|
61
|
+
remove_morph_methods
|
62
|
+
@attributes = [:drink,:sugars,:milk]
|
63
|
+
@morph.morph :drink => 'tea', :sugars => 2, :milk => 'yes please'
|
64
|
+
@expected_morph_methods_count = 6
|
65
|
+
end
|
66
|
+
|
67
|
+
it_should_behave_like "class with generated accessor methods added"
|
68
|
+
|
69
|
+
it 'should return assigned value when reader method called' do
|
70
|
+
@morph.drink.should == 'tea'
|
71
|
+
@morph.sugars.should == 2
|
72
|
+
@morph.milk.should == 'yes please'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
59
76
|
describe Morph, "when morph method used to set unicode attribute name with a value" do
|
60
77
|
before :each do
|
61
78
|
$KCODE = "u"
|
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.3
|
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-
|
12
|
+
date: 2008-04-02 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -21,9 +21,9 @@ executables: []
|
|
21
21
|
extensions: []
|
22
22
|
|
23
23
|
extra_rdoc_files:
|
24
|
-
- README
|
25
24
|
- CHANGELOG
|
26
25
|
- LICENSE
|
26
|
+
- README
|
27
27
|
files:
|
28
28
|
- CHANGELOG
|
29
29
|
- examples/forger.rb
|
@@ -39,10 +39,13 @@ has_rdoc: true
|
|
39
39
|
homepage: ""
|
40
40
|
post_install_message:
|
41
41
|
rdoc_options:
|
42
|
-
- --
|
42
|
+
- --line-numbers
|
43
43
|
- --inline-source
|
44
|
+
- --title
|
45
|
+
- Morph
|
44
46
|
- --main
|
45
47
|
- README
|
48
|
+
- --inline-source
|
46
49
|
require_paths:
|
47
50
|
- lib
|
48
51
|
required_ruby_version: !ruby/object:Gem::Requirement
|