sprig 0.1.1 → 0.1.2
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.
- checksums.yaml +4 -4
- data/README.md +21 -2
- data/lib/generators/sprig/install_generator.rb +31 -0
- data/lib/sprig.rb +18 -10
- data/lib/sprig/configuration.rb +5 -1
- data/lib/sprig/directive.rb +1 -1
- data/lib/sprig/helpers.rb +2 -0
- data/lib/sprig/logging.rb +35 -0
- data/lib/sprig/null_record.rb +13 -0
- data/lib/sprig/planter.rb +6 -6
- data/lib/sprig/process_notifier.rb +59 -0
- data/lib/sprig/seed/factory.rb +9 -8
- data/lib/sprig/sprig_record_store.rb +2 -2
- data/lib/sprig/version.rb +1 -1
- data/spec/db/activerecord.db +0 -0
- data/spec/fixtures/config/environments/development.rb +1 -0
- data/spec/fixtures/config/environments/production.rb +1 -0
- data/spec/fixtures/config/environments/test.rb +1 -0
- data/spec/fixtures/models/user.rb +3 -0
- data/spec/fixtures/seeds/test/invalid_users.yml +6 -0
- data/spec/fixtures/seeds/test/posts_missing_record.yml +7 -0
- data/spec/lib/generators/sprig/install_generator_spec.rb +59 -0
- data/spec/lib/sprig/configuration_spec.rb +16 -1
- data/spec/lib/sprig/directive_spec.rb +28 -5
- data/spec/lib/sprig/null_record_spec.rb +24 -0
- data/spec/lib/sprig/process_notifier_spec.rb +88 -0
- data/spec/lib/sprig_spec.rb +52 -0
- data/spec/spec_helper.rb +8 -3
- data/spec/sprig_spec.rb +21 -0
- data/spec/support/helpers/colored_text.rb +17 -0
- data/spec/support/helpers/logger_mock.rb +21 -0
- data/spec/support/shared_examples/a_logging_entity.rb +16 -0
- metadata +63 -21
- data/lib/sprig/sprig_logger.rb +0 -68
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 45e7ad607a25ae6b5ddd621ba63d2dc51d97ecf9
|
|
4
|
+
data.tar.gz: b156960667081a75408bab2b2f5363a89b320d35
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 69ab1c4161a19017678b2e03bbd6af6edb62ef498a56cc0d7c8e16b6097e9b72e66890f17605786eaa78bbbc9eb264e9034075728de8275e12f02ff2a28a112c
|
|
7
|
+
data.tar.gz: 231648356a91e8f181161a6c9077161d4eb1d2e178ad1e04c96290029f11fdbb9b9a1f7459f774db6ce143cc2a23514d99faa3a8da65a419e347652adde26b1e
|
data/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+

