sapling 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/.gitignore +2 -0
  2. data/lib/sapling.rb +1 -0
  3. data/lib/sapling/active_record.rb +32 -10
  4. data/lib/sapling/generators/css_generator.rb +31 -0
  5. data/lib/sapling/memory.rb +14 -7
  6. data/lib/sapling/rails.rb +17 -0
  7. data/lib/sapling/rails/action_controller.rb +23 -0
  8. data/lib/sapling/rails/controllers/sapling_controller.rb +7 -0
  9. data/lib/sapling/rails/railtie.rb +7 -0
  10. data/lib/sapling/rails/view_helpers.rb +22 -0
  11. data/lib/sapling/util.rb +9 -11
  12. data/lib/sapling/version.rb +1 -1
  13. data/rails/init.rb +2 -0
  14. data/sapling.gemspec +4 -3
  15. data/spec/active_record_spec.rb +0 -26
  16. data/spec/css_generator_spec.rb +47 -0
  17. data/spec/memory_feature_spec.rb +2 -2
  18. data/spec/memory_spec.rb +0 -26
  19. data/spec/rails_app/README +243 -0
  20. data/spec/rails_app/Rakefile +10 -0
  21. data/spec/rails_app/app/controllers/application_controller.rb +20 -0
  22. data/spec/rails_app/app/controllers/spaceman_spiffs_controller.rb +90 -0
  23. data/spec/rails_app/app/controllers/user_sessions_controller.rb +14 -0
  24. data/spec/rails_app/app/helpers/application_helper.rb +3 -0
  25. data/spec/rails_app/app/helpers/spaceman_spiffs_helper.rb +2 -0
  26. data/spec/rails_app/app/models/spaceman_spiff.rb +2 -0
  27. data/spec/rails_app/app/models/user.rb +3 -0
  28. data/spec/rails_app/app/views/layouts/spaceman_spiffs.html.erb +18 -0
  29. data/spec/rails_app/app/views/spaceman_spiffs/edit.html.erb +16 -0
  30. data/spec/rails_app/app/views/spaceman_spiffs/index.html.erb +21 -0
  31. data/spec/rails_app/app/views/spaceman_spiffs/multiple_features.html.erb +7 -0
  32. data/spec/rails_app/app/views/spaceman_spiffs/new.html.erb +15 -0
  33. data/spec/rails_app/app/views/spaceman_spiffs/show.html.erb +8 -0
  34. data/spec/rails_app/config/boot.rb +114 -0
  35. data/spec/rails_app/config/database.yml +17 -0
  36. data/spec/rails_app/config/environment.rb +48 -0
  37. data/spec/rails_app/config/environments/development.rb +17 -0
  38. data/spec/rails_app/config/environments/production.rb +28 -0
  39. data/spec/rails_app/config/environments/test.rb +28 -0
  40. data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  41. data/spec/rails_app/config/initializers/cookie_verification_secret.rb +7 -0
  42. data/spec/rails_app/config/initializers/inflections.rb +10 -0
  43. data/spec/rails_app/config/initializers/mime_types.rb +5 -0
  44. data/spec/rails_app/config/initializers/new_rails_defaults.rb +21 -0
  45. data/spec/rails_app/config/initializers/session_store.rb +15 -0
  46. data/spec/rails_app/config/locales/en.yml +5 -0
  47. data/spec/rails_app/config/routes.rb +48 -0
  48. data/spec/rails_app/db/migrate/20111207234232_create_spaceman_spiffs.rb +13 -0
  49. data/spec/rails_app/db/migrate/20111208003900_create_users.rb +13 -0
  50. data/spec/rails_app/db/migrate/20111208004048_add_sapling_settings.rb +13 -0
  51. data/spec/rails_app/db/schema.rb +32 -0
  52. data/spec/rails_app/db/seeds.rb +7 -0
  53. data/spec/rails_app/doc/README_FOR_APP +2 -0
  54. data/spec/rails_app/public/404.html +30 -0
  55. data/spec/rails_app/public/422.html +30 -0
  56. data/spec/rails_app/public/500.html +30 -0
  57. data/spec/rails_app/public/favicon.ico +0 -0
  58. data/spec/rails_app/public/images/rails.png +0 -0
  59. data/spec/rails_app/public/javascripts/application.js +2 -0
  60. data/spec/rails_app/public/javascripts/controls.js +963 -0
  61. data/spec/rails_app/public/javascripts/dragdrop.js +973 -0
  62. data/spec/rails_app/public/javascripts/effects.js +1128 -0
  63. data/spec/rails_app/public/javascripts/prototype.js +4320 -0
  64. data/spec/rails_app/public/robots.txt +5 -0
  65. data/spec/rails_app/public/stylesheets/scaffold.css +54 -0
  66. data/spec/rails_app/script/about +4 -0
  67. data/spec/rails_app/script/console +3 -0
  68. data/spec/rails_app/script/dbconsole +3 -0
  69. data/spec/rails_app/script/destroy +3 -0
  70. data/spec/rails_app/script/generate +3 -0
  71. data/spec/rails_app/script/performance/benchmarker +3 -0
  72. data/spec/rails_app/script/performance/profiler +3 -0
  73. data/spec/rails_app/script/plugin +3 -0
  74. data/spec/rails_app/script/runner +3 -0
  75. data/spec/rails_app/script/server +3 -0
  76. data/spec/rails_app/test/fixtures/sapling_settings.yml +9 -0
  77. data/spec/rails_app/test/fixtures/spaceman_spiffs.yml +7 -0
  78. data/spec/rails_app/test/fixtures/users.yml +7 -0
  79. data/spec/rails_app/test/integration/feature_test.rb +30 -0
  80. data/spec/rails_app/test/performance/browsing_test.rb +9 -0
  81. data/spec/rails_app/test/test_helper.rb +38 -0
  82. data/spec/rails_app/test/unit/helpers/spaceman_spiffs_helper_test.rb +4 -0
  83. data/spec/rails_app/test/unit/spaceman_spiff_test.rb +8 -0
  84. data/spec/rails_app/test/unit/user_test.rb +8 -0
  85. data/spec/sapling_examples.rb +88 -6
  86. metadata +181 -25
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-Agent: *
5
+ # Disallow: /
@@ -0,0 +1,54 @@
1
+ body { background-color: #fff; color: #333; }
2
+
3
+ body, p, ol, ul, td {
4
+ font-family: verdana, arial, helvetica, sans-serif;
5
+ font-size: 13px;
6
+ line-height: 18px;
7
+ }
8
+
9
+ pre {
10
+ background-color: #eee;
11
+ padding: 10px;
12
+ font-size: 11px;
13
+ }
14
+
15
+ a { color: #000; }
16
+ a:visited { color: #666; }
17
+ a:hover { color: #fff; background-color:#000; }
18
+
19
+ .fieldWithErrors {
20
+ padding: 2px;
21
+ background-color: red;
22
+ display: table;
23
+ }
24
+
25
+ #errorExplanation {
26
+ width: 400px;
27
+ border: 2px solid red;
28
+ padding: 7px;
29
+ padding-bottom: 12px;
30
+ margin-bottom: 20px;
31
+ background-color: #f0f0f0;
32
+ }
33
+
34
+ #errorExplanation h2 {
35
+ text-align: left;
36
+ font-weight: bold;
37
+ padding: 5px 5px 5px 15px;
38
+ font-size: 12px;
39
+ margin: -7px;
40
+ background-color: #c00;
41
+ color: #fff;
42
+ }
43
+
44
+ #errorExplanation p {
45
+ color: #333;
46
+ margin-bottom: 0;
47
+ padding: 5px;
48
+ }
49
+
50
+ #errorExplanation ul li {
51
+ font-size: 12px;
52
+ list-style: square;
53
+ }
54
+
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ $LOAD_PATH.unshift "#{RAILTIES_PATH}/builtin/rails_info"
4
+ require 'commands/about'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/console'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/dbconsole'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/destroy'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/generate'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../../config/boot', __FILE__)
3
+ require 'commands/performance/benchmarker'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../../config/boot', __FILE__)
3
+ require 'commands/performance/profiler'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/plugin'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/runner'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/server'
@@ -0,0 +1,9 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ calvin_allowed:
4
+ feature: listing
5
+ user_id: 1
6
+
7
+ hobbes_allowed:
8
+ feature: chat
9
+ user_id: 2
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ name: Calvin
5
+
6
+ two:
7
+ name: Hobbes
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ name: MyString
5
+
6
+ two:
7
+ name: MyString
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ class FeatureTest < ActionController::IntegrationTest
4
+ fixtures :all
5
+
6
+ # Replace this with your real tests.
7
+ test "users can 'log in'" do
8
+ post user_sessions_path, :user_id => 1
9
+ get user_sessions_path
10
+ assert_equal '1', response.body
11
+ end
12
+
13
+ test "listing is enabled for user one" do
14
+ post user_sessions_path, :user_id => 1
15
+ get spaceman_spiffs_path
16
+ assert_response :success
17
+ end
18
+
19
+ test "listing is disabled for user two" do
20
+ post user_sessions_path, :user_id => 2
21
+ get spaceman_spiffs_path
22
+ assert_response :forbidden
23
+ end
24
+
25
+ test "has a feature_on block" do
26
+ # TODO
27
+ end
28
+
29
+
30
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+ require 'performance_test_help'
3
+
4
+ # Profiling results for each test method are written to tmp/performance.
5
+ class BrowsingTest < ActionController::PerformanceTest
6
+ def test_homepage
7
+ get '/'
8
+ end
9
+ end
@@ -0,0 +1,38 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
3
+ require 'test_help'
4
+
5
+ class ActiveSupport::TestCase
6
+ # Transactional fixtures accelerate your tests by wrapping each test method
7
+ # in a transaction that's rolled back on completion. This ensures that the
8
+ # test database remains unchanged so your fixtures don't have to be reloaded
9
+ # between every test method. Fewer database queries means faster tests.
10
+ #
11
+ # Read Mike Clark's excellent walkthrough at
12
+ # http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
13
+ #
14
+ # Every Active Record database supports transactions except MyISAM tables
15
+ # in MySQL. Turn off transactional fixtures in this case; however, if you
16
+ # don't care one way or the other, switching from MyISAM to InnoDB tables
17
+ # is recommended.
18
+ #
19
+ # The only drawback to using transactional fixtures is when you actually
20
+ # need to test transactions. Since your test is bracketed by a transaction,
21
+ # any transactions started in your code will be automatically rolled back.
22
+ self.use_transactional_fixtures = true
23
+
24
+ # Instantiated fixtures are slow, but give you @david where otherwise you
25
+ # would need people(:david). If you don't want to migrate your existing
26
+ # test cases which use the @david style and don't mind the speed hit (each
27
+ # instantiated fixtures translates to a database query per test method),
28
+ # then set this back to true.
29
+ self.use_instantiated_fixtures = false
30
+
31
+ # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
32
+ #
33
+ # Note: You'll currently still have to declare fixtures explicitly in integration tests
34
+ # -- they do not yet inherit this setting
35
+ fixtures :all
36
+
37
+ # Add more helper methods to be used by all tests here...
38
+ end
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class SpacemanSpiffsHelperTest < ActionView::TestCase
4
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class SpacemanSpiffTest < ActiveSupport::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class UserTest < ActiveSupport::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
@@ -4,20 +4,66 @@ shared_examples_for Sapling do
4
4
 
