dead_simple_cms 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/.gitignore +19 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +22 -0
  5. data/README.md +266 -0
  6. data/Rakefile +17 -0
  7. data/dead_simple_cms.gemspec +47 -0
  8. data/lib/dead_simple_cms.rb +132 -0
  9. data/lib/dead_simple_cms/attribute/collection.rb +45 -0
  10. data/lib/dead_simple_cms/attribute/type/all.rb +104 -0
  11. data/lib/dead_simple_cms/attribute/type/base.rb +79 -0
  12. data/lib/dead_simple_cms/attribute/type/collection_support.rb +26 -0
  13. data/lib/dead_simple_cms/configuration.rb +50 -0
  14. data/lib/dead_simple_cms/file_uploader/base.rb +29 -0
  15. data/lib/dead_simple_cms/group.rb +58 -0
  16. data/lib/dead_simple_cms/group/configuration.rb +32 -0
  17. data/lib/dead_simple_cms/group/presenter.rb +23 -0
  18. data/lib/dead_simple_cms/rails/action_controller/extensions.rb +24 -0
  19. data/lib/dead_simple_cms/rails/action_controller/fragment_sweeper.rb +19 -0
  20. data/lib/dead_simple_cms/rails/action_view/extensions.rb +14 -0
  21. data/lib/dead_simple_cms/rails/action_view/form_builders/default.rb +16 -0
  22. data/lib/dead_simple_cms/rails/action_view/form_builders/interface.rb +72 -0
  23. data/lib/dead_simple_cms/rails/action_view/form_builders/simple_form.rb +43 -0
  24. data/lib/dead_simple_cms/rails/action_view/form_builders/simple_form_with_bootstrap.rb +19 -0
  25. data/lib/dead_simple_cms/rails/action_view/presenter.rb +63 -0
  26. data/lib/dead_simple_cms/section.rb +103 -0
  27. data/lib/dead_simple_cms/section/builder.rb +73 -0
  28. data/lib/dead_simple_cms/storage/base.rb +49 -0
  29. data/lib/dead_simple_cms/storage/database.rb +33 -0
  30. data/lib/dead_simple_cms/storage/memory.rb +20 -0
  31. data/lib/dead_simple_cms/storage/rails_cache.rb +19 -0
  32. data/lib/dead_simple_cms/storage/redis.rb +23 -0
  33. data/lib/dead_simple_cms/util/identifier.rb +40 -0
  34. data/lib/dead_simple_cms/util/identifier/dictionary.rb +65 -0
  35. data/lib/dead_simple_cms/version.rb +3 -0
  36. data/spec/dead_simple_cms/attribute/collection_spec.rb +46 -0
  37. data/spec/dead_simple_cms/attribute/type/all_spec.rb +252 -0
  38. data/spec/dead_simple_cms/attribute/type/base_spec.rb +117 -0
  39. data/spec/dead_simple_cms/configuration_spec.rb +117 -0
  40. data/spec/dead_simple_cms/file_uploader/base_spec.rb +35 -0
  41. data/spec/dead_simple_cms/group/configuration_spec.rb +24 -0
  42. data/spec/dead_simple_cms/group/presenter_spec.rb +28 -0
  43. data/spec/dead_simple_cms/group_spec.rb +65 -0
  44. data/spec/dead_simple_cms/rails/action_view/form_builders/default_spec.rb +8 -0
  45. data/spec/dead_simple_cms/rails/action_view/form_builders/simple_form_spec.rb +8 -0
  46. data/spec/dead_simple_cms/rails/action_view/form_builders/simple_form_with_bootstrap_spec.rb +8 -0
  47. data/spec/dead_simple_cms/rails/action_view/fragment_sweeper_spec.rb +22 -0
  48. data/spec/dead_simple_cms/rails/action_view/presenter_spec.rb +54 -0
  49. data/spec/dead_simple_cms/section/builder_spec.rb +28 -0
  50. data/spec/dead_simple_cms/section_spec.rb +78 -0
  51. data/spec/dead_simple_cms/storage/base_spec.rb +59 -0
  52. data/spec/dead_simple_cms/storage/database_spec.rb +51 -0
  53. data/spec/dead_simple_cms/storage/memory_spec.rb +25 -0
  54. data/spec/dead_simple_cms/storage/rails_cache_spec.rb +33 -0
  55. data/spec/dead_simple_cms/storage/redis_spec.rb +33 -0
  56. data/spec/dead_simple_cms/util/identifier/dictionary/duplciate_item_spec.rb +10 -0
  57. data/spec/dead_simple_cms/util/identifier/dictionary/invalid_entry_class_spec.rb +10 -0
  58. data/spec/dead_simple_cms/util/identifier/dictionary_spec.rb +42 -0
  59. data/spec/dead_simple_cms/util/identifier_spec.rb +27 -0
  60. data/spec/setup.rb +26 -0
  61. data/spec/setup/banner_presenter.rb +19 -0
  62. data/spec/setup/rspec_template_builder.rb +104 -0
  63. data/spec/setup/shared.rb +57 -0
  64. data/spec/setup/test_file_uploader.rb +12 -0
  65. data/spec/spec_helper.rb +48 -0
  66. metadata +221 -0
