seed_helper 1.7.0 → 1.8.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c95329706e74e3e698f4768b2d7e942283d6770
4
- data.tar.gz: bbb2c2508fb0f869d5df4e792c40df7a44780787
3
+ metadata.gz: f1942680d76a807e344ad2e7f847c0bb08b82b73
4
+ data.tar.gz: 3359c7b204678197cd1e2c73d38b0817a8b0aaf1
5
5
  SHA512:
6
- metadata.gz: 180af533d88d1f4d76b671b611cebbc69786457d4d9e7bfd7c97f72505e6260f6ef14e6cc9c16ac062f0286f9169d225d8e2fccc6078e7d5d390b583617610bf
7
- data.tar.gz: c988b10fa8c803a703b534e5e0bac3e73a714fca08d69ff951d0cf6886a842ccc4dbc88a90f1a70571c0005c0db62da4e7356f73e18b325ad87d659c2911c610
6
+ metadata.gz: e0ac9998fd0a2f994b0bf45ded6e9d1d1713afca81b0e395f0f4b9a6347edec69dd973369c60bee290cd6f577e1e15e1c88a8008bedf0ea16e6aed9ec66c49a9
7
+ data.tar.gz: 2fdae7db2b14e0ee7626bc9fdbfdbab0ce5119fe58f2eda94a7bcc6d524515d3a96088cf8db654ad81ad665f3c1056dd8867b8c986801564922f4405229cb186
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.1.0
1
+ 2.2.2
data/Gemfile CHANGED
@@ -2,5 +2,10 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in seed_helper.gemspec
4
4
  gemspec
5
- gem 'rspec'
5
+
6
+ # Test only dependencies
6
7
  gem 'byebug'
8
+ # Use Rails to be able to perform queries on a real DB
9
+ gem 'rails'
10
+ gem 'rspec'
11
+ gem 'sqlite3'
data/README.md CHANGED
@@ -26,7 +26,7 @@ SeedHelper.create_seed_task(:create_roles) do
26
26
  # Will print out a red message if Role fails to save
27
27
  # Will print out a green message is Role succesfully creates
28
28
  # Will print out a cyan message if Role already exists
29
- role = SeedHelper.create_resource(Role, {name: role_name})
29
+ role = SeedHelper.find_or_create_resource(Role, {name: role_name})
30
30
 
31
31
  end
32
32
 
@@ -53,6 +53,16 @@ SeedHelper.create_seed_task(:create_users, [:create_roles]) do
53
53
  end