5
5
  describe "features default to being disabled" do
6
6
  it "is not active for a specific user by default" do
7
- @sapling.should_not be_active(:chat, stub(:id => 5))
7
+ @sapling.should_not be_active(:chat, :user => stub(:id => 5))
8
8
  end
9
9
  end
10
10
 
11
+ describe "nothing activated" do
12
+
13
+ it "should not be active without a context or user" do
14
+ @sapling.should_not be_active(:chat)
15
+ end
16
+ end
17
+
18
+
11
19
  describe "activating a percentage" do
12
20
  before do
13
21
  @sapling.activate_percentage(:chat, 20)
14
22
  end
15
23
 
16
24
  it "activates the feature for that percentage of users" do
17
- (1..1000).select { |id| @sapling.active?(:chat, UserMock.new(id)) }.length.should == 200
25
+ (1..1000).select { |id| @sapling.active?(:chat, :user=>UserMock.new(id)) }.length.should == 200
26
+ end
27
+
28
+ it "should not be active without a context or user" do
29
+ @sapling.should_not be_active(:chat)
18
30
  end
31
+
19
32
  end
20
33
 
34
+ describe "activating a 20 percent" do
35
+ before do
36
+ @sapling.activate_percentage(:chat, 20)
37
+ end
38
+
39
+ it "activates the feature for that percentage of users" do
40
+ (1..1000).select { |id| @sapling.active?(:chat, :user=>UserMock.new(id)) }.length.should == 200
41
+ end
42
+
43
+
44
+ it "should not be active even without a context or user" do
45
+ @sapling.should_not be_active(:chat)
46
+ end
47
+
48
+ end
49
+
50
+ describe "activating a 100 percent" do
51
+ before do
52
+ @sapling.activate_percentage(:chat, 100)
53
+ end
54
+
55
+ it "activates the feature for that percentage of users" do
56
+ (1..1000).select { |id| @sapling.active?(:chat, :user=>UserMock.new(id)) }.length.should == 1000
57
+ end
58
+
59
+
60
+ it "should be active even without a context or user" do
61
+ @sapling.should be_active(:chat)
62
+ end
63
+
64
+ end
65
+
66
+
21
67
  describe "deactivating a percentage" do
