blueprints 0.9.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile +14 -1
  3. data/README.rdoc +3 -173
  4. data/Rakefile +32 -15
  5. data/blueprints.gemspec +2 -16
  6. data/lib/blueprints.rb +17 -10
  7. data/lib/blueprints/blueprint.rb +85 -41
  8. data/lib/blueprints/blueprint_name_proxy.rb +34 -0
  9. data/lib/blueprints/buildable.rb +53 -26
  10. data/lib/blueprints/context.rb +8 -0
  11. data/lib/blueprints/extensions.rb +22 -4
  12. data/lib/blueprints/extensions/rspec.rb +28 -14
  13. data/lib/blueprints/helper.rb +17 -9
  14. data/lib/blueprints/namespace.rb +20 -14
  15. data/lib/blueprints/railtie.rb +3 -0
  16. data/lib/blueprints/root_namespace.rb +16 -23
  17. data/lib/blueprints/version.rb +1 -1
  18. data/lib/generators/blueprints/model/model_generator.rb +29 -0
  19. data/spec/blueprints_spec.rb +18 -1
  20. data/spec/support/active_record/initializer.rb +9 -5
  21. data/spec/support/none/initializer.rb +4 -0
  22. data/spec/unit/active_record_spec.rb +58 -4
  23. data/spec/unit/blueprint_name_proxy_spec.rb +31 -0
  24. data/spec/unit/blueprint_spec.rb +160 -22
  25. data/spec/unit/blueprints_spec.rb +4 -4
  26. data/spec/unit/context_spec.rb +8 -1
  27. data/spec/unit/dependency_spec.rb +1 -5
  28. data/spec/unit/fixtures.rb +69 -47
  29. data/spec/unit/namespace_spec.rb +23 -5
  30. data/spec/unit/root_namespace_spec.rb +9 -0
  31. data/spec/unit/spec_helper.rb +3 -4
  32. data/test/blueprints_test.rb +18 -1
  33. data/test/test_helper.rb +1 -0
  34. data/test_all.sh +6 -33
  35. metadata +43 -276
  36. data/Gemfile.lock +0 -108
  37. data/lib/blueprints/database_cleaner_fix.rb +0 -9
  38. data/lib/blueprints/eval_context.rb +0 -51
  39. data/spec/unit/eval_context_spec.rb +0 -56
