blue_print 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dac49db02726e3eb81813a54cc21dcb925c0fdc7
4
- data.tar.gz: 94fa55109ad2e66a624696f8c71b6c135e95cc79
3
+ metadata.gz: 206433cbd4ea20e4889db2b3925b82d6f133bd21
4
+ data.tar.gz: 37a77da96f4fd80e0646e084cc640c93530dbd60
5
5
  SHA512:
6
- metadata.gz: e70beb4dc39b6ac98e9e4c8400e7c531b116b3a66bae91d7d6514a3c4a75cb66eabf46ff0c6d4dcdbce2a066caad103c8c5aa5a28ed2a8e827533b9514f453ee
7
- data.tar.gz: 15922fb424ff0b7dd63e423b6677fca54e565c734f179a975864a33a53dd4588d6af9597274a5fb134f329ae8e31a7861916f5c3561da9cc4746302ff90d34c2
6
+ metadata.gz: 2a94144f0ef54288803e77e932a9dc42e4bbcf621af214a4cb3a7d52c8108119758efe47107603d656a56e3d8ce65d6977ec4e5273b1ffa86e9d420859aacc89
7
+ data.tar.gz: 4aa19df93eb03d52a7ad5f17a214310339ac9f74fa0da8d65e30a2fe4bb9fce1e2857285fb37468b8dda7bc84576800c232a367ffa8ee87be2aefcf9d87d3dec
data/README.md CHANGED
@@ -1,23 +1,170 @@
1
1
  # BluePrint
2
2
 