22
68
  before do
23
69
  @sapling.activate_percentage(:chat, 100)
@@ -25,8 +71,13 @@ shared_examples_for Sapling do
25
71
  end
26
72
 
27
73
  it "becomes inactive for all users" do
28
- @sapling.should_not be_active(:chat, stub(:id => 24))
74
+ @sapling.should_not be_active(:chat, :user => stub(:id => 24))
75
+ end
76
+
77
+ it "should not be active without a context or user" do
78
+ @sapling.should_not be_active(:chat)
29
79
  end
80
+
30
81
  end
31
82
 
32
83
  describe "activating a specific user" do
@@ -35,7 +86,11 @@ shared_examples_for Sapling do
35
86
  end
36
87
 
37
88
  it "activates the feature for that user" do
38
- @sapling.should be_active(:chat, stub(:id => 2))
89
+ @sapling.should be_active(:chat, :user => stub(:id => 2))
90
+ end
91
+
92
+ it "should not be active without a context or user" do
93
+ @sapling.should_not be_active(:chat)
39
94
  end
40
95
  end
41
96
 
@@ -46,7 +101,7 @@ shared_examples_for Sapling do
46
101
  end
47
102
 
48
103
  it "deactivates the feature for that user" do
49
- @sapling.should_not be_active(:chat, stub(:id => 2))
104
+ @sapling.should_not be_active(:chat, :user => stub(:id => 2))
50
105
  end