data/Gemfile.lock DELETED
@@ -1,108 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- blueprints (0.8.2)
5
- activesupport (>= 2.3.0)
6
- database_cleaner (~> 0.5.0)
7
-
8
- GEM
9
- remote: http://rubygems.org/
10
- specs:
11
- activemodel (3.0.3)
12
- activesupport (= 3.0.3)
13
- builder (~> 2.1.2)
14
- i18n (~> 0.4)
15
- activerecord (3.0.3)
16
- activemodel (= 3.0.3)
17
- activesupport (= 3.0.3)
18
- arel (~> 2.0.2)
19
- tzinfo (~> 0.3.23)
20
- activesupport (3.0.3)
21
- addressable (2.2.2)
22
- arel (2.0.6)
23
- bson (1.1.4)
24
- bson_ext (1.1.4)
25
- builder (2.1.2)
26
- cucumber (0.9.4)
27
- builder (~> 2.1.2)
28
- diff-lcs (~> 1.1.2)
29
- gherkin (~> 2.2.9)
30
- json (~> 1.4.6)
31
- term-ansicolor (~> 1.0.5)
32
- data_objects (0.10.2)
33
- addressable (~> 2.1)
34
- database_cleaner (0.5.2)
35
- diff-lcs (1.1.2)
36
- dm-core (1.0.2)
37
- addressable (~> 2.2)
38
- extlib (~> 0.9.15)
39
- dm-do-adapter (1.0.2)
40
- data_objects (~> 0.10.2)
41
- dm-core (~> 1.0.2)
42
- dm-migrations (1.0.2)
43
- dm-core (~> 1.0.2)
44
- dm-mysql-adapter (1.0.2)
45
- dm-do-adapter (~> 1.0.2)
46
- do_mysql (~> 0.10.2)
47
- dm-transactions (1.0.2)
48
- dm-core (~> 1.0.2)
49
- do_mysql (0.10.2)
50
- data_objects (= 0.10.2)
51
- extlib (0.9.15)
52
- gherkin (2.2.9)
53
- json (~> 1.4.6)
54
- term-ansicolor (~> 1.0.5)
55
- i18n (0.5.0)
56
- jnunemaker-validatable (1.8.4)
57
- activesupport (>= 2.3.4)
58
- json (1.4.6)
59
- mocha (0.9.10)
60
- rake
61
- mongo (1.1.4)
62
- bson (>= 1.1.1)
63
- mongo_mapper (0.8.6)
64
- activesupport (>= 2.3.4)
65
- jnunemaker-validatable (~> 1.8.4)
66
- plucky (~> 0.3.6)
67
- mongoid (2.0.0.beta.20)
68
- activemodel (~> 3.0)
69
- mongo (~> 1.1)
70
- tzinfo (~> 0.3.22)
71
- will_paginate (~> 3.0.pre)
72
- mysql2 (0.2.6)
73
- plucky (0.3.6)
74
- mongo (~> 1.1)
75
- rake (0.8.7)
76
- rspec (2.2.0)
77
- rspec-core (~> 2.2)
78
- rspec-expectations (~> 2.2)
79
- rspec-mocks (~> 2.2)
80
- rspec-core (2.2.1)
81
- rspec-expectations (2.2.0)
82
- diff-lcs (~> 1.1.2)
83
- rspec-mocks (2.2.0)
84
- shoulda (2.11.3)
85
- term-ansicolor (1.0.5)
86
- tzinfo (0.3.23)
87
- will_paginate (3.0.pre2)
88
-
89
- PLATFORMS
90
- ruby
91
-
92
- DEPENDENCIES
93
- activerecord (>= 2.3.0)
94
- activesupport (>= 2.3.0)
95
- blueprints!
96
- bson_ext (>= 1.1.4)
97
- bundler (>= 1.0.0)
98
- cucumber (>= 0.7.0)
99
- database_cleaner (~> 0.5.0)
100
- dm-migrations (>= 1.0.0)
101
- dm-mysql-adapter (>= 1.0.0)
102
- dm-transactions (>= 1.0.0)
103
- mocha (>= 0.9.8)
104
- mongo_mapper (>= 0.8.0)
105
- mongoid (>= 2.0.0.beta)
106
- mysql2
107
- rspec (~> 2.2.0)
108
- shoulda (>= 2.10.0)
@@ -1,9 +0,0 @@
1
- module ActiveRecord
2
- module ConnectionAdapters
3
- class Mysql2Adapter < AbstractAdapter
4
- def truncate_table(table_name)
5
- execute("TRUNCATE TABLE #{quote_table_name(table_name)};")
6
- end
7
- end
8
- end
9
- end if defined?(ActiveRecord)
@@ -1,51 +0,0 @@
1
- module Blueprints
2
- class EvalContext
3
- # Copy instance variables to another object.
4
- # @param target Object to copy instance variables to.
5
- def copy_instance_variables(target)
6
- instance_variables.each do |iv_name|
7
- target.instance_variable_set(iv_name, instance_variable_get(iv_name))
8
- end
9
- end
10
-
11
- # Sets options and attributes and evaluates block against self.
12
- # @param [Blueprints::Context] context Context of buildable object. Used to extract attributes.
13
- # @param [Hash] options Options hash, merged into attributes.
14
- def instance_eval(context, options, &block)
15
- options = normalize_hash(options)
16
- define_singleton_method(:options) { options }
17
- attributes = normalize_hash(context.attributes).merge(options)
18
- define_singleton_method(:attributes) { attributes }
19
-
20
- super(&block)
21
- end
22
-
23
- # Builds blueprints by delegating to root namespace.
24
- # @param [Array<String, Symbol>] blueprints Names of buildables.
25
- # @return Result of last buildable.
26
- def build(*blueprints)
27
- Namespace.root.build(blueprints)
28
- end
29
-
30
- # Normalizes attributes hash by evaluating all Proc and Blueprints::Dependency objects against itself.
31
- # @param [Hash] hash Attributes hash.
32
- # @return [Hash] Normalized hash.
33
- def normalize_hash(hash)
34
- hash.each_with_object({}) do |(attr, value), normalized|
35
- normalized[attr] = if value.respond_to?(:to_proc) and not Symbol === value
36
- instance_exec(&value)
37
- else
38
- value
39
- end
40
- end
41
- end
42
-
43
- private
44
-
45
- def define_singleton_method(name, &block)
46
- singleton_class.class_eval do
47
- define_method(name, &block)
48
- end
49
- end
50
- end
51
- end
@@ -1,56 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe Blueprints::EvalContext do
4
- subject do
5
- Blueprints::EvalContext.new
6
- end
7
-
8
- it "should contain no instance variables" do
9
- subject.instance_variables.should == []
10
- end
11
-
12
- describe "instance variables" do
13
- it "should allow copying variables to other context" do
14
- subject.instance_variable_set(:@var, :value)
15
- subject.copy_instance_variables(context = Object.new)
16
- context.instance_variables.collect(&:to_sym).should == [:@var]
17
- context.instance_variable_get(:@var).should == :value
18
- end
19
- end
20
-
21
- describe "instance eval" do
22
- subject do
23
- Blueprints::EvalContext.new
24
- end
25
-
26
- it "should allow to access to options" do
27
- subject.instance_eval(context, :option => 'value') do
28
- options.should == {:option => 'value'}
29
- end
30
- end
31
-
32
- it "should allow to access to attributes" do
33
- subject.instance_eval(context_with_attrs_and_deps, :option => 'value') do
34
- attributes.should == {:option => 'value', :attr1 => 1, :attr2 => 2}
35
- end
36
- end
37
-
38
- it "should normalize options and attributes" do
39
- blueprint.build(subject)
40
- subject.instance_variable_set(:@value, 2)
41
- context = Blueprints::Context.new(:attributes => {:attr => Blueprints::Dependency.new(:blueprint)})
42
-
43
- subject.instance_eval(context, :attr2 => lambda { @value + 2 }, :attr3 => :value) do
44
- options.should == {:attr2 => 4, :attr3 => :value}
45
- attributes.should == {:attr => @blueprint, :attr2 => 4, :attr3 => :value}
46
- end
47
- end
48
- end
49
-
50
- describe "build" do
51
- it "should allow building blueprint" do
52
- blueprint
53
- subject.build(:blueprint).should == mock1
54
- end
55
- end
56
- end