findable 0.1.5 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0c5762db6fcb9200dd984f87ec167f1091ecfe26
4
- data.tar.gz: 8c2386ee142b72c7bfd4814b45783f48a0a12367
3
+ metadata.gz: 022bdcf5a11ab55395af5ca7af256b23afd96376
4
+ data.tar.gz: 86900a51201b84491a1e361f0945ec4d36b4e064
5
5
  SHA512:
6
- metadata.gz: 107b796739e028571c553dee7aa04fb31d6ef6b374c38a1dd44c2225d7fbd735d124488a5c76d6b136007b729cb4808668c56a6ca4ef1fff81869d1782a9b2a2
7
- data.tar.gz: f42800de1d903c60cb478b8c5981ddfebd27ec3d1542586f61f286bfb7d6ffbf6bbcd3fd459ba8793e8f385c1be56bda08b8e7c55823726058554667d7081695
6
+ metadata.gz: 880d6023b382295648fd89c61c4e1bba1a73bc3a6e9266b7b84840d0eee4722ef388a8e94ba9b5c166e752f74b79a36b24577b1f6ba68998e5726306a1fd385d
7
+ data.tar.gz: 0670803e036bd49527ebc2d4208afb298ab5faed78eee5e2fc8052a00b340b4228efc7b6fbec58bc63d9e890aa7902b516b09afc9c52bd9208969de6437be339
@@ -9,5 +9,6 @@ require "findable/version"
9
9
  require "findable/errors"
10
10
  require "findable/configuration"
11
11
  require "findable/query"
12
+ require "findable/collection"
12
13
  require "findable/base"
13
14
  require "findable/railtie" if defined?(Rails)
@@ -57,6 +57,15 @@ module Findable
57
57
  Utils.add_reflection(:belongs_to, name.to_sym, options, self)
58
58
  else
59
59
  super
60
+ define_method("#{name}_with_findable_polymorphic") do
61
+ begin
62
+ public_send("#{name}_without_findable_polymorphic")
63
+ rescue NotActiveRecord
64
+ id = public_send("#{name}_id")
65
+ public_send("#{name}_type").constantize.find(id)
66
+ end
67
+ end
68
+ alias_method_chain name.to_sym, :findable_polymorphic
60
69
  end
61
70
  end
62
71
  end
@@ -1,4 +1,5 @@
1
1
  require "findable/associations"
2
+ require "findable/schema"
2
3
  require "findable/inspection"
3
4
 
4
5
  module Findable
@@ -6,39 +7,32 @@ module Findable
6
7
  include ActiveModel::Model
7
8
  include ActiveModel::AttributeMethods
8
9
  include Associations
10
+ include Schema
9
11
  include Inspection
10
12
 
11
- attribute_method_suffix "="
12
- attribute_method_suffix "?"
13
-
14
13
  class << self
15
- ## field definitions
16
-
17
- def define_field(attr)
18
- unless public_method_defined?(attr)
19
- define_attribute_methods attr
20
- define_method(attr) { attributes[attr] }
21
- column_names << attr.to_sym
22
- end
14
+ def arel_table
15
+ raise NotActiveRecord.new(self)
23
16
  end
24
17
 
25
18
  ## ActiveRecord like APIs
26
19
 
27
- delegate :all, to: :query
20
+ delegate :first, :last, :order, :pluck, to: :all
21
+ alias_method :take, :first
28
22
 
29
23
  def primary_key
30
24
  "id"
31
25
  end
32
26
 
33
- def column_names
34
- @_column_names ||= [:id]
27
+ def all
28
+ collection!(query.all)
35
29
  end
36
30
 
37
31
  def find(ids)
38
32
  if records = find_by_ids(ids).presence
39
- ids.is_a?(Array) ? records : records.first
33
+ ids.is_a?(Array) ? collection!(records) : records.first
40
34
  else
41
- raise RecordNotFound.new(self, id: ids)
35
+ raise not_found(id: ids)
42
36
  end
43
37
  end
44
38
 
@@ -56,9 +50,7 @@ module Findable
56
50
  }
57
51
  end
58
52
  else
59
- all.detect {|record|
60
- conditions.all? {|k, v| record.public_send(k) == v }
61
- }
53
+ all.find_by(conditions.dup)
62
54
  end
63
55
  else
64
56
  find_by_ids(conditions).first
@@ -66,7 +58,7 @@ module Findable
66
58
  end
67
59
 
68
60
  def find_by!(conditions)
69
- find_by(conditions.dup) || (raise RecordNotFound.new(self, conditions))
61
+ find_by(conditions.dup) || (raise not_found(conditions))
70
62
  end
71
63
 
72
64
  def where(conditions)
@@ -74,16 +66,14 @@ module Findable
74
66
  if id = conditions.delete(:id)
75
67
  records = find_by_ids(id)
76
68
  if conditions.empty?
77
- records
69
+ collection!(records)
78
70
  else
79
- records.select {|record|
71
+ collection!(records.select {|record|
80
72
  conditions.all? {|k, v| record.public_send(k) == v }
81
- }
73
+ })
82
74
  end
83
75
  else
84
- all.select {|record|
85
- conditions.all? {|k, v| record.public_send(k) == v }
86
- }
76
+ all.where(conditions.dup)
87
77
  end
88
78
  end
89
79
 
@@ -94,12 +84,6 @@ module Findable
94
84
  end
95
85
  alias_method :create!, :create
96
86
 
97
- [:first, :last].each do |m|
98
- define_method(m) do
99
- self.all.public_send(m)
100
- end
101
- end
102
-
103
87
  ## Query APIs
104
88
 
105
89
  delegate :find_by_ids, :insert, to: :query
@@ -125,6 +109,14 @@ module Findable
125
109
  end
126
110
 
127
111
  private
112
+ def collection!(records)
113
+ records.is_a?(Array) ? Collection.new(self, records) : records
114
+ end
115
+
116
+ def not_found(params)
117
+ RecordNotFound.new(self, params)
118
+ end
119
+
128
120
  def id_from(obj)
129
121
  obj.is_a?(self) ? obj.id : obj.to_i
130
122
  end
@@ -169,13 +161,5 @@ module Findable
169
161
  def attributes
170
162
  @_attributes ||= ActiveSupport::HashWithIndifferentAccess.new
171
163
  end
172
-
173
- def attribute=(attr, value)
174
- attributes[attr.to_sym] = value
175
- end
176
-
177
- def attribute?(attr)
178
- attributes[attr.to_sym].present?
179
- end
180
164
  end
181
165
  end
@@ -0,0 +1,94 @@
1
+ module Findable
2
+ # Record collection class
3
+ class Collection
4
+ include Enumerable
5
+
6
+ attr_reader :model, :records
7
+
8
+ def initialize(model, records)
9
+ raise ArgumentError unless records.is_a?(Array)
10
+ @model = model
11
+ @records = records
12
+ end
13
+
14
+ delegate :size, :first, :last, to: :records
15
+ delegate :empty?, :blank?, :present?, to: :records
16
+ alias_method :length, :size
17
+ alias_method :count, :size
18
+ alias_method :take, :first
19
+ alias_method :to_a, :records
20
+
21
+ def presence
22
+ present? ? self : nil
23
+ end
24
+
25
+ def each
26
+ if block_given?
27
+ records.each {|record| yield(record) }
28
+ else
29
+ records.to_enum
30
+ end
31
+ end
32
+
33
+ def find(ids)
34
+ if ids.is_a?(Array)
35
+ if refined = records.select {|record| record.id.in?(ids) }
36
+ regenerate(refined)
37
+ else
38
+ raise not_found(id: ids)
39
+ end
40
+ else
41
+ records.detect {|record| record.id == ids } || (raise not_found(id: ids))
42
+ end
43
+ end
44
+
45
+ def find_by(conditions)
46
+ records.detect {|record|
47
+ conditions.all? {|k, v| record.public_send(k) == v }
48
+ }
49
+ end
50
+
51
+ def find_by!(conditions)
52
+ find_by(conditions.dup) || (raise not_found(conditions))
53
+ end
54
+
55
+ def where(conditions)
56
+ regenerate(records.select {|record|
57
+ conditions.all? {|k, v| record.public_send(k) == v }
58
+ })
59
+ end
60
+
61
+ def order(*columns)
62
+ columns.flatten!
63
+ raise ArgumentError, "Must contain arguments" if columns.empty?
64
+
65
+ regenerate(records.sort_by {|record|
66
+ columns.map {|column| record.public_send(column) }
67
+ })
68
+ end
69
+
70
+ def pluck(*columns)
71
+ columns.flatten!
72
+ return records.map {|record| record.attributes.values } if columns.empty?
73
+ single = (columns.size == 1)
74
+
75
+ records.map {|record|
76
+ values = columns.map {|column| record.public_send(column) }
77
+ single ? values.first : values
78
+ }
79
+ end
80
+
81
+ def inspect
82
+ "[#{records.map(&:inspect).join(",\n")}]"
83
+ end
84
+
85
+ private
86
+ def regenerate(records)
87
+ self.class.new(model, records)
88
+ end
89
+
90
+ def not_found(params)
91
+ RecordNotFound.new(model, params)
92
+ end
93
+ end
94
+ end
@@ -8,5 +8,11 @@ module Findable
8
8
  end
9
9
  end
10
10
 
11
+ class NotActiveRecord < FindableError
12
+ def initialize(model)
13
+ super("#{model.model_name.name} class is not ActiveRecord")
14
+ end
15
+ end
16
+
11
17
  class LockTimeout < FindableError; end
12
18
  end
@@ -0,0 +1,37 @@
1
+ require "findable/schema/conversion"
2
+
3
+ module Findable
4
+ module Schema
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ attribute_method_suffix "="
9
+ attribute_method_suffix "?"
10
+ end
11
+
12
+ module ClassMethods
13
+ def column_names
14
+ @_column_names ||= [:id]
15
+ end
16
+
17
+ def define_field(*args)
18
+ options = args.extract_options!
19
+ name = args.first
20
+ if !public_method_defined?(name) || options.present?
21
+ define_attribute_methods name
22
+ conversion = Conversion.for(options[:type])
23
+ define_method(name) { conversion.call(attributes[name.to_sym]) }
24
+ column_names << name.to_sym
25
+ end
26
+ end
27
+ end
28
+
29
+ def attribute=(attr, value)
30
+ attributes[attr] = value
31
+ end
32
+
33
+ def attribute?(attr)
34
+ attributes[attr].present?
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,74 @@
1
+ module Findable
2
+ module Schema
3
+ class Conversion
4
+ class << self
5
+ FALSE_VALUE = ["false", "0"]
6
+
7
+ def for(type)
8
+ return types[:default] if type.nil?
9
+ types[type] || add_type!(type)
10
+ end
11
+
12
+ def types
13
+ @_types ||= {
14
+ default: Proc.new {|value| value }
15
+ }
16
+ end
17
+
18
+ def add_type!(type)
19
+ return type if type.respond_to?(:call)
20
+ raise ArgumentError unless private_method_defined?(type)
21
+ types[type.to_sym] = method(type)
22
+ end
23
+
24
+ private
25
+ # Conversion methods
26
+ def integer(value)
27
+ value.to_i
28
+ end
29
+
30
+ def float(value)
31
+ value.to_f
32
+ end
33
+
34
+ def decimal(value)
35
+ BigDecimal(value)
36
+ end
37
+
38
+ def string(value)
39
+ value.to_s
40
+ end
41
+
42
+ def boolean(value)
43
+ if value.is_a?(TrueClass) || value.is_a?(FalseClass)
44
+ value
45
+ elsif value.in?(FALSE_VALUE)
46
+ false
47
+ else
48
+ !!value
49
+ end
50
+ end
51
+
52
+ def date(value)
53
+ return value if value.is_a?(Date)
54
+ Date.parse(value)
55
+ end
56
+
57
+ def datetime(value)
58
+ if value.is_a?(Time) || value.is_a?(ActiveSupport::TimeWithZone)
59
+ return value
60
+ end
61
+ Time.zone.parse(value)
62
+ end
63
+
64
+ def symbol(value)
65
+ value.to_sym
66
+ end
67
+
68
+ def inquiry(value)
69
+ value.to_s.inquiry
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -1,3 +1,3 @@
1
1
  module Findable