51
106
  end
52
107
 
@@ -56,10 +111,37 @@ shared_examples_for Sapling do
56
111
  end
57
112
 
58
113
  it "activates a context_id" do
59
- @sapling.should_not be_active(:chat, 60)
114
+ @sapling.should_not be_active(:chat, :context_id => 60)
115
+ end
116
+ end
117
+
118
+ describe "fetching all features" do
119
+ before do
120
+ @sapling.activate_user(:chat, stub(:id => 2))
121
+ @sapling.activate_user(:chat, stub(:id => 3))
122
+ @sapling.activate_user(:pwn, stub(:id => 2))
123
+ end
124
+
125
+ it "returns only two features" do
126
+ @sapling.features.should == [:chat, :pwn]
127
+ end
128
+ end
129
+
130
+ describe "fetching all active features for a user" do
131
+ before do
132
+ @sapling.activate_percentage(:bicycle, 10)
133
+ @sapling.activate_user(:chat, stub(:id => 115))
134
+ @sapling.activate_user(:pwn, stub(:id => 102))
135
+ @sapling.activate_user(:juggle, stub(:id => 115))
136
+ end
137
+
138
+ it "should return only the active features for the specific user" do
139
+ @sapling.active_features(:user => stub(:id => 102)).should == [:bicycle, :pwn]
140
+ @sapling.active_features(:user => stub(:id => 115)).should == [:chat, :juggle]
60
141
  end
61
142
  end
62
143
 
144
+
63
145
  end
64
146
  #
65
147
  #
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sapling
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 0
9
8
  - 1
10
- version: 0.0.1
9
+ - 0
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Shane Brinkman-Davis
@@ -16,59 +16,74 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-12-02 00:00:00 -08:00
19
+ date: 2011-12-13 00:00:00 -08:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
- name: rspec
23
+ name: activerecord
24
24
  prerelease: false
25
25
  requirement: &id001 !ruby/object:Gem::Requirement
26
26
  none: false
27
27
  requirements:
28
- - - ~>
28
+ - - ">"
29
29
  - !ruby/object:Gem::Version
