hobofields 1.0.3 → 1.1.0.pre0
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/Rakefile +5 -6
- data/lib/hobo_fields/enum_string.rb +1 -1
- data/lib/hobo_fields/field_spec.rb +14 -0
- data/lib/hobo_fields/migration_generator.rb +1 -0
- data/lib/hobo_fields/model_extensions.rb +18 -20
- data/lib/hobo_fields/serialized_object.rb +1 -1
- data/lib/hobo_fields.rb +9 -32
- data/test/hobofields_api.rdoctest +1 -1
- data/test/migration_generator.rdoctest +62 -1
- data/test/migration_generator_primary_key.rdoctest +0 -1
- data/test/rich_types.rdoctest +3 -47
- data/test/test_hobofield_model_generator.rb +1 -1
- metadata +19 -24
- data/hobofields.gemspec +0 -80
data/Rakefile
CHANGED
@@ -3,11 +3,7 @@ require 'active_record'
|
|
3
3
|
ActiveRecord::ActiveRecordError # hack for https://rails.lighthouseapp.com/projects/8994/tickets/2577-when-using-activerecordassociations-outside-of-rails-a-nameerror-is-thrown
|
4
4
|
|
5
5
|
RUBY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name']).sub(/.*\s.*/m, '"\&"')
|
6
|
-
|
7
|
-
RUBYDOCTEST = 'bundle exec rubydoctest'
|
8
|
-
else
|
9
|
-
RUBYDOCTEST = ENV['RUBYDOCTEST'] || "#{RUBY} -S rubydoctest"
|
10
|
-
end
|
6
|
+
RUBYDOCTEST = ENV['RUBYDOCTEST'] || "#{RUBY} -S rubydoctest"
|
11
7
|
|
12
8
|
$:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '/../hobofields/lib')
|
13
9
|
$:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '/../hobosupport/lib')
|
@@ -38,7 +34,10 @@ Jeweler::Tasks.new do |gemspec|
|
|
38
34
|
gemspec.homepage = "http://hobocentral.net/"
|
39
35
|
gemspec.authors = ["Tom Locke"]
|
40
36
|
gemspec.rubyforge_project = "hobo"
|
41
|
-
gemspec.add_dependency("rails", [">= 2.2.2"
|
37
|
+
gemspec.add_dependency("rails", [">= 2.2.2"])
|
42
38
|
gemspec.add_dependency("hobosupport", ["= #{HoboFields::VERSION}"])
|
43
39
|
end
|
44
40
|
Jeweler::GemcutterTasks.new
|
41
|
+
Jeweler::RubyforgeTasks.new do |rubyforge|
|
42
|
+
rubyforge.doc_task = false
|
43
|
+
end
|
@@ -82,7 +82,7 @@ module HoboFields
|
|
82
82
|
COLUMN_TYPE = :string
|
83
83
|
|
84
84
|
def initialize(value)
|
85
|
-
super(self.class.detranslated_values.nil? ? value:
|
85
|
+
super(self.class.detranslated_values.nil? ? value : self.class.detranslated_values[value.to_s])
|
86
86
|
end
|
87
87
|
|
88
88
|
def validate
|
@@ -60,6 +60,10 @@ module HoboFields
|
|
60
60
|
def default
|
61
61
|
options[:default]
|
62
62
|
end
|
63
|
+
|
64
|
+
def comment
|
65
|
+
options[:comment]
|
66
|
+
end
|
63
67
|
|
64
68
|
def same_type?(col_spec)
|
65
69
|
t = sql_type
|
@@ -74,6 +78,16 @@ module HoboFields
|
|
74
78
|
|
75
79
|
def different_to?(col_spec)
|
76
80
|
!same_type?(col_spec) ||
|
81
|
+
# we should be able to use col_spec.comment, but col_spec has
|
82
|
+
# a nil table_name for some strange reason.
|
83
|
+
begin
|
84
|
+
if model.table_exists?
|
85
|
+
col_comment = ActiveRecord::Base.try.column_comment(col_spec.name, model.table_name)
|
86
|
+
col_comment != nil && col_comment != comment
|
87
|
+
else
|
88
|
+
false
|
89
|
+
end
|
90
|
+
end ||
|
77
91
|
begin
|
78
92
|
check_attributes = [:null, :default]
|
79
93
|
check_attributes += [:precision, :scale] if sql_type == :decimal && !col_spec.is_a?(SQLITE_COLUMN_CLASS) # remove when rails fixes https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/2872
|
@@ -335,6 +335,7 @@ module HoboFields
|
|
335
335
|
change_spec[:scale] = spec.scale unless spec.scale.nil?
|
336
336
|
change_spec[:null] = spec.null unless spec.null && col.null
|
337
337
|
change_spec[:default] = spec.default unless spec.default.nil? && col.default.nil?
|
338
|
+
change_spec[:comment] = spec.comment unless spec.comment.nil? && col.try.comment.nil?
|
338
339
|
|
339
340
|
changes << "change_column :#{new_table_name}, :#{c}, " +
|
340
341
|
([":#{spec.sql_type}"] + format_options(change_spec, spec.sql_type, true)).join(", ")
|
@@ -22,17 +22,13 @@ module HoboFields
|
|
22
22
|
inheriting_cattr_reader :index_specs => []
|
23
23
|
inheriting_cattr_reader :ignore_indexes => []
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
def self.inherited(klass)
|
29
|
-
fields do |f|
|
30
|
-
f.field(inheritance_column, :string)
|
31
|
-
end
|
32
|
-
index(inheritance_column)
|
33
|
-
super
|
25
|
+
def self.inherited(klass)
|
26
|
+
fields do |f|
|
27
|
+
f.field(inheritance_column, :string)
|
34
28
|
end
|
35
|
-
|
29
|
+
index(inheritance_column)
|
30
|
+
super
|
31
|
+
end
|
36
32
|
|
37
33
|
def self.index(fields, options = {})
|
38
34
|
# don't double-index fields
|
@@ -87,20 +83,22 @@ module HoboFields
|
|
87
83
|
def self.belongs_to_with_field_declarations(name, options={}, &block)
|
88
84
|
column_options = {}
|
89
85
|
column_options[:null] = options.delete(:null) if options.has_key?(:null)
|
86
|
+
column_options[:comment] = options.delete(:comment) if options.has_key?(:comment)
|
90
87
|
|
91
88
|
index_options = {}
|
92
89
|
index_options[:name] = options.delete(:index) if options.has_key?(:index)
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
90
|
+
|
91
|
+
returning belongs_to_without_field_declarations(name, options, &block) do
|
92
|
+
refl = reflections[name.to_sym]
|
93
|
+
fkey = refl.primary_key_name
|
94
|
+
declare_field(fkey.to_sym, :integer, column_options)
|
95
|
+
if refl.options[:polymorphic]
|
96
|
+
declare_polymorphic_type_field(name, column_options)
|
97
|
+
index(["#{name}_type", fkey], index_options) if index_options[:name]!=false
|
98
|
+
else
|
99
|
+
index(fkey, index_options) if index_options[:name]!=false
|
100
|
+
end
|
102
101
|
end
|
103
|
-
bt
|
104
102
|
end
|
105
103
|
class << self
|
106
104
|
alias_method_chain :belongs_to, :field_declarations
|
data/lib/hobo_fields.rb
CHANGED
@@ -1,10 +1,6 @@
|
|
1
1
|
require 'hobosupport'
|
2
2
|
|
3
|
-
|
4
|
-
ActiveSupport::Dependencies.autoload_paths |= [ File.dirname(__FILE__)]
|
5
|
-
else
|
6
|
-
ActiveSupport::Dependencies.load_paths |= [ File.dirname(__FILE__)]
|
7
|
-
end
|
3
|
+
ActiveSupport::Dependencies.load_paths |= [ File.dirname(__FILE__) ]
|
8
4
|
|
9
5
|
module Hobo
|
10
6
|
# Empty class to represent the boolean type.
|
@@ -13,7 +9,7 @@ end
|
|
13
9
|
|
14
10
|
module HoboFields
|
15
11
|
|
16
|
-
VERSION = "1.0.
|
12
|
+
VERSION = "1.1.0.pre0"
|
17
13
|
|
18
14
|
extend self
|
19
15
|
|
@@ -68,27 +64,12 @@ module HoboFields
|
|
68
64
|
end
|
69
65
|
|
70
66
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
init_method = type.instance_method(:initialize)
|
78
|
-
[-1,1].include?(init_method.arity) &&
|
79
|
-
init_method.owner != Object.instance_method(:initialize).owner &&
|
80
|
-
!@never_wrap_types.any? { |c| klass <= c }
|
81
|
-
end
|
82
|
-
else
|
83
|
-
# Ruby 1.8. 1.8.6 doesn't include Method#owner. 1.8.7 could use
|
84
|
-
# the 1.9 function, but this one is faster.
|
85
|
-
def can_wrap?(type, val)
|
86
|
-
col_type = type::COLUMN_TYPE
|
87
|
-
return false if val.blank? && (col_type == :integer || col_type == :float || col_type == :decimal)
|
88
|
-
klass = Object.instance_method(:class).bind(val).call # Make sure we get the *real* class
|
89
|
-
init_method = type.instance_method(:initialize)
|
90
|
-
[-1,1].include?(init_method.arity) && !@never_wrap_types.any? { |c| klass <= c }
|
91
|
-
end
|
67
|
+
def can_wrap?(type, val)
|
68
|
+
col_type = type::COLUMN_TYPE
|
69
|
+
return false if val.blank? && (col_type == :integer || col_type == :float || col_type == :decimal)
|
70
|
+
klass = Object.instance_method(:class).bind(val).call # Make sure we get the *real* class
|
71
|
+
arity = type.instance_method(:initialize).arity
|
72
|
+
(arity == 1 || arity == -1) && !@never_wrap_types.any? { |c| klass <= c }
|
92
73
|
end
|
93
74
|
|
94
75
|
|
@@ -124,11 +105,7 @@ module HoboFields
|
|
124
105
|
if defined?(::Rails)
|
125
106
|
plugins = Rails.configuration.plugin_loader.new(HoboFields.rails_initializer).plugins
|
126
107
|
([::Rails.root] + plugins.map(&:directory)).each do |dir|
|
127
|
-
|
128
|
-
ActiveSupport::Dependencies.autoload_paths << File.join(dir, 'app', 'rich_types')
|
129
|
-
else
|
130
|
-
ActiveSupport::Dependencies.load_paths << File.join(dir, 'app', 'rich_types')
|
131
|
-
end
|
108
|
+
ActiveSupport::Dependencies.load_paths << File.join(dir, 'app', 'rich_types')
|
132
109
|
Dir[File.join(dir, 'app', 'rich_types', '*.rb')].each do |f|
|
133
110
|
# TODO: should we complain if field_types doesn't get a new value? Might be useful to warn people if they're missing a register_type
|
134
111
|
require_dependency f
|
@@ -169,7 +169,7 @@ In your HoboFields models you can also give type information to "virtual fields"
|
|
169
169
|
|
170
170
|
## Field validations
|
171
171
|
|
172
|
-
HoboFields gives you some shorthands for declaring some common validations right in the field declaration
|
172
|
+
HoboFields gives you some shorthands for declaring some common validations right in the field declaration
|
173
173
|
|
174
174
|
### Required fields
|
175
175
|
|
@@ -105,7 +105,6 @@ We'll define a method to make that easier next time
|
|
105
105
|
>>
|
106
106
|
def migrate(renames={})
|
107
107
|
up, down = HoboFields::MigrationGenerator.run(renames)
|
108
|
-
puts up
|
109
108
|
ActiveRecord::Migration.class_eval(up)
|
110
109
|
ActiveRecord::Base.send(:subclasses).each { |model| model.reset_column_information }
|
111
110
|
[up, down]
|
@@ -666,8 +665,70 @@ HoboFields has some support for legacy keys.
|
|
666
665
|
=>
|
667
666
|
"rename_column :adverts, :id, :advert_id
|
668
667
|
|
668
|
+
>> nuke_model_class(Advert)
|
669
|
+
>> nuke_model_class(Ad)
|
670
|
+
>> ActiveRecord::Base.connection.execute "drop table `adverts`;"
|
671
|
+
{.hidden}
|
672
|
+
|
673
|
+
|
674
|
+
## Comments
|
675
|
+
|
676
|
+
Comments can be added to tables and fields with HoboFields.
|
677
|
+
|
678
|
+
>>
|
679
|
+
class Product < ActiveRecord::Base
|
680
|
+
fields do
|
681
|
+
name :string, :comment => "short name"
|
682
|
+
description :string
|
683
|
+
end
|
684
|
+
end
|
685
|
+
>> up, down = HoboFields::MigrationGenerator.run
|
686
|
+
>> up
|
687
|
+
=>
|
688
|
+
'create_table :products do |t|
|
689
|
+
t.string :name, :comment => "short name"
|
690
|
+
t.string :description
|
691
|
+
end'
|
692
|
+
>> migrate
|
693
|
+
|
694
|
+
These comments will be saved to your schema if you have the [column_comments](http://github.com/bryanlarsen/column_comments) plugin installed. If you do not have this plugin installed, the comments will be available by querying `field_specs`:
|
695
|
+
|
696
|
+
>> Product.field_specs["name"].comment
|
697
|
+
=> "short name"
|
698
|
+
|
699
|
+
The plugin [activerecord-comments](http://github.com/bryanlarsen/activerecord-comments) may be used to get the comments from the database directly. If the plugin is installed, use this instead:
|
700
|
+
|
701
|
+
Product.column("name").comment
|
702
|
+
|
703
|
+
Because it will be quite common for people not to have both [column_comments](http://github.com/bryanlarsen/column_comments) and [activerecord-comments](http://github.com/bryanlarsen/activerecord-comments) installed, it is impossible for HoboFields to determine the difference between no previous comment and a previously missing plugin. Therefore, HoboFields will not generate a migration if the only change was to add a comment. HoboFields will generate a migration for a comment change, but only if the plugin is installed.
|
704
|
+
|
705
|
+
>> require 'activerecord-comments'
|
706
|
+
|
707
|
+
>> # manually add comment as the column_comments plugin would
|
708
|
+
>> Product.connection.execute "alter table `products` modify `name` varchar(255) default null comment 'short name';"
|
709
|
+
|
710
|
+
>>
|
711
|
+
class Product < ActiveRecord::Base
|
712
|
+
fields do
|
713
|
+
name :string, :comment => "Short namex"
|
714
|
+
description :string, :comment => "Long name"
|
715
|
+
end
|
716
|
+
end
|
717
|
+
>> up, down = HoboFields::MigrationGenerator.run
|
718
|
+
>> up
|
719
|
+
=> "change_column :products, :name, :string, :limit => 255, :comment => \"Short namex\""
|
720
|
+
|
721
|
+
|
669
722
|
Cleanup
|
723
|
+
{.hidden}
|
724
|
+
|
725
|
+
>> nuke_model_class(Product)
|
726
|
+
>> ActiveRecord::Base.connection.execute "drop table `products`;"
|
727
|
+
{.hidden}
|
728
|
+
|
729
|
+
Final Cleanup
|
670
730
|
{.hidden}
|
671
731
|
|
672
732
|
>> system "mysqladmin #{mysql_login} --force drop #{mysql_database} 2> /dev/null"
|
673
733
|
{.hidden}
|
734
|
+
|
@@ -42,7 +42,6 @@ We'll define a method to make that easier next time
|
|
42
42
|
>>
|
43
43
|
def migrate(renames={})
|
44
44
|
up, down = HoboFields::MigrationGenerator.run(renames)
|
45
|
-
puts up
|
46
45
|
ActiveRecord::Migration.class_eval(up)
|
47
46
|
ActiveRecord::Base.send(:subclasses).each { |model| model.reset_column_information }
|
48
47
|
[up, down]
|
data/test/rich_types.rdoctest
CHANGED
@@ -23,9 +23,9 @@ though we don't need it for this test:
|
|
23
23
|
>> mysql_database = "hobofields_doctest"
|
24
24
|
>> system "mysqladmin #{mysql_login} --force drop #{mysql_database} 2> /dev/null"
|
25
25
|
>> system("mysqladmin #{mysql_login} create #{mysql_database}") or raise "could not create database"
|
26
|
-
>> ActiveRecord::Base.establish_connection(:adapter =>
|
26
|
+
>> ActiveRecord::Base.establish_connection(:adapter => "mysql",
|
27
27
|
:database => mysql_database,
|
28
|
-
:host => "localhost", :
|
28
|
+
:host => "localhost", :user => mysql_user, :password => mysql_password)
|
29
29
|
{.hidden}
|
30
30
|
|
31
31
|
Some load path manipulation you shouldn't need:
|
@@ -165,52 +165,8 @@ Provides validation of correct email address format.
|
|
165
165
|
|
166
166
|
### `HoboFields::PasswordString`
|
167
167
|
|
168
|
-
`HoboFields::PasswordString` provides a simple `to_html` to prevent
|
169
|
-
accidental display of a password. It simply returns "`[password
|
170
|
-
hidden]`". The type is also used to indicate the need for an `<input
|
171
|
-
type='password'>`
|
168
|
+
`HoboFields::PasswordString` provides a simple `to_html` to prevent accidental display of a password. It simply returns "`[password hidden]`". The type is also used to indicate the need for an `<input type='password'>`
|
172
169
|
|
173
|
-
### `HoboFields::Serialized`
|
174
|
-
|
175
|
-
This type lets you store an arbitrary object as serialized text into
|
176
|
-
the database column. You can optionally pass the :class option to
|
177
|
-
restrict the column type.
|
178
|
-
|
179
|
-
>>
|
180
|
-
def migrate(renames={})
|
181
|
-
up, down = HoboFields::MigrationGenerator.run(renames)
|
182
|
-
ActiveRecord::Migration.class_eval(up)
|
183
|
-
ActiveRecord::Base.send(:subclasses).each { |model| model.reset_column_information }
|
184
|
-
[up, down]
|
185
|
-
end
|
186
|
-
{.hidden}
|
187
|
-
|
188
|
-
>>
|
189
|
-
class Vault1 < ActiveRecord::Base
|
190
|
-
fields do
|
191
|
-
content :serialized
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
>> migrate
|
196
|
-
>> Vault1.create!(:content => {:key => "in Vault"})
|
197
|
-
>> Vault1.first.content
|
198
|
-
=> {:key => "in Vault"}
|
199
|
-
|
200
|
-
>>
|
201
|
-
class Vault2 < ActiveRecord::Base
|
202
|
-
fields do
|
203
|
-
content :serialized, :class => Hash
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
>> migrate
|
208
|
-
>> Vault2.create!(:content => {:key => "in Vault"})
|
209
|
-
>> Vault2.first.content
|
210
|
-
=> {:key => "in Vault"}
|
211
|
-
>> Vault2.create!(:content => 17) rescue ActiveRecord::SerializationTypeMismatch
|
212
|
-
>> Vault2.all.size
|
213
|
-
=> 1 # second record not created because of type mismatch
|
214
170
|
|
215
171
|
## Enum Strings
|
216
172
|
|
@@ -4,7 +4,7 @@ require 'rails_generator'
|
|
4
4
|
# we get a SystemStackError on JRuby
|
5
5
|
exit(0) if defined? JRUBY_VERSION
|
6
6
|
|
7
|
-
require
|
7
|
+
require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
|
8
8
|
|
9
9
|
class TestHobofieldModelGenerator < Test::Unit::TestCase
|
10
10
|
include RubiGen::GeneratorTestHelper
|
metadata
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hobofields
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: -1876988165
|
5
|
+
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
10
|
+
- pre0
|
11
|
+
version: 1.1.0.pre0
|
11
12
|
platform: ruby
|
12
13
|
authors:
|
13
14
|
- Tom Locke
|
@@ -15,7 +16,7 @@ autorequire:
|
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date:
|
19
|
+
date: 2010-11-12 00:00:00 -05:00
|
19
20
|
default_executable:
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
@@ -32,14 +33,6 @@ dependencies:
|
|
32
33
|
- 2
|
33
34
|
- 2
|
34
35
|
version: 2.2.2
|
35
|
-
- - <
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
hash: 7
|
38
|
-
segments:
|
39
|
-
- 3
|
40
|
-
- 0
|
41
|
-
- 0
|
42
|
-
version: 3.0.0
|
43
36
|
type: :runtime
|
44
37
|
version_requirements: *id001
|
45
38
|
- !ruby/object:Gem::Dependency
|
@@ -50,12 +43,13 @@ dependencies:
|
|
50
43
|
requirements:
|
51
44
|
- - "="
|
52
45
|
- !ruby/object:Gem::Version
|
53
|
-
hash:
|
46
|
+
hash: -1876988165
|
54
47
|
segments:
|
55
48
|
- 1
|
49
|
+
- 1
|
56
50
|
- 0
|
57
|
-
-
|
58
|
-
version: 1.0.
|
51
|
+
- pre0
|
52
|
+
version: 1.1.0.pre0
|
59
53
|
type: :runtime
|
60
54
|
version_requirements: *id002
|
61
55
|
description:
|
@@ -71,7 +65,6 @@ files:
|
|
71
65
|
- LICENSE.txt
|
72
66
|
- README.txt
|
73
67
|
- Rakefile
|
74
|
-
- hobofields.gemspec
|
75
68
|
- lib/hobo_fields.rb
|
76
69
|
- lib/hobo_fields/email_address.rb
|
77
70
|
- lib/hobo_fields/enum_string.rb
|
@@ -115,8 +108,8 @@ homepage: http://hobocentral.net/
|
|
115
108
|
licenses: []
|
116
109
|
|
117
110
|
post_install_message:
|
118
|
-
rdoc_options:
|
119
|
-
|
111
|
+
rdoc_options:
|
112
|
+
- --charset=UTF-8
|
120
113
|
require_paths:
|
121
114
|
- lib
|
122
115
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -131,16 +124,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
125
|
none: false
|
133
126
|
requirements:
|
134
|
-
- - "
|
127
|
+
- - ">"
|
135
128
|
- !ruby/object:Gem::Version
|
136
|
-
hash:
|
129
|
+
hash: 25
|
137
130
|
segments:
|
138
|
-
-
|
139
|
-
|
131
|
+
- 1
|
132
|
+
- 3
|
133
|
+
- 1
|
134
|
+
version: 1.3.1
|
140
135
|
requirements: []
|
141
136
|
|
142
137
|
rubyforge_project: hobo
|
143
|
-
rubygems_version: 1.
|
138
|
+
rubygems_version: 1.3.7
|
144
139
|
signing_key:
|
145
140
|
specification_version: 3
|
146
141
|
summary: Rich field types and migration generator for Rails
|
data/hobofields.gemspec
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{hobofields}
|
8
|
-
s.version = "1.0.3"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Tom Locke"]
|
12
|
-
s.date = %q{2011-02-25}
|
13
|
-
s.email = %q{tom@tomlocke.com}
|
14
|
-
s.files = [
|
15
|
-
"CHANGES.txt",
|
16
|
-
"LICENSE.txt",
|
17
|
-
"README.txt",
|
18
|
-
"Rakefile",
|
19
|
-
"hobofields.gemspec",
|
20
|
-
"lib/hobo_fields.rb",
|
21
|
-
"lib/hobo_fields/email_address.rb",
|
22
|
-
"lib/hobo_fields/enum_string.rb",
|
23
|
-
"lib/hobo_fields/field_declaration_dsl.rb",
|
24
|
-
"lib/hobo_fields/field_spec.rb",
|
25
|
-
"lib/hobo_fields/fields_declaration.rb",
|
26
|
-
"lib/hobo_fields/html_string.rb",
|
27
|
-
"lib/hobo_fields/index_spec.rb",
|
28
|
-
"lib/hobo_fields/lifecycle_state.rb",
|
29
|
-
"lib/hobo_fields/markdown_string.rb",
|
30
|
-
"lib/hobo_fields/migration_generator.rb",
|
31
|
-
"lib/hobo_fields/model_extensions.rb",
|
32
|
-
"lib/hobo_fields/password_string.rb",
|
33
|
-
"lib/hobo_fields/raw_html_string.rb",
|
34
|
-
"lib/hobo_fields/raw_markdown_string.rb",
|
35
|
-
"lib/hobo_fields/sanitize_html.rb",
|
36
|
-
"lib/hobo_fields/serialized_object.rb",
|
37
|
-
"lib/hobo_fields/text.rb",
|
38
|
-
"lib/hobo_fields/textile_string.rb",
|
39
|
-
"lib/hobofields.rb",
|
40
|
-
"rails/init.rb",
|
41
|
-
"rails_generators/hobo_migration/USAGE",
|
42
|
-
"rails_generators/hobo_migration/hobo_migration_generator.rb",
|
43
|
-
"rails_generators/hobo_migration/templates/migration.rb",
|
44
|
-
"rails_generators/hobofield_model/USAGE",
|
45
|
-
"rails_generators/hobofield_model/hobofield_model_generator.rb",
|
46
|
-
"rails_generators/hobofield_model/templates/fixtures.yml.erb",
|
47
|
-
"rails_generators/hobofield_model/templates/model.rb.erb",
|
48
|
-
"rails_generators/hobofield_model/templates/test.rb.erb",
|
49
|
-
"script/destroy",
|
50
|
-
"script/generate",
|
51
|
-
"test/hobofields.rdoctest",
|
52
|
-
"test/hobofields_api.rdoctest",
|
53
|
-
"test/migration_generator.rdoctest",
|
54
|
-
"test/migration_generator_primary_key.rdoctest",
|
55
|
-
"test/rich_types.rdoctest",
|
56
|
-
"test/test_generator_helper.rb",
|
57
|
-
"test/test_hobofield_model_generator.rb"
|
58
|
-
]
|
59
|
-
s.homepage = %q{http://hobocentral.net/}
|
60
|
-
s.require_paths = ["lib"]
|
61
|
-
s.rubyforge_project = %q{hobo}
|
62
|
-
s.rubygems_version = %q{1.4.2}
|
63
|
-
s.summary = %q{Rich field types and migration generator for Rails}
|
64
|
-
|
65
|
-
if s.respond_to? :specification_version then
|
66
|
-
s.specification_version = 3
|
67
|
-
|
68
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
69
|
-
s.add_runtime_dependency(%q<rails>, [">= 2.2.2", "< 3.0.0"])
|
70
|
-
s.add_runtime_dependency(%q<hobosupport>, ["= 1.0.3"])
|
71
|
-
else
|
72
|
-
s.add_dependency(%q<rails>, [">= 2.2.2", "< 3.0.0"])
|
73
|
-
s.add_dependency(%q<hobosupport>, ["= 1.0.3"])
|
74
|
-
end
|
75
|
-
else
|
76
|
-
s.add_dependency(%q<rails>, [">= 2.2.2", "< 3.0.0"])
|
77
|
-
s.add_dependency(%q<hobosupport>, ["= 1.0.3"])
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|