fluent_fixtures 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0d33bbaa00f8e53051894c6cdfa9696965a1fb73
4
+ data.tar.gz: 1cf3f1e78b8ae7532782df1b657ae5b0ef365d88
5
+ SHA512:
6
+ metadata.gz: da3d7e7e75da53dccd23a834f6eeeec0a531203b51c5385b4dda469eb4a39eb60040df7d0244465a3e24d7f455a53c4c3b76f7288686e035edf38141f40bb9ac
7
+ data.tar.gz: 4def254094af54a2f4f4c72f1425a7d124717d552e588226c5c6f8ba48e40e4634dc3067287ae2f7b0216a96a3f7a40e45b835f0378f6aa52956a3c65b0575f1
checksums.yaml.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ �)�i ?
2
+ nݣ�N��E�D����Ce�hԱc��}g"ܰ�٩g�H�ޕ�h�eFb�so� �s�er5�( N��=}�N鹜@�� 83�Q#�ȑ}l�?yDT���&�,��Wwf�wx4�$��X��O�y|��.@7D'�Y�sW��(�
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ README.md
3
+ ChangeLog.md
4
+
5
+ LICENSE.txt
data/.rdoc_options ADDED
@@ -0,0 +1,16 @@
1
+ --- !ruby/object:RDoc::Options
2
+ encoding: UTF-8
3
+ static_path: []
4
+ rdoc_include:
5
+ - .
6
+ charset: UTF-8
7
+ exclude:
8
+ hyperlink_all: false
9
+ line_numbers: false
10
+ main_page: README.md
11
+ markup: markdown
12
+ show_hash: false
13
+ tab_width: 8
14
+ title: fluent_fixtures Documentation
15
+ visibility: :protected
16
+ webcvs:
data/.simplecov ADDED
@@ -0,0 +1,9 @@
1
+ # Simplecov config
2
+
3
+ SimpleCov.start do
4
+ add_filter 'spec'
5
+ add_filter 'integration'
6
+ add_group "Needing tests" do |file|
7
+ file.covered_percent < 90
8
+ end
9
+ end
data/ChangeLog ADDED
@@ -0,0 +1,48 @@
1
+ 2016-06-01 Michael Granger <ged@FaerieMUD.org>
2
+
3
+ * History.md, lib/fluent_fixtures.rb:
4
+ Bump the patch version, update history.
5
+ [e500071dd9c0] [tip]
6
+
7
+ * Rakefile, fluent_fixtures.gemspec:
8
+ Remove the release failsafe from the Rakefile
9
+ [61698db3838e]
10
+
11
+ * .hgtags:
12
+ Added tag v0.0.1 for changeset cd547b1e30a8
13
+ [e26dbd686588]
14
+
15
+ * .hgsigs:
16
+ Added signature for changeset 588b8ccc042c
17
+ [cd547b1e30a8] [v0.0.1]
18
+
19
+ * History.md:
20
+ Update history
21
+ [588b8ccc042c]
22
+
23
+ * .hgignore, .hoerc, ChangeLog, Manifest.txt, fluent_fixtures.gemspec,
24
+ lib/fluent_fixtures/dsl.rb, lib/fluent_fixtures/factory.rb:
25
+ Clean up the manifest a bit.
26
+ [41b90ff8e6d0]
27
+
28
+ * .editorconfig, .hgignore, ChangeLog, GettingStarted.md, README.md,
29
+ Rakefile, examples/acme_fixtures.rb, examples/lib/acme.rb,
30
+ examples/lib/acme/base.rb, examples/lib/acme/fixtures.rb,
31
+ examples/lib/acme/fixtures/groups.rb,
32
+ examples/lib/acme/fixtures/users.rb, examples/lib/acme/group.rb,
33
+ examples/lib/acme/user.rb:
34
+ Add the start of examples and a "Getting Started" guide
35
+ [2230db2a4a5a] [github/master]
36
+
37
+ * .document, .editorconfig, .gems, .gitignore, .hgignore, .pryrc,
38
+ .rdoc_options, .ruby-gemset, .ruby-version, .simplecov, Gemfile,
39
+ History.md, LICENSE.txt, Manifest.txt, README.md, Rakefile,
40
+ certs/ged.pem, fluent_fixtures.gemspec, lib/fluent_fixtures.rb,
41
+ lib/fluent_fixtures/collection.rb, lib/fluent_fixtures/dsl.rb,
42
+ lib/fluent_fixtures/factory.rb,
43
+ spec/fluent_fixtures/collection_spec.rb,
44
+ spec/fluent_fixtures/dsl_spec.rb,
45
+ spec/fluent_fixtures/factory_spec.rb, spec/fluent_fixtures_spec.rb,
46
+ spec/spec_helper.rb:
47
+ Initial import
48
+ [76c036a3676b]
data/GettingStarted.md ADDED
@@ -0,0 +1,26 @@
1
+ # Getting Started With Fluent Fixtures
2
+
3
+ Declare a module that will act as a collection of fixtures:
4
+
5
+ # lib/acme/fixtures.rb
6
+ require 'fluent_fixtures'
7
+ module Acme::Fixtures
8
+ extend FluentFixtures::Collection
9
+ fixture_path_prefix 'acme/fixtures'
10
+ end
11
+
12
+ This module will act as the main interface to all of ACME's fixtures.
13
+
14
+ First, we'll add a bare-bones `user` fixture for creating instances of a hypothetical `Acme::User` class:
15
+
16
+ # lib/acme/fixtures/users.rb
17
+ require 'acme/fixtures'
18
+ require 'acme/user
19
+ module Acme::Fixtures::Users
20
+ extend Acme::Fixtures
21
+ fixtured_class Acme::User
22
+ end
23
+
24
+ [...more soon]
25
+
26
+
data/History.md ADDED
@@ -0,0 +1,9 @@
1
+ ## v0.0.2 [2016-06-01] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ Remove the release failsafe from the Rakefile
4
+
5
+
6
+ ## v0.0.1 [2016-06-01] Michael Granger <ged@FaerieMUD.org>
7
+
8
+ Initial release.
9
+
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2016 Michael Granger
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,19 @@
1
+ .document
2
+ .rdoc_options
3
+ .simplecov
4
+ ChangeLog
5
+ GettingStarted.md
6
+ History.md
7
+ LICENSE.txt
8
+ Manifest.txt
9
+ README.md
10
+ Rakefile
11
+ lib/fluent_fixtures.rb
12
+ lib/fluent_fixtures/collection.rb
13
+ lib/fluent_fixtures/dsl.rb
14
+ lib/fluent_fixtures/factory.rb
15
+ spec/fluent_fixtures/collection_spec.rb
16
+ spec/fluent_fixtures/dsl_spec.rb
17
+ spec/fluent_fixtures/factory_spec.rb
18
+ spec/fluent_fixtures_spec.rb
19
+ spec/spec_helper.rb
data/README.md ADDED
@@ -0,0 +1,77 @@
1
+ # fluent_fixtures
2
+
3
+ home
4
+ : http://deveiate.org/projects/FluentFixtures
5
+
6
+ code
7
+ : http://bitbucket.org/ged/fluent_fixtures
8
+
9
+ github
10
+ : https://github.com/ged/fluent_fixtures
11
+
12
+ docs
13
+ : http://deveiate.org/code/fluent_fixtures
14
+
15
+
16
+ ## Description
17
+
18
+ A toolkit for building a collection of composable testing fixtures with a fluent interface.
19
+
20
+ To get started using the library, check out the [Getting Started](GettingStarted_md.html) guide.
21
+
22
+
23
+ ## Prerequisites
24
+
25
+ * Ruby
26
+
27
+
28
+ ## Installation
29
+
30
+ $ gem install fluent_fixtures
31
+
32
+
33
+ ## Contributing
34
+
35
+ You can check out the current development source with Mercurial via its
36
+ {project page}[http://bitbucket.org/ged/fluent_fixtures]. Or if you prefer Git, via
37
+ {its Github mirror}[https://github.com/ged/fluent_fixtures].
38
+
39
+ After checking out the source, run:
40
+
41
+ $ rake newb
42
+
43
+ This task will install any missing dependencies, run the tests/specs,
44
+ and generate the API documentation.
45
+
46
+
47
+ ## License
48
+
49
+ Copyright (c) 2016, Michael Granger
50
+ All rights reserved.
51
+
52
+ Redistribution and use in source and binary forms, with or without
53
+ modification, are permitted provided that the following conditions are met:
54
+
55
+ * Redistributions of source code must retain the above copyright notice,
56
+ this list of conditions and the following disclaimer.
57
+
58
+ * Redistributions in binary form must reproduce the above copyright notice,
59
+ this list of conditions and the following disclaimer in the documentation
60
+ and/or other materials provided with the distribution.
61
+
62
+ * Neither the name of the author/s, nor the names of the project's
63
+ contributors may be used to endorse or promote products derived from this
64
+ software without specific prior written permission.
65
+
66
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
67
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
68
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
69
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
70
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
71
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
72
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
73
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
74
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
75
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
76
+
77
+
data/Rakefile ADDED
@@ -0,0 +1,97 @@
1
+ #!/usr/bin/env rake
2
+
3
+ begin
4
+ require 'hoe'
5
+ rescue LoadError
6
+ abort "This Rakefile requires hoe (gem install hoe)"
7
+ end
8
+
9
+ GEMSPEC = 'fluent_fixtures.gemspec'
10
+
11
+
12
+ Hoe.plugin :mercurial
13
+ Hoe.plugin :signing
14
+ Hoe.plugin :deveiate
15
+
16
+ Hoe.plugins.delete :rubyforge
17
+
18
+ hoespec = Hoe.spec 'fluent_fixtures' do |spec|
19
+ spec.readme_file = 'README.md'
20
+ spec.history_file = 'History.md'
21
+ spec.extra_rdoc_files = FileList[ '*.rdoc', '*.md' ]
22
+ spec.license 'BSD-3-Clause'
23
+ spec.urls = {
24
+ home: 'http://deveiate.org/projects/fluent_fixtures',
25
+ code: 'http://bitbucket.org/ged/fluent_fixtures',
26
+ docs: 'http://deveiate.org/code/fluent_fixtures',
27
+ github: 'http://github.com/ged/fluent_fixtures',
28
+ }
29
+
30
+ spec.developer 'Michael Granger', 'ged@FaerieMUD.org'
31
+
32
+ spec.dependency 'loggability', '~> 0.11'
33
+ spec.dependency 'inflecto', '~> 0.0'
34
+
35
+ spec.dependency 'faker', '~> 1.6', :developer
36
+ spec.dependency 'hoe-deveiate', '~> 0.3', :developer
37
+ spec.dependency 'simplecov', '~> 0.7', :developer
38
+ spec.dependency 'rdoc-generator-fivefish', '~> 0.1', :developer
39
+
40
+ spec.require_ruby_version( '>=2.2.0' )
41
+ spec.hg_sign_tags = true if spec.respond_to?( :hg_sign_tags= )
42
+ spec.check_history_on_release = true if spec.respond_to?( :check_history_on_release= )
43
+
44
+ self.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
45
+ end
46
+
47
+
48
+ ENV['VERSION'] ||= hoespec.spec.version.to_s
49
+
50
+ # Run the tests before checking in
51
+ task 'hg:precheckin' => [ :check_history, :check_manifest, :gemspec, :spec ]
52
+
53
+ task :test => :spec
54
+
55
+ # Rebuild the ChangeLog immediately before release
56
+ task :prerelease => 'ChangeLog'
57
+ CLOBBER.include( 'ChangeLog' )
58
+
59
+ desc "Build a coverage report"
60
+ task :coverage do
61
+ ENV["COVERAGE"] = 'yes'
62
+ Rake::Task[:spec].invoke
63
+ end
64
+ CLOBBER.include( 'coverage' )
65
+
66
+
67
+ # Use the fivefish formatter for docs generated from development checkout
68
+ if File.directory?( '.hg' )
69
+ require 'rdoc/task'
70
+
71
+ Rake::Task[ 'docs' ].clear
72
+ RDoc::Task.new( 'docs' ) do |rdoc|
73
+ rdoc.main = "README.md"
74
+ rdoc.markup = 'markdown'
75
+ rdoc.rdoc_files.include( "*.md", "ChangeLog", "lib/**/*.rb" )
76
+ rdoc.generator = :fivefish
77
+ rdoc.title = 'fluent_fixtures'
78
+ rdoc.rdoc_dir = 'doc'
79
+ end
80
+ end
81
+
82
+ task :gemspec => GEMSPEC
83
+ file GEMSPEC => __FILE__
84
+ task GEMSPEC do |task|
85
+ spec = $hoespec.spec
86
+ spec.files.delete( '.gemtest' )
87
+ spec.signing_key = nil
88
+ spec.cert_chain = ['certs/ged.pem']
89
+ spec.version = "#{spec.version}.pre.#{Time.now.strftime("%Y%m%d%H%M%S")}"
90
+ puts "Spec version is set to: %s" % [ spec.version ]
91
+ File.open( task.name, 'w' ) do |fh|
92
+ fh.write( spec.to_ruby )
93
+ end
94
+ end
95
+
96
+ CLOBBER.include( GEMSPEC.to_s )
97
+
@@ -0,0 +1,137 @@
1
+ # -*- ruby -*-
2
+ #encoding: utf-8
3
+
4
+ require 'inflecto'
5
+ require 'loggability'
6
+
7
+ require 'fluent_fixtures' unless defined?( FluentFixtures )
8
+
9
+
10
+ # Extension module for fixture collection modules
11
+ module FluentFixtures::Collection
12
+ extend Loggability
13
+
14
+
15
+ # The glob pattern to use when matching files in the search_path.
16
+ FIXTURE_FILE_PATTERN = '*.rb'
17
+
18
+
19
+ # Loggability API -- log to the FluentFixtures logger
20
+ log_to :fluent_fixtures
21
+
22
+
23
+ ### Extension callback for the +collection_mod+. Sets up data structures for new
24
+ ### +collection_mod+s.
25
+ def self::extended( collection_mod )
26
+ super
27
+
28
+ prefix = collection_mod.name || nil
29
+ prefix &&= prefix.sub( /::.*\z/, '' ).downcase
30
+ default_fixture_path_prefix = File.join( *[prefix, 'fixtures'].compact )
31
+
32
+ collection_mod.extend( Loggability )
33
+ collection_mod.log_to( :fluent_fixtures )
34
+
35
+ collection_mod.instance_variable_set( :@modules, {} )
36
+ collection_mod.instance_variable_set( :@fixture_path_prefix, default_fixture_path_prefix )
37
+ end
38
+
39
+
40
+ ##
41
+ # The Hash of fixture modules declared within this Collection
42
+ attr_reader :modules
43
+
44
+
45
+ ### Declare one or more +prefixes+ to use when searching for fixtures to load
46
+ ### for the Collection.
47
+ def fixture_path_prefix( new_prefix=nil )
48
+ @fixture_path_prefix = new_prefix if new_prefix
49
+ return @fixture_path_prefix
50
+ end
51
+
52
+
53
+ ### Load fixtures of the specified +types+.
54
+ def load( *types )
55
+ types.each do |type|
56
+ requirename = File.join( self.fixture_path_prefix, type.to_s )
57
+ require( requirename )
58
+ end
59
+ end
60
+
61
+
62
+ ### Load all available fixture modules from loaded gems.
63
+ def load_all
64
+ pattern = File.join( self.fixture_path_prefix, FIXTURE_FILE_PATTERN )
65
+ Gem.find_files( pattern ).each do |fixture_path|
66
+ fixture_name = File.basename( fixture_path, '.rb' )
67
+ self.load( fixture_name )
68
+ end
69
+ end
70
+
71
+
72
+ ### Extension callback -- add some stuff to every fixture module. Note that this is called
73
+ ### by fixtures which extend a collection module, not by the collection itself.
74
+ def extended( fixture_mod )
75
+ super
76
+
77
+ fixture_mod.extend( Loggability )
78
+ fixture_mod.log_to( :fluent_fixtures )
79
+
80
+ fixture_mod.extend( FluentFixtures::DSL )
81
+ fixture_mod.instance_variable_set( :@decorators, {} )
82
+ fixture_mod.instance_variable_set( :@fixtured_class, nil )
83
+ fixture_mod.instance_variable_set( :@base_fixture, nil )
84
+
85
+ fixture_mod.collection = self
86
+
87
+ if default_name = self.default_base_fixture_name( fixture_mod )
88
+ self.add_base_fixture( default_name, fixture_mod )
89
+ end
90
+ end
91
+
92
+
93
+ ### Add a global fixture method with the specified +name+ to the top-level
94
+ ### Fixtures module.
95
+ def add_base_fixture( name, fixture_mod )
96
+ self.log.debug "Adding a base fixture to %p: %p as %p" % [ self, fixture_mod, name ]
97
+
98
+ if previous_name = self.modules.key( fixture_mod )
99
+ self.modules.delete( previous_name )
100
+ # ugh, no remove_singleton_method
101
+ self.singleton_class.instance_exec( previous_name ) do |methodname|
102
+ remove_method( methodname )
103
+ end
104
+ end
105
+
106
+ if self.modules.key?( name )
107
+ raise ScriptError,
108
+ "Already have a base fixture called %s: %p" % [ name, self.modules[name] ]
109
+ end
110
+
111
+ self.modules[ name ] = fixture_mod
112
+ define_singleton_method( name, &fixture_mod.method(:factory) )
113
+ end
114
+
115
+
116
+ ### Return the default base fixture name based on the name of the given +mod+ (a Module).
117
+ def default_base_fixture_name( mod )
118
+ modname = mod.name or return nil
119
+ name = Inflecto.singularize( Inflecto.demodulize(modname).downcase )
120
+ return name.to_sym
121
+ end
122
+
123
+
124
+ ### Clear all declared fixtures from the Cozy::FluentFixtures namespace. Mostly used for
125
+ ### testing the fixtures system itself.
126
+ def reset!
127
+ self.modules.each do |name, mod|
128
+ self.log.warn "Removing base fixture method for %p: %p" % [ mod, name ]
129
+ self.singleton_class.instance_exec( name ) do |methodname|
130
+ remove_method( methodname ) if method_defined?( methodname )
131
+ end
132
+ end
133
+ self.modules.clear
134
+ end
135
+
136
+
137
+ end # module FluentFixtures::Collection