|
|
2
2
|
|
|
3
3
|
[](https://codeclimate.com/github/vigetlabs/sprig) [](https://travis-ci.org/vigetlabs/sprig) [](http://badge.fury.io/rb/sprig)
|
|
4
4
|
|
|
@@ -6,6 +6,11 @@ Seed Rails application by convention, not configuration.
|
|
|
6
6
|
|
|
7
7
|
Provides support for common files types: *csv*, *yaml*, and *json*. Extensible for the rest!
|
|
8
8
|
|
|
9
|
+
Learn more about Sprig and view documentation at [http://vigetlabs.github.io/sprig/](http://vigetlabs.github.io/sprig/).
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
Use `rails generate sprig:install` to create environment-specific seed directories.
|
|
9
14
|
|
|
10
15
|
##The Sprig Directive
|
|
11
16
|
|
|
@@ -21,7 +26,6 @@ sprig [User, Post, Comment]
|
|
|
21
26
|
|
|
22
27
|
This directive tells Sprig to go find your datafiles for the `User`, `Post`, and `Comment` seed resources, build records from the data entries, and insert them into the database. Sprig will automatically detect known datafile types like `.yml`, `.json`, or `.csv` within your environment-specific seed directory.
|
|
23
28
|
|
|
24
|
-
|
|
25
29
|
##Environment
|
|
26
30
|
|
|
27
31
|
Seed files are unique to the environment in which your Rails application is running. Within `db/seeds` create an environment-specific directory (i.e. `/development` for your 'development' environment).
|
|
@@ -81,6 +85,8 @@ records:
|
|
|
81
85
|
body: "Yaml Comment body"
|
|
82
86
|
```
|
|
83
87
|
|
|
88
|
+
**Note: For namespaced or STI classes, you'll need to include the namespace with the class name in the seed file name. For example `Users::HeadManager` would need to be `users_head_managers.yml`**
|
|
89
|
+
|
|
84
90
|
### Special Options
|
|
85
91
|
|
|
86
92
|
These are provided in a `options:` key for *yaml* and *json* files.
|
|
@@ -100,6 +106,19 @@ options:
|
|
|
100
106
|
find_existing_by: ['title', 'user_id']
|
|
101
107
|
```
|
|
102
108
|
|
|
109
|
+
### Computed Values
|
|
110
|
+
|
|
111
|
+
It's common to want seed values that are dynamic. Sprig supports an ERB style syntax for computing seed attributes.
|
|
112
|
+
|
|
113
|
+
```yaml
|
|
114
|
+
# posts.yml
|
|
115
|
+
|
|
116
|
+
records:
|
|
117
|
+
- sprig_id: 1
|
|
118
|
+
body: "Yaml Post body"
|
|
119
|
+
published_at: "<%= 1.week.ago %>"
|
|
120
|
+
```
|
|
121
|
+
|
|
103
122
|
##Custom Sources and Parsers
|
|
104
123
|
|
|
105
124
|
If all your data is in `.wat` files, fear not. You can tell Sprig where to look for your data, and point it toward a custom parser class for turning your data into records. The example below tells Sprig to read `User` seed data from a Google Spreadsheet, and parse it accordingly.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'rails/generators/base'
|
|
2
|
+
|
|
3
|
+
module Sprig
|
|
4
|
+
module Generators
|
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
|
6
|
+
argument :arg_envs, :type => :array, :optional => true
|
|
7
|
+
|
|
8
|
+
desc "Install Sprig seed directories"
|
|
9
|
+
|
|
10
|
+
def create_enviroment_directories
|
|
11
|
+
empty_directory 'db/seeds'
|
|
12
|
+
|
|
13
|
+
envs.each { |env| empty_directory "db/seeds/#{env}" }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def envs
|
|
19
|
+
arg_envs ? arg_envs : default_envs
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def default_envs
|
|
23
|
+
env_configs.map { |p| File.basename(p, File.extname(p)) }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def env_configs
|
|
27
|
+
Dir[Rails.root.join('config/environments', '*.rb')]
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
data/lib/sprig.rb
CHANGED
|
@@ -10,20 +10,28 @@ module Sprig
|
|
|
10
10
|
autoload :Parser, 'sprig/parser'
|
|
11
11
|
autoload :Helpers, 'sprig/helpers'
|
|
12
12
|
autoload :Planter, 'sprig/planter'
|
|
13
|
-
autoload :
|
|
14
|
-
autoload :
|
|
13
|
+
autoload :ProcessNotifier, 'sprig/process_notifier'
|
|
14
|
+
autoload :Logging, 'sprig/logging'
|
|
15
|
+
autoload :NullRecord, 'sprig/null_record'
|
|
16
|
+
autoload :SprigRecordStore, 'sprig/sprig_record_store'
|
|
15
17
|
autoload :Data, 'sprig/data'
|
|
16
18
|
autoload :Seed, 'sprig/seed'
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
class << self
|
|
21
|
+
def configuration
|
|
22
|
+
@@configuration ||= Sprig::Configuration.new
|
|
23
|
+
end
|
|
21
24
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
def configure
|
|
26
|
+
yield configuration
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def reset_configuration
|
|
30
|
+
@@configuration = nil
|
|
31
|
+
end
|
|
25
32
|
|
|
26
|
-
|
|
27
|
-
|
|
33
|
+
def logger
|
|
34
|
+
configuration.logger
|
|
35
|
+
end
|
|
28
36
|
end
|
|
29
37
|
end
|
data/lib/sprig/configuration.rb
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
module Sprig
|
|
2
2
|
class Configuration
|
|
3
3
|
|
|
4
|
-
attr_writer :directory
|
|
4
|
+
attr_writer :directory, :logger
|
|
5
5
|
|
|
6
6
|
def directory
|
|
7
7
|
Rails.root.join(@directory || default_directory, Rails.env)
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
+
def logger
|
|
11
|
+
@logger ||= Logger.new($stdout)
|
|
12
|
+
end
|
|
13
|
+
|
|
10
14
|
private
|
|
11
15
|
|
|
12
16
|
def default_directory
|
data/lib/sprig/directive.rb
CHANGED
data/lib/sprig/helpers.rb
CHANGED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Sprig
|
|
2
|
+
module Logging
|
|
3
|
+
LOG_LEVELS = {
|
|
4
|
+
debug: :blue,
|
|
5
|
+
info: :green,
|
|
6
|
+
warn: :orange,
|
|
7
|
+
error: :red
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
LOG_COLORS = {
|
|
11
|
+
blue: 34,
|
|
12
|
+
green: 32,
|
|
13
|
+
orange: 33,
|
|
14
|
+
red: 31
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
LOG_LEVELS.each do |level, color|
|
|
18
|
+
define_method("log_#{level}") do |message|
|
|
19
|
+
Sprig.logger.send(level, send(color, message.to_s))
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def colorize(message, color_code)
|
|
26
|
+
"\e[#{color_code}m#{message}\e[0m"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
LOG_COLORS.each do |name, color_code|
|
|
30
|
+
define_method(name) do |message|
|
|
31
|
+
colorize(message, color_code)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
data/lib/sprig/planter.rb
CHANGED
|
@@ -9,7 +9,7 @@ module Sprig
|
|
|
9
9
|
plant(seed)
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
notifier.finished
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
private
|
|
@@ -20,19 +20,19 @@ module Sprig
|
|
|
20
20
|
DependencySorter.new(seeds).sorted_items
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
def
|
|
24
|
-
@
|
|
23
|
+
def notifier
|
|
24
|
+
@notifier ||= ProcessNotifier.new
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def plant(seed)
|
|
28
|
-
|
|
28
|
+
notifier.in_progress
|
|
29
29
|
seed.before_save
|
|
30
30
|
|
|
31
31
|
if seed.save_record
|
|
32
32
|
seed.save_to_store
|
|
33
|
-
|
|
33
|
+
notifier.success(seed)
|
|
34
34
|
else
|
|
35
|
-
|
|
35
|
+
notifier.error(seed)
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
38
|
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'active_support/inflector'
|
|
2
|
+
|
|
3
|
+
module Sprig
|
|
4
|
+
class ProcessNotifier
|
|
5
|
+
include Logging
|
|
6
|
+
|
|
7
|
+
def initialize
|
|
8
|
+
@success_count = 0
|
|
9
|
+
@error_count = 0
|
|
10
|
+
@errors = []
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def success(seed)
|
|
14
|
+
log_info seed.success_log_text
|
|
15
|
+
@success_count += 1
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def error(seed)
|
|
19
|
+
@errors << seed.record
|
|
20
|
+
log_error seed.error_log_text
|
|
21
|
+
log_error seed.record
|
|
22
|
+
log_error seed.record.errors.messages
|
|
23
|
+
@error_count += 1
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def finished
|
|
27
|
+
log_debug 'Seeding complete.'
|
|
28
|
+
|
|
29
|
+
if @success_count > 0
|
|
30
|
+
log_info success_summary
|
|
31
|
+
else
|
|
32
|
+
log_error success_summary
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
if @error_count > 0
|
|
36
|
+
log_error error_summary
|
|
37
|
+
|
|
38
|
+
@errors.each do |error|
|
|
39
|
+
log_error error
|
|
40
|
+
log_error "#{error.errors.messages}\n"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def in_progress
|
|
46
|
+
log_debug "Planting those seeds...\r"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def success_summary
|
|
52
|
+
"#{@success_count} #{'seed'.pluralize(@success_count)} successfully planted."
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def error_summary
|
|
56
|
+
"#{@error_count} #{'seed'.pluralize(@error_count)} couldn't be planted:"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
data/lib/sprig/seed/factory.rb
CHANGED
|
@@ -4,17 +4,17 @@ module Sprig
|
|
|
4
4
|
def self.new_from_directive(directive)
|
|
5
5
|
raise ArgumentError, 'Must provide a Directive' unless directive.is_a? Directive
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
new(
|
|
8
|
+
directive.klass,
|
|
9
|
+
directive.datasource,
|
|
10
|
+
directive.options
|
|
11
|
+
)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def initialize(klass, datasource, options)
|
|
15
|
-
self.klass
|
|
16
|
-
self.datasource
|
|
17
|
-
self.initial_options
|
|
15
|
+
self.klass = klass
|
|
16
|
+
self.datasource = datasource
|
|
17
|
+
self.initial_options = options
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def add_seeds_to_hopper(hopper)
|
|
@@ -30,6 +30,7 @@ module Sprig
|
|
|
30
30
|
def klass=(klass)
|
|
31
31
|
raise ArgumentError, 'Must provide a Class as first argument' unless klass.is_a? Class
|
|
32
32
|
|
|
33
|
+
klass.reset_column_information
|
|
33
34
|
@klass = klass
|
|
34
35
|
end
|
|
35
36
|
|
|
@@ -11,7 +11,7 @@ module Sprig
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def get(klass, sprig_id)
|
|
14
|
-
records_of_klass(klass)[sprig_id.to_s] || record_not_found
|
|
14
|
+
records_of_klass(klass)[sprig_id.to_s] || record_not_found(klass, sprig_id)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
private
|
|
@@ -24,7 +24,7 @@ module Sprig
|
|
|
24
24
|
@records ||= {}
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
def record_not_found
|
|
27
|
+
def record_not_found(klass, sprig_id)
|
|
28
28
|
raise(RecordNotFoundError, "Record for class #{klass} and sprig_id #{sprig_id} could not be found.")
|
|
29
29
|
end
|
|
30
30
|
end
|
data/lib/sprig/version.rb
CHANGED
data/spec/db/activerecord.db
CHANGED
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Rails environment config
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Rails environment config
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Rails environment config
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'generators/sprig/install_generator'
|
|
3
|
+
|
|
4
|
+
describe Sprig::Generators::InstallGenerator do
|
|
5
|
+
destination File.expand_path("../../tmp", __FILE__)
|
|
6
|
+
|
|
7
|
+
before do
|
|
8
|
+
stub_rails_root
|
|
9
|
+
prepare_destination
|
|
10
|
+
run_generator
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "creates empty db/seeds directory" do
|
|
14
|
+
assert_directory "db/seeds"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "creates empty seed environment directories" do
|
|
18
|
+
[
|
|
19
|
+
:development,
|
|
20
|
+
:test,
|
|
21
|
+
:production
|
|
22
|
+
].each do |env|
|
|
23
|
+
assert_directory "db/seeds/#{env}"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# Generator arguments are set on a class basis. We need to open
|
|
30
|
+
# a new describe block to make these examples work.
|
|
31
|
+
|
|
32
|
+
describe Sprig::Generators::InstallGenerator do
|
|
33
|
+
context "with arguments" do
|
|
34
|
+
destination File.expand_path("../../tmp", __FILE__)
|
|
35
|
+
arguments %w(development test integration)
|
|
36
|
+
|
|
37
|
+
before do
|
|
38
|
+
stub_rails_root
|
|
39
|
+
prepare_destination
|
|
40
|
+
run_generator
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "creates empty seed directories from arguments" do
|
|
44
|
+
[
|
|
45
|
+
:development,
|
|
46
|
+
:test,
|
|
47
|
+
:integration
|
|
48
|
+
].each do |env|
|
|
49
|
+
assert_directory "db/seeds/#{env}"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
[
|
|
53
|
+
:production
|
|
54
|
+
].each do |env|
|
|
55
|
+
assert_no_directory "db/seeds/#{env}"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -7,7 +7,6 @@ describe Sprig::Configuration do
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
describe "#directory" do
|
|
10
|
-
|
|
11
10
|
it "returns db/seeds/:env by default" do
|
|
12
11
|
subject.directory.to_path.should == '~/db/seeds/development'
|
|
13
12
|
end
|
|
@@ -18,4 +17,20 @@ describe Sprig::Configuration do
|
|
|
18
17
|
subject.directory.to_path.should == '~/seed_files/development'
|
|
19
18
|
end
|
|
20
19
|
end
|
|
20
|
+
|
|
21
|
+
describe "#logger" do
|
|
22
|
+
it "returns an stdout logger by default" do
|
|
23
|
+
logger = double('Logger')
|
|
24
|
+
Logger.stub(:new).with($stdout).and_return(logger)
|
|
25
|
+
|
|
26
|
+
subject.logger.should == logger
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "returns a custom logger" do
|
|
30
|
+
logger = double('Logger')
|
|
31
|
+
subject.logger = logger
|
|
32
|
+
|
|
33
|
+
subject.logger.should == logger
|
|
34
|
+
end
|
|
35
|
+
end
|
|
21
36
|
end
|
|
@@ -2,6 +2,11 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe Sprig::Directive do
|
|
4
4
|
|
|
5
|
+
module Users
|
|
6
|
+
class Admin < User
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
5
10
|
describe "#klass" do
|
|
6
11
|
context "given a class" do
|
|
7
12
|
subject { described_class.new(Post) }
|
|
@@ -9,6 +14,12 @@ describe Sprig::Directive do
|
|
|
9
14
|
its(:klass) { should == Post }
|
|
10
15
|
end
|
|
11
16
|
|
|
17
|
+
context "given a class within a module" do
|
|
18
|
+
subject { described_class.new(Users::Admin) }
|
|
19
|
+
|
|
20
|
+
its(:klass) { should == Users::Admin }
|
|
21
|
+
end
|
|
22
|
+
|
|
12
23
|
context "given options with a class" do
|
|
13
24
|
subject { described_class.new(:class => Post) }
|
|
14
25
|
|
|
@@ -47,14 +58,26 @@ describe Sprig::Directive do
|
|
|
47
58
|
describe "#datasource" do
|
|
48
59
|
let(:datasource) { double('datasource') }
|
|
49
60
|
|
|
50
|
-
|
|
61
|
+
context "with a class" do
|
|
62
|
+
subject { described_class.new(:class => Post, :source => 'source') }
|
|
51
63
|
|
|
52
|
-
|
|
53
|
-
|
|
64
|
+
before do
|
|
65
|
+
Sprig::Source.stub(:new).with('posts', { :source => 'source' }).and_return(datasource)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "returns a sprig data source" do
|
|
69
|
+
subject.datasource.should == datasource
|
|
70
|
+
end
|
|
54
71
|
end
|
|
55
72
|
|
|
56
|
-
|
|
57
|
-
subject.
|
|
73
|
+
context "with a class within a module" do
|
|
74
|
+
subject { described_class.new(Users::Admin) }
|
|
75
|
+
|
|
76
|
+
it "passes the correct path to Source" do
|
|
77
|
+
Sprig::Source.should_receive(:new).with("users_admins", {})
|
|
78
|
+
|
|
79
|
+
subject.datasource
|
|
80
|
+
end
|
|
58
81
|
end
|
|
59
82
|
end
|
|
60
83
|
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Sprig::NullRecord do
|
|
4
|
+
let(:error_msg) { 'Something bad happened.' }
|
|
5
|
+
subject { described_class.new(error_msg) }
|
|
6
|
+
|
|
7
|
+
describe "#new" do
|
|
8
|
+
it "logs an error upon initialization" do
|
|
9
|
+
log_should_receive(:error, with: "#{error_msg} (Substituted with NullRecord)")
|
|
10
|
+
|
|
11
|
+
subject
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
describe "#method_missing" do
|
|
16
|
+
it "returns nil for undefined method calls" do
|
|
17
|
+
subject.enhance_your_calm.should == nil
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it_behaves_like "a logging entity" do
|
|
22
|
+
subject! { described_class.new(error_msg) }
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Sprig::ProcessNotifier do
|
|
4
|
+
it_behaves_like "a logging entity" do
|
|
5
|
+
subject { described_class.new }
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
describe "#success" do
|
|
9
|
+
let(:seed) { double('Seed', success_log_text: 'I am a teapot.') }
|
|
10
|
+
|
|
11
|
+
it "logs the seed's success message" do
|
|
12
|
+
log_should_receive(:info, with: 'I am a teapot.')
|
|
13
|
+
|
|
14
|
+
subject.success(seed)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe "#error" do
|
|
19
|
+
let(:errors) { double('Errors', messages: 'error messages') }
|
|
20
|
+
let(:seed_record) { double('Record', to_s: 'Seed Record', errors: errors) }
|
|
21
|
+
let(:seed) { double('Seed', error_log_text: 'I am a teapot.', record: seed_record) }
|
|
22
|
+
|
|
23
|
+
it "logs the seed's error message and error details" do
|
|
24
|
+
log_should_receive(:error, with: 'I am a teapot.').ordered
|
|
25
|
+
log_should_receive(:error, with: 'Seed Record').ordered
|
|
26
|
+
log_should_receive(:error, with: 'error messages').ordered
|
|
27
|
+
|
|
28
|
+
subject.error(seed)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe "#finished" do
|
|
33
|
+
it "logs a complete message" do
|
|
34
|
+
log_should_receive(:debug, with: 'Seeding complete.')
|
|
35
|
+
|
|
36
|
+
subject.finished
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
context "when records are saved successfully" do
|
|
40
|
+
let(:seed) { double('Seed', success_log_text: 'I am a teapot.') }
|
|
41
|
+
|
|
42
|
+
before do
|
|
43
|
+
subject.success(seed)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "logs a summery of successful saves" do
|
|
47
|
+
log_should_receive(:info, with: '1 seed successfully planted.')
|
|
48
|
+
|
|
49
|
+
subject.finished
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
context "when no records are saved successfully" do
|
|
54
|
+
it "logs a summery of successful saves" do
|
|
55
|
+
log_should_receive(:error, with: '0 seeds successfully planted.')
|
|
56
|
+
|
|
57
|
+
subject.finished
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context "when there is an error saving a record" do
|
|
62
|
+
let(:errors) { double('Errors', messages: 'error messages') }
|
|
63
|
+
let(:seed_record) { double('Record', to_s: 'Seed Record', errors: errors) }
|
|
64
|
+
let(:seed) { double('Seed', error_log_text: 'I am a teapot.', record: seed_record) }
|
|
65
|
+
|
|
66
|
+
before do
|
|
67
|
+
subject.error(seed)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "logs a summary of errors" do
|
|
71
|
+
log_should_receive(:error, with: '0 seeds successfully planted.').ordered
|
|
72
|
+
log_should_receive(:error, with: "1 seed couldn't be planted:").ordered
|
|
73
|
+
log_should_receive(:error, with: 'Seed Record').ordered
|
|
74
|
+
log_should_receive(:error, with: "error messages\n").ordered
|
|
75
|
+
|
|
76
|
+
subject.finished
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe "#in_progress" do
|
|
82
|
+
it "logs an in-progress message" do
|
|
83
|
+
log_should_receive(:debug, with: "Planting those seeds...\r")
|
|
84
|
+
|
|
85
|
+
subject.in_progress
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Sprig do
|
|
4
|
+
let(:configuration) { double('Configuration') }
|
|
5
|
+
|
|
6
|
+
before do
|
|
7
|
+
Sprig::Configuration.stub(:new).and_return(configuration)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe ".configuration" do
|
|
11
|
+
context "when there is not yet a Configuration instance" do
|
|
12
|
+
it "returns a new Configuration instance" do
|
|
13
|
+
described_class.configuration.should == configuration
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
context "when there is an existing Configuration instance" do
|
|
18
|
+
before do
|
|
19
|
+
described_class.configuration
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "returns the existing Configuration instance" do
|
|
23
|
+
new_configuration = double('Configuration')
|
|
24
|
+
Sprig::Configuration.stub(:new).and_return(new_configuration)
|
|
25
|
+
|
|
26
|
+
described_class.configuration.should == configuration
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe ".reset_configuration" do
|
|
32
|
+
before do
|
|
33
|
+
described_class.configuration
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "clears the existing configuration" do
|
|
37
|
+
described_class.reset_configuration
|
|
38
|
+
new_configuration = double('Configuration')
|
|
39
|
+
Sprig::Configuration.stub(:new).and_return(new_configuration)
|
|
40
|
+
|
|
41
|
+
described_class.configuration.should == new_configuration
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe ".configure" do
|
|
46
|
+
it "yields the configuration" do
|
|
47
|
+
described_class.configure do |config|
|
|
48
|
+
config.should == configuration
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -6,13 +6,18 @@ require "database_cleaner"
|
|
|
6
6
|
require "webmock"
|
|
7
7
|
require "vcr"
|
|
8
8
|
require "pry"
|
|
9
|
+
require "generator_spec"
|
|
9
10
|
|
|
10
11
|
require "sprig"
|
|
11
12
|
include Sprig::Helpers
|
|
12
13
|
|
|
13
14
|
Dir[File.dirname(__FILE__) + '/fixtures/models/*.rb'].each {|file| require file }
|
|
15
|
+
Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each {|file| require file}
|
|
14
16
|
|
|
15
17
|
RSpec.configure do |c|
|
|
18
|
+
c.include ColoredText
|
|
19
|
+
c.include LoggerMock
|
|
20
|
+
|
|
16
21
|
c.before(:suite) do
|
|
17
22
|
DatabaseCleaner.strategy = :transaction
|
|
18
23
|
DatabaseCleaner.clean_with(:truncation)
|
|
@@ -38,11 +43,11 @@ end
|
|
|
38
43
|
# Database
|
|
39
44
|
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => "spec/db/activerecord.db")
|
|
40
45
|
|
|
41
|
-
|
|
42
|
-
|
|
46
|
+
User.connection.execute "DROP TABLE IF EXISTS users;"
|
|
47
|
+
User.connection.execute "CREATE TABLE users (id INTEGER PRIMARY KEY , first_name VARCHAR(255), last_name VARCHAR(255), type VARCHAR(255));"
|
|
43
48
|
|
|
44
49
|
Post.connection.execute "DROP TABLE IF EXISTS posts;"
|
|
45
|
-
Post.connection.execute "CREATE TABLE posts (id INTEGER PRIMARY KEY , title VARCHAR(255), content VARCHAR(255), published BOOLEAN);"
|
|
50
|
+
Post.connection.execute "CREATE TABLE posts (id INTEGER PRIMARY KEY , title VARCHAR(255), content VARCHAR(255), published BOOLEAN , user_id INTEGER);"
|
|
46
51
|
|
|
47
52
|
Comment.connection.execute "DROP TABLE IF EXISTS comments;"
|
|
48
53
|
Comment.connection.execute "CREATE TABLE comments (id INTEGER PRIMARY KEY , post_id INTEGER, body VARCHAR(255));"
|
data/spec/sprig_spec.rb
CHANGED
|
@@ -112,6 +112,27 @@ describe "Seeding an application" do
|
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
+
context "with a relationship to a record that didn't save" do
|
|
116
|
+
around do |example|
|
|
117
|
+
load_seeds('invalid_users.yml', 'posts_missing_record.yml', &example)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "does not error, but carries on with the seeding" do
|
|
121
|
+
expect {
|
|
122
|
+
sprig [
|
|
123
|
+
{
|
|
124
|
+
:class => Post,
|
|
125
|
+
:source => open('spec/fixtures/seeds/test/posts_missing_record.yml')
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
:class => User,
|
|
129
|
+
:source => open('spec/fixtures/seeds/test/invalid_users.yml')
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
}.to_not raise_error
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
115
136
|
context "with multiple files for a class" do
|
|
116
137
|
around do |example|
|
|
117
138
|
load_seeds('posts.yml', 'legacy_posts.yml', &example)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module LoggerMock
|
|
2
|
+
def log_should_receive(level, options)
|
|
3
|
+
Sprig.logger.should_receive(level).with(send("log_#{level}_text", options.fetch(:with)))
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def log_debug_text(text)
|
|
7
|
+
blue_text(text)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def log_info_text(text)
|
|
11
|
+
green_text(text)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def log_warn_text(text)
|
|
15
|
+
orange_text(text)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def log_error_text(text)
|
|
19
|
+
red_text(text)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
shared_examples_for "a logging entity" do
|
|
2
|
+
let(:message) { 'A log message.' }
|
|
3
|
+
|
|
4
|
+
[
|
|
5
|
+
:debug,
|
|
6
|
+
:info,
|
|
7
|
+
:warn,
|
|
8
|
+
:error
|
|
9
|
+
].each do |level|
|
|
10
|
+
it "can log a #{level}" do
|
|
11
|
+
log_should_receive(level, with: message)
|
|
12
|
+
|
|
13
|
+
subject.send("log_#{level}", message)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sprig
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Lawson Kurtz
|
|
@@ -9,104 +9,118 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2014-
|
|
12
|
+
date: 2014-05-14 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rails
|
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
|
17
17
|
requirements:
|
|
18
|
-
- - ~>
|
|
18
|
+
- - "~>"
|
|
19
19
|
- !ruby/object:Gem::Version
|
|
20
20
|
version: '3.1'
|
|
21
21
|
type: :development
|
|
22
22
|
prerelease: false
|
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
24
|
requirements:
|
|
25
|
-
- - ~>
|
|
25
|
+
- - "~>"
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
27
|
version: '3.1'
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
29
|
name: sqlite3
|
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
|
31
31
|
requirements:
|
|
32
|
-
- - ~>
|
|
32
|
+
- - "~>"
|
|
33
33
|
- !ruby/object:Gem::Version
|
|
34
34
|
version: 1.3.8
|
|
35
35
|
type: :development
|
|
36
36
|
prerelease: false
|
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
38
|
requirements:
|
|
39
|
-
- - ~>
|
|
39
|
+
- - "~>"
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
41
|
version: 1.3.8
|
|
42
42
|
- !ruby/object:Gem::Dependency
|
|
43
43
|
name: rspec
|
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
|
45
45
|
requirements:
|
|
46
|
-
- - ~>
|
|
46
|
+
- - "~>"
|
|
47
47
|
- !ruby/object:Gem::Version
|
|
48
48
|
version: 2.14.0
|
|
49
49
|
type: :development
|
|
50
50
|
prerelease: false
|
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
|
52
52
|
requirements:
|
|
53
|
-
- - ~>
|
|
53
|
+
- - "~>"
|
|
54
54
|
- !ruby/object:Gem::Version
|
|
55
55
|
version: 2.14.0
|
|
56
56
|
- !ruby/object:Gem::Dependency
|
|
57
57
|
name: database_cleaner
|
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
|
59
59
|
requirements:
|
|
60
|
-
- - ~>
|
|
60
|
+
- - "~>"
|
|
61
61
|
- !ruby/object:Gem::Version
|
|
62
62
|
version: 1.2.0
|
|
63
63
|
type: :development
|
|
64
64
|
prerelease: false
|
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
|
66
66
|
requirements:
|
|
67
|
-
- - ~>
|
|
67
|
+
- - "~>"
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
69
|
version: 1.2.0
|
|
70
70
|
- !ruby/object:Gem::Dependency
|
|
71
71
|
name: webmock
|
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
|
73
73
|
requirements:
|
|
74
|
-
- - ~>
|
|
74
|
+
- - "~>"
|
|
75
75
|
- !ruby/object:Gem::Version
|
|
76
76
|
version: 1.15.0
|
|
77
77
|
type: :development
|
|
78
78
|
prerelease: false
|
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
|
80
80
|
requirements:
|
|
81
|
-
- - ~>
|
|
81
|
+
- - "~>"
|
|
82
82
|
- !ruby/object:Gem::Version
|
|
83
83
|
version: 1.15.0
|
|
84
84
|
- !ruby/object:Gem::Dependency
|
|
85
85
|
name: vcr
|
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
|
87
87
|
requirements:
|
|
88
|
-
- - ~>
|
|
88
|
+
- - "~>"
|
|
89
89
|
- !ruby/object:Gem::Version
|
|
90
90
|
version: 2.8.0
|
|
91
91
|
type: :development
|
|
92
92
|
prerelease: false
|
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
|
94
94
|
requirements:
|
|
95
|
-
- - ~>
|
|
95
|
+
- - "~>"
|
|
96
96
|
- !ruby/object:Gem::Version
|
|
97
97
|
version: 2.8.0
|
|
98
98
|
- !ruby/object:Gem::Dependency
|
|
99
99
|
name: pry
|
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
|
101
101
|
requirements:
|
|
102
|
-
- -
|
|
102
|
+
- - ">="
|
|
103
103
|
- !ruby/object:Gem::Version
|
|
104
104
|
version: '0'
|
|
105
105
|
type: :development
|
|
106
106
|
prerelease: false
|
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
|
108
108
|
requirements:
|
|
109
|
-
- -
|
|
109
|
+
- - ">="
|
|
110
|
+
- !ruby/object:Gem::Version
|
|
111
|
+
version: '0'
|
|
112
|
+
- !ruby/object:Gem::Dependency
|
|
113
|
+
name: generator_spec
|
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
|
115
|
+
requirements:
|
|
116
|
+
- - ">="
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
version: '0'
|
|
119
|
+
type: :development
|
|
120
|
+
prerelease: false
|
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
122
|
+
requirements:
|
|
123
|
+
- - ">="
|
|
110
124
|
- !ruby/object:Gem::Version
|
|
111
125
|
version: '0'
|
|
112
126
|
description: Sprig is a library for managing interconnected, environment-specific
|
|
@@ -121,6 +135,7 @@ files:
|
|
|
121
135
|
- MIT-LICENSE
|
|
122
136
|
- README.md
|
|
123
137
|
- Rakefile
|
|
138
|
+
- lib/generators/sprig/install_generator.rb
|
|
124
139
|
- lib/sprig.rb
|
|
125
140
|
- lib/sprig/configuration.rb
|
|
126
141
|
- lib/sprig/data.rb
|
|
@@ -130,6 +145,8 @@ files:
|
|
|
130
145
|
- lib/sprig/directive.rb
|
|
131
146
|
- lib/sprig/directive_list.rb
|
|
132
147
|
- lib/sprig/helpers.rb
|
|
148
|
+
- lib/sprig/logging.rb
|
|
149
|
+
- lib/sprig/null_record.rb
|
|
133
150
|
- lib/sprig/parser.rb
|
|
134
151
|
- lib/sprig/parser/base.rb
|
|
135
152
|
- lib/sprig/parser/csv.rb
|
|
@@ -137,6 +154,7 @@ files:
|
|
|
137
154
|
- lib/sprig/parser/json.rb
|
|
138
155
|
- lib/sprig/parser/yml.rb
|
|
139
156
|
- lib/sprig/planter.rb
|
|
157
|
+
- lib/sprig/process_notifier.rb
|
|
140
158
|
- lib/sprig/seed.rb
|
|
141
159
|
- lib/sprig/seed/attribute.rb
|
|
142
160
|
- lib/sprig/seed/attribute_collection.rb
|
|
@@ -144,16 +162,20 @@ files:
|
|
|
144
162
|
- lib/sprig/seed/factory.rb
|
|
145
163
|
- lib/sprig/seed/record.rb
|
|
146
164
|
- lib/sprig/source.rb
|
|
147
|
-
- lib/sprig/sprig_logger.rb
|
|
148
165
|
- lib/sprig/sprig_record_store.rb
|
|
149
166
|
- lib/sprig/version.rb
|
|
150
167
|
- spec/db/activerecord.db
|
|
151
168
|
- spec/feature/configurations_spec.rb
|
|
152
169
|
- spec/fixtures/cassettes/google_spreadsheet_json_posts.yml
|
|
170
|
+
- spec/fixtures/config/environments/development.rb
|
|
171
|
+
- spec/fixtures/config/environments/production.rb
|
|
172
|
+
- spec/fixtures/config/environments/test.rb
|
|
153
173
|
- spec/fixtures/models/comment.rb
|
|
154
174
|
- spec/fixtures/models/post.rb
|
|
175
|
+
- spec/fixtures/models/user.rb
|
|
155
176
|
- spec/fixtures/seeds/staging/posts.yml
|
|
156
177
|
- spec/fixtures/seeds/test/comments.yml
|
|
178
|
+
- spec/fixtures/seeds/test/invalid_users.yml
|
|
157
179
|
- spec/fixtures/seeds/test/legacy_posts.yml
|
|
158
180
|
- spec/fixtures/seeds/test/posts.csv
|
|
159
181
|
- spec/fixtures/seeds/test/posts.json
|
|
@@ -161,11 +183,19 @@ files:
|
|
|
161
183
|
- spec/fixtures/seeds/test/posts_find_existing_by_multiple.yml
|
|
162
184
|
- spec/fixtures/seeds/test/posts_find_existing_by_single.yml
|
|
163
185
|
- spec/fixtures/seeds/test/posts_missing_dependency.yml
|
|
186
|
+
- spec/fixtures/seeds/test/posts_missing_record.yml
|
|
187
|
+
- spec/lib/generators/sprig/install_generator_spec.rb
|
|
164
188
|
- spec/lib/sprig/configuration_spec.rb
|
|
165
189
|
- spec/lib/sprig/directive_list_spec.rb
|
|
166
190
|
- spec/lib/sprig/directive_spec.rb
|
|
191
|
+
- spec/lib/sprig/null_record_spec.rb
|
|
192
|
+
- spec/lib/sprig/process_notifier_spec.rb
|
|
193
|
+
- spec/lib/sprig_spec.rb
|
|
167
194
|
- spec/spec_helper.rb
|
|
168
195
|
- spec/sprig_spec.rb
|
|
196
|
+
- spec/support/helpers/colored_text.rb
|
|
197
|
+
- spec/support/helpers/logger_mock.rb
|
|
198
|
+
- spec/support/shared_examples/a_logging_entity.rb
|
|
169
199
|
homepage: http://www.github.com/vigetlabs/sprig
|
|
170
200
|
licenses:
|
|
171
201
|
- MIT
|
|
@@ -176,17 +206,17 @@ require_paths:
|
|
|
176
206
|
- lib
|
|
177
207
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
178
208
|
requirements:
|
|
179
|
-
- -
|
|
209
|
+
- - ">="
|
|
180
210
|
- !ruby/object:Gem::Version
|
|
181
211
|
version: '0'
|
|
182
212
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
213
|
requirements:
|
|
184
|
-
- -
|
|
214
|
+
- - ">="
|
|
185
215
|
- !ruby/object:Gem::Version
|
|
186
216
|
version: '0'
|
|
187
217
|
requirements: []
|
|
188
218
|
rubyforge_project:
|
|
189
|
-
rubygems_version: 2.2.
|
|
219
|
+
rubygems_version: 2.2.2
|
|
190
220
|
signing_key:
|
|
191
221
|
specification_version: 4
|
|
192
222
|
summary: Relational, environment-specific seeding for Rails apps.
|
|
@@ -194,10 +224,15 @@ test_files:
|
|
|
194
224
|
- spec/db/activerecord.db
|
|
195
225
|
- spec/feature/configurations_spec.rb
|
|
196
226
|
- spec/fixtures/cassettes/google_spreadsheet_json_posts.yml
|
|
227
|
+
- spec/fixtures/config/environments/development.rb
|
|
228
|
+
- spec/fixtures/config/environments/production.rb
|
|
229
|
+
- spec/fixtures/config/environments/test.rb
|
|
197
230
|
- spec/fixtures/models/comment.rb
|
|
198
231
|
- spec/fixtures/models/post.rb
|
|
232
|
+
- spec/fixtures/models/user.rb
|
|
199
233
|
- spec/fixtures/seeds/staging/posts.yml
|
|
200
234
|
- spec/fixtures/seeds/test/comments.yml
|
|
235
|
+
- spec/fixtures/seeds/test/invalid_users.yml
|
|
201
236
|
- spec/fixtures/seeds/test/legacy_posts.yml
|
|
202
237
|
- spec/fixtures/seeds/test/posts.csv
|
|
203
238
|
- spec/fixtures/seeds/test/posts.json
|
|
@@ -205,9 +240,16 @@ test_files:
|
|
|
205
240
|
- spec/fixtures/seeds/test/posts_find_existing_by_multiple.yml
|
|
206
241
|
- spec/fixtures/seeds/test/posts_find_existing_by_single.yml
|
|
207
242
|
- spec/fixtures/seeds/test/posts_missing_dependency.yml
|
|
243
|
+
- spec/fixtures/seeds/test/posts_missing_record.yml
|
|
244
|
+
- spec/lib/generators/sprig/install_generator_spec.rb
|
|
208
245
|
- spec/lib/sprig/configuration_spec.rb
|
|
209
246
|
- spec/lib/sprig/directive_list_spec.rb
|
|
210
247
|
- spec/lib/sprig/directive_spec.rb
|
|
248
|
+
- spec/lib/sprig/null_record_spec.rb
|
|
249
|
+
- spec/lib/sprig/process_notifier_spec.rb
|
|
250
|
+
- spec/lib/sprig_spec.rb
|
|
211
251
|
- spec/spec_helper.rb
|
|
212
252
|
- spec/sprig_spec.rb
|
|
213
|
-
|
|
253
|
+
- spec/support/helpers/colored_text.rb
|
|
254
|
+
- spec/support/helpers/logger_mock.rb
|
|
255
|
+
- spec/support/shared_examples/a_logging_entity.rb
|
data/lib/sprig/sprig_logger.rb
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
require 'active_support/inflector'
|
|
2
|
-
|
|
3
|
-
module Sprig
|
|
4
|
-
class SprigLogger
|
|
5
|
-
def initialize
|
|
6
|
-
@success_count = 0
|
|
7
|
-
@error_count = 0
|
|
8
|
-
@errors = []
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def log_success(seed)
|
|
12
|
-
message = seed.success_log_text
|
|
13
|
-
puts green(message)
|
|
14
|
-
@success_count += 1
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def log_error(seed)
|
|
18
|
-
message = seed.error_log_text
|
|
19
|
-
@errors << seed.record
|
|
20
|
-
puts red(message)
|
|
21
|
-
@error_count += 1
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def log_summary
|
|
25
|
-
puts 'Seeding complete.'
|
|
26
|
-
|
|
27
|
-
if @success_count > 0
|
|
28
|
-
puts green(success_summary)
|
|
29
|
-
else
|
|
30
|
-
puts red(success_summary)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
if @error_count > 0
|
|
34
|
-
puts red(error_summary)
|
|
35
|
-
|
|
36
|
-
@errors.each do |error|
|
|
37
|
-
puts red("#{error}\n#{error.errors.messages}\n\n")
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def processing
|
|
43
|
-
print "Planting those seeds...\r"
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
private
|
|
47
|
-
|
|
48
|
-
def colorize(message, color_code)
|
|
49
|
-
"\e[#{color_code}m#{message}\e[0m"
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def red(message)
|
|
53
|
-
colorize(message, 31)
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def green(message)
|
|
57
|
-
colorize(message, 32)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def success_summary
|
|
61
|
-
"#{@success_count} #{'seed'.pluralize(@success_count)} successfully planted."
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def error_summary
|
|
65
|
-
"#{@error_count} #{'seed'.pluralize(@error_count)} couldn't be planted:"
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|