3
- [![Build Status](https://travis-ci.org/magnet-inc/blue_print.png?branch=master)](https://travis-ci.org/magnet-inc/blue_print) [![Coverage Status](https://coveralls.io/repos/magnet-inc/blue_print/badge.png)](https://coveralls.io/r/magnet-inc/blue_print) [![Code Climate](https://codeclimate.com/github/magnet-inc/blue_print.png)](https://codeclimate.com/github/magnet-inc/blue_print)
3
+ [![Gem Version](https://badge.fury.io/rb/blue_print.png)](http://badge.fury.io/rb/blue_print)
4
+ [![Build Status](https://travis-ci.org/magnet-inc/blue_print.png?branch=master)](https://travis-ci.org/magnet-inc/blue_print)
5
+ [![Coverage Status](https://coveralls.io/repos/magnet-inc/blue_print/badge.png)](https://coveralls.io/r/magnet-inc/blue_print)
6
+ [![Code Climate](https://codeclimate.com/github/magnet-inc/blue_print.png)](https://codeclimate.com/github/magnet-inc/blue_print)
4
7
 
5
- The behavior switching framework for Rails
8
+ The behavior switching framework. inspired by [DCI](http://en.wikipedia.org/wiki/Data,_context_and_interaction).
6
9
 
7
10
  ## Requirements
8
11
 
9
12
  - __Ruby__ >= _2.0.0_
10
- - __Rails__ >= _3.1.0_
13
+ - Tested ruby version:
14
+ - 2.0.0
15
+ - 2.1.0
16
+ - 2.1.1
17
+ - head
11
18
 
12
19
  ## Installation
13
20
 
14
21
  Add this line to your application's Gemfile:
15
22
 
16
- gem 'blue_print', '~> 0.0.1'
23
+ ```ruby
24
+ gem 'blue_print', '~> 1.2.0'
25
+ ```
17
26
 
18
27
  ## Usage
19
28
 
20
- TODO: Write usage instructions here
29
+ ### Integration
30
+
31
+ BluePrint provides some integrations. Now supported libraries:
32
+
33
+ - [Ruby on Rails](http://rubyonrails.org/) >= 3.1
34
+ - [Grape](http://intridea.github.io/grape/)
35
+ - [Draper](https://github.com/drapergem/draper)
36
+ - [RSpec](https://github.com/rspec)
37
+
38
+ ### Rails Generators
39
+
40
+ BluePrint provides a generator to create templates of a context and behaviros.
41
+
42
+ ```bash
43
+ $ rails generate blue_print staff user:staff_user
44
+ create app/blue_prints/staff_context.rb
45
+ create app/blue_prints/staff_context/staff_user.rb
46
+ invoke rspec
47
+ create spec/blue_prints/staff_context_spec.rb
48
+ create spec/blue_prints/staff_context/staff_user_spec.rb
49
+ ```
50
+
51
+ ### Contexts
52
+
53
+ Contexts inherit from `BluePrint::Context`, live in your `app/blue_prints` directory.
54
+
55
+ #### active_if
56
+
57
+ This block is used to decide if this context active or not. `env` is the `BluePrint.env`. `self` is passed via `BluePrint::Environment#context`. By default, this is set as `active_if { false }`.
58
+
59
+ ```ruby
60
+ class StaffContext < BluePrint::Context
61
+ active_if do |env|
62
+ current_user.try(:staff?)
63
+ end
64
+ end
65
+ ```
66
+
67
+ And you can define named active if:
68
+
69
+ ```ruby
70
+ # lib/active_ifs/staff.rb
71
+ BluePrint::ActiveIf.new(:staff) do |env|
72
+ current_user.try(:staff?)
73
+ end
74
+
75
+ # app/blue_prints/staff_context.rb
76
+ class StaffContext < BluePrint::Context
77
+ active_if :staff
78
+ end
79
+ ```
80
+
81
+ #### Casting
82
+
83
+ Contexts has casting. This is used to decide classes cast as behaviors if this context active.
84
+
85
+ ```ruby
86
+ class StaffContext < BluePrint::Context
87
+ cast ::User, as: [StaffUser]
88
+ end
89
+
90
+ StaffContext.casting
91
+ # =>
92
+ # {
93
+ # User => [ StaffUser ]
94
+ # }
95
+ ```
96
+
97
+ ### Behaviors
98
+
99
+ Behaviors extended by `BluePrint::Behavior`, live in your `app/blue_prints/{context}` directory.
100
+
101
+ ```ruby
102
+ # app/blue_prints/staff_context/staff_user.rb
103
+ module StaffContext::StaffUser
104
+ extend BluePrint::Behavior
105
+ end
106
+ ```
107
+
108
+ #### Methods
109
+
110
+ Behaviors can have some methods.
111
+
112
+ ```ruby
113
+ # app/blue_prints/staff_context/staff_user.rb
114
+ module StaffContext::StaffUser
115
+ extend BluePrint::Behavior
116
+
117
+ def user_name
118
+ "staff"
119
+ end
120
+ end
121
+
122
+ # app/models/user.rb
123
+ class User < ActiveRecord::Base
124
+ def user_name
125
+ "#{name} san"
126
+ end
127
+ end
128
+
129
+ user = User.new(name: "Magnet")
130
+ user.user_name # => "Magnet san"
131
+ within_context_of(StaffContext) do
132
+ user.user_name # => "staff"
133
+ end
134
+ ```
135
+
136
+ #### Class Methods
137
+
138
+ Behaviors can have some class methods.
139
+
140
+ ```ruby
141
+ # app/blue_prints/staff_context/staff_user.rb
142
+ module StaffContext::StaffUser
143
+ extend BluePrint::Behavior
144
+
145
+ module ClassMethods
146
+ def find(id)
147
+ where(id: id, staff: true).first!
148
+ end
149
+ end
150
+ end
151
+
152
+ # app/models/user.rb
153
+ class User < ActiveRecord::Base
154
+ end
155
+
156
+ user = User.create(staff: false)
157
+ User.find(user.id) == user # => true
158
+ within_context_of(StaffContext) do
159
+ User.find(user.id) # => raise ActiveRecord::NotFound
160
+ end
161
+ ```
162
+
163
+ ### Helper
164
+
165
+ `BluePrint::Helper` provides `#within_context_of` method.
166
+
167
+ This module includes automatically to some classes. see [lib/blue_print/integration](https://github.com/magnet-inc/blue_print/tree/master/lib/blue_print/integration).
21
168
 
22
169
  ## Contributing
23
170
 
data/Rakefile CHANGED
@@ -1 +1,47 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+
3
+ desc 'Take benchmark'
4
+ task :benchmark do
5
+ require File.expand_path('../benchmark/pure', __FILE__)
6
+ require File.expand_path('../benchmark/with_blue_print', __FILE__)
7
+ require File.expand_path('../benchmark/with_extend', __FILE__)
8
+
9
+ result = {
10
+ ruby: {
11
+ version: RUBY_VERSION,
12
+ platform: RUBY_PLATFORM
13
+ },
14
+ benchmark_iteration: BENCHMARK_ITERATION,
15
+ method_call_iteration: NUM_ITERATION,
16
+ benchmarks: {
17
+ pure: PURE_RESULT,
18
+ blue_print: BLUE_PRINT_RESULT,
19
+ extend: EXTEND_RESULT
20
+ }
21
+ }
22
+
23
+ result[:benchmarks].each_pair do |label, scores|
24
+ puts "#{label}:"
25
+ totals = scores.map(&:total)
26
+ avg = totals.inject(&:+).to_f / totals.size
27
+ puts " min: #{totals.min.round(3)} max: #{totals.max.round(3)} avg: #{avg.round(3)}"
28
+ end
29
+ end
30
+
31
+ namespace :profile do
32
+ PROFILES = Dir['profile/*.rb'].map {|f| File.basename(f, '.rb') }
33
+
34
+ PROFILES.each do |profile|
35
+ desc "take #{profile} profile"
36
+ task profile do
37
+ require File.expand_path("../profile/#{profile}", __FILE__)
38
+ end
39
+ end
40
+
41
+ desc 'take all profiles'
42
+ task :all do
43
+ PROFILES.each do |profile|
44
+ Rake::Task["profile:#{profile}"].invoke
45
+ end
46
+ end
47
+ end
data/benchmark/pure.rb ADDED
@@ -0,0 +1,68 @@
1
+ require 'active_support/core_ext/integer/inflections'
2
+ require 'ruby-progressbar'
3
+ require 'benchmark'
4
+
5
+ LABEL_WIDTH = 10
6
+ BENCHMARK_ITERATION = 100
7
+ NUM_ITERATION = 100000
8
+
9
+ class Model
10
+ def self.active?
11
+ @active
12
+ end
13
+
14
+ def self.activate!
15
+ @active = true
16
+ end
17
+
18
+ def self.deactivate!
19
+ @active = false
20
+ end
21
+
22
+ def name
23
+ if self.class.active?
24
+ :pure
25
+ else
26
+ :pure
27
+ end
28
+ end
29
+ end
30
+
31
+ class NoEffect
32
+ def name
33
+ :no_effect
34
+ end
35
+ end
36
+
37
+ model = Model.new
38
+
39
+ PURE_RESULT = []
40
+ progress = ProgressBar.create(
41
+ title: model.name.to_s.ljust(LABEL_WIDTH),
42
+ total: BENCHMARK_ITERATION
43
+ )
44
+ GC.start
45
+ BENCHMARK_ITERATION.times do |n|
46
+ n += 1
47
+
48
+ PURE_RESULT.push(
49
+ Benchmark.measure("#{n}#{n.ordinal}") do
50
+ Model.activate!
51
+
52
+ NUM_ITERATION.times do
53
+ Model.new.name
54
+ NoEffect.new.name
55
+ end
56
+
57
+ Model.deactivate!
58
+
59
+ NUM_ITERATION.times do
60
+ Model.new.name
61
+ NoEffect.new.name
62
+ end
63
+ end
64
+ )
65
+
66
+ progress.increment
67
+ end
68
+ progress.finish
@@ -0,0 +1,57 @@
1
+ require 'blue_print'
2
+ require File.expand_path('../pure', __FILE__)
3
+
4
+ BluePrint.env = BluePrint::Environment.new(nil)
5
+
6
+ class Model
7
+ def name
8
+ :pure
9
+ end
10
+ end
11
+
12
+ class BenchmarkContext < BluePrint::Context
13
+ activate!
14
+
15
+ module BenchmarkModel
16
+ extend BluePrint::Behavior
17
+
18
+ def name
19
+ :blue_print
20
+ end
21
+ end
22
+
23
+ cast Model, as: [BenchmarkModel]
24
+ end
25
+
26
+ model = Model.new
27
+
28
+ BLUE_PRINT_RESULT = []
29
+ progress = ProgressBar.create(
30
+ title: model.name.to_s.ljust(LABEL_WIDTH),
31
+ total: BENCHMARK_ITERATION
32
+ )
33
+ GC.start
34
+ BENCHMARK_ITERATION.times do |n|
35
+ n += 1
36
+
37
+ BLUE_PRINT_RESULT.push(
38
+ Benchmark.measure("#{n}#{n.ordinal}") do
39
+ BenchmarkContext.activate!
40
+
41
+ NUM_ITERATION.times do
42
+ Model.new.name
43
+ NoEffect.new.name
44
+ end
45
+
46
+ BenchmarkContext.deactivate!
47
+
48
+ NUM_ITERATION.times do
49
+ Model.new.name
50
+ NoEffect.new.name
51
+ end
52
+ end
53
+ )
54
+
55
+ progress.increment
56
+ end
57
+ progress.finish
@@ -0,0 +1,42 @@
1
+ require File.expand_path('../pure', __FILE__)
2
+
3
+ class Model
4
+ def name
5
+ :pure
6
+ end
7
+ end
8
+
9
+ module ExtendedUser
10
+ def name
11
+ :extended
12
+ end
13
+ end
14
+
15
+ model = Model.new.extend(ExtendedUser)
16
+
17
+ EXTEND_RESULT = []
18
+ progress = ProgressBar.create(
19
+ title: model.name.to_s.ljust(LABEL_WIDTH),
20
+ total: BENCHMARK_ITERATION
21
+ )
22
+ GC.start
23
+ BENCHMARK_ITERATION.times do |n|
24
+ n += 1
25
+
26
+ EXTEND_RESULT.push(
27
+ Benchmark.measure("#{n}#{n.ordinal}") do
28
+ NUM_ITERATION.times do
29
+ Model.new.extend(ExtendedUser).name
30
+ NoEffect.new.name
31
+ end
32
+
33
+ NUM_ITERATION.times do
34
+ Model.new.name
35
+ NoEffect.new.name
36
+ end
37
+ end
38
+ )
39
+
40
+ progress.increment
41
+ end
42
+ progress.finish
data/blue_print.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = BluePrint::VERSION
9
9
  spec.authors = ['Sho Kusano']
10
10
  spec.email = ['rosylilly@aduca.org']
11
- spec.summary = %q{The behavior switching framework for Rails}
11
+ spec.summary = %q{The behavior switching framework}
12
12
  spec.homepage = 'http://magnet-inc.github.io/blue_print'
13
13
  spec.license = 'MIT'
14
14
 
@@ -30,8 +30,9 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency 'coveralls'
31
31
  spec.add_development_dependency 'draper'
32
32
  spec.add_development_dependency 'grape'
33
+ spec.add_development_dependency 'ruby-progressbar'
34
+ spec.add_development_dependency 'ruby-prof'
33
35
 
34
36
  spec.add_dependency 'activesupport'
35
- spec.add_dependency 'hashie'
36
37
  spec.add_dependency 'thread-parent'
37
38
  end
@@ -1,3 +1,5 @@
1
+ require 'active_support/core_ext/object/try'
2
+ require 'active_support/core_ext/string/inflections'
1
3
  require 'blue_print'
2
4
  require 'blue_print/helper'
3
5
 
@@ -47,11 +49,14 @@ module BluePrint::Behavior
47
49
 
48
50
  def define_safe_method(target, punctuation, method_name)
49
51
  alias_method("#{target}_with_#{behavior_name}#{punctuation}", method_name)
52
+ remove_method(method_name)
50
53
 
51
54
  module_eval <<-EOC
52
55
  def #{method_name}(*args)
53
- within_context_of(#{context}, proc { super(*args) }) do
56
+ if #{context}.active?
54
57
  #{target}_with_#{behavior_name}#{punctuation}(*args)
58
+ else
59
+ super(*args)
55
60
  end
56
61
  end
57
62
  EOC
@@ -67,6 +72,8 @@ module BluePrint::Behavior
67
72
  punctuation = Regexp.last_match ? Regexp.last_match[1] : ''
68
73
 
69
74
  define_safe_method(aliased_target, punctuation, method_name)
75
+
76
+ context.try(:reaction!)
70
77
  @ignore_added_hook = false
71
78
  end
72
79
  end
@@ -27,20 +27,25 @@ class BluePrint::Context
27
27
  end
28
28
 
29
29
  def self.active?
30
- return BluePrint.env[context_name] if BluePrint.env.key?(context_name)
31
-
32
- action!
33
-
34
- BluePrint.env[context_name] =
30
+ BluePrint.env.fetch(context_name) do
35
31
  !!active_ifs.inject(active_ifs.first.try(:active?)) do |memo, active_if|
36
32
  memo && active_if.active?
37
33
  end
34
+ end
38
35
  end
39
36
 
40
37
  def self.deactive?
41
38
  !active?
42
39
  end
43
40
 
41
+ def self.activate!
42
+ BluePrint.env[context_name] = true
43
+ end
44
+
45
+ def self.deactivate!
46
+ BluePrint.env[context_name] = false
47
+ end
48
+
44
49
  def self.casting
45
50
  @casting ||= Hash.new { |casting, klass| casting[klass] = [] }
46
51
  end
@@ -49,6 +54,8 @@ class BluePrint::Context
49
54
  as = [as] unless as.kind_of?(Array)
50
55
  as.map! { |role| role.is_a?(Module) ? role : role.to_s.safe_constantize }
51
56
  casting[actor] = casting[actor] | as
57
+
58
+ reaction!
52
59
  end
53
60
 
54
61
  def self.action!
@@ -62,4 +69,9 @@ class BluePrint::Context
62
69
 
63
70
  @acted = true
64
71
  end
72
+
73
+ def self.reaction!
74
+ @acted = false
75
+ action!
76
+ end
65
77
  end
@@ -1,9 +1,8 @@
1
- require 'hashie'
2
1
  require 'blue_print'
3
2
 
4
- class BluePrint::Environment < Hashie::Mash
3
+ class BluePrint::Environment < Hash
5
4
  def initialize(context, default = nil)
6
- super({}, default)
5
+ super(default)
7
6
  @context = context
8
7
  end
9
8
 
@@ -5,6 +5,10 @@ module BluePrint::Integration::RSpec
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
+ before(:each) do
9
+ BluePrint.env = BluePrint::Environment.new(self)
10
+ end
11
+
8
12
  after(:each) do
9
13
  BluePrint.clear!
10
14
  end
@@ -1,3 +1,3 @@
1
1
  module BluePrint
2
- VERSION = '1.2.0'
2
+ VERSION = '1.3.0'
3
3
  end
@@ -2,10 +2,10 @@ require 'spec_helper'
2
2
 
3
3
  describe <%= class_name %>Context do
4
4
  context 'in active' do
5
- before { described_class.stub(active?: true) }
5
+ before { described_class.activate! }
6
6
  end
7
7
 
8
8
  context 'in deactive' do
9
- before { described_class.stub(active?: false) }
9
+ before { described_class.deactivate! }
10
10
  end
11
11
  end
@@ -0,0 +1,39 @@
1
+ require 'blue_print'
2
+ require 'ruby-prof'
3
+
4
+ BluePrint.env = BluePrint::Environment.new({})
5
+
6
+ class Base
7
+ def name
8
+ :base
9
+ end
10
+ end
11
+
12
+ class ProfileContext < BluePrint::Context
13
+ module Extended
14
+ def name
15
+ :extended
16
+ end
17
+ end
18
+
19
+ cast Base, as: Extended
20
+ end
21
+
22
+ ITERATION = 100000
23
+
24
+ RubyProf.start
25
+
26
+ ProfileContext.activate!
27
+ ITERATION.times do
28
+ Base.new.name
29
+ end
30
+
31
+ ProfileContext.deactivate!
32
+ ITERATION.times do
33
+ Base.new.name
34
+ end
35
+
36
+ result = RubyProf.stop
37
+
38
+ printer = RubyProf::FlatPrinter.new(result)
39
+ printer.print(STDOUT)
@@ -1,10 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- module TestContext
4
- def self.active?
5
- true
6
- end
7
-
3
+ class TestContext < BluePrint::Context
8
4
  module TestBehavior
9
5
  extend BluePrint::Behavior
10
6
 
@@ -60,6 +56,8 @@ describe BluePrint::Behavior do
60
56
  end
61
57
  let(:target) { target_class.new }
62
58
 
59
+ before { TestContext.activate! }
60
+
63
61
  shared_examples 'as behavior' do
64
62
  describe '#context_name' do
65
63
  subject { behavior.context_name }
@@ -52,10 +52,6 @@ describe BluePrint::Context do
52
52
 
53
53
  subject { context.active? }
54
54
 
55
- before do
56
- BluePrint.env = BluePrint::Environment.new(self)
57
- end
58
-
59
55
  context 'with always actives' do
60
56
  before do
61
57
  context.active_if(always_active, always_active)
@@ -103,6 +99,24 @@ describe BluePrint::Context do
103
99
  end
104
100
  end
105
101
 
102
+ describe '#activate!' do
103
+ before do
104
+ context.active_if { false }
105
+ context.activate!
106
+ end
107
+
108
+ it { should be_active }
109
+ end
110
+
111
+ describe '#deactivate!' do
112
+ before do
113
+ context.active_if { true }
114
+ context.deactivate!
115
+ end
116
+
117
+ it { should be_deactive }
118
+ end
119
+
106
120
  describe '#cast' do
107
121
  let(:klass) { Class.new }
108
122
  let(:role) { Module.new }
@@ -124,8 +138,6 @@ describe BluePrint::Context do
124
138
 
125
139
  before do
126
140
  context.cast(klass, as: role)
127
- context.instance_variable_set(:@acted, false)
128
- context.action!
129
141
  end
130
142
 
131
143
  it 'be act role' do
@@ -4,13 +4,13 @@ describe BluePrint::Environment do
4
4
  let(:context) { double(a: 1) }
5
5
  subject(:env) { described_class.new(context) }
6
6
 
7
- describe '#with' do
7
+ describe '#within' do
8
8
  it 'keeps scope' do
9
9
  b = 2
10
- env.rspec = self
11
- env.with do |env|
12
- env.rspec.expect(a).to env.rspec.eq(1)
13
- env.rspec.expect(b).to env.rspec.eq(2)
10
+ env[:rspec] = self
11
+ env.within do |env|
12
+ env[:rspec].expect(a).to env[:rspec].eq(1)
13
+ env[:rspec].expect(b).to env[:rspec].eq(2)
14
14
  end
15
15
  end
16
16
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blue_print
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sho Kusano
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-15 00:00:00.000000000 Z
11
+ date: 2014-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -193,13 +193,13 @@ dependencies:
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
195
  - !ruby/object:Gem::Dependency
196
- name: activesupport
196
+ name: ruby-progressbar
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
199
  - - ">="
200
200
  - !ruby/object:Gem::Version
201
201
  version: '0'
202
- type: :runtime
202
+ type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
@@ -207,7 +207,21 @@ dependencies:
207
207
  - !ruby/object:Gem::Version
208
208
  version: '0'
209
209
  - !ruby/object:Gem::Dependency
210
- name: hashie
210
+ name: ruby-prof
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: activesupport
211
225
  requirement: !ruby/object:Gem::Requirement
212
226
  requirements:
213
227
  - - ">="
@@ -248,6 +262,9 @@ files:
248
262
  - LICENSE.txt
249
263
  - README.md
250
264
  - Rakefile
265
+ - benchmark/pure.rb
266
+ - benchmark/with_blue_print.rb
267
+ - benchmark/with_extend.rb
251
268
  - blue_print.gemspec
252
269
  - gemfiles/rails-3.x.gemfile
253
270
  - gemfiles/rails-4.x.gemfile
@@ -278,6 +295,7 @@ files:
278
295
  - lib/generators/rspec/blue_print_generator.rb
279
296
  - lib/generators/rspec/templates/context_spec.rb
280
297
  - lib/generators/rspec/templates/role_spec.rb
298
+ - profile/method_call.rb
281
299
  - spec/apis/application_api_spec.rb
282
300
  - spec/dummy/.gitignore
283
301
  - spec/dummy/Gemfile
@@ -359,7 +377,7 @@ rubyforge_project:
359
377
  rubygems_version: 2.2.2
360
378
  signing_key:
361
379
  specification_version: 4
362
- summary: The behavior switching framework for Rails
380
+ summary: The behavior switching framework
363
381
  test_files:
364
382
  - spec/apis/application_api_spec.rb
365
383
  - spec/dummy/.gitignore