dormouse 0.0.1.a1

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.
Files changed (43) hide show
  1. data/CHANGELOG.md +10 -0
  2. data/LICENSE +19 -0
  3. data/README.md +3 -0
  4. data/app/views/dormouse/layouts/dormouse.html.erb +14 -0
  5. data/app/views/dormouse/views/form.html.erb +12 -0
  6. data/app/views/dormouse/views/list.html.erb +21 -0
  7. data/app/views/dormouse/widgets/_belongs_to.html.erb +6 -0
  8. data/app/views/dormouse/widgets/_boolean.html.erb +4 -0
  9. data/app/views/dormouse/widgets/_date.html.erb +4 -0
  10. data/app/views/dormouse/widgets/_datetime.html.erb +4 -0
  11. data/app/views/dormouse/widgets/_decimal.html.erb +4 -0
  12. data/app/views/dormouse/widgets/_float.html.erb +4 -0
  13. data/app/views/dormouse/widgets/_integer.html.erb +4 -0
  14. data/app/views/dormouse/widgets/_string.html.erb +4 -0
  15. data/app/views/dormouse/widgets/_text.html.erb +4 -0
  16. data/app/views/dormouse/widgets/_time.html.erb +4 -0
  17. data/app/views/dormouse/widgets/_timestamp.html.erb +4 -0
  18. data/lib/dormouse/action_controller.rb +71 -0
  19. data/lib/dormouse/active_record.rb +33 -0
  20. data/lib/dormouse/dsl.rb +104 -0
  21. data/lib/dormouse/manifest.rb +103 -0
  22. data/lib/dormouse/property.rb +27 -0
  23. data/lib/dormouse/version.rb +3 -0
  24. data/lib/dormouse/views/base.rb +24 -0
  25. data/lib/dormouse/views/form.rb +33 -0
  26. data/lib/dormouse/views/list.rb +14 -0
  27. data/lib/dormouse/views.rb +7 -0
  28. data/lib/dormouse/widgets/base.rb +39 -0
  29. data/lib/dormouse/widgets/belongs_to.rb +11 -0
  30. data/lib/dormouse/widgets/boolean.rb +3 -0
  31. data/lib/dormouse/widgets/date.rb +3 -0
  32. data/lib/dormouse/widgets/datetime.rb +3 -0
  33. data/lib/dormouse/widgets/decimal.rb +3 -0
  34. data/lib/dormouse/widgets/float.rb +3 -0
  35. data/lib/dormouse/widgets/integer.rb +3 -0
  36. data/lib/dormouse/widgets/simple.rb +10 -0
  37. data/lib/dormouse/widgets/string.rb +3 -0
  38. data/lib/dormouse/widgets/text.rb +3 -0
  39. data/lib/dormouse/widgets/time.rb +3 -0
  40. data/lib/dormouse/widgets/timestamp.rb +3 -0
  41. data/lib/dormouse/widgets.rb +28 -0
  42. data/lib/dormouse.rb +12 -0
  43. metadata +107 -0
