hobo_fields 1.4.0.pre8 → 2.0.0.pre1

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 CHANGED
@@ -24,7 +24,7 @@ include HoboSupport::CommonTasks
24
24
  namespace "test" do
25
25
  desc "Run the doctests"
26
26
  task :doctest do |t|
27
- files=Dir['test/*.rdoctest'].map {|f| File.expand_path(f)}.join(' ')
27
+ files=Dir['test/*.rdoctest'].sort.map {|f| File.expand_path(f)}.join(' ')
28
28
  exit(1) if !system("#{RUBYDOCTEST} #{files}")
29
29
  end
30
30
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.0.pre8
1
+ 2.0.0.pre1
@@ -7,6 +7,7 @@
7
7
  timestamps
8
8
  <% end -%>
9
9
  end
10
+ attr_accessible <%= accessible_attributes.map {|a| ":#{a.name}"}.join ", " %>
10
11
 
11
12
  <% for bt in bts -%>
12
13
  belongs_to :<%= bt %>
@@ -10,9 +10,31 @@ ActiveRecord::Base.class_eval do
10
10
  end
11
11
  end
12
12
 
13
+ # Rails 3.2+
14
+ def internal_attribute_access_code(attr_name, cast_code)
15
+ access_code = "(v=@attributes[attr_name]) && #{cast_code}"
16
+
17
+ unless attr_name == primary_key
18
+ access_code.insert(0, "missing_attribute(attr_name, caller) unless @attributes.has_key?(attr_name); ")
19
+ end
20
+
21
+ # This is the Hobo hook - add a type wrapper around the field
22
+ # value if we have a special type defined
23
+ if can_wrap_with_hobo_type?(attr_name)
24
+ access_code = "val = begin; #{access_code}; end; wrapper_type = self.class.attr_type(:#{attr_name}); " +
25
+ "if HoboFields.can_wrap?(wrapper_type, val); wrapper_type.new(val); else; val; end"
26
+ end
27
+
28
+ if cache_attribute?(attr_name)
29
+ access_code = "@attributes_cache['#{attr_name}'] ||= begin; #{access_code}; end;"
30
+ end
31
+
32
+ "attr_name = '#{attr_name}'; #{access_code}"
33
+ end
34
+
35
+ # Rails 3.1 or earlier
13
36
  # Define an attribute reader method. Cope with nil column.
14
37
  def define_read_method(symbol, attr_name, column)
15
-
16
38
  cast_code = column.type_cast_code('v') if column
17
39
  access_code = cast_code ? "(v=@attributes['#{attr_name}']) && #{cast_code}" : "@attributes['#{attr_name}']"
18
40
 
data/test/api.rdoctest CHANGED
@@ -24,7 +24,7 @@ This will generate the test, fixture and a model file like this:
24
24
  body :text
25
25
  contact_address :email_address
26
26
  end
27
-
27
+ attr_accessible :title, :body, :contact_address
28
28
  end
29
29
 
30
30
  (Note: `:email_address` is an example of a "Rich Type" provided by HoboFields -- more on those later)
@@ -112,6 +112,8 @@ HoboFields adds a few features to your models.
112
112
 
113
113
  Returns the type (i.e. class) declared for a given field or attribute
114
114
 
115
+ >> Advert.connection.schema_cache.clear!
116
+ >> Advert.reset_column_information
115
117
  >> Advert.attr_type :title
116
118
  => String
117
119
  >> Advert.attr_type :body
@@ -154,6 +156,7 @@ The `:required` argument to a field gives a `validates_presence_of`:
154
156
  fields do
155
157
  title :string, :required
156
158
  end
159
+ attr_accessible :title
157
160
  end
158
161
  >> a = Advert.new
159
162
  >> a.valid?
@@ -174,6 +177,7 @@ The `:unique` argument in a field declaration gives `validates_uniqueness_of`:
174
177
  fields do
175
178
  title :string, :unique
176
179
  end
180
+ attr_accessible :title
177
181
  end
178
182
  >> a = Advert.new :title => "Jimbo"
179
183
  >> a.valid?
@@ -194,6 +198,7 @@ Let's get back to the basic Advert class with no validations before we continue:
194
198
  body :text
195
199
  contact_address :email_address
196
200
  end
201
+ attr_accessible :title, :body, :contact_address
197
202
  end
198
203
 
199
204
 
@@ -226,6 +231,7 @@ You can set the type of a virtual field to a rich type, e.g.
226
231
  >>
227
232
  class Advert
228
233
  attr_accessor :alternative_email, :type => :email_address
234
+ attr_accessible :alternative_email
229
235
  end
