admin_data 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. data/History.txt +221 -0
  2. data/README.textile +21 -0
  3. data/Rakefile +46 -0
  4. data/app/controllers/admin_data/base_controller.rb +114 -0
  5. data/app/controllers/admin_data/diagnostic_controller.rb +28 -0
  6. data/app/controllers/admin_data/feed_controller.rb +17 -0
  7. data/app/controllers/admin_data/main_controller.rb +132 -0
  8. data/app/controllers/admin_data/migration_controller.rb +19 -0
  9. data/app/controllers/admin_data/search_controller.rb +125 -0
  10. data/app/controllers/admin_data/validate_model_controller.rb +106 -0
  11. data/app/views/admin_data/diagnostic/index.html.erb +17 -0
  12. data/app/views/admin_data/diagnostic/missing_index.html.erb +26 -0
  13. data/app/views/admin_data/feed/index.rss.builder +24 -0
  14. data/app/views/admin_data/main/all_models.html.erb +22 -0
  15. data/app/views/admin_data/main/association/_association_info.html.erb +10 -0
  16. data/app/views/admin_data/main/association/_belongs_to_info.html.erb +7 -0
  17. data/app/views/admin_data/main/association/_has_many_info.html.erb +7 -0
  18. data/app/views/admin_data/main/association/_has_one_info.html.erb +6 -0
  19. data/app/views/admin_data/main/edit.html.erb +38 -0
  20. data/app/views/admin_data/main/misc/_form.html.erb +25 -0
  21. data/app/views/admin_data/main/misc/_modify_record.html.erb +22 -0
  22. data/app/views/admin_data/main/new.html.erb +23 -0
  23. data/app/views/admin_data/main/show.html.erb +41 -0
  24. data/app/views/admin_data/main/table_structure.html.erb +55 -0
  25. data/app/views/admin_data/migration/index.html.erb +18 -0
  26. data/app/views/admin_data/migration/jstest.html.erb +51 -0
  27. data/app/views/admin_data/search/_search_base.html.erb +34 -0
  28. data/app/views/admin_data/search/advance_search.html.erb +3 -0
  29. data/app/views/admin_data/search/quick_search.html.erb +6 -0
  30. data/app/views/admin_data/search/search/_advance_search_form.html.erb +48 -0
  31. data/app/views/admin_data/search/search/_errors.html.erb +5 -0
  32. data/app/views/admin_data/search/search/_listing.html.erb +40 -0
  33. data/app/views/admin_data/search/search/_search_form.html.erb +28 -0
  34. data/app/views/admin_data/search/search/_sortby.html.erb +18 -0
  35. data/app/views/admin_data/search/search/_title.html.erb +34 -0
  36. data/app/views/admin_data/shared/_breadcrum.html.erb +10 -0
  37. data/app/views/admin_data/shared/_drop_down_klasses.html.erb +4 -0
  38. data/app/views/admin_data/shared/_flash_message.html.erb +13 -0
  39. data/app/views/admin_data/shared/_header.html.erb +23 -0
  40. data/app/views/admin_data/shared/_powered_by.html.erb +23 -0
  41. data/app/views/admin_data/shared/_secondary_navigation.html.erb +28 -0
  42. data/app/views/admin_data/validate_model/_bad.html.erb +1 -0
  43. data/app/views/admin_data/validate_model/tid.html.erb +2 -0
  44. data/app/views/admin_data/validate_model/validate.html.erb +67 -0
  45. data/app/views/layouts/admin_data.html.erb +60 -0
  46. data/config/routes.rb +34 -0
  47. data/init.rb +1 -0
  48. data/lib/admin_data.rb +34 -0
  49. data/lib/admin_data/chelper.rb +37 -0
  50. data/lib/admin_data/compatibility.rb +7 -0
  51. data/lib/admin_data/helpers.rb +222 -0
  52. data/lib/admin_data/railtie.rb +21 -0
  53. data/lib/admin_data/search.rb +186 -0
  54. data/lib/admin_data/settings.rb +72 -0
  55. data/lib/admin_data/util.rb +237 -0
  56. data/lib/admin_data/version.rb +3 -0
  57. data/lib/admin_data_date_validation.rb +79 -0
  58. data/lib/css/app.css +224 -0
  59. data/lib/css/base.css +1071 -0
  60. data/lib/css/header.css +65 -0
  61. data/lib/css/rounded.css +18 -0
  62. data/lib/css/themes/drastic-dark/style.css +374 -0
  63. data/lib/css/umbrella.css +34 -0
  64. data/lib/css/vendor/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png +0 -0
  65. data/lib/css/vendor/images/ui-bg_dots-small_65_a6a6a6_2x2.png +0 -0
  66. data/lib/css/vendor/images/ui-bg_flat_0_333333_40x100.png +0 -0
  67. data/lib/css/vendor/images/ui-bg_flat_65_ffffff_40x100.png +0 -0
  68. data/lib/css/vendor/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  69. data/lib/css/vendor/images/ui-bg_glass_55_fbf8ee_1x400.png +0 -0
  70. data/lib/css/vendor/images/ui-bg_highlight-hard_100_eeeeee_1x100.png +0 -0
  71. data/lib/css/vendor/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png +0 -0
  72. data/lib/css/vendor/images/ui-bg_highlight-soft_15_cc0000_1x100.png +0 -0
  73. data/lib/css/vendor/images/ui-icons_004276_256x240.png +0 -0
  74. data/lib/css/vendor/images/ui-icons_cc0000_256x240.png +0 -0
  75. data/lib/css/vendor/images/ui-icons_ffffff_256x240.png +0 -0
  76. data/lib/css/vendor/jquery-ui-1.7.2.custom.css +406 -0
  77. data/lib/css/vendor/qunit.css +119 -0
  78. data/lib/js/advance_search/act_on_result.js +47 -0
  79. data/lib/js/advance_search/adv_search.js +46 -0
  80. data/lib/js/advance_search/advance_search.js +60 -0
  81. data/lib/js/advance_search/advance_search_structure.js +79 -0
  82. data/lib/js/advance_search/ajaxify_advance_search.js +28 -0
  83. data/lib/js/advance_search/build_first_row.js +12 -0
  84. data/lib/js/advance_search/event_bindings.js +87 -0
  85. data/lib/js/advance_search/global_ajax_setting.js +10 -0
  86. data/lib/js/advance_search/trigger_submit_on_domready.js +6 -0
  87. data/lib/js/misc/drop_down_change.js +8 -0
  88. data/lib/js/misc/js_util.js +42 -0
  89. data/lib/js/misc/quick_search_input_focus.js +6 -0
  90. data/lib/js/test/act_on_result.js +120 -0
  91. data/lib/js/test/advance_search.js +80 -0
  92. data/lib/js/test/ajaxify_advance_search.js +29 -0
  93. data/lib/js/test/build_first_row.js +10 -0
  94. data/lib/js/test/event_bindings.js +100 -0
  95. data/lib/js/validate_model/ajaxify_form.js +66 -0
  96. data/lib/js/validate_model/select_all.js +15 -0
  97. data/lib/js/vendor/jack.js +903 -0
  98. data/lib/js/vendor/jquery-1.4.1.js +6078 -0
  99. data/lib/js/vendor/jquery-ui-1.7.2.custom.min.js +298 -0
  100. data/lib/js/vendor/jquery.ba-isjquery.js +21 -0
  101. data/lib/js/vendor/jquery.form.js +814 -0
  102. data/lib/js/vendor/jquery.lint.js +604 -0
  103. data/lib/js/vendor/log.js +9 -0
  104. data/lib/js/vendor/qunit.js +1043 -0
  105. data/lib/tasks/admin_data_tasks.rake +7 -0
  106. data/lib/tasks/validate_models_bg.rake +23 -0
  107. data/test/factories/article.rb +9 -0
  108. data/test/factories/car.rb +4 -0
  109. data/test/factories/city.rb +4 -0
  110. data/test/factories/comment.rb +6 -0
  111. data/test/factories/door.rb +4 -0
  112. data/test/factories/engine.rb +4 -0
  113. data/test/functional/base_controller_test.rb +5 -0
  114. data/test/functional/feed_controller_test.rb +34 -0
  115. data/test/functional/main_controller_test.rb +421 -0
  116. data/test/functional/migration_controller_test.rb +30 -0
  117. data/test/functional/routes_test.rb +61 -0
  118. data/test/functional/search_controller_test.rb +814 -0
  119. data/test/helper/view_helper_test.rb +177 -0
  120. data/test/misc_tests/date_validation_test.rb +32 -0
  121. data/test/misc_tests/settings_test.rb +29 -0
  122. data/test/misc_tests/util_test.rb +83 -0
  123. data/test/rails_root/Gemfile +22 -0
  124. data/test/rails_root/Gemfile.lock +101 -0
  125. data/test/rails_root/Rakefile +7 -0
  126. data/test/rails_root/app/controllers/application_controller.rb +3 -0
  127. data/test/rails_root/app/helpers/application_helper.rb +2 -0
  128. data/test/rails_root/app/models/article.rb +25 -0
  129. data/test/rails_root/app/models/city.rb +15 -0
  130. data/test/rails_root/app/models/comment.rb +13 -0
  131. data/test/rails_root/app/models/tech_magazine.rb +2 -0
  132. data/test/rails_root/app/models/vehicle/car.rb +4 -0
  133. data/test/rails_root/app/models/vehicle/door.rb +3 -0
  134. data/test/rails_root/app/models/vehicle/engine.rb +3 -0
  135. data/test/rails_root/app/views/layouts/application.html.erb +14 -0
  136. data/test/rails_root/config.ru +4 -0
  137. data/test/rails_root/config/application.rb +42 -0
  138. data/test/rails_root/config/boot.rb +13 -0
  139. data/test/rails_root/config/database.yml +22 -0
  140. data/test/rails_root/config/environment.rb +5 -0
  141. data/test/rails_root/config/environments/development.rb +22 -0
  142. data/test/rails_root/config/environments/production.rb +49 -0
  143. data/test/rails_root/config/environments/test.rb +35 -0
  144. data/test/rails_root/config/initializers/backtrace_silencers.rb +7 -0
  145. data/test/rails_root/config/initializers/inflections.rb +10 -0
  146. data/test/rails_root/config/initializers/mime_types.rb +5 -0
  147. data/test/rails_root/config/initializers/secret_token.rb +7 -0
  148. data/test/rails_root/config/initializers/session_store.rb +8 -0
  149. data/test/rails_root/config/locales/en.yml +5 -0
  150. data/test/rails_root/config/routes.rb +58 -0
  151. data/test/rails_root/db/migrate/20090809061114_create_tables.rb +70 -0
  152. data/test/rails_root/db/schema.rb +74 -0
  153. data/test/rails_root/db/seeds.rb +7 -0
  154. data/test/rails_root/script/rails +6 -0
  155. data/test/rails_root/test/performance/browsing_test.rb +0 -0
  156. data/test/rails_root/test/test_helper.rb +13 -0
  157. data/test/support/assertions.rb +20 -0
  158. data/test/test_helper.rb +74 -0
  159. metadata +321 -0
