orange-core 0.5.3

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 (72) hide show
  1. data/README.markdown +145 -0
  2. data/lib/orange-core.rb +8 -0
  3. data/lib/orange-core/application.rb +132 -0
  4. data/lib/orange-core/assets/css/exceptions.css +50 -0
  5. data/lib/orange-core/assets/js/exceptions.js +44 -0
  6. data/lib/orange-core/carton.rb +178 -0
  7. data/lib/orange-core/core.rb +266 -0
  8. data/lib/orange-core/magick.rb +270 -0
  9. data/lib/orange-core/middleware/base.rb +96 -0
  10. data/lib/orange-core/middleware/database.rb +45 -0
  11. data/lib/orange-core/middleware/four_oh_four.rb +45 -0
  12. data/lib/orange-core/middleware/globals.rb +17 -0
  13. data/lib/orange-core/middleware/loader.rb +13 -0
  14. data/lib/orange-core/middleware/rerouter.rb +53 -0
  15. data/lib/orange-core/middleware/restful_router.rb +99 -0
  16. data/lib/orange-core/middleware/route_context.rb +39 -0
  17. data/lib/orange-core/middleware/route_site.rb +51 -0
  18. data/lib/orange-core/middleware/show_exceptions.rb +80 -0
  19. data/lib/orange-core/middleware/static.rb +67 -0
  20. data/lib/orange-core/middleware/static_file.rb +32 -0
  21. data/lib/orange-core/middleware/template.rb +60 -0
  22. data/lib/orange-core/packet.rb +232 -0
  23. data/lib/orange-core/plugin.rb +172 -0
  24. data/lib/orange-core/resource.rb +96 -0
  25. data/lib/orange-core/resources/mapper.rb +36 -0
  26. data/lib/orange-core/resources/model_resource.rb +228 -0
  27. data/lib/orange-core/resources/not_found.rb +10 -0
  28. data/lib/orange-core/resources/page_parts.rb +68 -0
  29. data/lib/orange-core/resources/parser.rb +113 -0
  30. data/lib/orange-core/resources/routable_resource.rb +16 -0
  31. data/lib/orange-core/resources/scaffold.rb +106 -0
  32. data/lib/orange-core/stack.rb +226 -0
  33. data/lib/orange-core/templates/exceptions.haml +111 -0
  34. data/lib/orange-core/views/default_resource/create.haml +4 -0
  35. data/lib/orange-core/views/default_resource/edit.haml +9 -0
  36. data/lib/orange-core/views/default_resource/list.haml +10 -0
  37. data/lib/orange-core/views/default_resource/show.haml +4 -0
  38. data/lib/orange-core/views/default_resource/table_row.haml +7 -0
  39. data/lib/orange-core/views/not_found/404.haml +2 -0
  40. data/spec/orange-core/application_spec.rb +183 -0
  41. data/spec/orange-core/carton_spec.rb +136 -0
  42. data/spec/orange-core/core_spec.rb +248 -0
  43. data/spec/orange-core/magick_spec.rb +96 -0
  44. data/spec/orange-core/middleware/base_spec.rb +38 -0
  45. data/spec/orange-core/middleware/globals_spec.rb +3 -0
  46. data/spec/orange-core/middleware/rerouter_spec.rb +3 -0
  47. data/spec/orange-core/middleware/restful_router_spec.rb +3 -0
  48. data/spec/orange-core/middleware/route_context_spec.rb +3 -0
  49. data/spec/orange-core/middleware/route_site_spec.rb +3 -0
  50. data/spec/orange-core/middleware/show_exceptions_spec.rb +3 -0
  51. data/spec/orange-core/middleware/static_file_spec.rb +3 -0
  52. data/spec/orange-core/middleware/static_spec.rb +3 -0
  53. data/spec/orange-core/mock/mock_app.rb +16 -0
  54. data/spec/orange-core/mock/mock_carton.rb +43 -0
  55. data/spec/orange-core/mock/mock_core.rb +2 -0
  56. data/spec/orange-core/mock/mock_middleware.rb +25 -0
  57. data/spec/orange-core/mock/mock_mixins.rb +19 -0
  58. data/spec/orange-core/mock/mock_model_resource.rb +47 -0
  59. data/spec/orange-core/mock/mock_pulp.rb +24 -0
  60. data/spec/orange-core/mock/mock_resource.rb +26 -0
  61. data/spec/orange-core/mock/mock_router.rb +10 -0
  62. data/spec/orange-core/orange_spec.rb +19 -0
  63. data/spec/orange-core/packet_spec.rb +203 -0
  64. data/spec/orange-core/resource_spec.rb +96 -0
  65. data/spec/orange-core/resources/mapper_spec.rb +5 -0
  66. data/spec/orange-core/resources/model_resource_spec.rb +246 -0
  67. data/spec/orange-core/resources/parser_spec.rb +5 -0
  68. data/spec/orange-core/resources/routable_resource_spec.rb +5 -0
  69. data/spec/orange-core/spec_helper.rb +53 -0
  70. data/spec/orange-core/stack_spec.rb +232 -0
  71. data/spec/stats.rb +182 -0
  72. metadata +227 -0