data/spec/setup.rb ADDED
@@ -0,0 +1,26 @@
1
+ require File.expand_path('../setup/test_file_uploader', __FILE__)
2
+ require File.expand_path('../setup/banner_presenter', __FILE__)
3
+ require File.expand_path('../setup/shared', __FILE__)
4
+
5
+
6
+ DeadSimpleCMS.configure do
7
+
8
+ default_form_builder :default
9
+
10
+ file_uploader_class DeadSimpleCMS::TestFileUploader
11
+
12
+ storage_class :database
13
+
14
+ group_configuration(:image_tag) do
15
+ image :url, :required => true
16
+ string :alt, :default => "Design Beautiful Books"
17
+ string :href, :hint => "Here is the hint.", :required => true
18
+
19
+ display do |group, html_options, image_html_options|
20
+ (image_html_options ||= {}).reverse_merge!(:alt => group.alt)
21
+ image_html_options[:alt] = image_alt_for_seo(image_html_options[:alt]) if image_html_options[:alt]
22
+ link_to_if(group.href, image_tag(group.url, image_html_options), group.href, html_options)
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,19 @@
1
+ module DeadSimpleCMS
2
+ class BannerPresenter < DeadSimpleCMS::Group::Presenter
3
+
4
+ attr_reader :coupon, :options, :size
5
+
6
+ def render
7
+ link_to_if(group.href, image_tag(group.url, :alt => group.alt), group.href) if group.show
8
+ end
9
+
10
+ private
11
+
12
+ def initialize_extra_arguments(coupon, options={})
13
+ @coupon, @options = coupon, options
14
+ @size = options.delete(:size) || :small # Currently we have two sizes for these banners: 715x85 and 890x123. - Aryk
15
+ raise("Invalid size: #{size}") unless [:small, :large].include?(size)
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,104 @@
1
+ require 'rspec'
2
+ require 'spec_helper'
3
+ require 'active_support'
4
+ require 'fileutils'
5
+
6
+ # A little helper I created to make it easier to build the rspec template files for all the classes within a namespace.
7
+ module RSpec
8
+
9
+ def self.build_templates(*classes)
10
+ options = classes.extract_options!
11
+
12
+ classes.each do |klass|
13
+ filename = "spec/#{klass.to_s.underscore}_spec.rb"
14
+ if File.exists?(filename)
15
+ puts "#{filename} already exists. Overwrite it? y/n"
16
+ next unless %w{y yes}.include?(gets.strip.downcase)
17
+ end
18
+
19
+ FileUtils.mkdir_p(File.dirname(filename))
20
+ File.open(filename, 'w+') { |f| TemplateBuilder.new(klass, f).build! }
21
+ end
22
+ end
23
+
24
+ def self.build_templates_from_namespace(*namespaces)
25
+ build_templates(*namespaces.map { |namespace| classes_from_namespace(namespace) }.flatten)
26
+ end
27
+
28
+
29
+ def self.classes_from_namespace(namespace, arr=[], original_namespace=nil)
30
+ original_namespace ||= namespace
31
+
32
+ namespace.constants.map(&namespace.method(:const_get)).each do |constant|
33
+ next if arr.include?(constant) || !constant.to_s.starts_with?(original_namespace.to_s)
34
+ arr << constant if constant.is_a?(Class)
35
+ classes_from_namespace(constant, arr, original_namespace) if constant.is_a?(Class) || constant.is_a?(Module)
36
+ end
37
+ arr
38
+ end
39
+
40
+ class TemplateBuilder
41
+
42
+ INDENT = " "
43
+
44
+ attr_reader :current_indent, :klass
45
+
46
+ def initialize(klass, target = "")
47
+ @klass = klass
48
+ @target = target
49
+ @current_indent = ""
50
+ end
51
+
52
+ def parse_file
53
+ FileParse.new(filename)
54
+ end
55
+
56
+ def build!
57
+ require_files
58
+ describe(klass) do
59
+ before_each do
60
+
61
+ end
62
+ klass.methods(false).each do |method_name| # class methods
63
+ describe(%{".#{method_name}"})
64
+ end
65
+ klass.instance_methods(false).each do |method_name| # instance methods
66
+ describe(%{"##{method_name}"})
67
+ end
68
+ end
69
+ end
70
+
71
+ def require_files
72
+ w %{require "spec_helper"}, nil
73
+ end
74
+
75
+ def indent
76
+ @current_indent << INDENT
77
+ yield
78
+ ensure
79
+ @current_indent.gsub!(/^#{INDENT}/, '')
80
+ end
81
+
82
+ def before_each
83
+ w "before(:each) do", nil, "end", nil
84
+ end
85
+
86
+ def describe(what, &block)
87
+ w "describe #{what} do", nil
88
+ indent(&block) if block_given?
89
+ w "end", nil
90
+ end
91
+
92
+ # If nothing is passed in, will add one empty line.
93
+ def write_lines(*strings)
94
+ strings = [""] if strings.empty?
95
+ strings.each do |s|
96
+ line = "#{current_indent}#{s}"
97
+ line = "" if line.empty?
98
+ @target << "#{line}\n"
99
+ end
100
+ end
101
+ alias w write_lines
102
+
103
+ end
104
+ end
@@ -0,0 +1,57 @@
1
+ shared_context :sample_section do
2
+
3
+ let(:section) do
4
+ # Site announcement is an example of a potential use case. It leverages a lot of the functionality of the
5
+ # library, hence why we are teting against it.
6
+ DeadSimpleCMS::Section.new(:site_announcement, :path => "/") do
7
+ boolean :show_default, :default => false
8
+ string :coupon_code
9
+ group(:top_bar) do
10
+ string :css_class, :collection => %w{facebook default christmas green}, :default => "facebook"
11
+ string :strong, :default => "FREE Priority Shipping on Orders $50+"
12
+ string :normal
13
+ string :action
14
+ string :href
15
+ end
16
+ group(:banners) do
17
+ [[:small, 715, 85], [:large, 890, 123]].each do |size, width, height|
18
+ group size => :image_tag, :width => width, :height => height do
19
+ boolean :show
20
+ string :promotional_href, :hint => "Used for all custom coupon banners not from the site announcement."
21
+ display DeadSimpleCMS::BannerPresenter
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ end
29
+ shared_context :sample_storage do
30
+ include_context :sample_section
31
+
32
+ let(:attributes_hash) { subject.send(:attributes_hash) }
33
+ let(:attributes_hash_dump) { Psych.dump(attributes_hash) }
34
+
35
+ subject { described_class.new(section).tap { |x| x.serializer_class = Psych } }
36
+ end
37
+
38
+ shared_examples :group_display do
39
+
40
+ describe "#display" do
41
+ context "when presenter_class is set" do
42
+ it "should set the @presenter_class variable" do
43
+ subject.display :presenter_class
44
+ subject.instance_variable_get(:@presenter_class).should == :presenter_class
45
+ end
46
+ end
47
+
48
+ context "when block provided" do
49
+ it "should set it to the @render_proc" do
50
+ proc = lambda { "do something" }
51
+ subject.display(&proc)
52
+ subject.instance_variable_get(:@render_proc).should == proc
53
+ end
54
+ end
55
+ end
56
+
57
+ end
@@ -0,0 +1,12 @@
1
+ module DeadSimpleCMS
2
+ class TestFileUploader < DeadSimpleCMS::FileUploader::Base
3
+
4
+ def url
5
+ "http://2.bp.blogspot.com/-dUJdeS8yFnA/T5aMQVCYNPI/AAAAAAAAAX0/mAK2oQIbVq4/s1600/funny+cat+ninja.jpg"
6
+ end
7
+
8
+ def upload!
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,48 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper.rb"` to ensure that it is only
4
+ # loaded once.
5
+
6
+ require 'rubygems'
7
+ require 'bundler/setup'
8
+
9
+ require 'rails/all'
10
+ require 'simple_form'
11
+
12
+ require 'dead_simple_cms'
13
+ require File.expand_path('../setup', __FILE__)
14
+
15
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
16
+ RSpec.configure do |config|
17
+ config.treat_symbols_as_metadata_keys_with_true_values = true
18
+ config.run_all_when_everything_filtered = true
19
+ config.filter_run :focus
20
+ end
21
+
22
+ # Datbase setup.
23
+ require 'sqlite3'
24
+ ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: "dead_simple_cms.sqlite3")
25
+ ActiveRecord::Base.silence do
26
+ ActiveRecord::Migration.verbose = false
27
+ ActiveRecord::Schema.define :version => 0 do
28
+ create_table :dead_simple_cms, :force => true do |t|
29
+ t.string :key
30
+ t.text :value
31
+ t.timestamps
32
+ end
33
+ add_index :dead_simple_cms, :key, :unique => true
34
+ end
35
+ end
36
+
37
+ #RSpec::Matchers.define :have_only_tag_values do |expected|
38
+ # match do |actual|
39
+ # actual = actual.tags if actual.class.respond_to?(:taggable?) && actual.class.taggable?
40
+ # same_elements?(actual.map(&:value), expected)
41
+ # end
42
+ #end
43
+ #
44
+ #RSpec::Matchers.define :have_same_elements do |expected|
45
+ # match do |actual|
46
+ # same_elements?(actual, expected)
47
+ # end
48
+ #end
metadata ADDED
@@ -0,0 +1,221 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dead_simple_cms
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Aryk Grosz
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-24 00:00:00.000000000 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ requirement: &2156091300 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '3.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *2156091300
26
+ - !ruby/object:Gem::Dependency
27
+ name: activemodel
28
+ requirement: &2156090500 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *2156090500
37
+ - !ruby/object:Gem::Dependency
38
+ name: simple_form
39
+ requirement: &2156089880 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *2156089880
48
+ - !ruby/object:Gem::Dependency
49
+ name: rails
50
+ requirement: &2156088660 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '3.0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *2156088660
59
+ - !ruby/object:Gem::Dependency
60
+ name: rspec
61
+ requirement: &2156087880 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: *2156087880
70
+ - !ruby/object:Gem::Dependency
71
+ name: sqlite3
72
+ requirement: &2156087300 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: *2156087300
81
+ description: ! "Dead Simple CMS is a library for modifying different parts of your
82
+ website without the overhead of having a\nfullblown CMS. The idea with this library
83
+ is simple: provide an easy way to hook into different parts of your\napplication
84
+ (not only views) by defining the different parts to modify in an easy, straight-forward
85
+ DSL.\n\nThe basic components of this library include:\n\n * A DSL to define the
86
+ changeable values in your app\n * Form generators based on SimpleForm (with or without
87
+ Bootstrap) and default rails FormBuilder\n * Expandable storage mechanisms so you
88
+ can store the data in different locations\n * Currently supported: Redis, Database,
89
+ Memcache, even Memory (for testing)\n * Presenters/renderers so you can take groups
90
+ of variables and render them into your views (ie image_tag)\n\nWhat it doesn't have:\n\n
91
+ * Versioning - be able to look at old versions of the content\n * Timing - set start
92
+ and end time for different content\n * Page builder tools - this is not the right
93
+ tool if you want to design full pages\n"
94
+ email:
95
+ - aryk@mixbook.com
96
+ executables: []
97
+ extensions: []
98
+ extra_rdoc_files: []
99
+ files:
100
+ - .gitignore
101
+ - .rspec
102
+ - Gemfile
103
+ - LICENSE
104
+ - README.md
105
+ - Rakefile
106
+ - dead_simple_cms.gemspec
107
+ - lib/dead_simple_cms.rb
108
+ - lib/dead_simple_cms/attribute/collection.rb
109
+ - lib/dead_simple_cms/attribute/type/all.rb
110
+ - lib/dead_simple_cms/attribute/type/base.rb
111
+ - lib/dead_simple_cms/attribute/type/collection_support.rb
112
+ - lib/dead_simple_cms/configuration.rb
113
+ - lib/dead_simple_cms/file_uploader/base.rb
114
+ - lib/dead_simple_cms/group.rb
115
+ - lib/dead_simple_cms/group/configuration.rb
116
+ - lib/dead_simple_cms/group/presenter.rb
117
+ - lib/dead_simple_cms/rails/action_controller/extensions.rb
118
+ - lib/dead_simple_cms/rails/action_controller/fragment_sweeper.rb
119
+ - lib/dead_simple_cms/rails/action_view/extensions.rb
120
+ - lib/dead_simple_cms/rails/action_view/form_builders/default.rb
121
+ - lib/dead_simple_cms/rails/action_view/form_builders/interface.rb
122
+ - lib/dead_simple_cms/rails/action_view/form_builders/simple_form.rb
123
+ - lib/dead_simple_cms/rails/action_view/form_builders/simple_form_with_bootstrap.rb
124
+ - lib/dead_simple_cms/rails/action_view/presenter.rb
125
+ - lib/dead_simple_cms/section.rb
126
+ - lib/dead_simple_cms/section/builder.rb
127
+ - lib/dead_simple_cms/storage/base.rb
128
+ - lib/dead_simple_cms/storage/database.rb
129
+ - lib/dead_simple_cms/storage/memory.rb
130
+ - lib/dead_simple_cms/storage/rails_cache.rb
131
+ - lib/dead_simple_cms/storage/redis.rb
132
+ - lib/dead_simple_cms/util/identifier.rb
133
+ - lib/dead_simple_cms/util/identifier/dictionary.rb
134
+ - lib/dead_simple_cms/version.rb
135
+ - spec/dead_simple_cms/attribute/collection_spec.rb
136
+ - spec/dead_simple_cms/attribute/type/all_spec.rb
137
+ - spec/dead_simple_cms/attribute/type/base_spec.rb
138
+ - spec/dead_simple_cms/configuration_spec.rb
139
+ - spec/dead_simple_cms/file_uploader/base_spec.rb
140
+ - spec/dead_simple_cms/group/configuration_spec.rb
141
+ - spec/dead_simple_cms/group/presenter_spec.rb
142
+ - spec/dead_simple_cms/group_spec.rb
143
+ - spec/dead_simple_cms/rails/action_view/form_builders/default_spec.rb
144
+ - spec/dead_simple_cms/rails/action_view/form_builders/simple_form_spec.rb
145
+ - spec/dead_simple_cms/rails/action_view/form_builders/simple_form_with_bootstrap_spec.rb
146
+ - spec/dead_simple_cms/rails/action_view/fragment_sweeper_spec.rb
147
+ - spec/dead_simple_cms/rails/action_view/presenter_spec.rb
148
+ - spec/dead_simple_cms/section/builder_spec.rb
149
+ - spec/dead_simple_cms/section_spec.rb
150
+ - spec/dead_simple_cms/storage/base_spec.rb
151
+ - spec/dead_simple_cms/storage/database_spec.rb
152
+ - spec/dead_simple_cms/storage/memory_spec.rb
153
+ - spec/dead_simple_cms/storage/rails_cache_spec.rb
154
+ - spec/dead_simple_cms/storage/redis_spec.rb
155
+ - spec/dead_simple_cms/util/identifier/dictionary/duplciate_item_spec.rb
156
+ - spec/dead_simple_cms/util/identifier/dictionary/invalid_entry_class_spec.rb
157
+ - spec/dead_simple_cms/util/identifier/dictionary_spec.rb
158
+ - spec/dead_simple_cms/util/identifier_spec.rb
159
+ - spec/setup.rb
160
+ - spec/setup/banner_presenter.rb
161
+ - spec/setup/rspec_template_builder.rb
162
+ - spec/setup/shared.rb
163
+ - spec/setup/test_file_uploader.rb
164
+ - spec/spec_helper.rb
165
+ has_rdoc: true
166
+ homepage: http://github.com/Aryk/dead_simple_cms
167
+ licenses: []
168
+ post_install_message:
169
+ rdoc_options: []
170
+ require_paths:
171
+ - lib
172
+ required_ruby_version: !ruby/object:Gem::Requirement
173
+ none: false
174
+ requirements:
175
+ - - ! '>='
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ required_rubygems_version: !ruby/object:Gem::Requirement
179
+ none: false
180
+ requirements:
181
+ - - ! '>='
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ requirements: []
185
+ rubyforge_project:
186
+ rubygems_version: 1.6.2
187
+ signing_key:
188
+ specification_version: 3
189
+ summary: DeadSimpleCMS provides a way to define, modify, and present custom variables
190
+ and content in your application.
191
+ test_files:
192
+ - spec/dead_simple_cms/attribute/collection_spec.rb
193
+ - spec/dead_simple_cms/attribute/type/all_spec.rb
194
+ - spec/dead_simple_cms/attribute/type/base_spec.rb
195
+ - spec/dead_simple_cms/configuration_spec.rb
196
+ - spec/dead_simple_cms/file_uploader/base_spec.rb
197
+ - spec/dead_simple_cms/group/configuration_spec.rb
198
+ - spec/dead_simple_cms/group/presenter_spec.rb
199
+ - spec/dead_simple_cms/group_spec.rb
200
+ - spec/dead_simple_cms/rails/action_view/form_builders/default_spec.rb
201
+ - spec/dead_simple_cms/rails/action_view/form_builders/simple_form_spec.rb
202
+ - spec/dead_simple_cms/rails/action_view/form_builders/simple_form_with_bootstrap_spec.rb
203
+ - spec/dead_simple_cms/rails/action_view/fragment_sweeper_spec.rb
204
+ - spec/dead_simple_cms/rails/action_view/presenter_spec.rb
205
+ - spec/dead_simple_cms/section/builder_spec.rb
206
+ - spec/dead_simple_cms/section_spec.rb
207
+ - spec/dead_simple_cms/storage/base_spec.rb
208
+ - spec/dead_simple_cms/storage/database_spec.rb
209
+ - spec/dead_simple_cms/storage/memory_spec.rb
210
+ - spec/dead_simple_cms/storage/rails_cache_spec.rb
211
+ - spec/dead_simple_cms/storage/redis_spec.rb
212
+ - spec/dead_simple_cms/util/identifier/dictionary/duplciate_item_spec.rb
213
+ - spec/dead_simple_cms/util/identifier/dictionary/invalid_entry_class_spec.rb
214
+ - spec/dead_simple_cms/util/identifier/dictionary_spec.rb
215
+ - spec/dead_simple_cms/util/identifier_spec.rb
216
+ - spec/setup/banner_presenter.rb
217
+ - spec/setup/rspec_template_builder.rb
218
+ - spec/setup/shared.rb
219
+ - spec/setup/test_file_uploader.rb
220
+ - spec/setup.rb
221
+ - spec/spec_helper.rb