sapling 0.0.1 → 0.1.0

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 (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