30
- hash: 19
30
+ hash: 5
31
31
  segments:
32
32
  - 2
33
- - 7
34
- - 0
35
- version: 2.7.0
36
- type: :development
33
+ - 3
34
+ version: "2.3"
35
+ type: :runtime
37
36
  version_requirements: *id001
38
37
  - !ruby/object:Gem::Dependency
39
- name: mocha
38
+ name: rspec
40
39
  prerelease: false
41
40
  requirement: &id002 !ruby/object:Gem::Requirement
42
41
  none: false
43
42
  requirements:
44
- - - ">="
43
+ - - ~>
45
44
  - !ruby/object:Gem::Version
46
- hash: 3
45
+ hash: 19
47
46
  segments:
47
+ - 2
48
+ - 7
48
49
  - 0
49
- version: "0"
50
+ version: 2.7.0
50
51
  type: :development
51
52
  version_requirements: *id002
52
53
  - !ruby/object:Gem::Dependency
53
- name: activerecord
54
+ name: rails
54
55
  prerelease: false
55
56
  requirement: &id003 !ruby/object:Gem::Requirement
56
57
  none: false
57
58
  requirements:
58
- - - ~>
59
+ - - "="
59
60
  - !ruby/object:Gem::Version
60
- hash: 1
61
+ hash: 27
61
62
  segments:
63
+ - 2
62
64
  - 3
63
- - 1
64
- - 1
65
- version: 3.1.1
65
+ - 12
66
+ version: 2.3.12
66
67
  type: :development
67
68
  version_requirements: *id003
68
69
  - !ruby/object:Gem::Dependency
69
- name: sqlite3
70
+ name: mocha
70
71
  prerelease: false
71
72
  requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ hash: 3
78
+ segments:
79
+ - 0
80
+ version: "0"
81
+ type: :development
82
+ version_requirements: *id004
83
+ - !ruby/object:Gem::Dependency
84
+ name: sqlite3
85
+ prerelease: false
86
+ requirement: &id005 !ruby/object:Gem::Requirement
72
87
  none: false
73
88
  requirements:
74
89
  - - ~>
@@ -80,8 +95,8 @@ dependencies:
80
95
  - 4
81
96
  version: 1.3.4
82
97
  type: :development
83
- version_requirements: *id004
84
- description: ""
98
+ version_requirements: *id005
99
+ description: Sapling lets you seed your new features to just a few users at a time. You can change which and how many users are seeded for a feature dynamically by updating the database via the Sapling API. Core features are the ability to seed a feature for specific users and/or a percentage of users.
85
100
  email:
86
101
  - shanebdavis@imikimi.com
87
102
  - jason@cumuluscode.com
@@ -102,13 +117,87 @@ files:
102
117
  - lib/sapling/active_record_model.rb
103
118
  - lib/sapling/api.rb
104
119
  - lib/sapling/base.rb
120
+ - lib/sapling/generators/css_generator.rb
105
121
  - lib/sapling/memory.rb
122
+ - lib/sapling/rails.rb
123
+ - lib/sapling/rails/action_controller.rb
124
+ - lib/sapling/rails/controllers/sapling_controller.rb
125
+ - lib/sapling/rails/railtie.rb
126
+ - lib/sapling/rails/view_helpers.rb
106
127
  - lib/sapling/util.rb
107
128
  - lib/sapling/version.rb
129
+ - rails/init.rb
108
130
  - sapling.gemspec
109
131
  - spec/active_record_spec.rb
132
+ - spec/css_generator_spec.rb
110
133
  - spec/memory_feature_spec.rb
111
134
  - spec/memory_spec.rb
135
+ - spec/rails_app/README
136
+ - spec/rails_app/Rakefile
137
+ - spec/rails_app/app/controllers/application_controller.rb
138
+ - spec/rails_app/app/controllers/spaceman_spiffs_controller.rb
139
+ - spec/rails_app/app/controllers/user_sessions_controller.rb
140
+ - spec/rails_app/app/helpers/application_helper.rb
141
+ - spec/rails_app/app/helpers/spaceman_spiffs_helper.rb
142
+ - spec/rails_app/app/models/spaceman_spiff.rb
143
+ - spec/rails_app/app/models/user.rb
144
+ - spec/rails_app/app/views/layouts/spaceman_spiffs.html.erb
145
+ - spec/rails_app/app/views/spaceman_spiffs/edit.html.erb
146
+ - spec/rails_app/app/views/spaceman_spiffs/index.html.erb
147
+ - spec/rails_app/app/views/spaceman_spiffs/multiple_features.html.erb
148
+ - spec/rails_app/app/views/spaceman_spiffs/new.html.erb
149
+ - spec/rails_app/app/views/spaceman_spiffs/show.html.erb
150
+ - spec/rails_app/config/boot.rb
151
+ - spec/rails_app/config/database.yml
152
+ - spec/rails_app/config/environment.rb
153
+ - spec/rails_app/config/environments/development.rb
154
+ - spec/rails_app/config/environments/production.rb
155
+ - spec/rails_app/config/environments/test.rb
156
+ - spec/rails_app/config/initializers/backtrace_silencers.rb
157
+ - spec/rails_app/config/initializers/cookie_verification_secret.rb
158
+ - spec/rails_app/config/initializers/inflections.rb
159
+ - spec/rails_app/config/initializers/mime_types.rb
160
+ - spec/rails_app/config/initializers/new_rails_defaults.rb
161
+ - spec/rails_app/config/initializers/session_store.rb
162
+ - spec/rails_app/config/locales/en.yml
163
+ - spec/rails_app/config/routes.rb
164
+ - spec/rails_app/db/migrate/20111207234232_create_spaceman_spiffs.rb
165
+ - spec/rails_app/db/migrate/20111208003900_create_users.rb
166
+ - spec/rails_app/db/migrate/20111208004048_add_sapling_settings.rb
167
+ - spec/rails_app/db/schema.rb
168
+ - spec/rails_app/db/seeds.rb
169
+ - spec/rails_app/doc/README_FOR_APP
170
+ - spec/rails_app/public/404.html
171
+ - spec/rails_app/public/422.html
172
+ - spec/rails_app/public/500.html
173
+ - spec/rails_app/public/favicon.ico
174
+ - spec/rails_app/public/images/rails.png
175
+ - spec/rails_app/public/javascripts/application.js
176
+ - spec/rails_app/public/javascripts/controls.js
177
+ - spec/rails_app/public/javascripts/dragdrop.js
178
+ - spec/rails_app/public/javascripts/effects.js
179
+ - spec/rails_app/public/javascripts/prototype.js
180
+ - spec/rails_app/public/robots.txt
181
+ - spec/rails_app/public/stylesheets/scaffold.css
182
+ - spec/rails_app/script/about
183
+ - spec/rails_app/script/console
184
+ - spec/rails_app/script/dbconsole
185
+ - spec/rails_app/script/destroy
186
+ - spec/rails_app/script/generate
187
+ - spec/rails_app/script/performance/benchmarker
188
+ - spec/rails_app/script/performance/profiler
189
+ - spec/rails_app/script/plugin
190
+ - spec/rails_app/script/runner
191
+ - spec/rails_app/script/server
192
+ - spec/rails_app/test/fixtures/sapling_settings.yml
193
+ - spec/rails_app/test/fixtures/spaceman_spiffs.yml
194
+ - spec/rails_app/test/fixtures/users.yml
195
+ - spec/rails_app/test/integration/feature_test.rb
196
+ - spec/rails_app/test/performance/browsing_test.rb
197
+ - spec/rails_app/test/test_helper.rb
198
+ - spec/rails_app/test/unit/helpers/spaceman_spiffs_helper_test.rb
199
+ - spec/rails_app/test/unit/spaceman_spiff_test.rb
200
+ - spec/rails_app/test/unit/user_test.rb
112
201
  - spec/sapling_examples.rb
113
202
  - spec/spec.opts
114
203
  - spec/spec_helper.rb
@@ -145,11 +234,78 @@ rubyforge_project: sapling
145
234
  rubygems_version: 1.5.3
146
235
  signing_key:
147
236
  specification_version: 3
148
- summary: A gem expressing if a feature is seeded for a user
237
+ summary: Incrementally roll out your features. Uses ActiveRecord to store configuration and supports client-side roll-out of cached pages.
149
238
  test_files:
150
239
  - spec/active_record_spec.rb
240
+ - spec/css_generator_spec.rb
151
241
  - spec/memory_feature_spec.rb
152
242
  - spec/memory_spec.rb
