rapid-core 0.1 → 0.2.1

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 (89) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile.lock +35 -2
  3. data/Rakefile +77 -48
  4. data/doc/server.txt +15 -0
  5. data/features/settings/double-nested/default.feature +2 -2
  6. data/features/settings/double-nested/validates/presence_of.feature +1 -1
  7. data/features/settings/nested/default.feature +1 -1
  8. data/features/settings/nested/validates/presence_of.feature +1 -1
  9. data/features/settings/not_found.feature +2 -2
  10. data/features/step_definitions/settings_steps.rb +7 -3
  11. data/features/step_definitions/template_steps.rb +3 -1
  12. data/lib/rapid/check.rb +30 -23
  13. data/lib/rapid/core.rb +12 -0
  14. data/lib/rapid/error.rb +1 -0
  15. data/lib/rapid/module.rb +10 -1
  16. data/lib/rapid/railtie.rb +6 -0
  17. data/lib/rapid/setting/base.rb +31 -8
  18. data/lib/rapid/setting/boolean_setting.rb +20 -1
  19. data/lib/rapid/setting/definer.rb +11 -47
  20. data/lib/rapid/setting/integer_setting.rb +7 -7
  21. data/lib/rapid/setting/module.rb +56 -0
  22. data/lib/rapid/setting/namespace/base.rb +35 -60
  23. data/lib/rapid/setting/namespace/instance.rb +195 -28
  24. data/lib/rapid/setting/string_setting.rb +7 -1
  25. data/lib/rapid/settings.rb +51 -65
  26. data/lib/rapid/skeleton/base.rb +39 -18
  27. data/lib/rapid/skeleton/helpers/directory.rb +5 -6
  28. data/lib/rapid/skeleton/helpers/files.rb +62 -0
  29. data/lib/rapid/skeleton/helpers/gem.rb +43 -32
  30. data/lib/rapid/skeleton/helpers/if_setting.rb +44 -0
  31. data/lib/rapid/skeleton/helpers/migration.rb +102 -32
  32. data/lib/rapid/skeleton/helpers/route.rb +8 -12
  33. data/lib/rapid/skeleton/helpers/script.rb +1 -2
  34. data/lib/rapid/skeleton/helpers/template.rb +23 -25
  35. data/lib/rapid/skeleton/helpers/view.rb +7 -7
  36. data/lib/rapid/spec/template.rb +1 -1
  37. data/lib/rapid/version.rb +1 -1
  38. data/lib/rapid/web/base.rb +35 -0
  39. data/lib/rapid/web/bootstrap.rb +98 -0
  40. data/lib/rapid/web/controller_helpers.rb +60 -0
  41. data/lib/rapid/web/navigator.rb +18 -0
  42. data/lib/rapid/web/select_helpers.rb +63 -0
  43. data/lib/rapid/web/settings_form_builder.rb +205 -0
  44. data/lib/rapid/web/static_helpers.rb +28 -0
  45. data/lib/rapid/web/tasks.rb +10 -0
  46. data/public/rapid/core/bootstrap-collapse.js +136 -0
  47. data/public/rapid/core/bootstrap-responsive.min.css +3 -0
  48. data/public/rapid/core/bootstrap.min.css +556 -0
  49. data/public/rapid/core/jquery-1.7.1.js +9253 -0
  50. data/public/rapid/core/prettify.css +30 -0
  51. data/public/rapid/core/prettify.js +28 -0
  52. data/rapid-core.gemspec +5 -0
  53. data/spec/rapid/check_spec.rb +11 -4
  54. data/spec/rapid/module_spec.rb +18 -0
  55. data/spec/rapid/setting/base_spec.rb +71 -0
  56. data/spec/rapid/setting/boolean_setting_spec.rb +95 -0
  57. data/spec/rapid/setting/definer_spec.rb +7 -13
  58. data/spec/rapid/setting/integer_setting_spec.rb +49 -0
  59. data/spec/rapid/setting/module_spec.rb +25 -0
  60. data/spec/rapid/setting/namespace/base_spec.rb +88 -54
  61. data/spec/rapid/setting/namespace/instance_spec.rb +308 -5
  62. data/spec/rapid/setting/string_setting_spec.rb +43 -0
  63. data/spec/rapid/settings_spec.rb +65 -17
  64. data/spec/rapid/skeleton/base_spec.rb +113 -7
  65. data/spec/rapid/skeleton/helpers/directory_spec.rb +8 -6
  66. data/spec/rapid/skeleton/helpers/files_spec.rb +93 -0
  67. data/spec/rapid/skeleton/helpers/gem_spec.rb +65 -36
  68. data/spec/rapid/skeleton/helpers/if_setting_spec.rb +110 -0
  69. data/spec/rapid/skeleton/helpers/migration_spec.rb +190 -1
  70. data/spec/rapid/skeleton/helpers/route_spec.rb +13 -12
  71. data/spec/rapid/skeleton/helpers/script_spec.rb +2 -1
  72. data/spec/rapid/skeleton/helpers/template_spec.rb +22 -35
  73. data/spec/rapid/spec/template_spec.rb +1 -1
  74. data/spec/rapid/web/base_spec.rb +33 -0
  75. data/spec/rapid/web/bootstrap_spec.rb +72 -0
  76. data/spec/rapid/web/controller_helpers_spec.rb +86 -0
  77. data/spec/rapid/web/navigator_spec.rb +17 -0
  78. data/spec/rapid/web/select_helpers_spec.rb +71 -0
  79. data/spec/rapid/web/settings_form_builder_spec.rb +255 -0
  80. data/spec/rapid/web/static_helpers_spec.rb +26 -0
  81. data/spec/spec_helper.rb +3 -0
  82. data/views/index.erb +11 -0
  83. data/views/layout.erb +9 -0
  84. metadata +107 -12
  85. data/lib/rapid.rb +0 -37
  86. data/lib/rapid/setting/class_hash.rb +0 -34
  87. data/lib/rapid/setting/instance_hash.rb +0 -132
  88. data/lib/rapid/setting/instance_root.rb +0 -107
  89. data/spec/rapid/setting/instance_root_spec.rb +0 -161
