hydra_attribute 0.5.0.rc1 → 0.5.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -17,6 +17,7 @@ test/tmp
17
17
  test/version_tmp
18
18
  tmp
19
19
  .idea
20
- .rvmrc
20
+ .ruby-version
21
+ .ruby-gemset
21
22
  bin/
22
23
  gemfiles/*.lock
@@ -42,6 +42,19 @@ module HydraAttribute
42
42
  end
43
43
  super
44
44
  end
45
+
46
+ # Returns the column object for the named attribute.
47
+ #
48
+ # @param [String, Symbol] name
49
+ # @return [ActiveRecord::ConnectionAdapters::Column]
50
+ def column_for_attribute(name)
51
+ hydra_attribute = self.class.hydra_attributes.find { |hydra_attribute| hydra_attribute.name == name.to_s } # TODO should be cached
52
+ if hydra_attribute
53
+ HydraValue.column(hydra_attribute.id)
54
+ else
55
+ super
56
+ end
57
+ end
45
58
  end
46
59
  end
47
60
  end
@@ -25,9 +25,13 @@ module HydraAttribute
25
25
  # TODO should be optimized. List of allowed attributes should be cached
26
26
  def hydra_attribute_by_name(attribute_name)
27
27
  ::HydraAttribute::HydraAttribute.all_by_entity_type(@entity.class.name).find do |attribute|
28
- attribute.name == attribute_name
28
+ attribute.name == remove_multiparameter_id(attribute_name)
29
29
  end
30
30
  end
31
+
32
+ def remove_multiparameter_id(attribute_name)
33
+ attribute_name.to_s.gsub(/\(.+/m, '')
34
+ end
31
35
  end
32
36
 
33
37
  protected
@@ -60,7 +60,7 @@ module HydraAttribute
60
60
  #
61
61
  # @return [ActiveRecord::ConnectionAdapters::AbstractAdapter]
62
62
  def connection
63
- @connection ||= ::ActiveRecord::Base.connection
63
+ ::ActiveRecord::Base.connection
64
64
  end
65
65
 
66
66
  # Returns virtual value column
@@ -21,6 +21,13 @@ module HydraAttribute
21
21
  include Dirty
22
22
  include HasManyThrough
23
23
 
24
+ included do
25
+ # Compatibility with Rails' helpers
26
+ include ActiveModel::Conversion
27
+ extend ActiveModel::Naming
28
+ extend ActiveModel::Translation
29
+ end
30
+
24
31
  module ClassMethods
25
32
  # Find first model
26
33
  #
@@ -59,7 +59,7 @@ module HydraAttribute
59
59
  #
60
60
  # @return [ActiveRecord::ConnectionAdapters::AbstractAdapter]
61
61
  def connection
62
- @connection ||= ::ActiveRecord::Base.connection
62
+ ::ActiveRecord::Base.connection
63
63
  end
64
64
 
65
65
  # Returns table name
@@ -5,5 +5,10 @@ module HydraAttribute
5
5
  ::ActiveRecord::Migration.send(:include, ::HydraAttribute::ActiveRecord::Migration)
6
6
  end
7
7
  end
8
+
9
+ initializer 'hydra_attribute.middleware' do |app|
10
+ require 'hydra_attribute/middleware/identity_map'
11
+ app.middleware.use ::HydraAttribute::Middleware::IdentityMap
12
+ end
8
13
  end
9
14
  end
@@ -1,3 +1,3 @@
1
1
  module HydraAttribute
2
- VERSION = '0.5.0.rc1'
2
+ VERSION = '0.5.0.rc2'
3
3
  end
@@ -31,4 +31,25 @@ describe HydraAttribute::ActiveRecord::AttributeMethods do
31
31
  product.read_attribute(:name).should be_nil
32
32
  end
33
33
  end
34
+
35
+ describe '#column_for_attribute' do
36
+ let!(:hydra_attribute) { Product.hydra_attributes.create(name: 'code', backend_type: 'string', default_value: 'abc') }
37
+ let(:product) { Product.new }
38
+
39
+ it 'should return column for hydra attribute' do
40
+ column = product.column_for_attribute(:code)
41
+ column.should be_kind_of(ActiveRecord::ConnectionAdapters::Column)
42
+ column.name.should == 'code'
43
+ end
44
+
45
+ it 'should return column for static attribute' do
46
+ column = product.column_for_attribute(:name)
47
+ column.should be_kind_of(ActiveRecord::ConnectionAdapters::Column)
48
+ column.name.should == 'name'
49
+ end
50
+
51
+ it 'should return nil if cannot find attribute' do
52
+ product.column_for_attribute(:fake).should be_nil
53
+ end
54
+ end
34
55
  end
@@ -3,14 +3,28 @@ require 'spec_helper'
3
3
  module HydraAttribute::ActiveRecord::MassAssignmentSecurity
4
4
  describe 'WhiteList' do
5
5
  before do
6
- ProductWhiteList.hydra_attributes.create(name: 'color', backend_type: 'string', white_list: true)
7
- ProductWhiteList.hydra_attributes.create(name: 'code', backend_type: 'string', white_list: false)
6
+ ProductWhiteList.hydra_attributes.create(name: 'color', backend_type: 'string', white_list: true)
7
+ ProductWhiteList.hydra_attributes.create(name: 'code', backend_type: 'string', white_list: false)
8
+ ProductWhiteList.hydra_attributes.create(name: 'seen', backend_type: 'datetime', white_list: true)
8
9
  end
9
10
 
10
- let(:product) { ProductWhiteList.new(name: 'name', title: 'title', color: 'green', code: 'abc') }
11
+ let(:product) do
12
+ ProductWhiteList.new(
13
+ :name => 'name',
14
+ :title => 'title',
15
+ :color => 'green',
16
+ :code => 'abc',
17
+ 'seen(1i)' => '2012',
18
+ 'seen(2i)' => '12',
19
+ 'seen(3i)' => '22',
20
+ 'seen(4i)' => '15',
21
+ 'seen(5i)' => '30'
22
+ )
23
+ end
11
24
 
12
25
  it 'should assign only hydra attributes which are in white list' do
13
26
  product.color.should == 'green'
27
+ product.seen.should == DateTime.new(2012, 12, 22, 15, 30)
14
28
  product.code.should be_nil
15
29
  end
16
30
 
@@ -22,14 +36,28 @@ module HydraAttribute::ActiveRecord::MassAssignmentSecurity
22
36
 
23
37
  describe 'BlackList' do
24
38
  before do
25
- ProductBlackList.hydra_attributes.create(name: 'color', backend_type: 'string', white_list: true)
26
- ProductBlackList.hydra_attributes.create(name: 'code', backend_type: 'string', white_list: false)
39
+ ProductBlackList.hydra_attributes.create(name: 'color', backend_type: 'string', white_list: true)
40
+ ProductBlackList.hydra_attributes.create(name: 'code', backend_type: 'string', white_list: false)
41
+ ProductBlackList.hydra_attributes.create(name: 'seen', backend_type: 'datetime', white_list: true)
27
42
  end
28
43
 
29
- let(:product) { ProductBlackList.new(name: 'name', title: 'title', color: 'green', code: 'abc') }
44
+ let(:product) do
45
+ ProductBlackList.new(
46
+ :name => 'name',
47
+ :title => 'title',
48
+ :color => 'green',
49
+ :code => 'abc',
50
+ 'seen(1i)' => '2012',
51
+ 'seen(2i)' => '12',
52
+ 'seen(3i)' => '22',
53
+ 'seen(4i)' => '15',
54
+ 'seen(5i)' => '30'
55
+ )
56
+ end
30
57
 
31
58
  it 'should assign only hydra attributes which are in white list' do
32
59
  product.color.should == 'green'
60
+ product.seen.should == DateTime.new(2012, 12, 22, 15, 30)
33
61
  product.code.should be_nil
34
62
  end
35
63
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hydra_attribute
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0.rc1
4
+ version: 0.5.0.rc2
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: 2013-10-13 00:00:00.000000000 Z
12
+ date: 2014-01-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord