superstore 1.0.0 → 1.0.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/Gemfile +3 -6
- data/lib/superstore/belongs_to/association.rb +23 -6
- data/lib/superstore/belongs_to/reflection.rb +9 -1
- data/lib/superstore/railtie.rb +2 -2
- data/superstore.gemspec +1 -1
- data/test/support/cassandra.rb +2 -0
- data/test/support/hstore.rb +4 -20
- data/test/support/pg.rb +44 -0
- data/test/support/user.rb +2 -0
- data/test/test_helper.rb +3 -1
- data/test/unit/belongs_to/reflection_test.rb +2 -2
- data/test/unit/belongs_to_test.rb +42 -0
- data/test/unit/schema_test.rb +5 -9
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab95c845f31fa3557952125e9db3fb68ec37d8d9
|
4
|
+
data.tar.gz: 5bea5b3c94a7c172bd6ce97a4a21ea1b5d77a96f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf14d4bf4b8fd2d03e1e7627c9facff10ba47d454d2a43e0f26956526112b8914fd4981c56ee6100cce315763e4338c54b03f63c6305ee78ec13aae3a28dfa32
|
7
|
+
data.tar.gz: 07502ca8fea646f7041ef1c1ad0be27dd643f0dc751eb0a55350a4d8c0d22258c5767afc9fcfc03438c122f125b3301ed0b890cf770adaddefcd9f5c2a29d998
|
data/Gemfile
CHANGED
@@ -6,14 +6,11 @@ gem 'thin'
|
|
6
6
|
|
7
7
|
group :test do
|
8
8
|
gem 'rails'
|
9
|
+
gem 'pg'
|
10
|
+
gem 'activerecord'
|
9
11
|
gem 'mocha', require: false
|
10
12
|
end
|
11
13
|
|
12
14
|
group :cassandra do
|
13
|
-
gem 'cassandra-cql'
|
14
|
-
end
|
15
|
-
|
16
|
-
group :hstore do
|
17
|
-
gem 'activerecord'
|
18
|
-
gem 'pg'
|
15
|
+
gem 'cassandra-cql', "1.1.4"
|
19
16
|
end
|
@@ -12,11 +12,8 @@ module Superstore
|
|
12
12
|
|
13
13
|
def reader
|
14
14
|
unless loaded?
|
15
|
-
|
16
|
-
|
17
|
-
else
|
18
|
-
self.record_variable = nil
|
19
|
-
end
|
15
|
+
check_appropriate_primary_key!
|
16
|
+
self.record_variable = get_record
|
20
17
|
@loaded = true
|
21
18
|
end
|
22
19
|
|
@@ -24,9 +21,10 @@ module Superstore
|
|
24
21
|
end
|
25
22
|
|
26
23
|
def writer(record)
|
24
|
+
check_appropriate_primary_key!
|
27
25
|
self.record_variable = record
|
28
26
|
@loaded = true
|
29
|
-
owner.send("#{reflection.foreign_key}=", record.try(
|
27
|
+
owner.send("#{reflection.foreign_key}=", record.try(reflection.primary_key))
|
30
28
|
if reflection.polymorphic?
|
31
29
|
owner.send("#{reflection.polymorphic_column}=", record.class.name)
|
32
30
|
end
|
@@ -43,6 +41,25 @@ module Superstore
|
|
43
41
|
def loaded?
|
44
42
|
@loaded
|
45
43
|
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def get_record
|
48
|
+
record_id = owner.send(reflection.foreign_key).presence
|
49
|
+
return unless record_id
|
50
|
+
|
51
|
+
if reflection.default_primary_key?
|
52
|
+
association_class.find_by_id(record_id)
|
53
|
+
else
|
54
|
+
association_class.find_by(reflection.primary_key => record_id)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def check_appropriate_primary_key!
|
59
|
+
if !reflection.default_primary_key? && !(association_class <= ActiveRecord::Base)
|
60
|
+
raise ArgumentError, "Association must inherit from ActiveRecord::Base to use custom primary key"
|
61
|
+
end
|
62
|
+
end
|
46
63
|
end
|
47
64
|
end
|
48
65
|
end
|
@@ -11,7 +11,15 @@ module Superstore
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def foreign_key
|
14
|
-
"#{name}_id"
|
14
|
+
options[:foreign_key] || "#{name}_id"
|
15
|
+
end
|
16
|
+
|
17
|
+
def primary_key
|
18
|
+
options[:primary_key] || "id"
|
19
|
+
end
|
20
|
+
|
21
|
+
def default_primary_key?
|
22
|
+
primary_key == "id"
|
15
23
|
end
|
16
24
|
|
17
25
|
def polymorphic_column
|
data/lib/superstore/railtie.rb
CHANGED
@@ -6,8 +6,8 @@ module Superstore
|
|
6
6
|
|
7
7
|
initializer "superstore.config" do |app|
|
8
8
|
ActiveSupport.on_load :superstore do
|
9
|
-
|
10
|
-
if pathname.exist?
|
9
|
+
pathnames = [Rails.root.join('config', 'superstore.yml'), Rails.root.join('config', 'cassandra.yml')]
|
10
|
+
if pathname = pathnames.detect(&:exist?)
|
11
11
|
config = YAML.load(pathname.read)
|
12
12
|
|
13
13
|
if config = config[Rails.env]
|
data/superstore.gemspec
CHANGED
data/test/support/cassandra.rb
CHANGED
@@ -17,6 +17,8 @@ end
|
|
17
17
|
sleep 1
|
18
18
|
Superstore::CassandraSchema.create_keyspace 'superstore_test'
|
19
19
|
Superstore::CassandraSchema.create_column_family 'Issues'
|
20
|
+
Superstore::CassandraSchema.alter_column_family 'Issues', "ADD title varchar"
|
21
|
+
Superstore::CassandraSchema.add_index 'Issues', 'title', "issues_title_idx"
|
20
22
|
|
21
23
|
Superstore::Base.class_eval do
|
22
24
|
class_attribute :created_records
|
data/test/support/hstore.rb
CHANGED
@@ -1,24 +1,8 @@
|
|
1
1
|
Bundler.require :hstore
|
2
|
-
require 'active_record'
|
3
|
-
|
4
2
|
Superstore::Base.config = {'adapter' => 'hstore'}
|
5
3
|
|
6
|
-
class
|
4
|
+
class HstoreInitializer
|
7
5
|
def self.initialize!
|
8
|
-
config = {
|
9
|
-
'adapter' => 'postgresql',
|
10
|
-
'encoding' => 'unicode',
|
11
|
-
'database' => 'superstore_test',
|
12
|
-
'pool' => 5,
|
13
|
-
'username' => 'postgres'
|
14
|
-
}
|
15
|
-
|
16
|
-
ActiveRecord::Base.configurations = { test: config }
|
17
|
-
|
18
|
-
ActiveRecord::Tasks::DatabaseTasks.drop config
|
19
|
-
ActiveRecord::Tasks::DatabaseTasks.create config
|
20
|
-
ActiveRecord::Base.establish_connection config
|
21
|
-
|
22
6
|
Superstore::Base.adapter.create_table('issues')
|
23
7
|
end
|
24
8
|
|
@@ -27,14 +11,14 @@ class PGInitializer
|
|
27
11
|
end
|
28
12
|
end
|
29
13
|
|
30
|
-
|
14
|
+
HstoreInitializer.initialize!
|
31
15
|
|
32
16
|
module ActiveSupport
|
33
17
|
class TestCase
|
34
18
|
teardown do
|
35
|
-
|
19
|
+
HstoreInitializer.table_names.each do |table_name|
|
36
20
|
ActiveRecord::Base.connection.execute "TRUNCATE #{table_name}"
|
37
21
|
end
|
38
22
|
end
|
39
23
|
end
|
40
|
-
end
|
24
|
+
end
|
data/test/support/pg.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
class PGInitializer
|
4
|
+
def self.initialize!
|
5
|
+
config = {
|
6
|
+
'adapter' => 'postgresql',
|
7
|
+
'encoding' => 'unicode',
|
8
|
+
'database' => 'superstore_test',
|
9
|
+
'pool' => 5,
|
10
|
+
'username' => 'postgres'
|
11
|
+
}
|
12
|
+
|
13
|
+
ActiveRecord::Base.configurations = { test: config }
|
14
|
+
|
15
|
+
ActiveRecord::Tasks::DatabaseTasks.drop config
|
16
|
+
ActiveRecord::Tasks::DatabaseTasks.create config
|
17
|
+
ActiveRecord::Base.establish_connection config
|
18
|
+
|
19
|
+
create_users_table
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.create_users_table
|
23
|
+
ActiveRecord::Migration.create_table :users do |t|
|
24
|
+
t.string :special_id, null: false
|
25
|
+
t.index :special_id, unique: true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.table_names
|
30
|
+
%w(users)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
PGInitializer.initialize!
|
35
|
+
|
36
|
+
module ActiveSupport
|
37
|
+
class TestCase
|
38
|
+
teardown do
|
39
|
+
PGInitializer.table_names.each do |table_name|
|
40
|
+
ActiveRecord::Base.connection.execute "TRUNCATE #{table_name}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -6,9 +6,11 @@ I18n.config.enforce_available_locales = false
|
|
6
6
|
require 'rails/test_help'
|
7
7
|
require 'mocha/setup'
|
8
8
|
|
9
|
-
|
9
|
+
require 'support/pg'
|
10
|
+
#require 'support/hstore'
|
10
11
|
require 'support/cassandra'
|
11
12
|
require 'support/issue'
|
13
|
+
require 'support/user'
|
12
14
|
|
13
15
|
def MiniTest.filter_backtrace(bt)
|
14
16
|
bt
|
@@ -2,11 +2,11 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class Superstore::BelongsTo::ReflectionTest < Superstore::TestCase
|
4
4
|
class ::Status < Superstore::Base; end
|
5
|
-
class ::
|
5
|
+
class ::Job < Superstore::Base
|
6
6
|
belongs_to :status
|
7
7
|
end
|
8
8
|
|
9
9
|
test 'class_name' do
|
10
|
-
assert_equal 'Status',
|
10
|
+
assert_equal 'Status', Job.new.belongs_to_reflections[:status].class_name
|
11
11
|
end
|
12
12
|
end
|
@@ -8,6 +8,15 @@ class Superstore::BelongsToTest < Superstore::TestCase
|
|
8
8
|
string :widget_id
|
9
9
|
belongs_to :widget, class_name: 'Issue'
|
10
10
|
|
11
|
+
string :other_id
|
12
|
+
belongs_to :other_issue, class_name: 'Issue', foreign_key: :other_id
|
13
|
+
|
14
|
+
string :user_id
|
15
|
+
belongs_to :user, primary_key: :special_id
|
16
|
+
|
17
|
+
string :title_issue_id
|
18
|
+
belongs_to :title_issue, class_name: 'Issue', primary_key: :title
|
19
|
+
|
11
20
|
string :target_id
|
12
21
|
string :target_type
|
13
22
|
belongs_to :target, polymorphic: true
|
@@ -37,6 +46,39 @@ class Superstore::BelongsToTest < Superstore::TestCase
|
|
37
46
|
assert_equal issue, record.widget
|
38
47
|
end
|
39
48
|
|
49
|
+
test 'belongs_to with foreign_key' do
|
50
|
+
issue = Issue.create
|
51
|
+
|
52
|
+
record = TestObject.create(other_issue: issue)
|
53
|
+
|
54
|
+
assert_equal issue, record.other_issue
|
55
|
+
assert_equal issue.id, record.other_id
|
56
|
+
|
57
|
+
record = TestObject.find(record.id)
|
58
|
+
assert_equal issue, record.other_issue
|
59
|
+
end
|
60
|
+
|
61
|
+
test 'belongs_to with primary_key for ActiveRecord' do
|
62
|
+
special_id = 'special_id'
|
63
|
+
user = User.create! special_id: special_id
|
64
|
+
record = TestObject.create user: user
|
65
|
+
|
66
|
+
assert_equal user, record.user
|
67
|
+
assert_equal special_id, record.user_id
|
68
|
+
|
69
|
+
record = TestObject.find(record.id)
|
70
|
+
assert_equal user, record.user
|
71
|
+
end
|
72
|
+
|
73
|
+
test 'belongs_to with primary_key raises an error for non-ActiveRecord' do
|
74
|
+
issue = Issue.create title: 'title'
|
75
|
+
|
76
|
+
record = TestObject.new
|
77
|
+
record.title_issue_id = issue.title
|
78
|
+
assert_raises(ArgumentError) { record.title_issue }
|
79
|
+
assert_raises(ArgumentError) { record.title_issue = issue }
|
80
|
+
end
|
81
|
+
|
40
82
|
test 'belongs_to with polymorphic' do
|
41
83
|
issue = Issue.create
|
42
84
|
|
data/test/unit/schema_test.rb
CHANGED
@@ -2,24 +2,20 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class Superstore::SchemaTest < Superstore::TestCase
|
4
4
|
# SELECT columnfamily_name FROM System.schema_columnfamilies WHERE keyspace_name='myKeyspaceName';
|
5
|
-
test "
|
6
|
-
Superstore::Schema.create_table 'TestRecords'
|
5
|
+
test "create and drop_table" do
|
6
|
+
Superstore::Schema.create_table 'TestRecords'
|
7
7
|
|
8
8
|
begin
|
9
9
|
Superstore::Schema.create_table 'TestRecords'
|
10
10
|
assert false, 'TestRecords should already exist'
|
11
11
|
rescue Exception => e
|
12
12
|
end
|
13
|
-
end
|
14
|
-
|
15
|
-
test "drop_table" do
|
16
|
-
Superstore::Schema.create_table 'TestCFToDrop'
|
17
13
|
|
18
|
-
Superstore::Schema.drop_table '
|
14
|
+
Superstore::Schema.drop_table 'TestRecords'
|
19
15
|
|
20
16
|
begin
|
21
|
-
Superstore::Schema.drop_table '
|
22
|
-
assert false, '
|
17
|
+
Superstore::Schema.drop_table 'TestRecords'
|
18
|
+
assert false, 'TestRecords should not exist'
|
23
19
|
rescue Exception => e
|
24
20
|
end
|
25
21
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: superstore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Koziarski
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-05-
|
12
|
+
date: 2014-05-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -106,6 +106,8 @@ files:
|
|
106
106
|
- test/support/cassandra.rb
|
107
107
|
- test/support/hstore.rb
|
108
108
|
- test/support/issue.rb
|
109
|
+
- test/support/pg.rb
|
110
|
+
- test/support/user.rb
|
109
111
|
- test/test_helper.rb
|
110
112
|
- test/unit/active_model_test.rb
|
111
113
|
- test/unit/adapters/adapter_test.rb
|