243
+ - spec/rails_app/README
244
+ - spec/rails_app/Rakefile
245
+ - spec/rails_app/app/controllers/application_controller.rb
246
+ - spec/rails_app/app/controllers/spaceman_spiffs_controller.rb
247
+ - spec/rails_app/app/controllers/user_sessions_controller.rb
248
+ - spec/rails_app/app/helpers/application_helper.rb
249
+ - spec/rails_app/app/helpers/spaceman_spiffs_helper.rb
250
+ - spec/rails_app/app/models/spaceman_spiff.rb
251
+ - spec/rails_app/app/models/user.rb
252
+ - spec/rails_app/app/views/layouts/spaceman_spiffs.html.erb
253
+ - spec/rails_app/app/views/spaceman_spiffs/edit.html.erb
254
+ - spec/rails_app/app/views/spaceman_spiffs/index.html.erb
255
+ - spec/rails_app/app/views/spaceman_spiffs/multiple_features.html.erb
256
+ - spec/rails_app/app/views/spaceman_spiffs/new.html.erb
257
+ - spec/rails_app/app/views/spaceman_spiffs/show.html.erb
258
+ - spec/rails_app/config/boot.rb
259
+ - spec/rails_app/config/database.yml
260
+ - spec/rails_app/config/environment.rb
261
+ - spec/rails_app/config/environments/development.rb
262
+ - spec/rails_app/config/environments/production.rb
263
+ - spec/rails_app/config/environments/test.rb
264
+ - spec/rails_app/config/initializers/backtrace_silencers.rb
265
+ - spec/rails_app/config/initializers/cookie_verification_secret.rb
266
+ - spec/rails_app/config/initializers/inflections.rb
267
+ - spec/rails_app/config/initializers/mime_types.rb
268
+ - spec/rails_app/config/initializers/new_rails_defaults.rb
269
+ - spec/rails_app/config/initializers/session_store.rb
270
+ - spec/rails_app/config/locales/en.yml
271
+ - spec/rails_app/config/routes.rb
272
+ - spec/rails_app/db/migrate/20111207234232_create_spaceman_spiffs.rb
273
+ - spec/rails_app/db/migrate/20111208003900_create_users.rb
274
+ - spec/rails_app/db/migrate/20111208004048_add_sapling_settings.rb
275
+ - spec/rails_app/db/schema.rb
276
+ - spec/rails_app/db/seeds.rb
277
+ - spec/rails_app/doc/README_FOR_APP
278
+ - spec/rails_app/public/404.html
279
+ - spec/rails_app/public/422.html
280
+ - spec/rails_app/public/500.html
281
+ - spec/rails_app/public/favicon.ico
282
+ - spec/rails_app/public/images/rails.png
283
+ - spec/rails_app/public/javascripts/application.js
284
+ - spec/rails_app/public/javascripts/controls.js
285
+ - spec/rails_app/public/javascripts/dragdrop.js
286
+ - spec/rails_app/public/javascripts/effects.js
287
+ - spec/rails_app/public/javascripts/prototype.js
288
+ - spec/rails_app/public/robots.txt
289
+ - spec/rails_app/public/stylesheets/scaffold.css
290
+ - spec/rails_app/script/about
291
+ - spec/rails_app/script/console
292
+ - spec/rails_app/script/dbconsole
293
+ - spec/rails_app/script/destroy
294
+ - spec/rails_app/script/generate
295
+ - spec/rails_app/script/performance/benchmarker
296
+ - spec/rails_app/script/performance/profiler
297
+ - spec/rails_app/script/plugin
298
+ - spec/rails_app/script/runner
299
+ - spec/rails_app/script/server
300
+ - spec/rails_app/test/fixtures/sapling_settings.yml
301
+ - spec/rails_app/test/fixtures/spaceman_spiffs.yml
302
+ - spec/rails_app/test/fixtures/users.yml
303
+ - spec/rails_app/test/integration/feature_test.rb
304
+ - spec/rails_app/test/performance/browsing_test.rb
305
+ - spec/rails_app/test/test_helper.rb
306
+ - spec/rails_app/test/unit/helpers/spaceman_spiffs_helper_test.rb
307
+ - spec/rails_app/test/unit/spaceman_spiff_test.rb
308
+ - spec/rails_app/test/unit/user_test.rb
153
309
  - spec/sapling_examples.rb
154
310
  - spec/spec.opts
155
311
  - spec/spec_helper.rb