230
236
 
231
237
  By default, virtual fields are not subject to validation.
@@ -11,7 +11,7 @@ doctest: model file exists
11
11
 
12
12
  doctest: model content matches
13
13
  >> File.read 'app/models/alpha/beta.rb'
14
- => "class Alpha::Beta < ActiveRecord::Base\n\n fields do\n one :string\n two :integer\n end\n\nend\n"
14
+ => "class Alpha::Beta < ActiveRecord::Base\n\n fields do\n one :string\n two :integer\n end\n attr_accessible :one, :two\n\nend\n"
15
15
 
16
16
  doctest: module file exists
17
17
  >> File.exist? 'app/models/alpha.rb'
@@ -54,6 +54,7 @@ doctest: db file exists
54
54
  => true
55
55
 
56
56
  doctest: Alpha::Beta class exists
57
+ >> Alpha::Beta.connection.schema_cache.clear!
58
+ >> Alpha::Beta.reset_column_information
57
59
  >> Alpha::Beta
58
60
  => Alpha::Beta(id: integer, one: string, two: integer)
59
-
@@ -157,8 +157,6 @@ Let's apply that change to the database
157
157
 
158
158
  ### Change a type
159
159
 
160
- >> Advert.attr_type :title
161
- => String
162
160
  >>
163
161
  class Advert
164
162
  fields do
@@ -557,6 +555,8 @@ The migration generator is designed to create complete migrations even if many c
557
555
 
558
556
  First let's confirm we're in a known state. One model, 'Advert', with a string 'title' and text 'body':
559
557
 
558
+ >> Advert.connection.schema_cache.clear!
559
+ >> Advert.reset_column_information
560
560
  >> Advert.connection.tables
561
561
  => ["adverts"]
562
562
  >> Advert.columns.*.name
@@ -8,4 +8,4 @@ system %(echo "gem 'RedCloth'" >> #{TESTAPP_PATH}/Gemfile)
8
8
  FileUtils.chdir TESTAPP_PATH
9
9
  require "#{TESTAPP_PATH}/config/environment"
10
10
  require 'rails/generators'
11
- Rails::Generators.configure!
11
+ Rails::Generators.configure!(Rails.application.config.generators)
@@ -118,6 +118,7 @@ Provides validation of correct email address format.
118
118
  fields do
119
119
  body HoboFields::Types::HtmlString
120
120
  end
121
+ attr_accessible :body
121
122
  end
122
123
  >> article = Article.create!(:body => "</div>>>p1<p>p2</p>p3<nasty>p4</nasty>p5&lt;script&gt;p6<script>p7</script>p8")
123
124
  # some unsafe html fragements are removed on save,
@@ -222,6 +223,7 @@ restrict the column type.
222
223
  fields do
223
224
  content :serialized
224
225
  end
226
+ attr_accessible :content
225
227
  end
226
228
 
227
229
  >> migrate
@@ -234,6 +236,7 @@ restrict the column type.
234
236
  fields do
235
237
  content :serialized, :class => Hash
236
238
  end
239
+ attr_accessible :content
237
240
  end
238
241
 
239
242
  >> migrate
@@ -241,10 +244,7 @@ restrict the column type.
241
244
  >> Vault2.first.content
242
245
  => {:key => "in Vault"}
243
246
  >> puts Vault2.count
244
- >> v = Vault2.create!(:content => 17)
245
- >> Vault2.count
246
- => 2 # Invalid type is successfully created...
247
- >> v.reload rescue 'broken' # ActiveRecord::SerializationTypeMismatch
247
+ >> v = Vault2.create!(:content => 17) rescue 'broken' # ActiveRecord::SerializationTypeMismatch
248
248
  => 'broken'
249
249
 
250
250
  ## Enum Strings
@@ -315,7 +315,7 @@ ActiveRecord validation framework.
315
315
  end
316
316
  end
317
317
  >> Article.attr_type :status
318
- #<EnumString draft approved published>
318
+ => #<EnumString draft approved published>
319
319
 
320
320
  Sometimes it's nice to have a proper type name. Here's one way you might go about it:
321
321
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hobo_fields
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0.pre8
4
+ version: 2.0.0.pre1
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-01 00:00:00.000000000 Z
12
+ date: 2012-09-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hobo_support
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 1.4.0.pre8
21
+ version: 2.0.0.pre1
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - '='
28
28
  - !ruby/object:Gem::Version
29
- version: 1.4.0.pre8
29
+ version: 2.0.0.pre1
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rubydoctest
32
32
  requirement: !ruby/object:Gem::Requirement