dormouse 0.0.1.a1

Sign up to get free protection for your applications and to get access to all the features.
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
+