extend_at 0.2.2 → 0.2.3
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.markdown +35 -0
- data/extend_at.gemspec +6 -3
- data/lib/extend_at/configuration.rb +84 -2
- data/lib/extend_at/model_manager.rb +67 -0
- data/lib/extend_at/version.rb +1 -1
- data/lib/extend_at.rb +71 -19
- data/spec/extend_at_spec.rb +34 -23
- data/spec/spec_helper.rb +9 -1
- metadata +67 -15
data/README.markdown
CHANGED
@@ -249,6 +249,41 @@ Comparations:
|
|
249
249
|
* gt
|
250
250
|
* match
|
251
251
|
|
252
|
+
### Belongs to
|
253
|
+
|
254
|
+
If you like to add a belongs_to relationship, you can do it in this way:
|
255
|
+
# app/models/toolbox.rb
|
256
|
+
class Toolbox
|
257
|
+
end
|
258
|
+
|
259
|
+
# app/model/tool.rb
|
260
|
+
class Tool
|
261
|
+
extend_at extra, columns => {}, :belongs_to => :toolbox
|
262
|
+
end
|
263
|
+
|
264
|
+
<code>:belongs_to</code> parametter accept
|
265
|
+
|
266
|
+
* One name
|
267
|
+
|
268
|
+
:belongs_to => :toolbox
|
269
|
+
|
270
|
+
* Array of names
|
271
|
+
|
272
|
+
:belongs_to => [:toolbox, :owner]
|
273
|
+
|
274
|
+
* Hash
|
275
|
+
|
276
|
+
:belongs_to => :onwer => {:class_name => "User"}
|
277
|
+
|
278
|
+
For now, hash only accept
|
279
|
+
|
280
|
+
* class_name
|
281
|
+
* polymorphic
|
282
|
+
* foreign_key
|
283
|
+
|
284
|
+
_Note_, this new feature is under heavy development, use it under your own risk.
|
285
|
+
|
286
|
+
|
252
287
|
### Integration in the views
|
253
288
|
|
254
289
|
If you like to use some configuration variable in your views you only need put the name of the input like <code>:extra_name</code>, for example:
|
data/extend_at.gemspec
CHANGED
@@ -19,8 +19,11 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
s.add_runtime_dependency 'rails', '~> 3.1'
|
22
|
-
s.add_development_dependency "rspec", '~> 2.
|
23
|
-
s.add_development_dependency "rspec-core"
|
24
|
-
s.add_development_dependency "
|
22
|
+
s.add_development_dependency "rspec", '~> 2.8'
|
23
|
+
s.add_development_dependency "rspec-core", '~> 2.8'
|
24
|
+
s.add_development_dependency "rspec-expectations", '~> 2.8'
|
25
|
+
s.add_development_dependency "activesupport", '~> 3.1'
|
26
|
+
# s.add_development_dependency "rspec-mocks", '~> 2.8.0'
|
27
|
+
s.add_development_dependency "database_cleaner", "~> 0.8"
|
25
28
|
|
26
29
|
end
|
@@ -1,12 +1,17 @@
|
|
1
1
|
require File.expand_path('../environment', __FILE__)
|
2
2
|
|
3
3
|
module ExtendModelAt
|
4
|
+
# Main class configuration
|
5
|
+
# This class is the core of extend_at
|
4
6
|
class Configuration
|
7
|
+
#
|
5
8
|
def run(env=nil,model=nil)
|
6
9
|
if env.kind_of? Hash
|
7
10
|
hash = expand_options env, { :not_call_symbol => [:boolean], :not_expand => [:validate, :default] }, model.clone
|
8
11
|
hash[:columns] = init_columns hash[:columns]
|
9
|
-
|
12
|
+
@config = hash
|
13
|
+
read_associations_configuration
|
14
|
+
return @config
|
10
15
|
end
|
11
16
|
|
12
17
|
if not env.kind_of? Proc
|
@@ -17,6 +22,78 @@ module ExtendModelAt
|
|
17
22
|
end
|
18
23
|
|
19
24
|
protected
|
25
|
+
# Read all model relationships like belongs_to and has_many
|
26
|
+
def read_associations_configuration
|
27
|
+
[:has_one, :has_many, :belongs_to].each do |relation|
|
28
|
+
if @config.keys.include? :"#{relation}"
|
29
|
+
raise "Invalid #{relation} value" if not [Hash, Array, Symbol].include? @config[:"#{relation}"].class
|
30
|
+
|
31
|
+
# We change the user format (Hash, Array or only one element) to Array
|
32
|
+
if @config[:"#{relation}"].kind_of? Hash
|
33
|
+
list_models = @config[:"#{relation}"].keys
|
34
|
+
elsif @config[:"#{relation}"].kind_of? Array
|
35
|
+
list_models = @config[:"#{relation}"]
|
36
|
+
# Transform the array of model in a hash with his configuraion (empty, default values)
|
37
|
+
@config[:"#{relation}"] = {}
|
38
|
+
list_models.each do |model|
|
39
|
+
@config[:"#{relation}"][model.to_sym] = {}
|
40
|
+
end
|
41
|
+
else
|
42
|
+
list_models = [@config[:"#{relation}"]]
|
43
|
+
# Transform the array of model in a hash with his configuraion (empty, default values)
|
44
|
+
@config[:"#{relation}"] = {}
|
45
|
+
list_models.each do |model|
|
46
|
+
@config[:"#{relation}"][model.to_sym] = {}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Iterate inside the array and get and create the configuration to that relationship
|
51
|
+
list_models.each do |model|
|
52
|
+
# If the user set some configuration (:class_name for example), we use it
|
53
|
+
if @config[:"#{relation}"][model.to_sym].kind_of? Hash
|
54
|
+
config = @config[:"#{relation}"][model.to_sym]
|
55
|
+
# If not, we create it
|
56
|
+
else
|
57
|
+
# Change sybol of the class name to hash configuration
|
58
|
+
@config[:"#{relation}"][model.to_sym] = {}
|
59
|
+
config = {}
|
60
|
+
end
|
61
|
+
|
62
|
+
# We set the default class_name if is not seted
|
63
|
+
if config[:class_name].nil?
|
64
|
+
@config[:"#{relation}"][model.to_sym][:class_name] = model.to_s.classify
|
65
|
+
else
|
66
|
+
@config[:"#{relation}"][model.to_sym][:class_name] = config[:class_name]
|
67
|
+
end
|
68
|
+
|
69
|
+
# If the association is belongs_to, we need to define the columns
|
70
|
+
if relation.to_s == "belongs_to"
|
71
|
+
if config[:polymorphic] == true
|
72
|
+
@config[:columns][ :"#{model}_id" ] = { :type => :integer }
|
73
|
+
@config[:columns][ :"#{model}_type" ] = { :type => :string }
|
74
|
+
else
|
75
|
+
@config[:columns][ config[:foreign_key] || :"#{model}_id" ] = { :type => :integer }
|
76
|
+
@config[:"#{relation}"][model.to_sym][:foreign_key] = config[:foreign_key] || :"#{model}_id" if @config[:"#{relation}"][model.to_sym][:foreign_key].nil?
|
77
|
+
end
|
78
|
+
end
|
79
|
+
# TODO: Continue adding rails features like:
|
80
|
+
# :autosave
|
81
|
+
# :class_name
|
82
|
+
# :conditions
|
83
|
+
# :counter_cache
|
84
|
+
# :dependent
|
85
|
+
# :foreign_key
|
86
|
+
# :include
|
87
|
+
# :polymorphic
|
88
|
+
# :readonly
|
89
|
+
# :select
|
90
|
+
# :touch
|
91
|
+
# :validate
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
20
97
|
def init_columns(columns={})
|
21
98
|
new = {}
|
22
99
|
columns.each do |column, config|
|
@@ -40,7 +117,9 @@ module ExtendModelAt
|
|
40
117
|
return :datetime if type == 'Date'
|
41
118
|
return :any
|
42
119
|
end
|
43
|
-
|
120
|
+
|
121
|
+
# Transform the user configuration to hash. For example, if the user use lambda to create the configuration, this function execute the lambda to get the result
|
122
|
+
# and re-parse it (and so on) to get a full hash configuration
|
44
123
|
def expand_options(options={}, opts={}, model=nil)
|
45
124
|
options = get_value_of options, model
|
46
125
|
config_opts = {
|
@@ -66,6 +145,9 @@ module ExtendModelAt
|
|
66
145
|
end
|
67
146
|
end
|
68
147
|
|
148
|
+
# Return the value of the execute a function inside the model, for example:
|
149
|
+
# :column => :function
|
150
|
+
# this function execute the function _function_ to get the value and set it his return to column
|
69
151
|
def get_value_of(value, model=nil)
|
70
152
|
if value.kind_of? Symbol
|
71
153
|
# If the function exist, we execute it
|
@@ -87,8 +87,75 @@ module ExtendModelAt
|
|
87
87
|
def to_hash
|
88
88
|
all_hash
|
89
89
|
end
|
90
|
+
|
91
|
+
##########
|
92
|
+
# Model associations
|
93
|
+
def read_belongs_to(model_name, configuration,force_reload=false)
|
94
|
+
if @config[:"belongs_to"][model_name.to_sym].kind_of? Hash
|
95
|
+
column = @config[:"belongs_to"][model_name.to_sym][:foreign_key] || :"#{model_name}_id"
|
96
|
+
else
|
97
|
+
column = :"#{model_name}_id"
|
98
|
+
end
|
99
|
+
class_name = @config[:"belongs_to"][model_name.to_sym][:class_name]
|
100
|
+
type = get_type column
|
101
|
+
type_class = get_type_class type
|
102
|
+
|
103
|
+
# We try to get the model
|
104
|
+
# eval "User.find(...try(:first).try(:id))"
|
105
|
+
eval "#{class_name}.find(#{get_value(column)})"
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
def read_has_many(model_name, configuration,force_reload=false)
|
110
|
+
Object
|
111
|
+
end
|
112
|
+
|
113
|
+
def read_has_one(model_name, configuration,force_reload=false)
|
114
|
+
Object
|
115
|
+
end
|
116
|
+
|
117
|
+
def write_belongs_to(model_name, configuration,associate)
|
118
|
+
puts "Warnig: Dummy function"
|
119
|
+
end
|
120
|
+
|
121
|
+
# TODO: I have problems to create a temporal model
|
122
|
+
def build_belongs_to(model_name, configuration,attributes)
|
123
|
+
puts "Warnig: Dummy function"
|
124
|
+
# config = @config[:"belongs_to"][model_name.to_sym]
|
125
|
+
#
|
126
|
+
# type = get_type(config[:foreign_key] || :"#{model_name}_id")
|
127
|
+
# type_class = get_type_class type
|
128
|
+
# return if type.nil?
|
129
|
+
# # We create the model and save it
|
130
|
+
# new_model = eval "#{config[:class_name]}.new(#{attributes})"
|
131
|
+
#
|
132
|
+
# # Set the model id in the correct column
|
133
|
+
# assign(config[:foreign_key] || :"#{model_name.to_s.underscore}_id", new_model.id)
|
134
|
+
end
|
135
|
+
|
136
|
+
# Create a belongs_to relationship
|
137
|
+
# Executed when the user use, for example, Post.create_comment :title => "Bla bla", :comment => "Comment ..."
|
138
|
+
# * _model_name_: Model class name
|
139
|
+
# * _configuration_: Relationship configuration like __;foreign_key__
|
140
|
+
# * _attributes_: Attributes to set to the new model
|
141
|
+
def create_belongs_to(model_name, configuration = {},attributes = {})
|
142
|
+
config = @config[:"belongs_to"][model_name.to_sym]
|
143
|
+
|
144
|
+
type = get_type(config[:foreign_key] || :"#{model_name}_id")
|
145
|
+
type_class = get_type_class type
|
146
|
+
return if type.nil?
|
147
|
+
# We create the model and save it
|
148
|
+
new_model = eval "#{config[:class_name]}.new(#{attributes})"
|
149
|
+
return false if not new_model.save
|
150
|
+
|
151
|
+
# Set the model id in the correct column
|
152
|
+
assign(config[:foreign_key] || :"#{model_name.to_s.underscore}_id", new_model.id)
|
153
|
+
end
|
154
|
+
|
155
|
+
##### Model associations #####
|
90
156
|
|
91
157
|
protected
|
158
|
+
|
92
159
|
def get_column_model(column)
|
93
160
|
type = get_type column
|
94
161
|
type_class = get_type_class type
|
data/lib/extend_at/version.rb
CHANGED
data/lib/extend_at.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
require "active_support"
|
2
3
|
require "extend_at/version"
|
3
4
|
# require "extend_at/configuration"
|
4
5
|
require "extend_at/model_manager"
|
@@ -28,7 +29,7 @@ module ExtendModelAt
|
|
28
29
|
@columns = @configuration[:columns]
|
29
30
|
@value = get_defaults_values @configuration
|
30
31
|
|
31
|
-
|
32
|
+
define_associations
|
32
33
|
|
33
34
|
initialize_values
|
34
35
|
end
|
@@ -91,34 +92,85 @@ module ExtendModelAt
|
|
91
92
|
@configuration = value
|
92
93
|
end
|
93
94
|
|
94
|
-
def
|
95
|
+
def define_associations
|
95
96
|
[:has_one, :has_many, :belongs_to].each do |relation|
|
96
|
-
|
97
|
-
if
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
97
|
+
if @configuration.keys.include? :"#{relation}"
|
98
|
+
raise "Invalid #{relation} value" if not [Hash, Array, Symbol].include? @configuration[:"#{relation}"].class
|
99
|
+
# We nee an array of models, then, we
|
100
|
+
if @configuration[:"#{relation}"].kind_of? Hash
|
101
|
+
list_models = @configuration[:"#{relation}"].keys
|
102
|
+
elsif @configuration[:"#{relation}"].kind_of? Array
|
103
|
+
list_models = @configuration[:"#{relation}"]
|
104
|
+
else
|
105
|
+
list_models = [@configuration[:"#{relation}"]]
|
106
|
+
end
|
107
|
+
list_models.each do |model|
|
108
|
+
meta_def model.to_s do |force_reload=false|
|
109
|
+
if @configuration[:"#{relation}"].kind_of? Hash
|
110
|
+
config = @configuration[:"#{relation}"][model]
|
111
|
+
else
|
112
|
+
config = {}
|
113
|
+
end
|
114
|
+
eval "@model_manager.read_#{relation} model, config, force_reload"
|
115
|
+
end
|
116
|
+
|
117
|
+
if "#{relation}" != "has_many"
|
118
|
+
meta_def "#{model.to_s}=" do |associate|
|
119
|
+
if @configuration[:"#{relation}"].kind_of? Hash
|
120
|
+
config = @configuration[:"#{relation}"][model]
|
111
121
|
else
|
112
122
|
config = {}
|
113
123
|
end
|
114
|
-
@model_manager.
|
124
|
+
eval "@model_manager.write_#{relation} model, @configuration[:#{relation}][model], associate"
|
125
|
+
true
|
126
|
+
end
|
127
|
+
|
128
|
+
meta_def "build_#{model.to_s}" do |attributes={}|
|
129
|
+
if @configuration[:"#{relation}"].kind_of? Hash
|
130
|
+
config = @configuration[:"#{relation}"][model]
|
131
|
+
else
|
132
|
+
config = {}
|
133
|
+
end
|
134
|
+
eval "@model_manager.build_#{relation} model, config, attributes"
|
135
|
+
true
|
136
|
+
end
|
137
|
+
|
138
|
+
meta_def "create_#{model.to_s}" do |attributes={}|
|
139
|
+
if @configuration[:"#{relation}"].kind_of? Hash
|
140
|
+
config = @configuration[:"#{relation}"][model]
|
141
|
+
else
|
142
|
+
config = {}
|
143
|
+
end
|
144
|
+
eval "@model_manager.create_#{relation} model, config, attributes"
|
145
|
+
true
|
115
146
|
end
|
116
147
|
end
|
117
148
|
end
|
118
|
-
|
149
|
+
end
|
119
150
|
end
|
120
151
|
end
|
121
152
|
|
153
|
+
##########
|
154
|
+
# Meta functions
|
155
|
+
|
156
|
+
def metaclass
|
157
|
+
class << self; self; end;
|
158
|
+
end
|
159
|
+
|
160
|
+
def meta_eval(&blk)
|
161
|
+
metaclass.instance_eval &blk
|
162
|
+
end
|
163
|
+
|
164
|
+
def meta_def(name, &blk)
|
165
|
+
meta_eval { define_method name, &blk }
|
166
|
+
end
|
167
|
+
|
168
|
+
def class_def name, &blk
|
169
|
+
class_eval { define_method name, &blk }
|
170
|
+
end
|
171
|
+
|
172
|
+
##### Meta functions #####
|
173
|
+
|
122
174
|
def get_adapter(column, value)
|
123
175
|
if @columns[column.to_sym][:type] == String
|
124
176
|
return :to_s
|
data/spec/extend_at_spec.rb
CHANGED
@@ -106,27 +106,38 @@ describe 'extend_at' do
|
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
109
|
+
context "associations support" do
|
110
|
+
context "belongs_to" do
|
111
|
+
it "simple usage" do
|
112
|
+
tool = Tool.new
|
113
|
+
tool.extra.name = "Hammer"
|
114
|
+
tool.save
|
115
|
+
tool.extra.respond_to?(:create_toolbox).should == true
|
116
|
+
tool.extra.create_toolbox(:name => "Toolbox").should == true
|
117
|
+
tool.extra.toolbox.class.should == Toolbox
|
118
|
+
tool.extra.toolbox.name.should == "Toolbox"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
context "has_many" do
|
123
|
+
it "simple usage" do
|
124
|
+
pending "Working on it"
|
125
|
+
tool = Tool.new
|
126
|
+
tool.extra.name = "Hammer"
|
127
|
+
tool.save
|
128
|
+
tool.extra.respond_to?(:create_toolbox).should == true
|
129
|
+
tool.extra.create_toolbox.should == true
|
130
|
+
tool.extra.create_toolbox.should == true
|
131
|
+
tool.extra.toolbox.class.should == Toolbox
|
132
|
+
box = Toolbox.new
|
133
|
+
box.save
|
134
|
+
box.extra.create_tool
|
135
|
+
box.extra.create_tool
|
136
|
+
box.extra.create_tool
|
137
|
+
box.extra.tools.class.should == Array
|
138
|
+
box.extra.tools.size.should == 3
|
139
|
+
box.extra.tools.first.extra.toolbox.should == box
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
132
143
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'rspec'
|
4
|
+
|
1
5
|
require 'database_cleaner/active_record/base'
|
2
6
|
require 'database_cleaner'
|
3
7
|
|
@@ -7,6 +11,11 @@ require 'app/config/environment'
|
|
7
11
|
require 'rubygems'
|
8
12
|
require 'bundler/setup'
|
9
13
|
|
14
|
+
require 'extend_at'
|
15
|
+
|
16
|
+
|
17
|
+
# Bundler.require(:default)
|
18
|
+
|
10
19
|
|
11
20
|
RSpec.configure do |config|
|
12
21
|
# config.before(:suite) do
|
@@ -21,4 +30,3 @@ RSpec.configure do |config|
|
|
21
30
|
# DatabaseCleaner.clean
|
22
31
|
# end
|
23
32
|
end
|
24
|
-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: extend_at
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-06-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,40 +21,92 @@ dependencies:
|
|
21
21
|
version: '3.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.1'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rspec
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
31
36
|
- !ruby/object:Gem::Version
|
32
|
-
version: '2.
|
37
|
+
version: '2.8'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '2.8'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: rspec-core
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '2.8'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.8'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec-expectations
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '2.8'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
73
|
none: false
|
40
74
|
requirements:
|
41
|
-
- -
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2.8'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: activesupport
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
42
84
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
85
|
+
version: '3.1'
|
44
86
|
type: :development
|
45
87
|
prerelease: false
|
46
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '3.1'
|
47
94
|
- !ruby/object:Gem::Dependency
|
48
95
|
name: database_cleaner
|
49
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
50
97
|
none: false
|
51
98
|
requirements:
|
52
99
|
- - ~>
|
53
100
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0.
|
101
|
+
version: '0.8'
|
55
102
|
type: :development
|
56
103
|
prerelease: false
|
57
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.8'
|
58
110
|
description: ! 'This gem allows you to extend rails models without migrations: This
|
59
111
|
way you can, i.e., develop your own content types, like in Drupal.'
|
60
112
|
email:
|
@@ -211,7 +263,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
211
263
|
version: '0'
|
212
264
|
requirements: []
|
213
265
|
rubyforge_project: extend_at
|
214
|
-
rubygems_version: 1.8.
|
266
|
+
rubygems_version: 1.8.24
|
215
267
|
signing_key:
|
216
268
|
specification_version: 3
|
217
269
|
summary: Create dynamic fields to extend rails models (like content types in Drupal)
|