@@ -0,0 +1,177 @@
1
+ require "test_helper"
2
+
3
+ class ViewHelperTest < ActionView::TestCase
4
+
5
+ include FlexMock::TestCase
6
+
7
+ self.helper_class = AdminData::Helpers
8
+
9
+ def setup
10
+ @f = flexmock
11
+ end
12
+
13
+ context 'admin_data_form_field_id' do
14
+ context 'for primary key article_id' do
15
+ setup do
16
+ article = Factory(:article)
17
+ col = Article.columns.detect {|col| col.name == 'article_id'}
18
+ @output = admin_data_form_field(Article, article, col, @f)
19
+ end
20
+ should 'have value auto for id' do
21
+ assert_equal "(auto)", @output
22
+ end
23
+ end
24
+
25
+ context 'for primary key id' do
26
+ setup do
27
+ comment = Factory(:comment)
28
+ col = Comment.columns.detect {|col| col.name == 'id'}
29
+ @output = admin_data_form_field(Comment, comment, col, @f)
30
+ end
31
+ should 'have value auto for id' do
32
+ assert_equal "(auto)", @output
33
+ end
34
+ end
35
+
36
+ context 'for text_field' do
37
+ setup do
38
+ article = Factory(:article)
39
+ col = Article.columns.detect {|col| col.name == 'hits_count'}
40
+ @expected = '<input> for hits_count'
41
+ @f.should_receive(:text_field).with('hits_count', {:class => "nice-field", :size => 60}).and_return(@expected)
42
+ @output = admin_data_form_field(Article, article, col, @f)
43
+ end
44
+ should 'have input text' do
45
+ assert_equal @expected, @output
46
+ end
47
+ end
48
+ end
49
+
50
+ context 'for datetime_select' do
51
+ setup do
52
+ col = Article.columns_hash['published_at']
53
+ @article = Factory(:article, :published_at => Time.parse('Aug 31, 1999 1:23:45'))
54
+ initial_dropdowns = '<input type="hidden">for year and <select>s for month and day and <select>s for time'
55
+ @expected_html = '<input type="text" size="4" class="nice-field">for year and <select>s for month and day and <select>s for time'
56
+ flexmock(self).should_receive(:params).and_return({:action => 'edit'})
57
+ @f.should_receive(:datetime_select).with('published_at', {:include_blank => true}).and_return(initial_dropdowns)
58
+ @output = admin_data_form_field(Article, @article, col, @f)
59
+ end
60
+ should 'have expected output' do
61
+ assert_equal @expected_html, @output
62
+ end
63
+ end
64
+
65
+ context 'for date_select' do
66
+ setup do
67
+ col = Article.columns_hash['published_at']
68
+ flexmock(col).should_receive(:type).and_return(:date)
69
+ @article = Factory(:article, :published_at => Date.parse('Aug 31, 1999'))
70
+ initial_dropdowns = '<input type="hidden">for year and <select>s for month and day'
71
+ @expected_html = '<input type="text" size="4" class="nice-field">for year and <select>s for month and day'
72
+ flexmock(self).should_receive(:params).and_return({:action => 'edit'})
73
+ @f.should_receive(:date_select).with('published_at', {:discard_year => true, :include_blank => true}).and_return(initial_dropdowns)
74
+ @output = admin_data_form_field(Article, @article, col, @f)
75
+ end
76
+ should 'have expected value' do
77
+ assert_equal @expected_html, @output
78
+ end
79
+ end
80
+
81
+ context 'for collection_select' do
82
+ setup do
83
+ @article = Factory(:article)
84
+ @comment = Factory(:comment, :article => @article)
85
+ col = Comment.columns.detect {|col| col.name == 'article_id'}
86
+ @expected = '<select> for articles'
87
+ all_articles = flexmock
88
+ flexmock(Article).should_receive(:all).with(:order => "article_id asc").and_return(all_articles)
89
+ @f.should_receive(:collection_select).with('article_id', all_articles, :id, 'article_id', {:include_blank => true} ).and_return(@expected)
90
+ @output = admin_data_form_field(Comment, @comment, col, @f)
91
+ end
92
+ should 'have expected value' do
93
+ assert_equal @expected, @output
94
+ end
95
+ end
96
+
97
+ context 'invoke admin_data_get_value_for_column' do
98
+ context 'for text column' do
99
+ context 'untrucated case' do
100
+ setup do
101
+ column = Article.columns.select {|column| column.name.to_s == 'title'}.first
102
+ @article = Factory(:article)
103
+ @output = admin_data_get_value_for_column(column, @article, {})
104
+ end
105
+ should 'have untruncated title' do
106
+ assert_equal 'this is a dummy title', @output
107
+ end
108
+ end
109
+
110
+ context 'truncated case' do
111
+ setup do
112
+ column = Article.columns.select {|column| column.name.to_s == 'title'}.first
113
+ @article = Factory(:article, :title => 'this is a very very very long long long title')
114
+ options = {}
115
+
116
+ @output = admin_data_get_value_for_column(column,@article,{:limit => 15})
117
+ end
118
+ should 'should have truncated title' do
119
+ assert_equal 'this is a ve...', @output
120
+ end
121
+ end
122
+ end
123
+
124
+ context 'for integer column' do
125
+ setup do
126
+ @article = Factory(:article, :hits_count => 100)
127
+ column = Article.columns.select {|column| column.name.to_s == 'hits_count'}.first
128
+ @output = admin_data_get_value_for_column(column, @article)
129
+ end
130
+ should 'have right value' do
131
+ assert_equal 100, @output
132
+ end
133
+ end
134
+
135
+ context 'for integer column with truncate option should not cause any problem' do
136
+ setup do
137
+ @article = Factory(:article, :hits_count => 100)
138
+ column = Article.columns.select {|column| column.name.to_s == 'hits_count'}.first
139
+ @output = admin_data_get_value_for_column(column, @article, {:limit => 10})
140
+ end
141
+ should 'have right value' do
142
+ assert_equal 100, @output
143
+ end
144
+ end
145
+
146
+ context 'for text column which should raise exception' do
147
+ setup do
148
+ column = Article.columns.select {|column| column.name.to_s == 'title'}.first
149
+ @article = Factory(:article, :title => 'this is a very very very long long long title')
150
+ options = {}
151
+
152
+ #truncate method should raise exception
153
+ flexmock(self).should_receive('truncate').with('any_args').and_raise(Exception)
154
+
155
+ @output = admin_data_get_value_for_column(column,@article,{:limit => 15})
156
+ end
157
+ should 'have rescued message' do
158
+ assert_equal '<actual data is not being shown because truncate method failed.>', @output
159
+ end
160
+ end
161
+
162
+ context 'for text column which is serialized' do
163
+ setup do
164
+ column = Article.columns.select {|column| column.name.to_s == 'data'}.first
165
+ @article = Factory(:article, :data => { :key => 123456789 }.to_yaml)
166
+ options = {}
167
+
168
+ @output = admin_data_get_value_for_column(column,@article,{:limit => 15})
169
+ end
170
+ should 'show inspected value' do
171
+ assert_equal "{:key=>12345...", @output
172
+ end
173
+ end
174
+
175
+ end
176
+
177
+ end
@@ -0,0 +1,32 @@
1
+ require 'test_helper'
2
+ require 'admin_data_date_validation'
3
+
4
+ class AdminDataTest < Test::Unit::TestCase
5
+
6
+ def test_date_validation
7
+
8
+ assert ::AdminDataDateValidation.validate('13-feb-2009')
9
+ assert ::AdminDataDateValidation.validate('13-FEB-2009')
10
+ assert ::AdminDataDateValidation.validate('13-feb -2009') # extra white space should not hurt
11
+
12
+ # only the first three characters of the month should be checked
13
+ assert ::AdminDataDateValidation.validate('13-FEBfoo-2009')
14
+
15
+ assert !::AdminDataDateValidation.validate('13-foo-2009') # month name is wrong
16
+ assert !::AdminDataDateValidation.validate('13 foo 2009') # there must be two occurences of -
17
+ assert !::AdminDataDateValidation.validate('32-jan-2009') # day is wrong
18
+ assert !::AdminDataDateValidation.validate('32-jan- -2009') # there should be only two occurences of -
19
+ assert !::AdminDataDateValidation.validate('32-jan-09') # year must be greater than 1900
20
+ end
21
+
22
+ def test_date_validation_with_operator
23
+ assert ::AdminDataDateValidation.validate_with_operator('> 13-feb-2009')
24
+ assert ::AdminDataDateValidation.validate_with_operator('>= 13-feb-2009')
25
+ assert ::AdminDataDateValidation.validate_with_operator('< 13-feb-2009')
26
+ assert ::AdminDataDateValidation.validate_with_operator('<= 13-feb-2009')
27
+
28
+ assert !::AdminDataDateValidation.validate_with_operator('<=13-feb-2009') # no white space
29
+ assert !::AdminDataDateValidation.validate_with_operator('| 13-feb-2009') # invalid operator
30
+ end
31
+
32
+ end
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+
3
+ class AdminData::AdminDataConfigTest < ActionController::TestCase
4
+ context 'setting configuration parameters' do
5
+ teardown do
6
+ AdminData::Config.initialize_defaults
7
+ end
8
+
9
+ %w(
10
+ find_conditions
11
+ plugin_dir
12
+ will_paginate_per_page
13
+ is_allowed_to_view
14
+ is_allowed_to_update
15
+ ).each do |valid_key|
16
+ should "store #{valid_key} setting" do
17
+ AdminData::Config.set = { valid_key.to_sym => "some value for #{valid_key}" }
18
+ assert_equal "some value for #{valid_key}", AdminData::Config.setting[valid_key.to_sym]
19
+ end
20
+ end
21
+
22
+ context "get an error with a bad key" do
23
+ should "raise error when attempting to set bad key" do
24
+ assert_raises(RuntimeError) { AdminData::Config.set = { :a_bad_key => "some value" }}
25
+ end
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,83 @@
1
+ require 'test_helper'
2
+ require 'admin_data/util'
3
+
4
+ class AdminDataUtilTest < Test::Unit::TestCase
5
+
6
+ context 'has_one' do
7
+ subject { AdminData::Util.has_one_what(Vehicle::Car) }
8
+ setup { @instance = Vehicle::Car.create(:year => 2000, :brand => 'bmw') }
9
+ should 'be engine' do
10
+ assert subject
11
+ assert_equal 1, subject.size
12
+ assert_equal 'engine', subject[0]
13
+ end
14
+ should 'respond_to? has_one' do
15
+ assert @instance.respond_to?(subject[0])
16
+ end
17
+ end
18
+
19
+ context 'columns_order default order' do
20
+ setup do
21
+ AdminData::Config.set = {:columns_order => nil }
22
+ @output = AdminData::Util.columns_order('Article')
23
+ end
24
+ should 'have created_at and updated_at at the very end' do
25
+ assert_equal %w(article_id title body body_html short_desc status published_at approved hits_count
26
+ magazine_type magazine_id data created_at updated_at
27
+ ), @output
28
+ end
29
+ end
30
+
31
+ context 'columns_order custom order' do
32
+ setup do
33
+ AdminData::Config.set = {:columns_order => {'Article' => [:article_id, :body, :published_at] }}
34
+ @output = AdminData::Util.columns_order('Article')
35
+ end
36
+ should 'have right order' do
37
+ assert_equal %w(article_id body published_at title body_html short_desc status approved hits_count
38
+ magazine_type created_at updated_at magazine_id data
39
+ ),
40
+ @output
41
+ end
42
+ end
43
+
44
+ context 'oracle test' do
45
+ setup do
46
+ AdminData::Config.setting.merge!(:adapter_name => 'Oracle')
47
+ @term = Search::Term.new(Article,{:col1 => 'body_html', :col2 => 'contains', :col3 => 'foo'}, 'quick_search')
48
+ end
49
+ teardown do
50
+ AdminData::Config.setting.merge!(:adapter => 'MySQL')
51
+ end
52
+ should 'have proper sql' do
53
+ assert_equal ["upper(articles.body_html) LIKE ?", "%FOO%"], @term.attribute_condition
54
+ end
55
+ end
56
+
57
+ context 'postgresql test' do
58
+ setup do
59
+ AdminData::Config.setting.merge!(:adapter_name => 'PostgreSql')
60
+ @term = Search::Term.new(Article,{:col1 => 'body_html', :col2 => 'contains', :col3 => 'foo'}, 'quick_search')
61
+ end
62
+ teardown do
63
+ AdminData::Config.setting.merge!(:adapter => 'MySQL')
64
+ end
65
+ should 'have proper sql' do
66
+ assert_equal ["articles.body_html ILIKE ?", "%foo%"], @term.attribute_condition
67
+ end
68
+ end
69
+
70
+ context 'mysql test' do
71
+ setup do
72
+ AdminData::Config.setting.merge!(:adapter_name => 'MySQL')
73
+ @term = Search::Term.new(Article,{:col1 => 'body_html', :col2 => 'contains', :col3 => 'foo'}, 'quick_search')
74
+ end
75
+ teardown do
76
+ AdminData::Config.setting.merge!(:adapter => 'MySQL')
77
+ end
78
+ should 'have proper sql' do
79
+ assert_equal ["articles.body_html LIKE ?", "%foo%"], @term.attribute_condition
80
+ end
81
+ end
82
+
83
+ end
@@ -0,0 +1,22 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rails', '3.0.0.rc'
4
+
5
+ # Bundle edge Rails instead:
6
+ # gem 'rails', :git => 'git://github.com/rails/rails.git'
7
+
8
+ gem 'sqlite3-ruby', :require => 'sqlite3'
9
+
10
+ gem 'will_paginate', :git => 'git://github.com/mislav/will_paginate.git', :branch => 'rails3'
11
+
12
+ # Bundle gems for the local environment. Make sure to
13
+ # put test-only gems in this group so their generators
14
+ # and rake tasks are available in development mode:
15
+ group :development, :test do
16
+ gem 'shoulda'
17
+ gem 'factory_girl_rails', :git => 'git://github.com/thoughtbot/factory_girl_rails'
18
+ gem 'flexmock'
19
+ gem 'redgreen'
20
+ gem 'nokogiri'
21
+ gem 'json'
22
+ end
@@ -0,0 +1,101 @@
1
+ GIT
2
+ remote: git://github.com/mislav/will_paginate.git
3
+ revision: 3615938
4
+ branch: rails3
5
+ specs:
6
+ will_paginate (3.0.pre2)
7
+
8
+ GIT
9
+ remote: git://github.com/thoughtbot/factory_girl_rails
10
+ revision: 338105c
11
+ specs:
12
+ factory_girl_rails (1.0)
13
+ factory_girl (~> 1.3)
14
+ rails (>= 3.0.0.beta4)
15
+
16
+ GEM
17
+ remote: http://rubygems.org/
18
+ specs:
19
+ abstract (1.0.0)
20
+ actionmailer (3.0.0.rc)
21
+ actionpack (= 3.0.0.rc)
22
+ mail (~> 2.2.5)
23
+ actionpack (3.0.0.rc)
24
+ activemodel (= 3.0.0.rc)
25
+ activesupport (= 3.0.0.rc)
26
+ builder (~> 2.1.2)
27
+ erubis (~> 2.6.6)
28
+ i18n (~> 0.4.1)
29
+ rack (~> 1.2.1)
30
+ rack-mount (~> 0.6.9)
31
+ rack-test (~> 0.5.4)
32
+ tzinfo (~> 0.3.22)
33
+ activemodel (3.0.0.rc)
34
+ activesupport (= 3.0.0.rc)
35
+ builder (~> 2.1.2)
36
+ i18n (~> 0.4.1)
37
+ activerecord (3.0.0.rc)
38
+ activemodel (= 3.0.0.rc)
39
+ activesupport (= 3.0.0.rc)
40
+ arel (~> 0.4.0)
41
+ tzinfo (~> 0.3.22)
42
+ activeresource (3.0.0.rc)
43
+ activemodel (= 3.0.0.rc)
44
+ activesupport (= 3.0.0.rc)
45
+ activesupport (3.0.0.rc)
46
+ arel (0.4.0)
47
+ activesupport (>= 3.0.0.beta)
48
+ builder (2.1.2)
49
+ erubis (2.6.6)
50
+ abstract (>= 1.0.0)
51
+ factory_girl (1.3.2)
52
+ flexmock (0.8.7)
53
+ i18n (0.4.1)
54
+ json (1.4.6)
55
+ mail (2.2.5)
56
+ activesupport (>= 2.3.6)
57
+ mime-types
58
+ treetop (>= 1.4.5)
59
+ mime-types (1.16)
60
+ nokogiri (1.4.3.1)
61
+ polyglot (0.3.1)
62
+ rack (1.2.1)
63
+ rack-mount (0.6.9)
64
+ rack (>= 1.0.0)
65
+ rack-test (0.5.4)
66
+ rack (>= 1.0)
67
+ rails (3.0.0.rc)
68
+ actionmailer (= 3.0.0.rc)
69
+ actionpack (= 3.0.0.rc)
70
+ activerecord (= 3.0.0.rc)
71
+ activeresource (= 3.0.0.rc)
72
+ activesupport (= 3.0.0.rc)
73
+ bundler (>= 1.0.0.rc.1)
74
+ railties (= 3.0.0.rc)
75
+ railties (3.0.0.rc)
76
+ actionpack (= 3.0.0.rc)
77
+ activesupport (= 3.0.0.rc)
78
+ rake (>= 0.8.3)
79
+ thor (~> 0.14.0)
80
+ rake (0.8.7)
81
+ redgreen (1.2.2)
82
+ shoulda (2.11.3)
83
+ sqlite3-ruby (1.3.1)
84
+ thor (0.14.0)
85
+ treetop (1.4.8)
86
+ polyglot (>= 0.3.1)
87
+ tzinfo (0.3.22)
88
+
89
+ PLATFORMS
90
+ ruby
91
+
92
+ DEPENDENCIES
93
+ factory_girl_rails!
94
+ flexmock
95
+ json
96
+ nokogiri
97
+ rails (= 3.0.0.rc)
98
+ redgreen
99
+ shoulda
100
+ sqlite3-ruby
101
+ will_paginate!