@@ -1,107 +0,0 @@
1
- module Rapid
2
- module Setting
3
-
4
- class InstanceRoot < InstanceHash
5
-
6
- include ActiveModel::Validations
7
- validate :validate_no_assignment_exceptions
8
- validate :validate_nested_settings
9
-
10
- attr_reader :_root
11
-
12
- def initialize klass, owner = nil, hash = {}
13
- @_root = owner
14
- super klass, hash
15
- end
16
-
17
- def get_binding
18
- binding
19
- end
20
-
21
- def [] full_name
22
- namespace_name, child_name = Rapid::Settings.extract_nested_namespace(full_name)
23
-
24
- if namespace_name.nil?
25
- super
26
- else
27
- namespace = @delegate[namespace_name]
28
- namespace[child_name] if namespace
29
- end
30
- end
31
-
32
- def set? full_name
33
- value = self[full_name]
34
-
35
- if Setting::Namespace::Instance === value
36
- !value.empty?
37
- else
38
- value != nil && value != false
39
- end
40
- end
41
-
42
- def load_yaml yaml_content
43
- hash = parse_yaml yaml_content
44
-
45
- # yaml was empty
46
- return true if hash == false
47
-
48
- load_hash hash
49
- end
50
-
51
- def load_hash hash
52
- hash.each do |name, value|
53
- self[name] = value
54
- end
55
-
56
- true
57
- end
58
-
59
- def to_yaml
60
- dot_hash = to_dot_hash
61
-
62
- if dot_hash.empty?
63
- ""
64
- else
65
- Settings.clean_yaml dot_hash.to_yaml
66
- end
67
- end
68
-
69
- def to_dot_hash
70
- Rapid::Settings.to_dot_hash to_hash
71
- end
72
-
73
- protected
74
-
75
- def parse_yaml yaml_content
76
- YAML.load yaml_content
77
- rescue ArgumentError => e
78
- raise Rapid::InvalidYamlError.new(e.message)
79
- end
80
-
81
- def validate_no_assignment_exceptions
82
- assignment_exceptions.each do |attribute, error|
83
- self.errors.add attribute, error.validation_message
84
- end
85
-
86
- true
87
- end
88
-
89
- def validate_nested_settings
90
- namespaces.each do |namespace|
91
- next if namespace.valid?
92
-
93
- namespace.errors.each do |attribute, errors|
94
- errors.each do |error|
95
- self.errors.add "#{namespace.klass.name}.#{attribute}", error
96
- end
97
- end
98
- end
99
-
100
- true
101
- end
102
-
103
- end
104
-
105
- end
106
-
107
- end
@@ -1,161 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
-
3
- describe Rapid::Setting::InstanceRoot do
4
-
5
- it "should expose its binding" do
6
- @class_hash = Rapid::Setting::ClassHash.new
7
- @instance_hash = Rapid::Setting::InstanceRoot.new @class_hash
8
-
9
- @instance_hash.get_binding.should_not be_nil
10
- end
11
-
12
- describe "namespaces" do
13
-
14
- before do
15
- @class_hash = Rapid::Setting::ClassHash.new
16
- @app = Rapid::Setting::Namespace::Base.new(:app)
17
- @name = Rapid::Setting::StringSetting.new(:name, :namespace => @app)
18
-
19
- @class_hash[:app] = @app
20
- @app[:name] = @name
21
-
22
- @instance_hash = Rapid::Setting::InstanceRoot.new @class_hash
23
- end
24
-
25
- it "should load the namespaces from nested hashes" do
26
- @instance_hash.load_hash :app => {:name => "Rapid"}
27
- @instance_hash[:app][:name].should == "Rapid"
28
- end
29
-
30
- it "should load the namespaces using dot-notation" do
31
- @instance_hash.load_hash 'app.name' => "Rapid"
32
- @instance_hash[:app][:name].should == "Rapid"
33
- end
34
-
35
- it "should output the yaml in dot-notation" do
36
- @instance_hash.load_hash 'app.name' => "Rapid"
37
- @instance_hash.to_yaml.should == %(app.name: Rapid)
38
- end
39
-
40
- it "should provide [] access to nested settings" do
41
- @instance_hash.load_hash 'app.name' => "Rapid"
42
- @instance_hash['app.name'].should == "Rapid"
43
-
44
- @instance_hash['app.invalid'].should == nil
45
- end
46
-
47
- end
48
-
49
- describe "two-deep namespaces" do
50
-
51
- before do
52
- @class_hash = Rapid::Setting::ClassHash.new
53
- @app = Rapid::Setting::Namespace::Base.new(:app)
54
- @author = Rapid::Setting::Namespace::Base.new(:author)
55
- @name = Rapid::Setting::StringSetting.new(:name, :namespace => @autor)
56
-
57
- @class_hash[:app] = @app
58
- @app[:author] = @author
59
- @author[:name] = @name
60
-
61
- @instance_hash = Rapid::Setting::InstanceRoot.new @class_hash
62
- end
63
-
64
- it "should load the namespaces from nested hashes" do
65
- @instance_hash.load_hash :app => {:author => {:name => "Dan"} }
66
- @instance_hash[:app][:author][:name].should == "Dan"
67
- end
68
-
69
- it "should load the namespaces using dot-notation" do
70
- @instance_hash.load_hash 'app.author.name' => "Dan"
71
- @instance_hash[:app][:author][:name].should == "Dan"
72
- end
73
-
74
- it "should output the yaml in dot-notation" do
75
- @instance_hash.load_hash 'app.author.name' => "Dan"
76
- @instance_hash.to_yaml.should == %(app.author.name: Dan)
77
- end
78
-
79
- it "should provide [] access" do
80
- @instance_hash.load_hash 'app.author.name' => "Dan"
81
- @instance_hash['app.author.name'].should == "Dan"
82
-
83
- @instance_hash['app.author.invalid'].should == nil
84
- end
85
-
86
- it "should know set?" do
87
- @instance_hash.set?('app').should == false
88
- @instance_hash.set?('app.author').should == false
89
- @instance_hash.set?('app.author.name').should == false
90
- @instance_hash.set?('app.author.invalid').should == false
91
-
92
- @instance_hash.load_hash 'app.author.name' => "Dan"
93
-
94
- @instance_hash.set?('app').should == true
95
- @instance_hash.set?('app.author').should == true
96
- @instance_hash.set?('app.author.name').should == true
97
- @instance_hash.set?('app.author.invalid').should == false
98
- end
99
-
100
- end
101
-
102
- describe "YAML" do
103
-
104
- before do
105
- @class_hash = Rapid::Setting::ClassHash.new
106
- @class_hash[:name] = Rapid::Setting::StringSetting.new(:name)
107
- @class_hash[:version] = Rapid::Setting::StringSetting.new(:version)
108
-
109
- @instance_hash = Rapid::Setting::InstanceRoot.new @class_hash
110
- end
111
-
112
- describe "loading" do
113
-
114
- def load_yaml content
115
- @instance_hash.load_yaml content
116
- end
117
-
118
- it "should load the hash with values" do
119
- load_yaml %(name: Dan)
120
- @instance_hash["name"].should == "Dan"
121
- end
122
-
123
- it "should handle empty files" do
124
- load_yaml %()
125
- @instance_hash.empty?.should be_true
126
- end
127
-
128
- it "should raise an error when an unknown setting is specified" do
129
- load_yaml %(foo: bar)
130
- @instance_hash.valid?.should be_false
131
- @instance_hash.errors["foo"].should == ["can't be found"]
132
- end
133
-
134
- it "should raise error when yaml is invalid" do
135
- lambda { load_yaml %(foo: d\nea5#) }.should raise_error(Rapid::InvalidYamlError)
136
- end
137
-
138
- end
139
-
140
- describe "to_yaml" do
141
-
142
- def to_yaml
143
- @instance_hash.to_yaml
144
- end
145
-
146
- it "should write current settings" do
147
- @instance_hash["name"] = "Dan"
148
- @instance_hash["version"] = "1.0"
149
-
150
- to_yaml.should == %(name: Dan\nversion: "1.0")
151
- end
152
-
153
- it "should handle empty settings" do
154
- to_yaml.should == %()
155
- end
156
-
157
- end
158
-
159
- end
160
-
161
- end