54
54
  ```
55
55
 
56
+ By default, the `.find_or_create_resource` method uses the hash you provide it to find a User with those attributes. It can then determine whether or not it needs to create a new User.
57
+
58
+ This becomes problematic when we have a lot of fields, since we don't want to try and identify a User by some of those fields - password, for example.
59
+
60
+ In that case, we can pass through a third argument of all those additional fields:
61
+
62
+ ```ruby
63
+ SeedHelper.find_or_create_resource(User, {email: email}, {password: "password", role: role_name})
64
+ ```
65
+
56
66
  ## Example: Using FactoryGirl
57
67
 
58
68
  If you don't want to provide specific attributes, you can use the `.bulk_create` function to do so. EG:
@@ -93,4 +103,4 @@ SeedHelper.create_seed_task(:second_task_name, [:task_name])
93
103
  # No dependencies (other than environment) but with a custom title. This will show up as
94
104
  # description of task in `rake -T` and will be printed to screen when task runs
95
105
  SeedHelper.create_seed_task(:third_task_name, [], "My sick name")
96
- ```
106
+ ```
data/lib/seed_helper.rb CHANGED
@@ -7,11 +7,22 @@ class SeedHelper
7
7
  extend SeedHelper::OutputFormatter
8
8
  extend SeedHelper::RakeHelper
9
9
 
10
- def self.find_or_create_resource(resource_class, attributes)
11
- if resource = find_resource(resource_class, attributes)
10
+ # If a resource_class with matching identifiable_attributes exists, return that user and present a
11
+ # resource_already_exists message.
12
+ #
13
+ # Otherwise, create a new instance of resource_class using the identifiable_attributes and
14
+ # additional_attributes.
15
+ #
16
+ # @param [Class] resource_class: The class to create the resource in. EG: User
17
+ # @param [Hash] identifiable_attributes: A hash of attributes and values that can be used to
18
+ # identify the given resource. EG: {email: "jordan@example.com"}
19
+ # @param [Hash] additional_attributes: A hash of attributes and values that don't identify
20
+ # the given resource, but should be assigned to the new resource.
21
+ def self.find_or_create_resource(resource_class, identifiable_attributes, additional_attributes={})
22
+ if resource = find_resource(resource_class, identifiable_attributes)
12
23
  resource_already_exists(resource)
13
24
  else
14
- resource = resource_class.new(attributes)
25
+ resource = resource_class.new(identifiable_attributes.merge(additional_attributes))
15
26
  create_resource(resource)
16
27
  end
17
28
  return resource
@@ -1,3 +1,3 @@
1
1
  class SeedHelper
2
- VERSION = "1.7.0"
2
+ VERSION = "1.8.0"
3
3
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe SeedHelper do
4
4
 
5
5
  describe '#output' do
6
- subject { SeedHelper.output message, options }
6
+ subject { SeedHelper.output(message, options) }
7
7
  let(:message) { "message" }
8
8
  let(:options) { {} }
9
9
 
@@ -38,7 +38,7 @@ describe SeedHelper do
38
38
  end
39
39
 
40
40
  describe '#message' do
41
- subject { SeedHelper.message message, options }
41
+ subject { SeedHelper.message(message, options) }
42
42
  let(:message) { "message" }
43
43
  let(:options) { {:prefix => prefix, :color => color} }
44
44
  let(:prefix) { nil }
@@ -72,7 +72,7 @@ describe SeedHelper do
72
72
  end
73
73
 
74
74
  describe '#success' do
75
- subject { SeedHelper.success message, options }
75
+ subject { SeedHelper.success(message, options) }
76
76
  let(:message) { "message" }
77
77
  let(:options) { {:prefix => prefix, :color => color} }
78
78
  let(:prefix) { nil }
@@ -106,7 +106,7 @@ describe SeedHelper do
106
106
  end
107
107
 
108
108
  describe '#error' do
109
- subject { SeedHelper.error message, options }
109
+ subject { SeedHelper.error(message, options) }
110
110
  let(:message) { "message" }
111
111
  let(:options) { {:prefix => prefix, :color => color} }
112
112
  let(:prefix) { nil }
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe SeedHelper do
4
+
5
+ describe '.find_or_create_resource' do
6
+ subject { SeedHelper.find_or_create_resource(User, {email: email}, additional_args) }
7
+ let(:email) { "jordan@example.com" }
8
+
9
+ context "without providing additional args" do
10
+ let(:additional_args) { {} }
11
+
12
+ context "when resource already exists" do
13
+ let!(:user) { User.create(email: email) }
14
+ it { should eq(user) }
15
+ end
16
+
17
+ context "when resource doesn't exist" do
18
+ it "creates a new Resource" do
19
+ expect(User.count).to eq(0)
20
+ new_user = subject
21
+ expect(User.count).to eq(1)
22
+ expect(new_user).to be_kind_of(User)
23
+ expect(new_user.email).to eq(email)
24
+ end
25
+ end
26
+ end
27
+
28
+ context "providing additional args" do
29
+ let(:additional_args) { {name: "Name"} }
30
+
31
+ context "when a matching resource exists" do
32
+ let!(:user) { User.create(email: email, name: "Other name") }
33
+
34
+ it "only matches on identifiable args" do
35
+ expect(subject).to eq(user)
36
+ end
37
+ end
38
+
39
+ context "when no resource exists" do
40
+ it "creates a new item with the identifiable attributes and the additional attributes" do
41
+ expect(User.count).to eq(0)
42
+ new_user = subject
43
+ expect(User.count).to eq(1)
44
+ expect(new_user).to be_kind_of(User)
45
+ expect(new_user.email).to eq(email)
46
+ expect(new_user.name).to eq("Name")
47
+ end
48
+ end
49
+ end
50
+
51
+ end
52
+
53
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,32 @@
1
1
  require 'rubygems'
2
- require 'bundler/setup'
2
+ require 'bundler'
3
+ Bundler.require
4
+ require 'rails/all'
3
5
 
4
- require 'seed_helper'
6
+ require 'seed_helper'
7
+
8
+ # Create an in-memory database to do some basic tests with a real model
9
+ ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
10
+
11
+ class User < ActiveRecord::Base
12
+ def to_s
13
+ email
14
+ end
15
+ end
16
+
17
+ ActiveRecord::Schema.define do
18
+ self.verbose = false
19
+
20
+ create_table :users, force: true do |t|
21
+ t.string :email
22
+ t.string :name
23
+ end
24
+
25
+ end
26
+
27
+ RSpec.configure do |config|
28
+
29
+ # DIY Database Cleaner
30
+ config.before(:each) { User.delete_all }
31
+
32
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seed_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Maguire
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-03 00:00:00.000000000 Z
11
+ date: 2016-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -62,7 +62,8 @@ files:
62
62
  - lib/seed_helper/version.rb
63
63
  - license.txt
64
64
  - seed_helper.gemspec
65
- - spec/lib/seed_formatter_spec.rb
65
+ - spec/lib/seed_helper/output_formatter_spec.rb
66
+ - spec/lib/seed_helper_spec.rb
66
67
  - spec/spec_helper.rb
67
68
  homepage: https://github.com/jordanmaguire/seed_helper
68
69
  licenses:
@@ -84,10 +85,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
84
85
  version: '0'
85
86
  requirements: []
86
87
  rubyforge_project:
87
- rubygems_version: 2.2.2
88
+ rubygems_version: 2.4.8
88
89
  signing_key:
89
90
  specification_version: 4
90
91
  summary: Make seeding data easier in Rails projects
91
92
  test_files:
92
- - spec/lib/seed_formatter_spec.rb
93
+ - spec/lib/seed_helper/output_formatter_spec.rb
94
+ - spec/lib/seed_helper_spec.rb
93
95
  - spec/spec_helper.rb