2
- VERSION = "0.1.5"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,29 +1,32 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Findable::Associations::ActiveRecordExt do
4
- let(:company) { Company.first }
5
- let(:store) { Store.first }
6
- let(:email) { Email.first }
4
+ # ActiveRecord models
7
5
  let(:user) { User.first }
6
+ let(:user2) { User.second }
7
+ let(:status) { Status.take }
8
+
9
+ # Findable models
10
+ let(:image) { Image.take }
8
11
 
9
12
  describe "#has_many" do
10
- it { expect(company.users).to be_kind_of(Array) }
11
- it { expect(company.users.first).to be_kind_of(User) }
12
- it { expect(company.stores).to be_kind_of(ActiveRecord::Relation) }
13
- it { expect(company.stores.first).to be_kind_of(Store) }
13
+ it { expect(user.purchase_histories).to be_kind_of(Findable::Collection) }
14
+ it { expect(user.purchase_histories.first).to be_kind_of(PurchaseHistory) }
15
+ it { expect(user.comments).to be_kind_of(ActiveRecord::Relation) }
16
+ it { expect(user.comments.first).to be_kind_of(Comment) }
14
17
  end
15
18
 
16
19
  describe "#has_one" do
17
- it { expect(company.image).to be_kind_of(Image) }
18
- it { expect(store.email).to be_kind_of(Email) }
20
+ it { expect(user.image).to be_kind_of(Image) }
21
+ it { expect(user.status).to be_kind_of(Status) }
19
22
  end
20
23
 
21
24
  describe "#belongs_to" do
22
- it { expect(email.user).to be_kind_of(User) }
23
- it { expect(store.company).to be_kind_of(Company) }
25
+ it { expect(image.user).to be_kind_of(User) }
26
+ it { expect(status.user).to be_kind_of(User) }
24
27
  it {
25
- email.user = user
26
- expect(email.user_id).to eq(user.id)
28
+ image.user = user2
29
+ expect(image).to have_attributes(user_id: user2.id)
27
30
  }
28
31
  end
29
32
  end
@@ -1,33 +1,34 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Findable::Associations do
4
- let(:category) { Category.first }
5
- let(:product) { Product.first }
6
- let(:image) { Image.first }
7
- let(:user) { User.find(UserData.first[:id]) }
8
- let(:user2) { User.find(UserData.last[:id]) }
9
- let(:other_company) { Company.last }
4
+ # Findable models
5
+ let(:category) { Category.find(CategoryData.first[:id]) }
6
+ let(:category2) { Category.find(CategoryData.second[:id]) }
7
+ let(:product) { Product.take }
8
+ let(:image) { Image.find(ImageData.first[:id]) }
9
+ let(:image2) { Image.find(ImageData.second[:id]) }
10
+ let(:cart) { Cart.take }
10
11
 
11
12
  describe "#has_many" do
12
- it { expect(category.products).to be_kind_of(Array) }
13
+ it { expect(category.products).to be_kind_of(Findable::Collection) }
13
14
  it { expect(category.products.first).to be_kind_of(Product) }
14
- it { expect(user.pictures).to be_kind_of(ActiveRecord::Relation) }
15
- it { expect(user.pictures.first).to be_kind_of(Picture) }
15
+ it { expect(product.comments).to be_kind_of(ActiveRecord::Relation) }
16
+ it { expect(product.comments.first).to be_kind_of(Comment) }
16
17
  end
17
18
 
18
19
  describe "#has_one" do
19
20
  it { expect(product.image).to be_kind_of(Image) }
