morph 0.3.6 → 0.3.7
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.
- checksums.yaml +7 -0
- data/CHANGELOG +2 -0
- data/README +2 -2
- data/lib/morph.rb +35 -40
- data/morph.gemspec +4 -4
- metadata +16 -26
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c12c6f354c52dd3e39c28ea48a9a6aaac2dea6b3
|
4
|
+
data.tar.gz: a56834d98a549d7a5e7b8a218bda2d0adb7a3acc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 521c12953766c73f27ef1409264b448d5fe76df0b236ecd9a6e6a1dc6cd2cf3bf6094e3f179f19d63f5ffbae1b17db785b5f372f19eab764fbe62f109382f5f6
|
7
|
+
data.tar.gz: e049d3f4e85e0510602886c090cc37ede43b8fdd1f1d18756f7cc110488c68afa1f7d2e3955b7934e88307377cedf18ee1d62ac6a85cfbc71279432701f28c6a
|
data/CHANGELOG
CHANGED
data/README
CHANGED
@@ -147,7 +147,7 @@ So, a new company method has appeared:
|
|
147
147
|
|
148
148
|
Time to generate an Active Record model? Get a sample script line like this:
|
149
149
|
|
150
|
-
|
150
|
+
Morph.script_generate(Hubbit)
|
151
151
|
|
152
152
|
#=> "rails destroy model Hubbit;
|
153
153
|
# rails generate model Hubbit company:string email:string location:string
|
@@ -155,7 +155,7 @@ Time to generate an Active Record model? Get a sample script line like this:
|
|
155
155
|
|
156
156
|
or specify the generator:
|
157
157
|
|
158
|
-
|
158
|
+
Morph.script_generate(Hubbit, :generator => 'rspec_model')
|
159
159
|
|
160
160
|
#=> "rails destroy rspec_model Hubbit;
|
161
161
|
# rails generate rspec_model Hubbit company:string email:string
|
data/lib/morph.rb
CHANGED
@@ -18,7 +18,7 @@ rescue Exception => e
|
|
18
18
|
end
|
19
19
|
|
20
20
|
module Morph
|
21
|
-
VERSION = "0.3.
|
21
|
+
VERSION = "0.3.7" unless defined? Morph::VERSION
|
22
22
|
|
23
23
|
class << self
|
24
24
|
def generate_migrations object, options={}
|
@@ -93,6 +93,15 @@ module Morph
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
+
def script_generate morphed_class, options={}
|
97
|
+
name = morphed_class.name.to_s.split('::').last
|
98
|
+
name = yield name if block_given?
|
99
|
+
generator = options[:generator] || 'model'
|
100
|
+
line = ["rails destroy #{generator} #{name}; rails generate #{generator} #{name}"]
|
101
|
+
morphed_class.morph_methods.select{|m| not(m =~ /=$/) }.each {|attribute| line << " #{attribute}:string"}
|
102
|
+
line.join('')
|
103
|
+
end
|
104
|
+
|
96
105
|
def included(base)
|
97
106
|
base.extend ClassMethods
|
98
107
|
base.send(:include, InstanceMethods)
|
@@ -211,21 +220,10 @@ module Morph
|
|
211
220
|
methods
|
212
221
|
end
|
213
222
|
|
214
|
-
def
|
215
|
-
@@adding_morph_method[self] =
|
216
|
-
|
217
|
-
|
218
|
-
def class_def name, &block
|
219
|
-
class_eval { define_method name, &block }
|
220
|
-
end
|
221
|
-
|
222
|
-
def script_generate options={}
|
223
|
-
name = self.name.to_s.split('::').last
|
224
|
-
name = yield name if block_given?
|
225
|
-
generator = options[:generator] || 'model'
|
226
|
-
line = ["rails destroy #{generator} #{name}; rails generate #{generator} #{name}"]
|
227
|
-
morph_methods.select{|m| not(m =~ /=$/) }.each {|attribute| line << " #{attribute}:string"}
|
228
|
-
line.join('')
|
223
|
+
def add_morph_attribute attribute, *args
|
224
|
+
@@adding_morph_method[self] = true
|
225
|
+
class_eval "attr_accessor :#{attribute}"
|
226
|
+
@@adding_morph_method[self] = false
|
229
227
|
end
|
230
228
|
|
231
229
|
protected
|
@@ -251,7 +249,11 @@ module Morph
|
|
251
249
|
module MethodMissing
|
252
250
|
def method_missing symbol, *args
|
253
251
|
is_writer = symbol.to_s =~ /=$/
|
254
|
-
is_writer
|
252
|
+
if is_writer
|
253
|
+
Morph::InstanceMethods::Helper.morph_method_missing(self, symbol, *args)
|
254
|
+
else
|
255
|
+
super
|
256
|
+
end
|
255
257
|
end
|
256
258
|
end
|
257
259
|
|
@@ -280,7 +282,7 @@ module Morph
|
|
280
282
|
if attributes_or_label.is_a? Hash
|
281
283
|
attributes_or_label.each { |a, v| morph(a, v) }
|
282
284
|
else
|
283
|
-
attribute = convert_to_morph_method_name(attributes_or_label)
|
285
|
+
attribute = Helper.convert_to_morph_method_name(attributes_or_label)
|
284
286
|
send("#{attribute}=".to_sym, value)
|
285
287
|
end
|
286
288
|
end
|
@@ -305,39 +307,32 @@ module Morph
|
|
305
307
|
end
|
306
308
|
end
|
307
309
|
|
308
|
-
|
309
|
-
attribute = symbol.to_s.chomp '='
|
310
|
-
if RUBY_VERSION >= "1.9"
|
311
|
-
attribute = attribute.to_sym
|
312
|
-
end
|
310
|
+
module Helper
|
313
311
|
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
312
|
+
def self.morph_method_missing object, symbol, *args
|
313
|
+
attribute = symbol.to_s.chomp '='
|
314
|
+
if RUBY_VERSION >= "1.9"
|
315
|
+
attribute = attribute.to_sym
|
316
|
+
end
|
319
317
|
|
320
|
-
if
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
base.
|
325
|
-
send(symbol, *args)
|
318
|
+
if Object.instance_methods.include?(attribute)
|
319
|
+
raise "'#{attribute}' is an instance_method on Object, cannot create accessor methods for '#{attribute}'"
|
320
|
+
elsif Helper.argument_provided? args
|
321
|
+
base = object.class
|
322
|
+
base.add_morph_attribute attribute
|
323
|
+
object.send(symbol, *args)
|
326
324
|
end
|
327
|
-
base.adding_morph_method = false
|
328
325
|
end
|
329
|
-
end
|
330
326
|
|
331
|
-
|
332
|
-
|
333
|
-
def argument_provided? args
|
327
|
+
def self.argument_provided? args
|
334
328
|
args.size > 0 && !args[0].nil? && !(args[0].is_a?(String) && args[0].strip.size == 0)
|
335
329
|
end
|
336
330
|
|
337
|
-
def convert_to_morph_method_name label
|
331
|
+
def self.convert_to_morph_method_name label
|
338
332
|
name = label.to_s.downcase.tr('()\-*',' ').gsub("'",' ').gsub('/',' ').gsub('%','percentage').strip.chomp(':').strip.gsub(/\s/,'_').squeeze('_')
|
339
333
|
name = '_'+name if name =~ /^\d/
|
340
334
|
name
|
341
335
|
end
|
336
|
+
end
|
342
337
|
end
|
343
338
|
end
|
data/morph.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "morph"
|
5
|
-
s.version = "0.3.
|
5
|
+
s.version = "0.3.7"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Rob McKinnon"]
|
9
|
-
s.date = "
|
9
|
+
s.date = "2014-02-24"
|
10
10
|
s.description = "Morph mixin allows you to emerge Ruby class definitions from data via calling assignment methods.\n"
|
11
11
|
s.email = ["rob ~@nospam@~ rubyforge.org"]
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README"]
|
@@ -16,11 +16,11 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Morph", "--main", "README", "--inline-source"]
|
17
17
|
s.require_paths = ["lib"]
|
18
18
|
s.rubyforge_project = "morph"
|
19
|
-
s.rubygems_version = "
|
19
|
+
s.rubygems_version = "2.0.3"
|
20
20
|
s.summary = "Morph mixin allows you to emerge class definitions via calling assignment methods."
|
21
21
|
|
22
22
|
if s.respond_to? :specification_version then
|
23
|
-
s.specification_version =
|
23
|
+
s.specification_version = 4
|
24
24
|
|
25
25
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
26
26
|
s.add_runtime_dependency(%q<activesupport>, [">= 2.0.2"])
|
metadata
CHANGED
@@ -1,68 +1,59 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: morph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Rob McKinnon
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-02-24 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activesupport
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 2.0.2
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 2.0.2
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: echoe
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
|
-
description:
|
63
|
-
via calling assignment methods.
|
64
|
-
|
65
|
-
'
|
55
|
+
description: |
|
56
|
+
Morph mixin allows you to emerge Ruby class definitions from data via calling assignment methods.
|
66
57
|
email:
|
67
58
|
- rob ~@nospam@~ rubyforge.org
|
68
59
|
executables: []
|
@@ -81,7 +72,8 @@ files:
|
|
81
72
|
- Rakefile
|
82
73
|
homepage: https://github.com/robmckinnon/morph
|
83
74
|
licenses: []
|
84
|
-
|
75
|
+
metadata: {}
|
76
|
+
post_install_message: 'Read usage examples at: https://github.com/robmckinnon/morph#readme'
|
85
77
|
rdoc_options:
|
86
78
|
- --line-numbers
|
87
79
|
- --inline-source
|
@@ -93,22 +85,20 @@ rdoc_options:
|
|
93
85
|
require_paths:
|
94
86
|
- lib
|
95
87
|
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
-
none: false
|
97
88
|
requirements:
|
98
|
-
- -
|
89
|
+
- - '>='
|
99
90
|
- !ruby/object:Gem::Version
|
100
91
|
version: '0'
|
101
92
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
-
none: false
|
103
93
|
requirements:
|
104
|
-
- -
|
94
|
+
- - '>='
|
105
95
|
- !ruby/object:Gem::Version
|
106
96
|
version: '1.2'
|
107
97
|
requirements: []
|
108
98
|
rubyforge_project: morph
|
109
|
-
rubygems_version:
|
99
|
+
rubygems_version: 2.0.3
|
110
100
|
signing_key:
|
111
|
-
specification_version:
|
101
|
+
specification_version: 4
|
112
102
|
summary: Morph mixin allows you to emerge class definitions via calling assignment
|
113
103
|
methods.
|
114
104
|
test_files: []
|