data/spec/stats.rb ADDED
@@ -0,0 +1,182 @@
1
+
2
+
3
+ class CodeStatistics #:nodoc:
4
+
5
+ TEST_TYPES = %w(Units Functionals Unit\ tests Functional\ tests Integration\ tests)
6
+
7
+ def initialize(*pairs)
8
+ @pairs = pairs
9
+ @statistics = calculate_statistics
10
+ @total = calculate_total if pairs.length > 1
11
+ end
12
+
13
+ def to_s
14
+ print_header
15
+ @pairs.each { |pair| print_line(pair.first, @statistics[pair.first]) }
16
+ print_splitter
17
+
18
+ if @total
19
+ print_line("Total", @total)
20
+ print_splitter
21
+ end
22
+
23
+ print_code_test_stats
24
+ end
25
+
26
+ private
27
+ def calculate_statistics
28
+ @pairs.inject({}) { |stats, pair| stats[pair.first] = calculate_directory_statistics(pair.last); stats }
29
+ end
30
+
31
+ def calculate_directory_statistics(directory, pattern = /.*\.rb$/)
32
+ stats = { "lines" => 0, "codelines" => 0, "classes" => 0, "methods" => 0 }
33
+
34
+ Dir.foreach(directory) do |file_name|
35
+ if File.stat(directory + "/" + file_name).directory? and (/^\./ !~ file_name)
36
+ newstats = calculate_directory_statistics(directory + "/" + file_name, pattern)
37
+ stats.each { |k, v| stats[k] += newstats[k] }
38
+ end
39
+
40
+ next unless file_name =~ pattern
41
+
42
+ f = File.open(directory + "/" + file_name)
43
+
44
+ while line = f.gets
45
+ stats["lines"] += 1
46
+ stats["classes"] += 1 if line =~ /class [A-Z]/
47
+ stats["methods"] += 1 if line =~ /def [a-z]/
48
+ stats["codelines"] += 1 unless line =~ /^\s*$/ || line =~ /^\s*#/
49
+ end
50
+ end
51
+
52
+ stats
53
+ end
54
+
55
+ def calculate_total
56
+ total = { "lines" => 0, "codelines" => 0, "classes" => 0, "methods" => 0 }
57
+ @statistics.each_value { |pair| pair.each { |k, v| total[k] += v } }
58
+ total
59
+ end
60
+
61
+ def calculate_code
62
+ code_loc = 0
63
+ @statistics.each { |k, v| code_loc += v['codelines'] unless TEST_TYPES.include? k }
64
+ code_loc
65
+ end
66
+
67
+ def calculate_tests
68
+ test_loc = 0
69
+ @statistics.each { |k, v| test_loc += v['codelines'] if TEST_TYPES.include? k }
70
+ test_loc
71
+ end
72
+
73
+ def print_header
74
+ print_splitter
75
+ puts "| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |"
76
+ print_splitter
77
+ end
78
+
79
+ def print_splitter
80
+ puts "+----------------------+-------+-------+---------+---------+-----+-------+"
81
+ end
82
+
83
+ def print_line(name, statistics)
84
+ m_over_c = (statistics["methods"] / statistics["classes"]) rescue m_over_c = 0
85
+ loc_over_m = (statistics["codelines"] / statistics["methods"]) - 2 rescue loc_over_m = 0
86
+
87
+ start = if TEST_TYPES.include? name
88
+ "| #{name.ljust(20)} "
89
+ else
90
+ "| #{name.ljust(20)} "
91
+ end
92
+
93
+ puts start +
94
+ "| #{statistics["lines"].to_s.rjust(5)} " +
95
+ "| #{statistics["codelines"].to_s.rjust(5)} " +
96
+ "| #{statistics["classes"].to_s.rjust(7)} " +
97
+ "| #{statistics["methods"].to_s.rjust(7)} " +
98
+ "| #{m_over_c.to_s.rjust(3)} " +
99
+ "| #{loc_over_m.to_s.rjust(5)} |"
100
+ end
101
+
102
+ def print_code_test_stats
103
+ code = calculate_code
104
+ tests = calculate_tests
105
+
106
+ puts " Code LOC: #{code} Test LOC: #{tests} Code to Test Ratio: 1:#{sprintf("%.1f", tests.to_f/code)}"
107
+ puts ""
108
+ end
109
+ end
110
+
111
+ class SpecStatistics < CodeStatistics
112
+
113
+ TEST_TYPES << "Specs"
114
+
115
+ private
116
+ def calculate_directory_statistics(directory, pattern = /.*\.rb$/)
117
+ stats = { "lines" => 0, "codelines" => 0, "classes" => 0, "methods" => 0, "specs" => 0, "behaviors" => 0 }
118
+
119
+
120
+ Dir.foreach(directory) do |file_name|
121
+ if File.stat(directory + "/" + file_name).directory? and (/^\./ !~ file_name)
122
+ newstats = calculate_directory_statistics(directory + "/" + file_name, pattern)
123
+ stats.each { |k, v| stats[k] += newstats[k] }
124
+ end
125
+
126
+ next unless file_name =~ pattern
127
+
128
+ f = File.open(directory + "/" + file_name)
129
+
130
+ while line = f.gets
131
+ stats["lines"] += 1
132
+ stats["classes"] += 1 if line =~ /class [A-Z]/
133
+ stats["methods"] += 1 if line =~ /def [a-z]/
134
+ stats["specs"] += 1 if line.strip =~ /^it.*(do|\{)$/
135
+ stats["behaviors"] += 1 if line =~ /describe.*(do|\{)$/
136
+ stats["codelines"] += 1 unless line =~ /^\s*$/ || line =~ /^\s*#/
137
+ end
138
+ end
139
+
140
+ stats
141
+ end
142
+
143
+ def calculate_total
144
+ total = { "lines" => 0, "codelines" => 0, "classes" => 0, "methods" => 0, "specs" => 0, "behaviors" => 0 }
145
+ @statistics.each_value { |pair| pair.each { |k, v| total[k] += v } }
146
+ total
147
+ end
148
+
149
+ def print_header
150
+ print_splitter
151
+ puts "| Name | Lines | LOC | Classes | Methods | Behaviors | Specifications | M/C | LOC/M | S/B |"
152
+ print_splitter
153
+ end
154
+
155
+ def print_splitter
156
+ puts "+----------------------+-------+-------+---------+---------+-----------+----------------+-----+-------+-----+"
157
+ end
158
+
159
+ def print_line(name, statistics)
160
+ m_over_c = (statistics["methods"] / statistics["classes"]) rescue m_over_c = 0
161
+ loc_over_m = (statistics["codelines"] / statistics["methods"]) - 2 rescue loc_over_m = 0
162
+
163
+ s_over_b = (statistics["specs"] / statistics["behaviors"]) rescue 0
164
+
165
+ start = if TEST_TYPES.include? name
166
+ "| #{name.ljust(20)} "
167
+ else
168
+ "| #{name.ljust(20)} "
169
+ end
170
+
171
+ puts start +
172
+ "| #{statistics["lines"].to_s.rjust(5)} " +
173
+ "| #{statistics["codelines"].to_s.rjust(5)} " +
174
+ "| #{statistics["classes"].to_s.rjust(7)} " +
175
+ "| #{statistics["methods"].to_s.rjust(7)} " +
176
+ "| #{statistics["behaviors"].to_s.rjust(10)}" +
177
+ "| #{statistics["specs"].to_s.rjust(15)}" +
178
+ "| #{m_over_c.to_s.rjust(3)} " +
179
+ "| #{loc_over_m.to_s.rjust(6)}" +
180
+ "| #{s_over_b.to_s.rjust(3)} |"
181
+ end
182
+ end
metadata ADDED
@@ -0,0 +1,227 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: orange-core
3
+ version: !ruby/object:Gem::Version
4
+ hash: 13
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 5
9
+ - 3
10
+ version: 0.5.3
11
+ platform: ruby
12
+ authors:
13
+ - David Haslem
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-07-06 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rack
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 21
30
+ segments:
31
+ - 1
32
+ - 0
33
+ - 1
34
+ version: 1.0.1
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: haml
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 29
46
+ segments:
47
+ - 2
48
+ - 2
49
+ - 13
50
+ version: 2.2.13
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: rspec
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 3
62
+ segments:
63
+ - 0
64
+ version: "0"
65
+ type: :development
66
+ version_requirements: *id003
67
+ - !ruby/object:Gem::Dependency
68
+ name: rack-test
69
+ prerelease: false
70
+ requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ hash: 3
76
+ segments:
77
+ - 0
78
+ version: "0"
79
+ type: :development
80
+ version_requirements: *id004
81
+ description: Orange is a Ruby framework for building managed websites with code as simple as Sinatra
82
+ email: therabidbanana@gmail.com
83
+ executables: []
84
+
85
+ extensions: []
86
+
87
+ extra_rdoc_files:
88
+ - README.markdown
89
+ files:
90
+ - lib/orange-core.rb
91
+ - lib/orange-core/application.rb
92
+ - lib/orange-core/assets/css/exceptions.css
93
+ - lib/orange-core/assets/js/exceptions.js
94
+ - lib/orange-core/carton.rb
95
+ - lib/orange-core/core.rb
96
+ - lib/orange-core/magick.rb
97
+ - lib/orange-core/middleware/base.rb
98
+ - lib/orange-core/middleware/database.rb
99
+ - lib/orange-core/middleware/four_oh_four.rb
100
+ - lib/orange-core/middleware/globals.rb
101
+ - lib/orange-core/middleware/loader.rb
102
+ - lib/orange-core/middleware/rerouter.rb
103
+ - lib/orange-core/middleware/restful_router.rb
104
+ - lib/orange-core/middleware/route_context.rb
105
+ - lib/orange-core/middleware/route_site.rb
106
+ - lib/orange-core/middleware/show_exceptions.rb
107
+ - lib/orange-core/middleware/static.rb
108
+ - lib/orange-core/middleware/static_file.rb
109
+ - lib/orange-core/middleware/template.rb
110
+ - lib/orange-core/packet.rb
111
+ - lib/orange-core/plugin.rb
112
+ - lib/orange-core/resource.rb
113
+ - lib/orange-core/resources/mapper.rb
114
+ - lib/orange-core/resources/model_resource.rb
115
+ - lib/orange-core/resources/not_found.rb
116
+ - lib/orange-core/resources/page_parts.rb
117
+ - lib/orange-core/resources/parser.rb
118
+ - lib/orange-core/resources/routable_resource.rb
119
+ - lib/orange-core/resources/scaffold.rb
120
+ - lib/orange-core/stack.rb
121
+ - lib/orange-core/templates/exceptions.haml
122
+ - lib/orange-core/views/default_resource/create.haml
123
+ - lib/orange-core/views/default_resource/edit.haml
124
+ - lib/orange-core/views/default_resource/list.haml
125
+ - lib/orange-core/views/default_resource/show.haml
126
+ - lib/orange-core/views/default_resource/table_row.haml
127
+ - lib/orange-core/views/not_found/404.haml
128
+ - README.markdown
129
+ - spec/orange-core/application_spec.rb
130
+ - spec/orange-core/carton_spec.rb
131
+ - spec/orange-core/core_spec.rb
132
+ - spec/orange-core/magick_spec.rb
133
+ - spec/orange-core/middleware/base_spec.rb
134
+ - spec/orange-core/middleware/globals_spec.rb
135
+ - spec/orange-core/middleware/rerouter_spec.rb
136
+ - spec/orange-core/middleware/restful_router_spec.rb
137
+ - spec/orange-core/middleware/route_context_spec.rb
138
+ - spec/orange-core/middleware/route_site_spec.rb
139
+ - spec/orange-core/middleware/show_exceptions_spec.rb
140
+ - spec/orange-core/middleware/static_file_spec.rb
141
+ - spec/orange-core/middleware/static_spec.rb
142
+ - spec/orange-core/mock/mock_app.rb
143
+ - spec/orange-core/mock/mock_carton.rb
144
+ - spec/orange-core/mock/mock_core.rb
145
+ - spec/orange-core/mock/mock_middleware.rb
146
+ - spec/orange-core/mock/mock_mixins.rb
147
+ - spec/orange-core/mock/mock_model_resource.rb
148
+ - spec/orange-core/mock/mock_pulp.rb
149
+ - spec/orange-core/mock/mock_resource.rb
150
+ - spec/orange-core/mock/mock_router.rb
151
+ - spec/orange-core/orange_spec.rb
152
+ - spec/orange-core/packet_spec.rb
153
+ - spec/orange-core/resource_spec.rb
154
+ - spec/orange-core/resources/mapper_spec.rb
155
+ - spec/orange-core/resources/model_resource_spec.rb
156
+ - spec/orange-core/resources/parser_spec.rb
157
+ - spec/orange-core/resources/routable_resource_spec.rb
158
+ - spec/orange-core/spec_helper.rb
159
+ - spec/orange-core/stack_spec.rb
160
+ - spec/stats.rb
161
+ has_rdoc: true
162
+ homepage: http://github.com/therabidbanana/orange-core
163
+ licenses: []
164
+
165
+ post_install_message:
166
+ rdoc_options:
167
+ - --charset=UTF-8
168
+ require_paths:
169
+ - lib
170
+ required_ruby_version: !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ hash: 3
176
+ segments:
177
+ - 0
178
+ version: "0"
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
+ none: false
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ hash: 3
185
+ segments:
186
+ - 0
187
+ version: "0"
188
+ requirements: []
189
+
190
+ rubyforge_project:
191
+ rubygems_version: 1.3.7
192
+ signing_key:
193
+ specification_version: 3
194
+ summary: Middle ground between Sinatra and Rails
195
+ test_files:
196
+ - spec/orange-core/application_spec.rb
197
+ - spec/orange-core/carton_spec.rb
198
+ - spec/orange-core/core_spec.rb
199
+ - spec/orange-core/magick_spec.rb
200
+ - spec/orange-core/middleware/base_spec.rb
201
+ - spec/orange-core/middleware/globals_spec.rb
202
+ - spec/orange-core/middleware/rerouter_spec.rb
203
+ - spec/orange-core/middleware/restful_router_spec.rb
204
+ - spec/orange-core/middleware/route_context_spec.rb
205
+ - spec/orange-core/middleware/route_site_spec.rb
206
+ - spec/orange-core/middleware/show_exceptions_spec.rb
207
+ - spec/orange-core/middleware/static_file_spec.rb
208
+ - spec/orange-core/middleware/static_spec.rb
209
+ - spec/orange-core/mock/mock_app.rb
210
+ - spec/orange-core/mock/mock_carton.rb
211
+ - spec/orange-core/mock/mock_core.rb
212
+ - spec/orange-core/mock/mock_middleware.rb
213
+ - spec/orange-core/mock/mock_mixins.rb
214
+ - spec/orange-core/mock/mock_model_resource.rb
215
+ - spec/orange-core/mock/mock_pulp.rb
216
+ - spec/orange-core/mock/mock_resource.rb
217
+ - spec/orange-core/mock/mock_router.rb
218
+ - spec/orange-core/orange_spec.rb
219
+ - spec/orange-core/packet_spec.rb
220
+ - spec/orange-core/resource_spec.rb
221
+ - spec/orange-core/resources/mapper_spec.rb
222
+ - spec/orange-core/resources/model_resource_spec.rb
223
+ - spec/orange-core/resources/parser_spec.rb
224
+ - spec/orange-core/resources/routable_resource_spec.rb
225
+ - spec/orange-core/spec_helper.rb
226
+ - spec/orange-core/stack_spec.rb
227
+ - spec/stats.rb