20
- it { expect(user.email).to be_kind_of(Email) }
21
+ it { expect(cart.user).to be_kind_of(User) }
21
22
  end
22
23
 
23
24
  describe "#belongs_to" do
24
25
  it { expect(product.category).to be_kind_of(Category) }
25
- it { expect(user.company).to be_kind_of(Company) }
26
- it { expect(user.content).to be_kind_of(Image) }
27
- it { expect(user2.content).to be_kind_of(Picture) }
26
+ it { expect(image.user).to be_kind_of(User) }
27
+ it { expect(image.content).to be_kind_of(image.content_type.constantize) }
28
+ it { expect(image2.content).to be_kind_of(image2.content_type.constantize) }
28
29
  it {
29
- user.company = other_company
30
- expect(user).to have_attributes(company_id: other_company.id)
30
+ product.category = category2
31
+ expect(product).to have_attributes(category_id: category2.id)
31
32
  }
32
33
  end
33
34
  end
@@ -13,13 +13,13 @@ describe Findable::Base do
13
13
  end
14
14
 
15
15
  describe ".all" do
16
- it { expect(read_model.all).to be_kind_of(Array) }
17
- it { expect(read_model.all.size).to eq(1) }
16
+ it { expect(read_model.all).to be_kind_of(Findable::Collection) }
17
+ it { expect(read_model.all.size).to eq(CategoryData.size) }
18
18
  end
19
19
 
20
20
  describe ".find" do
21
21
  it { expect(read_model.find(id)).to be_kind_of(read_model) }