data/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ ## 0.1.0 (Not released yet)
2
+
3
+ Features:
4
+
5
+ - added basic list generation.
6
+ - added basic form generation.
7
+
8
+ Bugfixes:
9
+
10
+ - [none]
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2010 Simon Menke
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Dormouse
2
+
3
+ Building CMS's should be easier!
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Dormouse</title>
5
+ <%= stylesheet_link_tag :all %>
6
+ <%= javascript_include_tag :defaults %>
7
+ <%#= csrf_meta_tag %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,12 @@
1
+ <% form_for @object, :url => manifest.save_object_url(@object) do |f| %>
2
+
3
+ <%= f.error_messages %>
4
+
5
+ <% @widgets.each do |widget| %>
6
+ <% next if widget.hidden %>
7
+ <%= widget.render_in_view(self, @object, :form => f) %>
8
+ <% end %>
9
+
10
+ <%= f.submit %>
11
+
12
+ <% end %>
@@ -0,0 +1,21 @@
1
+ <div id="actions">
2
+
3
+ <div class="box">
4
+ <h3>Actions</h3>
5
+ <ul>
6
+ <li><a href="<%= manifest.collection_url %>/new">New item</a></li>
7
+ </ul>
8
+ </div>
9
+
10
+ </div>
11
+
12
+ <div id="list">
13
+ <% @collection.each do |object| %>
14
+ <% div_for object do %>
15
+ <%= link_to object.__send__(manifest.primary_name_column), manifest.object_url(object)+'/edit' %>
16
+ <% if manifest.secondary_name_column %>
17
+ <span><%= object.__send__(manifest.secondary_name_column) %></span>
18
+ <% end %>
19
+ <% end %>
20
+ <% end %>
21
+ </div>
@@ -0,0 +1,6 @@
1
+ <% div_for(object, property.name, :class => property.type) do %>
2
+ <%= form.label(property.name, property.label) if property.label %>
3
+ <%= form.collection_select("#{property.name}_id",
4
+ target.resource.all,
5
+ :id, target.primary_name_column, property.options) %>
6
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% div_for(object, property.name, :class => property.type) do %>
2
+ <%= form.label(property.name, property.label) if property.label %>
3
+ <%= form.check_box(property.name, property.options) %>
4
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% div_for(object, property.name, :class => property.type) do %>
2
+ <%= form.label(property.name, property.label) if property.label %>
3
+ <%= form.date_select(property.name, property.options) %>
4
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% div_for(object, property.name, :class => property.type) do %>
2
+ <%= form.label(property.name, property.label) if property.label %>
3
+ <%= form.datetime_select(property.name, property.options) %>
4
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% div_for(object, property.name, :class => property.type) do %>
2
+ <%= form.label(property.name, property.label) if property.label %>
3
+ <%= form.text_field(property.name, property.options) %>
4
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% div_for(object, property.name, :class => property.type) do %>
2
+ <%= form.label(property.name, property.label) if property.label %>
3
+ <%= form.text_field(property.name, property.options) %>
4
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% div_for(object, property.name, :class => property.type) do %>
2
+ <%= form.label(property.name, property.label) if property.label %>
3
+ <%= form.text_field(property.name, property.options) %>
4
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% div_for(object, property.name, :class => property.type) do %>
2
+ <%= form.label(property.name, property.label) if property.label %>
3
+ <%= form.text_field(property.name, property.options) %>
4
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% div_for(object, property.name, :class => property.type) do %>
2
+ <%= form.label(property.name, property.label) if property.label %>
3
+ <%= form.text_area(property.name, property.options) %>
4
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% div_for(object, property.name, :class => property.type) do %>
2
+ <%= form.label(property.name, property.label) if property.label %>
3
+ <%= form.time_select(property.name, property.options) %>
4
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% div_for(object, property.name, :class => property.type) do %>
2
+ <%= form.label(property.name, property.label) if property.label %>
3
+ <%= form.datetime_select(property.name, property.options) %>
4
+ <% end %>
@@ -0,0 +1,71 @@
1
+ module Dormouse::ActionController
2
+
3
+ def self.build(manifest, map)
4
+ build_routes(manifest, map)
5
+ end
6
+
7
+ def self.build_controller(manifest)
8
+ controller = eval("class ::#{manifest.resource}::ResourcesController < ::#{manifest.controller_superclass} ; self ; end ")
9
+ controller.extend Meta
10
+ controller.send :include, Actions
11
+ controller.manifest = manifest
12
+ controller
13
+ end
14
+
15
+ def self.build_routes(manifest, map)
16
+ name = manifest.resource.to_s.split('::').last.tableize
17
+ controller = manifest.controller_class.to_s.sub(/Controller$/, '')
18
+ map.resources name.to_sym, :controller => controller
19
+ end
20
+
21
+ end
22
+
23
+ module Dormouse::ActionController::Actions
24
+
25
+ def self.included(base)
26
+ base.class_eval do
27
+ helper_method :manifest
28
+ end
29
+ end
30
+
31
+ def index
32
+ manifest.render_list(self)
33
+ end
34
+
35
+ def new
36
+ manifest.render_form(self)
37
+ end
38
+
39
+ def edit
40
+ manifest.render_form(self)
41
+ end
42
+
43
+ def create
44
+ attrs = params[manifest.resource.to_s.split('::').last.underscore]
45
+ manifest.resource.create! attrs
46
+ redirect_to manifest.collection_url
47
+ rescue ActiveRecord::RecordInvalid => e
48
+ manifest.render_form(self, e.record)
49
+ end
50
+
51
+ def update
52
+ attrs = params[manifest.resource.to_s.split('::').last.underscore]
53
+ manifest.resource.find(params[:id]).update_attributes! attrs
54
+ redirect_to manifest.collection_url
55
+ rescue ActiveRecord::RecordInvalid => e
56
+ manifest.render_form(self, e.record)
57
+ end
58
+
59
+ private
60
+
61
+ def manifest
62
+ self.class.manifest
63
+ end
64
+
65
+ end
66
+
67
+ module Dormouse::ActionController::Meta
68
+
69
+ attr_accessor :manifest
70
+
71
+ end
@@ -0,0 +1,33 @@
1
+ module Dormouse::ActiveRecord
2
+
3
+ def self.included(base)
4
+ base.extend Meta
5
+ end
6
+
7
+ def manifest
8
+ self.class.manifest
9
+ end
10
+
11
+ end
12
+
13
+ module Dormouse::ActiveRecord::Meta
14
+
15
+ def manifest(&block)
16
+ @manifest ||= Dormouse::Manifest.new(self)
17
+ Dormouse::DSL.new(@manifest).instance_eval(&block) if block
18
+ @manifest
19
+ end
20
+
21
+ def const_missing(name)
22
+ if name == 'ResourcesController'
23
+ Dormouse::ActionController.build_controller(manifest)
24
+ else
25
+ super
26
+ end
27
+ end
28
+
29
+ end
30
+
31
+ class ActiveRecord::Base
32
+ include Dormouse::ActiveRecord
33
+ end
@@ -0,0 +1,104 @@
1
+ # The DSL is used by the <tt>#manifest</tt> macro in ActiveRecord::Base to set
2
+ # options on properties.
3
+ #
4
+ # class Post < ActiveRecord::Base
5
+ # validates :title, :presence => true
6
+ #
7
+ # manifest do
8
+ # order :published_on, :before => :body
9
+ # set :body, :label => false
10
+ # hide :created_at, :updated_at
11
+ # primary_name :title
12
+ # end
13
+ # end
14
+ #
15
+ class Dormouse::DSL
16
+
17
+ def initialize(manifest)
18
+ @manifest = manifest
19
+ end
20
+
21
+ # set the view style for this model. (The default style is :dormouse)
22
+ def style(name)
23
+ @manifest.style = (name || 'dormouse')
24
+ end
25
+
26
+ # set the primary name for a model. The primary name is the name shown in lists, select boxes and grids as the link to the details.
27
+ def primary_name(property)
28
+ set(property, :primary => true)
29
+ end
30
+
31
+ # set the secondary name for a model. The secondary name is the name shown in lists and grids as the tag line.
32
+ def secondary_name(property)
33
+ set(property, :secondary => true)
34
+ end
35
+
36
+ # hide one or more properties in the form.
37
+ def hide(*properties)
38
+ properties.each do |property|
39
+ set(property, :hidden => true)
40
+ end
41
+ self
42
+ end
43
+
44
+ # show one or more properties in the form.
45
+ def show(*properties)
46
+ properties.each do |property|
47
+ set(property, :hidden => false)
48
+ end
49
+ self
50
+ end
51
+
52
+ # set a custom label for a property
53
+ def label(property, label=nil)
54
+ set(property, :label => label)
55
+ end
56
+
57
+ # reorder one or more properties in the form.
58
+ def order(*properties)
59
+ options = properties.extract_options!
60
+ if options[:after]
61
+ properties = properties.reverse
62
+ end
63
+ properties.each do |property|
64
+ set(property, options.dup)
65
+ end
66
+ self
67
+ end
68
+
69
+ def set(property, options={})
70
+ property = property.to_sym
71
+
72
+ order_options = options.slice(:after, :before, :top, :bottom)
73
+ options.except!(:after, :before, :top, :bottom)
74
+ case
75
+ when hook = order_options[:after]
76
+ idx = @manifest.order.index(hook.to_sym) || (@manifest.size - 1)
77
+ @manifest.order.delete(property)
78
+ @manifest.order.insert(idx + 1, property)
79
+ when hook = order_options[:before]
80
+ idx = @manifest.order.index(hook.to_sym) || (@manifest.size - 1)
81
+ @manifest.order.delete(property)
82
+ @manifest.order.insert(idx, property)
83
+ when order_options[:top]
84
+ @manifest.order.delete(property)
85
+ @manifest.order.insert(0, property)
86
+ when order_options[:bottom]
87
+ @manifest.order.delete(property)
88
+ @manifest.order.push(property)
89
+ end
90
+
91
+ if options.key?(:primary) and options.delete(:primary)
92
+ @manifest.primary_name_column = property
93
+ end
94
+
95
+ if options.key?(:secondary) and options.delete(:secondary)
96
+ @manifest.secondary_name_column = property
97
+ end
98
+
99
+ @manifest[property].populate(options)
100
+
101
+ self
102
+ end
103
+
104
+ end
@@ -0,0 +1,103 @@
1
+ class Dormouse::Manifest
2
+
3
+ include Enumerable
4
+
5
+ def initialize(resource)
6
+ @resource = resource
7
+ @properties = {}
8
+ @order = []
9
+
10
+ generate_default_properties
11
+ end
12
+
13
+ attr_reader :resource, :order
14
+ attr_accessor :primary_name_column, :secondary_name_column
15
+ attr_accessor :collection_url, :object_url
16
+ attr_accessor :style
17
+
18
+ def mount(map)
19
+ Dormouse::ActionController.build(self, map)
20
+ end
21
+
22
+ def render_list(controller, collection=nil)
23
+ @list_view ||= Dormouse::Views::List.new(self)
24
+ @list_view.render_in_controller(controller, collection)
25
+ end
26
+
27
+ def render_form(controller, object=nil)
28
+ @form_view ||= Dormouse::Views::Form.new(self)
29
+ @form_view.render_in_controller(controller, object)
30
+ end
31
+
32
+ def [](name)
33
+ @properties[name.to_sym]
34
+ end
35
+
36
+ def each
37
+ @order.each do |name|
38
+ yield @properties[name]
39
+ end
40
+ self
41
+ end
42
+
43
+ def controller_superclass
44
+ ApplicationController
45
+ end
46
+
47
+ def controller_class
48
+ @controller_class ||= "#{resource}::ResourcesController".constantize
49
+ end
50
+
51
+ def style
52
+ @style ||= 'dormouse'
53
+ end
54
+
55
+ def primary_name_column
56
+ @primary_name_column ||= @properties[@order.first].name
57
+ end
58
+
59
+ def collection_url
60
+ @collection_url ||= "/#{@resource.to_s.gsub('::', '/').underscore.pluralize}"
61
+ end
62
+
63
+ def object_url(object=nil)
64
+ if object
65
+ self.object_url.gsub(%r{[:]([^/]+)}) do
66
+ object.__send__($1).to_s
67
+ end
68
+ else
69
+ @object_url ||= "#{collection_url}/:id"
70
+ end
71
+ end
72
+
73
+ def save_object_url(object=nil)
74
+ if object
75
+ if object.new_record?
76
+ collection_url
77
+ else
78
+ object_url(object)
79
+ end
80
+ else
81
+ @object_url ||= "#{collection_url}/:id"
82
+ end
83
+ end
84
+
85
+ private
86
+
87
+ def generate_default_properties
88
+ resource.content_columns.each do |column|
89
+ property = Dormouse::Property.new(self, column)
90
+ @properties[property.name] = property
91
+ @order << property.name
92
+ end
93
+
94
+ resource.reflect_on_all_associations.each do |association|
95
+ property = Dormouse::Property.new(self, association)
96
+ @properties[property.name] = property
97
+ @order << property.name
98
+ end
99
+ rescue ActiveRecord::StatementInvalid => e
100
+ puts "#{e.message}"
101
+ end
102
+
103
+ end
@@ -0,0 +1,27 @@
1
+ class Dormouse::Property
2
+
3
+ def initialize(manifest, column_or_association)
4
+ if ActiveRecord::Reflection::MacroReflection === column_or_association
5
+ @type = column_or_association.macro
6
+ @resource = column_or_association.klass
7
+ else
8
+ @type = column_or_association.type
9
+ end
10
+ @name = column_or_association.name.to_sym
11
+ @options = {}
12
+
13
+ populate
14
+ end
15
+
16
+ attr_reader :name, :type, :options, :resource
17
+ attr_accessor :hidden
18
+ attr_accessor :label
19
+
20
+ def populate(options={})
21
+ @hidden = options.delete(:hidden) if options.key?(:hidden)
22
+ @label = options.delete(:label) if options.key?(:label)
23
+ @label = @name.to_s.humanize if @label.nil?
24
+ @options = @options.merge(options)
25
+ end
26
+
27
+ end
@@ -0,0 +1,3 @@
1
+ module Dormouse
2
+ VERSION = '0.0.1.a1'
3
+ end
@@ -0,0 +1,24 @@
1
+ class Dormouse::Views::Base
2
+
3
+ attr_reader :manifest
4
+
5
+ def initialize(manifest)
6
+ @manifest = manifest
7
+ end
8
+
9
+ def render_in_controller(controller, *args)
10
+ @controller = controller
11
+ render(*args)
12
+ end
13
+
14
+ def render
15
+
16
+ end
17
+
18
+ private
19
+
20
+ def controller_eval(&block)
21
+ @controller.instance_eval(&block)
22
+ end
23
+
24
+ end
@@ -0,0 +1,33 @@
1
+ class Dormouse::Views::Form < Dormouse::Views::Base
2
+
3
+ def render(object=nil)
4
+ manifest = self.manifest
5
+
6
+ widgets = self.widgets
7
+
8
+ object ||= begin
9
+ if id = @controller.params[:id]
10
+ manifest.resource.find(id)
11
+ else
12
+ manifest.resource.new
13
+ end
14
+ end
15
+
16
+ controller_eval do
17
+ @object = object
18
+ @widgets = widgets
19
+ render :template => "#{manifest.style}/views/form", :layout => "#{manifest.style}/layouts/dormouse"
20
+ end
21
+ end
22
+
23
+ def widgets
24
+ @widgets ||= begin
25
+ manifest.inject([]) do |memo, property|
26
+ widget_klass = Dormouse::Widgets[property.type]
27
+ memo << widget_klass.new(manifest, property) if widget_klass
28
+ memo
29
+ end
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,14 @@
1
+ class Dormouse::Views::List < Dormouse::Views::Base
2
+
3
+ def render(collection=nil)
4
+ manifest = self.manifest
5
+
6
+ collection ||= manifest.resource.all
7
+
8
+ controller_eval do
9
+ @collection = collection
10
+ render :template => "#{manifest.style}/views/list", :layout => "#{manifest.style}/layouts/dormouse"
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,7 @@
1
+ module Dormouse::Views
2
+
3
+ require 'dormouse/views/base'
4
+ require 'dormouse/views/list'
5
+ require 'dormouse/views/form'
6
+
7
+ end
@@ -0,0 +1,39 @@
1
+ class Dormouse::Widgets::Base
2
+
3
+ attr_reader :property
4
+
5
+ def self.property_type(name=nil)
6
+ if name
7
+ @property_type = name
8
+ Dormouse::Widgets[name] = self
9
+ else
10
+ @property_type
11
+ end
12
+ end
13
+
14
+ def property_type
15
+ self.class.property_type
16
+ end
17
+
18
+ def initialize(manifest, property)
19
+ @manifest, @property = manifest, property
20
+ end
21
+
22
+ delegate :hidden, :options, :name, :to => :property
23
+
24
+ def render_in_view(view, object, options={})
25
+ @view = view
26
+ render(object, options)
27
+ end
28
+
29
+ def render(object, options={})
30
+
31
+ end
32
+
33
+ private
34
+
35
+ def view_eval(&block)
36
+ @view.instance_eval(&block)
37
+ end
38
+
39
+ end
@@ -0,0 +1,11 @@
1
+ class Dormouse::Widgets::BelongsTo < Dormouse::Widgets::Base
2
+
3
+ property_type :belongs_to
4
+
5
+ def render(object, options={})
6
+ value = object.__send__(@property.name)
7
+ locals = options.merge( :value => value, :object => object, :property => @property, :manifest => @manifest, :target => @property.resource.manifest )
8
+ view_eval { render :partial => "#{manifest.style}/widgets/belongs_to", :locals => locals }
9
+ end
10
+
11
+ end
@@ -0,0 +1,3 @@
1
+ class Dormouse::Widgets::Boolean < Dormouse::Widgets::Simple
2
+ property_type :boolean
3
+ end
@@ -0,0 +1,3 @@
1
+ class Dormouse::Widgets::Date < Dormouse::Widgets::Simple
2
+ property_type :date
3
+ end
@@ -0,0 +1,3 @@
1
+ class Dormouse::Widgets::Datetime < Dormouse::Widgets::Simple
2
+ property_type :datetime
3
+ end
@@ -0,0 +1,3 @@
1
+ class Dormouse::Widgets::Decimal < Dormouse::Widgets::Simple
2
+ property_type :decimal
3
+ end
@@ -0,0 +1,3 @@
1
+ class Dormouse::Widgets::Float < Dormouse::Widgets::Simple
2
+ property_type :float
3
+ end
@@ -0,0 +1,3 @@
1
+ class Dormouse::Widgets::Integer < Dormouse::Widgets::Simple
2
+ property_type :integer
3
+ end
@@ -0,0 +1,10 @@
1
+ class Dormouse::Widgets::Simple < Dormouse::Widgets::Base
2
+
3
+ def render(object, options={})
4
+ value = object.__send__(@property.name)
5
+ locals = options.merge( :value => value, :object => object, :property => @property, :manifest => @manifest )
6
+ property_type = self.property_type
7
+ view_eval { render :partial => "#{manifest.style}/widgets/#{property_type}", :locals => locals }
8
+ end
9
+
10
+ end
@@ -0,0 +1,3 @@
1
+ class Dormouse::Widgets::String < Dormouse::Widgets::Simple
2
+ property_type :string
3
+ end
@@ -0,0 +1,3 @@
1
+ class Dormouse::Widgets::Text < Dormouse::Widgets::Simple
2
+ property_type :text
3
+ end
@@ -0,0 +1,3 @@
1
+ class Dormouse::Widgets::Time < Dormouse::Widgets::Simple
2
+ property_type :time
3
+ end
@@ -0,0 +1,3 @@
1
+ class Dormouse::Widgets::Timestamp < Dormouse::Widgets::Simple
2
+ property_type :timestamp
3
+ end
@@ -0,0 +1,28 @@
1
+ module Dormouse::Widgets
2
+
3
+ class << self
4
+ def [](name)
5
+ @widget_types[name.to_sym]
6
+ end
7
+
8
+ def []=(name, klass)
9
+ (@widget_types ||= {})[name.to_sym] = klass
10
+ end
11
+ end
12
+
13
+ require 'dormouse/widgets/base'
14
+ require 'dormouse/widgets/simple'
15
+
16
+ require 'dormouse/widgets/string'
17
+ require 'dormouse/widgets/text'
18
+ require 'dormouse/widgets/date'
19
+ require 'dormouse/widgets/time'
20
+ require 'dormouse/widgets/datetime'
21
+ require 'dormouse/widgets/boolean'
22
+ require 'dormouse/widgets/integer'
23
+ require 'dormouse/widgets/float'
24
+ require 'dormouse/widgets/decimal'
25
+ require 'dormouse/widgets/timestamp'
26
+ require 'dormouse/widgets/belongs_to'
27
+
28
+ end
data/lib/dormouse.rb ADDED
@@ -0,0 +1,12 @@
1
+ module Dormouse
2
+
3
+ require 'dormouse/version'
4
+
5
+ require 'dormouse/manifest'
6
+ require 'dormouse/property'
7
+ require 'dormouse/dsl'
8
+
9
+ require 'dormouse/active_record'
10
+ require 'dormouse/action_controller'
11
+
12
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dormouse
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: true
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ - a1
10
+ version: 0.0.1.a1
11
+ platform: ruby
12
+ authors:
13
+ - Simon Menke
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-04-19 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: Build CMS's in a snap using just models.
23
+ email:
24
+ - simon.menke@gmail.com
25
+ executables: []
26
+
27
+ extensions: []
28
+
29
+ extra_rdoc_files: []
30
+
31
+ files:
32
+ - app/views/dormouse/layouts/dormouse.html.erb
33
+ - app/views/dormouse/views/form.html.erb
34
+ - app/views/dormouse/views/list.html.erb
35
+ - app/views/dormouse/widgets/_belongs_to.html.erb
36
+ - app/views/dormouse/widgets/_boolean.html.erb
37
+ - app/views/dormouse/widgets/_date.html.erb
38
+ - app/views/dormouse/widgets/_datetime.html.erb
39
+ - app/views/dormouse/widgets/_decimal.html.erb
40
+ - app/views/dormouse/widgets/_float.html.erb
41
+ - app/views/dormouse/widgets/_integer.html.erb
42
+ - app/views/dormouse/widgets/_string.html.erb
43
+ - app/views/dormouse/widgets/_text.html.erb
44
+ - app/views/dormouse/widgets/_time.html.erb
45
+ - app/views/dormouse/widgets/_timestamp.html.erb
46
+ - lib/dormouse/action_controller.rb
47
+ - lib/dormouse/active_record.rb
48
+ - lib/dormouse/dsl.rb
49
+ - lib/dormouse/manifest.rb
50
+ - lib/dormouse/property.rb
51
+ - lib/dormouse/version.rb
52
+ - lib/dormouse/views/base.rb
53
+ - lib/dormouse/views/form.rb
54
+ - lib/dormouse/views/list.rb
55
+ - lib/dormouse/views.rb
56
+ - lib/dormouse/widgets/base.rb
57
+ - lib/dormouse/widgets/belongs_to.rb
58
+ - lib/dormouse/widgets/boolean.rb
59
+ - lib/dormouse/widgets/date.rb
60
+ - lib/dormouse/widgets/datetime.rb
61
+ - lib/dormouse/widgets/decimal.rb
62
+ - lib/dormouse/widgets/float.rb
63
+ - lib/dormouse/widgets/integer.rb
64
+ - lib/dormouse/widgets/simple.rb
65
+ - lib/dormouse/widgets/string.rb
66
+ - lib/dormouse/widgets/text.rb
67
+ - lib/dormouse/widgets/time.rb
68
+ - lib/dormouse/widgets/timestamp.rb
69
+ - lib/dormouse/widgets.rb
70
+ - lib/dormouse.rb
71
+ - LICENSE
72
+ - README.md
73
+ - CHANGELOG.md
74
+ has_rdoc: true
75
+ homepage: http://github.com/fd/dormouse
76
+ licenses: []
77
+
78
+ post_install_message:
79
+ rdoc_options: []
80
+
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ segments:
95
+ - 1
96
+ - 3
97
+ - 6
98
+ version: 1.3.6
99
+ requirements: []
100
+
101
+ rubyforge_project: dormouse
102
+ rubygems_version: 1.3.6
103
+ signing_key:
104
+ specification_version: 3
105
+ summary: ActiveRecord models are so wise, we should use there wisdom instead of being stubborn and stupid.
106
+ test_files: []
107
+