flip 0.0.1.alpha2 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -108,5 +108,5 @@ A dashboard allows you to view the current state of the feature set, and flip an
108
108
 
109
109
 
110
110
  ----
111
- Copyright © 2011 Paul Annesley and Learnable Pty Ltd, [MIT Licence](http://www.opensource.org/licenses/mit-license.php).
112
-
111
+ Created by Paul Annesley
112
+ Copyright © 2011 Learnable Pty Ltd, [MIT Licence](http://www.opensource.org/licenses/mit-license.php).
data/TODO ADDED
@@ -0,0 +1,3 @@
1
+ FlipHelper view/controller helper.
2
+ Optimize DatabaseStrategy.
3
+ CookieStrategy::Loader before/after, not around.
@@ -0,0 +1,64 @@
1
+ /* Flip */
2
+
3
+ .flip {
4
+ margin: 2em 1em 4em 1em;
5
+ }
6
+
7
+ .flip th.name, .flip th.description, .flip th.status {
8
+ visibility: hidden;
9
+ }
10
+
11
+ .flip td.name {
12
+ font-family: Monaco, sans-serif;
13
+ font-weight: bold;
14
+ }
15
+
16
+ .flip td.name, .flip td.description {
17
+ vertical-align: top;
18
+ }
19
+
20
+ .flip th {
21
+ font-weight: normal;
22
+ text-align: left;
23
+ vertical-align: top;
24
+ }
25
+
26
+ .flip th .description {
27
+ font-weight: normal;
28
+ display: block;
29
+ font-size: 80%;
30
+ }
31
+
32
+ .flip th, .flip td {
33
+ padding: 5px 10px;
34
+ width: 160px;
35
+ height: 40px;
36
+ }
37
+
38
+ .flip td.off, .flip td.on, .flip td.pass {
39
+ text-align: center;
40
+ text-transform: capitalize;
41
+ }
42
+
43
+ .flip td.off {
44
+ background-color: #fbb;
45
+ }
46
+
47
+ .flip td.on {
48
+ background-color: #cfc;
49
+ }
50
+
51
+ .flip td.pass {
52
+ background-color: #eef;
53
+ }
54
+
55
+ .flip form {
56
+ display: inline;
57
+ }
58
+
59
+ .flip form input[type=submit] {
60
+ font-size: 80%;
61
+ padding: 2px 5px;
62
+ margin: 0;
63
+ }
64
+
@@ -0,0 +1,47 @@
1
+ module Flip
2
+ class FeaturesController < ApplicationController
3
+
4
+ def index
5
+ @p = FeaturesPresenter.new(FeatureSet.instance)
6
+ end
7
+
8
+ class FeaturesPresenter
9
+
10
+ include Flip::Engine.routes.url_helpers
11
+
12
+ def initialize(feature_set)
13
+ @feature_set = feature_set
14
+ end
15
+
16
+ def strategies
17
+ @feature_set.strategies
18
+ end
19
+
20
+ def definitions
21
+ @feature_set.definitions
22
+ end
23
+
24
+ def status(definition)
25
+ @feature_set.on?(definition.key) ? "on" : "off"
26
+ end
27
+
28
+ def default_status(definition)
29
+ @feature_set.default_for(definition) ? "on" : "off"
30
+ end
31
+
32
+ def strategy_status(strategy, definition)
33
+ if strategy.knows? definition
34
+ strategy.on?(definition) ? "on" : "off"
35
+ end
36
+ end
37
+
38
+ def switch_url(strategy, definition)
39
+ feature_strategy_path \
40
+ definition.key,
41
+ strategy.name.underscore
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,31 @@
1
+ module Flip
2
+ class StrategiesController < ApplicationController
3
+
4
+ include Flip::Engine.routes.url_helpers
5
+
6
+ def update
7
+ strategy.switch! feature_key, turn_on?
8
+ redirect_to features_url
9
+ end
10
+
11
+ def destroy
12
+ strategy.delete! feature_key
13
+ redirect_to features_url
14
+ end
15
+
16
+ private
17
+
18
+ def turn_on?
19
+ params[:commit] == "Switch On"
20
+ end
21
+
22
+ def feature_key
23
+ params[:feature_id].to_sym
24
+ end
25
+
26
+ def strategy
27
+ FeatureSet.instance.strategy(params[:id])
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ # Access to feature-flipping configuration.
2
+ module FlipHelper
3
+
4
+ # Whether the given feature is switched on
5
+ def feature?(key)
6
+ Flip.on? key
7
+ end
8
+
9
+ end
@@ -0,0 +1,60 @@
1
+ <h1>Feature Flippers</h1>
2
+
3
+ <table class="flip">
4
+ <thead>
5
+ <th class="name">Feature Name</th>
6
+ <th class="description">Description</th>
7
+ <th class="status">Status</th>
8
+ <% @p.strategies.each do |strategy| %>
9
+ <th>
10
+ <%= strategy.name %>
11
+ <span class="description"><%= strategy.description %></span>
12
+ </th>
13
+ <% end %>
14
+ <th>
15
+ Default
16
+ <span class="description">The system default when no strategies match.</span>
17
+ </th>
18
+ </thead>
19
+ <tbody>
20
+ <% @p.definitions.each do |definition| %>
21
+ <tr>
22
+ <td class="name"><%= definition.name %></td>
23
+
24
+ <td class="description"><%= definition.description %></td>
25
+
26
+ <%= content_tag :td, class: @p.status(definition) do %>
27
+ <%= @p.status definition %>
28
+ <% end %>
29
+
30
+ <% @p.strategies.each do |strategy| %>
31
+ <%= content_tag :td, class: @p.strategy_status(strategy, definition) || "pass" do %>
32
+ <%= @p.strategy_status strategy, definition %>
33
+
34
+ <% if strategy.switchable? %>
35
+ <%= form_tag(@p.switch_url(strategy, definition), method: :put) do %>
36
+ <% unless @p.strategy_status(strategy, definition) == "on" %>
37
+ <%= submit_tag "Switch On" %>
38
+ <% end %>
39
+ <% unless @p.strategy_status(strategy, definition) == "off" %>
40
+ <%= submit_tag "Switch Off" %>
41
+ <% end %>
42
+ <% end %>
43
+ <% unless @p.strategy_status(strategy, definition).blank? %>
44
+ <%= form_tag(@p.switch_url(strategy, definition), method: :delete) do %>
45
+ <%= submit_tag "Delete" %>
46
+ <% end %>
47
+ <% end %>
48
+ <% end %>
49
+
50
+ <% end %>
51
+ <% end %>
52
+
53
+ <%= content_tag :td, class: @p.default_status(definition) do %>
54
+ <%= @p.default_status definition %>
55
+ <% end %>
56
+
57
+ </tr>
58
+ <% end %>
59
+ </tbody>
60
+ </table>
data/config/routes.rb ADDED
@@ -0,0 +1,14 @@
1
+ Flip::Engine.routes.draw do
2
+
3
+ scope module: "Flip" do
4
+
5
+ resources :features, path: "", only: [ :index ] do
6
+
7
+ resources :strategies,
8
+ only: [ :update, :destroy ]
9
+
10
+ end
11
+
12
+ end
13
+
14
+ end
data/lib/flip/engine.rb CHANGED
@@ -1,4 +1,9 @@
1
1
  module Flip
2
2
  class Engine < ::Rails::Engine
3
+
4
+ initializer "flip.blarg" do
5
+ ActionController::Base.send(:include, Flip::CookieStrategy::Loader)
6
+ end
7
+
3
8
  end
4
9
  end
data/lib/flip/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Flip
2
- VERSION = "0.0.1.alpha2"
2
+ VERSION = "0.0.1"
3
3
  end
@@ -0,0 +1,9 @@
1
+ class Flip::InstallGenerator < Rails::Generators::Base
2
+
3
+ def invoke_generators
4
+ %w{ model migration routes }.each do |name|
5
+ generate "flip:#{name}"
6
+ end
7
+ end
8
+
9
+ end
@@ -1,4 +1,4 @@
1
- class Feature
1
+ class Feature < ActiveRecord::Base
2
2
  extend Flip::Declarable
3
3
 
4
4
  strategy Flip::CookieStrategy
metadata CHANGED
@@ -1,20 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flip
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.alpha2
5
- prerelease: 6
4
+ version: 0.0.1
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Paul Annesley
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-05-29 00:00:00.000000000 +10:00
13
- default_executable:
12
+ date: 2011-11-10 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: activesupport
17
- requirement: &2153453820 !ruby/object:Gem::Requirement
16
+ requirement: &70108786050000 !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ~>
@@ -22,10 +21,10 @@ dependencies:
22
21
  version: '3.0'
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *2153453820
24
+ version_requirements: *70108786050000
26
25
  - !ruby/object:Gem::Dependency
27
26
  name: i18n
28
- requirement: &2153451180 !ruby/object:Gem::Requirement
27
+ requirement: &70108786049300 !ruby/object:Gem::Requirement
29
28
  none: false
30
29
  requirements:
31
30
  - - ! '>='
@@ -33,10 +32,10 @@ dependencies:
33
32
  version: '0'
34
33
  type: :runtime
35
34
  prerelease: false
36
- version_requirements: *2153451180
35
+ version_requirements: *70108786049300
37
36
  - !ruby/object:Gem::Dependency
38
37
  name: rspec
39
- requirement: &2153445440 !ruby/object:Gem::Requirement
38
+ requirement: &70108786048500 !ruby/object:Gem::Requirement
40
39
  none: false
41
40
  requirements:
42
41
  - - ~>
@@ -44,10 +43,10 @@ dependencies:
44
43
  version: '2.5'
45
44
  type: :development
46
45
  prerelease: false
47
- version_requirements: *2153445440
46
+ version_requirements: *70108786048500
48
47
  - !ruby/object:Gem::Dependency
49
48
  name: rake
50
- requirement: &2153437540 !ruby/object:Gem::Requirement
49
+ requirement: &70108786048060 !ruby/object:Gem::Requirement
51
50
  none: false
52
51
  requirements:
53
52
  - - ! '>='
@@ -55,7 +54,7 @@ dependencies:
55
54
  version: '0'
56
55
  type: :development
57
56
  prerelease: false
58
- version_requirements: *2153437540
57
+ version_requirements: *70108786048060
59
58
  description: Declarative API for specifying features, switchable in declaration, database
60
59
  and cookies.
61
60
  email:
@@ -68,6 +67,13 @@ files:
68
67
  - Gemfile
69
68
  - README.md
70
69
  - Rakefile
70
+ - TODO
71
+ - app/assets/stylesheets/flip.css
72
+ - app/controllers/flip/features_controller.rb
73
+ - app/controllers/flip/strategies_controller.rb
74
+ - app/helpers/flip_helper.rb
75
+ - app/views/flip/features/index.html.erb
76
+ - config/routes.rb
71
77
  - flip.gemspec
72
78
  - lib/flip.rb
73
79
  - lib/flip/abstract_strategy.rb
@@ -81,6 +87,7 @@ files:
81
87
  - lib/flip/facade.rb
82
88
  - lib/flip/feature_set.rb
83
89
  - lib/flip/version.rb
90
+ - lib/generators/flip/install/install_generator.rb
84
91
  - lib/generators/flip/migration/USAGE
85
92
  - lib/generators/flip/migration/migration_generator.rb
86
93
  - lib/generators/flip/migration/templates/create_features.rb
@@ -99,7 +106,6 @@ files:
99
106
  - spec/feature_set_spec.rb
100
107
  - spec/flip_spec.rb
101
108
  - spec/spec_helper.rb
102
- has_rdoc: true
103
109
  homepage: https://github.com/pda/flip
104
110
  licenses: []
105
111
  post_install_message:
@@ -115,12 +121,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
121
  required_rubygems_version: !ruby/object:Gem::Requirement
116
122
  none: false
117
123
  requirements:
118
- - - ! '>'
124
+ - - ! '>='
119
125
  - !ruby/object:Gem::Version
120
- version: 1.3.1
126
+ version: '0'
121
127
  requirements: []
122
128
  rubyforge_project: flip
123
- rubygems_version: 1.5.2
129
+ rubygems_version: 1.8.11
124
130
  signing_key:
125
131
  specification_version: 3
126
132
  summary: A feature flipper for Rails web applications.