22
- it { expect(read_model.find([id])).to be_kind_of(Array) }
22
+ it { expect(read_model.find([id])).to be_kind_of(Findable::Collection) }
23
23
  it {
24
24
  expect {
25
25
  read_model.find(invalid_id)
@@ -52,13 +52,13 @@ describe Findable::Base do
52
52
  end
53
53
 
54
54
  describe ".where" do
55
- it { expect(read_model.where(id: id)).to be_kind_of(Array) }
55
+ it { expect(read_model.where(id: id)).to be_kind_of(Findable::Collection) }
56
56
  it { expect(read_model.where(id: id).first).to be_kind_of(read_model) }
57
57
  it { expect(read_model.where(id: invalid_id)).to be_empty }
58
- it { expect(read_model.where(id: id, name: name)).to be_kind_of(Array) }
58
+ it { expect(read_model.where(id: id, name: name)).to be_kind_of(Findable::Collection) }
59
59
  it { expect(read_model.where(id: id, name: name).first).to be_kind_of(read_model) }
60
60
  it { expect(read_model.where(id: invalid_id, name: name)).to be_empty }
61
- it { expect(read_model.where(name: name)).to be_kind_of(Array) }
61
+ it { expect(read_model.where(name: name)).to be_kind_of(Findable::Collection) }
62
62
  it { expect(read_model.where(name: name).first).to be_kind_of(read_model) }
63
63
  it { expect(read_model.where(name: invalid_name)).to be_empty }
64
64
  end
@@ -8,16 +8,16 @@ describe Findable::Query do
8
8
 
9
9
  describe "#data" do
10
10
  it { expect(read_model.query.all).to be_kind_of(Array) }
11
- it { expect(read_model.query.all.size).to eq(1) }
11
+ it { expect(read_model.query.all.size).to eq(CategoryData.size) }
12
12
  end
13
13
 
14
14
  describe "#ids" do
15
15
  it { expect(read_model.query.ids).to be_kind_of(Array) }
16
- it { expect(read_model.query.ids).to eq([1]) }
16
+ it { expect(read_model.query.ids).to eq(CategoryData.map {|h| h[:id]}) }
17
17
  end
18
18
 
19
19
  describe "#count" do
20
- it { expect(read_model.query.count).to eq(1) }
20
+ it { expect(read_model.query.count).to eq(CategoryData.size) }
21
21
  end
22
22
 
23
23
  describe "#find_by_ids" do
@@ -30,7 +30,7 @@ describe Findable::Query do
30
30
 
31
31
  describe "#exists?" do
32
32
  it { expect(read_model.exists?(1)).to be_truthy }
33
- it { expect(read_model.exists?(2)).to be_falsey }
33
+ it { expect(read_model.exists?(100)).to be_falsey }
34
34
  end
35
35
 
36
36
  describe "#insert" do
@@ -20,6 +20,10 @@ require "pry"
20
20
  require "findable"
21
21
  require "findable/associations/active_record_ext"
22
22
 
23
+ Findable.configure do |config|
24
+ config.redis_options = { host: "localhost", port: 6379, db: 10 }
25
+ end
26
+
23
27
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
24
28
 
25
29
  RSpec.configure do |config|
@@ -3,7 +3,7 @@
3
3
  # =========================
4
4
 
5
5
  # Initialize Redis
6
- Redis.current.flushdb
6
+ Findable::Base.query.redis.flushdb
7
7
 
8
8
  # Initialize SQLite
9
9
  ActiveRecord::Base.establish_connection({
@@ -11,24 +11,26 @@ ActiveRecord::Base.establish_connection({
11
11
  database: ":memory:",
12
12
  })
13
13
 
14
- ActiveRecord::Migration.create_table :companies do |t|
14
+ ActiveRecord::Migration.create_table :users do |t|
15
15
  t.string :name
16
+ t.integer :cart_id
17
+ t.string :content_type
18
+ t.integer :content_id
16
19
  end
17
20
 
18
- ActiveRecord::Migration.create_table :stores do |t|
19
- t.string :name
20
- t.integer :company_id
21
+ ActiveRecord::Migration.create_table :statuses do |t|
22
+ t.integer :total_payments
23
+ t.integer :user_id
21
24
  end
22
25
 
23
- ActiveRecord::Migration.create_table :emails do |t|
24
- t.string :address
25
- t.integer :store_id
26
+ ActiveRecord::Migration.create_table :comments do |t|
27
+ t.text :body
26
28
  t.integer :user_id
29
+ t.integer :product_id
27
30
  end
28
31
 
29
32
  ActiveRecord::Migration.create_table :pictures do |t|
30
33
  t.string :name
31
- t.integer :user_id
32
34
  end
33
35
 
34
36
  # =========================
@@ -36,12 +38,12 @@ end
36
38
  # =========================
37
39
 
38
40
  # Model < Findable
39
- %w(Category Product Image User).each do |class_name|
41
+ %w(Category Product Image PurchaseHistory Cart).each do |class_name|
40
42
  Object.const_set(class_name, Class.new(Findable::Base))
41
43
  end
42
44
 
43
45
  # Model < ActiveRecord
44
- %w(Company Store Email Picture).each do |class_name|
46
+ %w(User Comment Status Picture).each do |class_name|
45
47
  Object.const_set(class_name, Class.new(ActiveRecord::Base))
46
48
  end
47
49
 
@@ -49,58 +51,67 @@ ActiveRecord::Base.subclasses.each do |ar|
49
51
  ar.include Findable::Associations::ActiveRecordExt
50
52
  end
51
53
 
52
- # Associations
54
+ # Associations (Findable <=> Findable)
53
55
  Category.has_many :products
54
56
  Product.belongs_to :category
55
57
  Product.has_one :image
56
58
  Image.belongs_to :product
57
59
 
58
- Company.has_many :stores
59
- Store.belongs_to :company
60
- Store.has_one :email
61
- Email.belongs_to :store
60
+ # Associations (ActiveRecord <=> ActiveRecord)
61
+ User.has_many :comments
62
+ User.has_one :status
63
+ Comment.belongs_to :user
64
+ Status.belongs_to :user
62
65
 
63
- User.belongs_to :content, polymorphic: true
66
+ # Associations (Findable <=> ActiveRecord)
67
+ Product.has_many :comments
68
+ Comment.belongs_to :product
64
69
 
65
- User.has_many :pictures
66
- Picture.belongs_to :user
70
+ Cart.has_one :user
71
+ User.belongs_to :cart
67
72
 
68
- User.has_one :email
69
- Email.belongs_to :user
73
+ User.has_many :purchase_histories
74
+ PurchaseHistory.belongs_to :user
70
75
 
71
- Company.has_many :users
72
- User.belongs_to :company
76
+ User.has_one :image
77
+ Image.belongs_to :user
73
78
 
74
- Company.has_one :image
75
- Image.belongs_to :company
79
+ # Polymorphic association
80
+ User.belongs_to :content, polymorphic: true
81
+ Image.belongs_to :content, polymorphic: true
76
82
 
77
83
  # =========================
78
84
  # Data import
79
85
  # =========================
80
- CategoryData = [{id: 1, name: "Book"}]
86
+ CategoryData = [
87
+ {id: 1, name: "Book"},
88
+ {id: 2, name: "Computer"},
89
+ ]
81
90
  Category.query.import(CategoryData)
82
91
 
83
92
  ProductData = [
84
- {id: 1, name: "book 1", category_id: 1},
85
- {id: 2, name: "book 2", category_id: 1},
93
+ {id: 1, name: "book1", category_id: 1},
94
+ {id: 2, name: "book2", category_id: 1},
86
95
  ]
87
96
  Product.query.import(ProductData)
88
97
 
89
98
  ImageData = [
90
- {id: 1, product_id: 1, company_id: 1},
91
- {id: 2, product_id: 2, company_id: 1},
99
+ {id: 1, product_id: 1, user_id: 1, content_type: "User", content_id: 1},
100
+ {id: 2, product_id: 2, user_id: 2, content_type: "Category", content_id: 1},
92
101
  ]
93
102
  Image.query.import(ImageData)
94
103
 
95
- UserData = [
96
- {id: 1, name: "user 1", content_type: "Image", content_id: 1, company_id: 1},
97
- {id: 2, name: "user 2", content_type: "Picture", content_id: 1, company_id: 1}
98
- ]
99
- User.query.import(UserData)
100
-
101
- Company.create!(id: 1, name: "company 1")
102
- Company.create!(id: 2, name: "company 2")
103
- Store.create(id: 1, name: "store 1", company_id: 1)
104
- Email.create!(id: 1, address: "findable@example.com", store_id: 1, user_id: 1)
105
- Picture.create!(id: 1, name: "picture 1", user_id: 1)
106
- Picture.create!(id: 2, name: "picture 2", user_id: 1)
104
+ CartData = [{id: 1}, {id: 2}]
105
+ Cart.query.import(CartData)
106
+
107
+ Picture.create(name: "example.jpg")
108
+ User.create(name: "user1", content_type: "Picture", content_id: Picture.first.id, cart_id: CartData.first[:id])
109
+ User.create(name: "user2", content_type: "Image", content_id: Image.first.id, cart_id: CartData.second[:id])
110
+ User.all.each do |user|
111
+ user.create_status!(total_payments: rand(100_000))
112
+ user.comments.create!(body: "some comment", product_id: Product.take.id)
113
+ end
114
+
115
+ User.all.each do |user|
116
+ PurchaseHistory.create(user_id: user.id)
117
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: findable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - i2bskn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-05 00:00:00.000000000 Z
11
+ date: 2015-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -185,6 +185,7 @@ files:
185
185
  - lib/findable/associations/active_record_ext.rb
186
186
  - lib/findable/associations/utils.rb
187
187
  - lib/findable/base.rb
188
+ - lib/findable/collection.rb
188
189
  - lib/findable/configuration.rb
189
190
  - lib/findable/errors.rb
190
191
  - lib/findable/inspection.rb
@@ -194,6 +195,8 @@ files:
194
195
  - lib/findable/query/namespace.rb
195
196
  - lib/findable/query/serializer.rb
196
197
  - lib/findable/railtie.rb
198
+ - lib/findable/schema.rb
199
+ - lib/findable/schema/conversion.rb
197
200
  - lib/findable/seed.rb
198
201
  - lib/findable/version.rb
199
202
  - lib/generators/findable/install_generator.rb