bitrix_on_rails 0.1.8 → 0.2.0
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/Gemfile +4 -1
- data/Gemfile.lock +9 -4
- data/Guardfile +1 -0
- data/README.rdoc +8 -2
- data/VERSION +1 -1
- data/app/models/iblock.rb +1 -42
- data/app/models/iblock_element.rb +21 -45
- data/bitrix_on_rails.gemspec +19 -13
- data/lib/bitrix_on_rails.rb +12 -6
- data/lib/bitrix_on_rails/active_record.rb +19 -11
- data/lib/bitrix_on_rails/configuration.rb +26 -0
- data/lib/bitrix_on_rails/engine.rb +0 -3
- data/lib/bitrix_on_rails/iblock_element.rb +112 -0
- data/lib/bitrix_on_rails/iblock_element_prop_m.rb +1 -27
- data/lib/bitrix_on_rails/iblock_element_prop_s.rb +111 -102
- data/test/factories.rb +105 -0
- data/test/helper.rb +23 -30
- data/test/schema.rb +5 -1158
- data/test/test_active_record.rb +36 -0
- data/test/test_bitrix_on_rails.rb +14 -9
- data/test/test_iblock_element.rb +77 -0
- data/test/test_iblock_element_prop_s.rb +111 -0
- metadata +45 -41
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class ActiveRecordTest < Test::Unit::TestCase
|
4
|
+
context 'has_infoblock' do
|
5
|
+
setup do
|
6
|
+
@iblock = Factory.create(:iblock3)
|
7
|
+
BitrixOnRails.define_iblock_class @iblock.id
|
8
|
+
|
9
|
+
id = @iblock.id
|
10
|
+
|
11
|
+
class Post < ActiveRecord::Base
|
12
|
+
end
|
13
|
+
|
14
|
+
Post.instance_eval do
|
15
|
+
has_infoblock id, :property_13
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
should 'create associations' do
|
20
|
+
assert Post.reflections.include?("iblock_element_prop_s#{@iblock.id}".to_sym)
|
21
|
+
assert Post.reflections.include?(:iblock_element)
|
22
|
+
assert Object.const_get("IblockElementPropS#{@iblock.id}").reflections.include?(:post)
|
23
|
+
end
|
24
|
+
|
25
|
+
should 'delegate property methods to iblock_element' do
|
26
|
+
post = Post.new
|
27
|
+
[:preview_mpage, :glob_class, :preview_mpage=].each { |m|
|
28
|
+
assert_respond_to post, m
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
should 'not delegete multiple property assignment methods to iblock_element' do
|
33
|
+
assert_not_respond_to Post, :glob_class=
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,20 +1,25 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
|
2
3
|
require 'helper'
|
3
4
|
|
4
5
|
class TestBitrixOnRails < Test::Unit::TestCase
|
5
|
-
|
6
|
-
|
7
|
-
# assert defined?(IblockElementPropM7), 'должен определиться автоматически'
|
8
|
-
puts IblockElementPropM7
|
6
|
+
def tests
|
7
|
+
assert_respond_to BitrixOnRails, :configure
|
9
8
|
end
|
10
9
|
|
11
|
-
should "
|
10
|
+
# should "автоматичеки создает модели свойств для всех инфоблоков при инициализации" do
|
11
|
+
# assert_equal 2, BitrixOnRails.init.count, '2 инфоблока в нашей схеме'
|
12
|
+
# # assert defined?(IblockElementPropM7), 'должен определиться автоматически'
|
13
|
+
# puts IblockElementPropM7
|
14
|
+
# end
|
12
15
|
|
13
|
-
|
16
|
+
# should "Брать свойства для блока и кешировать их" do
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
+
# Iblock.get_properties(3)
|
19
|
+
|
20
|
+
# # А этот запрос уже кеширован
|
21
|
+
# Iblock.get_properties(3)
|
22
|
+
# end
|
18
23
|
end
|
19
24
|
|
20
25
|
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class IblockElementTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context 'define_iblock_class' do
|
6
|
+
|
7
|
+
context 'with class_name set to nil' do
|
8
|
+
setup do
|
9
|
+
BitrixOnRails.define_iblock_class(3)
|
10
|
+
end
|
11
|
+
|
12
|
+
should 'create class IblockElement3 in global namespace' do
|
13
|
+
assert_not_nil Object.const_defined?('IblockElement3')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'with class name in global namespace' do
|
18
|
+
setup do
|
19
|
+
BitrixOnRails.define_iblock_class(3, :class_name => 'PostProperties')
|
20
|
+
end
|
21
|
+
|
22
|
+
should 'create class PostProperties in global namespace' do
|
23
|
+
assert_not_nil Object.const_defined?('PostProperties')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'with class name in non global namespace' do
|
28
|
+
setup do
|
29
|
+
Object.const_set('Post', Class.new)
|
30
|
+
BitrixOnRails.define_iblock_class(3, :class_name => 'Post::Element')
|
31
|
+
end
|
32
|
+
|
33
|
+
should 'create class Element in Post namespace' do
|
34
|
+
assert_not_nil Post.const_defined?('Element')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'behaviour' do
|
39
|
+
setup do
|
40
|
+
BitrixOnRails.define_iblock_class(3)
|
41
|
+
end
|
42
|
+
|
43
|
+
should 'create association with property classes' do
|
44
|
+
assert_not_nil IblockElement3.reflections[:property_set]
|
45
|
+
assert_not_nil IblockElement3.reflections[:m_props]
|
46
|
+
end
|
47
|
+
|
48
|
+
should 'create property classes' do
|
49
|
+
assert_not_nil Object.const_defined?('IblockElementPropS3')
|
50
|
+
assert_not_nil Object.const_defined?('IblockElementPropM3')
|
51
|
+
end
|
52
|
+
|
53
|
+
should 'create associations for property classes in IblockElement' do
|
54
|
+
assert_not_nil IblockElement.reflections[:iblock_element_prop_s3]
|
55
|
+
assert_not_nil IblockElement.reflections[:iblock_element_prop_m3]
|
56
|
+
end
|
57
|
+
|
58
|
+
should 'add class information in BitrixOnRails.infoblocks' do
|
59
|
+
assert_equal IblockElement3, BitrixOnRails.infoblocks[3]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'with passed :extended_by' do
|
64
|
+
setup do
|
65
|
+
Object.const_set('IblockElementExtension', Module.new{ def some_method ; end})
|
66
|
+
BitrixOnRails.define_iblock_class(3, :extended_by => 'IblockElementExtension')
|
67
|
+
end
|
68
|
+
|
69
|
+
should 'extend created class with given module' do
|
70
|
+
# Не нашел другого способа проверить, что модуль был включен в класс
|
71
|
+
assert IblockElement3.methods.include?(:some_method)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class IblockElementPropSTest < Test::Unit::TestCase
|
5
|
+
PROP_S_VALUES = [
|
6
|
+
11286, nil, # post_id
|
7
|
+
'a:2:{s:4:"TEXT";s:22:"Полемика по повышению.";s:4:"TYPE";s:4:"html";}', nil, #preview_mpage
|
8
|
+
nil, nil # glob_class
|
9
|
+
]
|
10
|
+
|
11
|
+
def create_iblock(iblock_factory, iblock_element_factory, prop_s_values = [], prop_m_values = [])
|
12
|
+
iblock = Factory.create(iblock_factory)
|
13
|
+
|
14
|
+
BitrixOnRails.define_iblock_class(iblock.id)
|
15
|
+
|
16
|
+
@s_prop_class = Object.const_get("IblockElementPropS#{iblock.id}")
|
17
|
+
@m_prop_class = Object.const_get("IblockElementPropM#{iblock.id}")
|
18
|
+
|
19
|
+
properties = @s_prop_class.columns.collect { |c| c.name }
|
20
|
+
|
21
|
+
@iblock_element = Factory.create(iblock_element_factory, :iblock => iblock)
|
22
|
+
|
23
|
+
prop_m_values.each { |v|
|
24
|
+
@m_prop_class.create(:iblock_element_id => @iblock_element.id, :iblock_property_id => iblock.iblock_properties.last.id, :value => v)
|
25
|
+
}
|
26
|
+
|
27
|
+
prop_s_values = [@iblock_element.id] + prop_s_values
|
28
|
+
@iblock_element_prop_s = @s_prop_class.create(properties.inject({}){ |a,e| a[e] = prop_s_values[properties.find_index(e)]; a})
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'acts_as_iblock_prop_s' do
|
32
|
+
setup do
|
33
|
+
@iblock = Factory.create(:iblock3)
|
34
|
+
|
35
|
+
BitrixOnRails.define_iblock_class(@iblock.id)
|
36
|
+
|
37
|
+
@s_prop_class = Object.const_get("IblockElementPropS#{@iblock.id}")
|
38
|
+
end
|
39
|
+
|
40
|
+
should 'set table name to b_iblock_element_prop_s#{id}' do
|
41
|
+
assert_equal "b_iblock_element_prop_s#{@iblock.id}", @s_prop_class.table_name
|
42
|
+
end
|
43
|
+
|
44
|
+
should 'set association with iblock_element' do
|
45
|
+
assert @s_prop_class.reflections.include?(:iblock_element)
|
46
|
+
assert_equal BitrixOnRails.infoblocks[@iblock.id].name, @s_prop_class.reflections[:iblock_element].class_name
|
47
|
+
end
|
48
|
+
|
49
|
+
should 'define access methods for single properties' do
|
50
|
+
[:post_id, :post_id=, :find_by_post_id].each { |m|
|
51
|
+
assert @s_prop_class.instance_methods.include?(m)
|
52
|
+
}
|
53
|
+
|
54
|
+
[:preview_mpage, :preview_mpage=, :find_by_preview_mpage].each { |m|
|
55
|
+
assert @s_prop_class.instance_methods.include?(m)
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'instance methods' do
|
61
|
+
setup do
|
62
|
+
create_iblock :iblock3, :iblock_element3, PROP_S_VALUES, [144, 1394860, 35, 6, 165]
|
63
|
+
end
|
64
|
+
|
65
|
+
should 'return unserialized values' do
|
66
|
+
assert_equal 11286, @iblock_element_prop_s.post_id
|
67
|
+
assert_equal 'Полемика по повышению.', @iblock_element_prop_s.preview_mpage
|
68
|
+
end
|
69
|
+
|
70
|
+
should 'return instance of MPropValuesWrapper for multiple property' do
|
71
|
+
assert @iblock_element_prop_s.glob_class.is_a?(BitrixOnRails::IblockElementPropS::MPropValuesWrapper)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'MPropValuesWrapper' do
|
76
|
+
setup do
|
77
|
+
create_iblock :iblock3, :iblock_element3, PROP_S_VALUES, [10]
|
78
|
+
end
|
79
|
+
|
80
|
+
should 'add new record to b_iblock_element_prop_m on add' do
|
81
|
+
assert_difference("#{@iblock_element_prop_s.m_prop_class}.count") do
|
82
|
+
@iblock_element_prop_s.glob_class.add(16)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
should 'delete record on destroy' do
|
87
|
+
assert_difference("#{@iblock_element_prop_s.m_prop_class}.count", -1) do
|
88
|
+
@iblock_element_prop_s.glob_class.remove(10)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'serialize' do
|
94
|
+
setup do
|
95
|
+
create_iblock :iblock3, :iblock_element3, PROP_S_VALUES
|
96
|
+
end
|
97
|
+
|
98
|
+
should 'convert value into serialized hash if user_type is HTML' do
|
99
|
+
@iblock_element_prop_s.preview_mpage = 'BitrixOnRails is awesome, bro!'
|
100
|
+
assert_equal 'a:2:{s:4:"TEXT";s:30:"BitrixOnRails is awesome, bro!";s:4:"TYPE";s:4:"html";}',
|
101
|
+
@iblock_element_prop_s.send("property_#{@s_prop_class.s_props[:preview_mpage][:id]}")
|
102
|
+
end
|
103
|
+
|
104
|
+
should 'convert value into specially formatted string if user_type is DateTime' do
|
105
|
+
t = Time.parse '15 Aug 2011 16:32:18'
|
106
|
+
@iblock_element_prop_s.publication_date = t
|
107
|
+
assert_equal '2011-08-15 16:32:18',
|
108
|
+
@iblock_element_prop_s.send("property_#{@s_prop_class.s_props[:publication_date][:id]}")
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bitrix_on_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-08-
|
13
|
-
default_executable:
|
12
|
+
date: 2011-08-29 00:00:00.000000000Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: rails
|
17
|
-
requirement: &
|
16
|
+
requirement: &19514180 !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
18
|
requirements:
|
20
19
|
- - ! '>='
|
@@ -22,10 +21,21 @@ dependencies:
|
|
22
21
|
version: '3.0'
|
23
22
|
type: :runtime
|
24
23
|
prerelease: false
|
25
|
-
version_requirements: *
|
24
|
+
version_requirements: *19514180
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: php_serialize
|
27
|
+
requirement: &19513460 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *19513460
|
26
36
|
- !ruby/object:Gem::Dependency
|
27
37
|
name: sqlite3
|
28
|
-
requirement: &
|
38
|
+
requirement: &19512780 !ruby/object:Gem::Requirement
|
29
39
|
none: false
|
30
40
|
requirements:
|
31
41
|
- - ! '>='
|
@@ -33,10 +43,10 @@ dependencies:
|
|
33
43
|
version: '0'
|
34
44
|
type: :development
|
35
45
|
prerelease: false
|
36
|
-
version_requirements: *
|
46
|
+
version_requirements: *19512780
|
37
47
|
- !ruby/object:Gem::Dependency
|
38
48
|
name: shoulda
|
39
|
-
requirement: &
|
49
|
+
requirement: &19512200 !ruby/object:Gem::Requirement
|
40
50
|
none: false
|
41
51
|
requirements:
|
42
52
|
- - ! '>='
|
@@ -44,10 +54,10 @@ dependencies:
|
|
44
54
|
version: '0'
|
45
55
|
type: :development
|
46
56
|
prerelease: false
|
47
|
-
version_requirements: *
|
57
|
+
version_requirements: *19512200
|
48
58
|
- !ruby/object:Gem::Dependency
|
49
59
|
name: bundler
|
50
|
-
requirement: &
|
60
|
+
requirement: &19511460 !ruby/object:Gem::Requirement
|
51
61
|
none: false
|
52
62
|
requirements:
|
53
63
|
- - ~>
|
@@ -55,10 +65,10 @@ dependencies:
|
|
55
65
|
version: 1.0.0
|
56
66
|
type: :development
|
57
67
|
prerelease: false
|
58
|
-
version_requirements: *
|
68
|
+
version_requirements: *19511460
|
59
69
|
- !ruby/object:Gem::Dependency
|
60
70
|
name: jeweler
|
61
|
-
requirement: &
|
71
|
+
requirement: &19509100 !ruby/object:Gem::Requirement
|
62
72
|
none: false
|
63
73
|
requirements:
|
64
74
|
- - ~>
|
@@ -66,10 +76,10 @@ dependencies:
|
|
66
76
|
version: 1.6.4
|
67
77
|
type: :development
|
68
78
|
prerelease: false
|
69
|
-
version_requirements: *
|
79
|
+
version_requirements: *19509100
|
70
80
|
- !ruby/object:Gem::Dependency
|
71
81
|
name: rcov
|
72
|
-
requirement: &
|
82
|
+
requirement: &19508220 !ruby/object:Gem::Requirement
|
73
83
|
none: false
|
74
84
|
requirements:
|
75
85
|
- - ! '>='
|
@@ -77,21 +87,10 @@ dependencies:
|
|
77
87
|
version: '0'
|
78
88
|
type: :development
|
79
89
|
prerelease: false
|
80
|
-
version_requirements: *
|
90
|
+
version_requirements: *19508220
|
81
91
|
- !ruby/object:Gem::Dependency
|
82
92
|
name: ruby-debug19
|
83
|
-
requirement: &
|
84
|
-
none: false
|
85
|
-
requirements:
|
86
|
-
- - ! '>='
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '0'
|
89
|
-
type: :development
|
90
|
-
prerelease: false
|
91
|
-
version_requirements: *2156257140
|
92
|
-
- !ruby/object:Gem::Dependency
|
93
|
-
name: test-unit
|
94
|
-
requirement: &2156255520 !ruby/object:Gem::Requirement
|
93
|
+
requirement: &19507400 !ruby/object:Gem::Requirement
|
95
94
|
none: false
|
96
95
|
requirements:
|
97
96
|
- - ! '>='
|
@@ -99,10 +98,10 @@ dependencies:
|
|
99
98
|
version: '0'
|
100
99
|
type: :development
|
101
100
|
prerelease: false
|
102
|
-
version_requirements: *
|
101
|
+
version_requirements: *19507400
|
103
102
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
105
|
-
requirement: &
|
103
|
+
name: factory_girl
|
104
|
+
requirement: &19506560 !ruby/object:Gem::Requirement
|
106
105
|
none: false
|
107
106
|
requirements:
|
108
107
|
- - ! '>='
|
@@ -110,10 +109,10 @@ dependencies:
|
|
110
109
|
version: '0'
|
111
110
|
type: :development
|
112
111
|
prerelease: false
|
113
|
-
version_requirements: *
|
112
|
+
version_requirements: *19506560
|
114
113
|
- !ruby/object:Gem::Dependency
|
115
|
-
name:
|
116
|
-
requirement: &
|
114
|
+
name: test-unit
|
115
|
+
requirement: &19505960 !ruby/object:Gem::Requirement
|
117
116
|
none: false
|
118
117
|
requirements:
|
119
118
|
- - ! '>='
|
@@ -121,10 +120,10 @@ dependencies:
|
|
121
120
|
version: '0'
|
122
121
|
type: :development
|
123
122
|
prerelease: false
|
124
|
-
version_requirements: *
|
123
|
+
version_requirements: *19505960
|
125
124
|
- !ruby/object:Gem::Dependency
|
126
125
|
name: guard-test
|
127
|
-
requirement: &
|
126
|
+
requirement: &19505320 !ruby/object:Gem::Requirement
|
128
127
|
none: false
|
129
128
|
requirements:
|
130
129
|
- - ! '>='
|
@@ -132,10 +131,10 @@ dependencies:
|
|
132
131
|
version: '0'
|
133
132
|
type: :development
|
134
133
|
prerelease: false
|
135
|
-
version_requirements: *
|
134
|
+
version_requirements: *19505320
|
136
135
|
- !ruby/object:Gem::Dependency
|
137
136
|
name: test-unit-rr
|
138
|
-
requirement: &
|
137
|
+
requirement: &19504640 !ruby/object:Gem::Requirement
|
139
138
|
none: false
|
140
139
|
requirements:
|
141
140
|
- - ! '>='
|
@@ -143,7 +142,7 @@ dependencies:
|
|
143
142
|
version: '0'
|
144
143
|
type: :development
|
145
144
|
prerelease: false
|
146
|
-
version_requirements: *
|
145
|
+
version_requirements: *19504640
|
147
146
|
description: Использование инфоблоков 1С-Битрикс в Ruby On Rails проектах
|
148
147
|
email: danil@orionet.ru
|
149
148
|
executables: []
|
@@ -175,15 +174,20 @@ files:
|
|
175
174
|
- lib/active_record/connection_adapters/mysql2_downcase_adapter.rb
|
176
175
|
- lib/bitrix_on_rails.rb
|
177
176
|
- lib/bitrix_on_rails/active_record.rb
|
177
|
+
- lib/bitrix_on_rails/configuration.rb
|
178
178
|
- lib/bitrix_on_rails/engine.rb
|
179
|
+
- lib/bitrix_on_rails/iblock_element.rb
|
179
180
|
- lib/bitrix_on_rails/iblock_element_prop_m.rb
|
180
181
|
- lib/bitrix_on_rails/iblock_element_prop_s.rb
|
181
182
|
- test/dump.sql
|
183
|
+
- test/factories.rb
|
182
184
|
- test/get_dump.sh
|
183
185
|
- test/helper.rb
|
184
186
|
- test/schema.rb
|
187
|
+
- test/test_active_record.rb
|
185
188
|
- test/test_bitrix_on_rails.rb
|
186
|
-
|
189
|
+
- test/test_iblock_element.rb
|
190
|
+
- test/test_iblock_element_prop_s.rb
|
187
191
|
homepage: http://github.com/dapi/bitrix_on_rails
|
188
192
|
licenses:
|
189
193
|
- MIT
|
@@ -199,7 +203,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
199
203
|
version: '0'
|
200
204
|
segments:
|
201
205
|
- 0
|
202
|
-
hash:
|
206
|
+
hash: 3075423241846664278
|
203
207
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
204
208
|
none: false
|
205
209
|
requirements:
|
@@ -208,7 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
212
|
version: '0'
|
209
213
|
requirements: []
|
210
214
|
rubyforge_project:
|
211
|
-
rubygems_version: 1.6
|
215
|
+
rubygems_version: 1.8.6
|
212
216
|
signing_key:
|
213
217
|
specification_version: 3
|
214
218
|
summary: Работа с инфоблоками 1С-Битрикс
|