bit_core 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/bit_core/content_provider.rb +54 -1
- data/app/models/bit_core/content_providers/null.rb +26 -0
- data/app/models/bit_core/content_providers/slideshow_provider.rb +32 -0
- data/app/models/bit_core/slideshow.rb +0 -1
- data/db/migrate/20140620174147_add_config_fields_to_providers.rb +9 -0
- data/lib/bit_core/version.rb +1 -1
- data/spec/dummy/log/test.log +1182 -0
- data/spec/models/bit_core/content_module_spec.rb +22 -0
- data/spec/models/bit_core/content_provider_spec.rb +46 -0
- metadata +9 -4
- data/spec/dummy/db/schema.rb +0 -70
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78b524de8c4b376b6960150735005432b6d596b3
|
4
|
+
data.tar.gz: 203d6c9d735aeae6426bc65e370e4083e178d90c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49d4f1dc3b8da5363bd30dae38174b990574786db0f0afd59af754a0a2318eea2fe82baf9c9ab65f40204a5cab16dfc57068446aeba2aef4bd0fd8aa5b73d369
|
7
|
+
data.tar.gz: eea094b1b05d35d5f4237d16af7370776e2d5e1e5eb670e4f1be5c03aaf52c631f67d4180cab2cd714109bb1bc60648749cebccfdf1b6b203bf152b405900cf0
|
@@ -5,10 +5,63 @@ module BitCore
|
|
5
5
|
class_name: "BitCore::ContentModule",
|
6
6
|
foreign_key: :bit_core_content_module_id,
|
7
7
|
inverse_of: :content_providers
|
8
|
+
belongs_to :source_content, polymorphic: true
|
8
9
|
|
9
|
-
validates :
|
10
|
+
validates :content_module,
|
11
|
+
:type,
|
12
|
+
:bit_core_content_module_id,
|
13
|
+
:position,
|
14
|
+
presence: true
|
10
15
|
validates :position,
|
11
16
|
numericality: { greater_than_or_equal_to: 1 },
|
12
17
|
uniqueness: { scope: :bit_core_content_module_id }
|
18
|
+
validates :show_next_nav, inclusion: { in: [true, false] }
|
19
|
+
validate :template_path_exists
|
20
|
+
validate :data_class_exists
|
21
|
+
validate :data_attributes_exist
|
22
|
+
|
23
|
+
serialize :data_attributes
|
24
|
+
serialize :locals
|
25
|
+
|
26
|
+
delegate :context, to: :content_module, prefix: false
|
27
|
+
|
28
|
+
def exists?(_position)
|
29
|
+
false
|
30
|
+
end
|
31
|
+
|
32
|
+
def data_class
|
33
|
+
data_class_name.constantize
|
34
|
+
rescue NameError
|
35
|
+
nil
|
36
|
+
end
|
37
|
+
|
38
|
+
# compatibility method
|
39
|
+
def show_nav_link?
|
40
|
+
show_next_nav
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def template_path_exists
|
46
|
+
path = File.join(Rails.root, "app", "views", template_path || "")
|
47
|
+
return if Dir.exist?(path)
|
48
|
+
|
49
|
+
errors.add(:template_path, "not found at #{ path }")
|
50
|
+
end
|
51
|
+
|
52
|
+
def data_class_exists
|
53
|
+
return unless data_class_name && !data_class
|
54
|
+
|
55
|
+
errors.add(:data_class_name,
|
56
|
+
"unable to find class '#{ data_class_name }'")
|
57
|
+
end
|
58
|
+
|
59
|
+
def data_attributes_exist
|
60
|
+
return unless data_attributes
|
61
|
+
attribute_names = data_class.try(:attribute_names) || []
|
62
|
+
return if data_attributes.all? { |a| attribute_names.include?(a.to_str) }
|
63
|
+
|
64
|
+
errors.add(:data_attributes, "must be attributes on the model class")
|
65
|
+
end
|
13
66
|
end
|
14
67
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module BitCore
|
2
|
+
module ContentProviders
|
3
|
+
# The default provider.
|
4
|
+
class Null
|
5
|
+
attr_reader :position
|
6
|
+
|
7
|
+
def initialize(content_module, position)
|
8
|
+
@content_module = content_module
|
9
|
+
@position = position
|
10
|
+
end
|
11
|
+
|
12
|
+
def render_current(_options)
|
13
|
+
"Content Module #{ @content_module.title }: Oops, did you expect a
|
14
|
+
content provider here?"
|
15
|
+
end
|
16
|
+
|
17
|
+
def show_nav_link?
|
18
|
+
false
|
19
|
+
end
|
20
|
+
|
21
|
+
def exists?(_position)
|
22
|
+
false
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module BitCore
|
2
|
+
module ContentProviders
|
3
|
+
# Defines presentation logic for a Slideshow.
|
4
|
+
class SlideshowProvider < BitCore::ContentProvider
|
5
|
+
def slideshow
|
6
|
+
source_content
|
7
|
+
end
|
8
|
+
|
9
|
+
def render_current(options)
|
10
|
+
options.view_context.render(
|
11
|
+
template: "slides/show",
|
12
|
+
locals: {
|
13
|
+
slide: slide(options.position)
|
14
|
+
}
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
def slide(position)
|
19
|
+
slideshow.slides.where(position: position).first ||
|
20
|
+
BitCore::Slide.new(body: "no slides")
|
21
|
+
end
|
22
|
+
|
23
|
+
def exists?(position)
|
24
|
+
slideshow.slides.exists?(position: position)
|
25
|
+
end
|
26
|
+
|
27
|
+
def show_nav_link?
|
28
|
+
true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class AddConfigFieldsToProviders < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
add_column :bit_core_content_providers, :template_path, :string
|
4
|
+
add_column :bit_core_content_providers, :data_class_name, :string
|
5
|
+
add_column :bit_core_content_providers, :data_attributes, :text
|
6
|
+
add_column :bit_core_content_providers, :show_next_nav, :boolean
|
7
|
+
add_column :bit_core_content_providers, :locals, :text
|
8
|
+
end
|
9
|
+
end
|
data/lib/bit_core/version.rb
CHANGED