static-record 1.0.0.pre.4 → 1.0.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: b60c1fa4bbb64488ee835ee71ca5b98a2d4ac0ec
4
- data.tar.gz: bbc16fa804ca8c6e53ad8af528b0e24951ee701d
3
+ metadata.gz: 5b162063f35ae54889eb3667e905da0e9ded7006
4
+ data.tar.gz: 47cb368f415b140fd8a1edfb0d0871ee557028d1
5
5
  SHA512:
6
- metadata.gz: 3422bf6fc4b9119a593a109414741e53f8b97b1a93a9fac9a3ca57df30dc7b2f41b72526e02489648d54d6d2f8ffc76db81229290ca127b810f7d618d8736d28
7
- data.tar.gz: a97badf91f4997632dc5e3b1e0485cd7a41356af27f85b8dc7cc8986deded9d616d9ea7ba060dd6b220d72d3b5b728e2072f218ebd74c37f10b4fe546a923fc0
6
+ metadata.gz: 2818d1563d8abb371273626a852150de43df729fd2aa8db28229b56f060115ed43e98a381e7df716c8a832c25fb23357807ea69fabf47f2741c20615d485c000
7
+ data.tar.gz: df9d29e83a7d6ba39386710e17857790355667c85c04be06e9b0be4bea8dd8084d13fcd1ab6e4115de1e9e55c9c36ca3c460849af01fcf657c3a1282b245b20d
data/README.rdoc CHANGED
@@ -146,12 +146,8 @@ If you have any question or doubt regarding StaticRecord which you cannot find t
146
146
 
147
147
  If you find a bug please add an issue on GitHub or fork the project and send a pull request.
148
148
 
149
- == Development
149
+ == Future
150
150
 
151
- As StaticRecord is in active development and a full list of feature is already scheduled, I won't be accepting any feature-oriented pull requests before the 1.0.0 release (hopefully before mi-January).
152
-
153
- Here is what will be available soon:
154
151
  - Better documentation
155
- - Support for Date, Datetime and Foreign keys
156
- - Joins
157
152
  - Generators
153
+ - Allow StaticRecord to reference other static records and add possibility to query over relations (joins)
@@ -22,8 +22,6 @@ module StaticRecord
22
22
  end
23
23
 
24
24
  def sql_order
25
- return '' unless @primary_key
26
-
27
25
  ord_sql = ''
28
26
  @order_by.each do |ord|
29
27
  ord_sql += ord_sql.empty? ? ' ORDER BY' : ', '
@@ -18,19 +18,20 @@ module StaticRecord
18
18
 
19
19
  def define_setter(table_name, options)
20
20
  define_method("#{table_name}=") do |static_record|
21
- unless static_record.class.pkey
22
- err = "No primary key has been defined for #{static_record.class}"
23
- raise NoPrimaryKey, err
24
- end
25
-
26
21
  table = __method__.to_s.delete('=')
27
22
  options[:class_name] ||= table.camelize
28
23
  superklass = static_record.class.superclass
24
+
29
25
  unless superklass.to_s == options[:class_name]
30
- err = "Record must be an instance of #{options[:class_name]}"
26
+ err = "Record must be an instance of #{options[:class_name]}, got #{superklass}"
31
27
  raise ClassError, err
32
28
  end
33
29
 
30
+ unless superklass.pkey
31
+ err = "No primary key has been defined for #{superklass.class}"
32
+ raise NoPrimaryKey, err
33
+ end
34
+
34
35
  send(:"#{table}_static_record_type=", static_record.class.name)
35
36
  end
36
37
  end
@@ -67,14 +67,20 @@ module StaticRecord
67
67
  end
68
68
 
69
69
  def first(amount = 1)
70
- @order_by << { :"#{@primary_key}" => :asc } if @order_by.empty?
70
+ @order_by << { :"#{@primary_key}" => :asc } if @primary_key && @order_by.empty?
71
71
  take(amount)
72
72
  end
73
73
 
74
74
  def last(amount = 1)
75
- @order_by << { :"#{@primary_key}" => :desc } if @order_by.empty?
76
- res = take(amount)
77
- res.reverse! if res.is_a?(Array)
75
+ if !@primary_key && @order_by.empty?
76
+ cnt = self.class.new(self, store: @store, primary_key: @primary_key).no_sql.send(:count)
77
+ @sql_offset = [cnt - amount, 0].max
78
+ res = take(amount)
79
+ else
80
+ @order_by << { :"#{@primary_key}" => :desc } if @order_by.empty?
81
+ res = take(amount)
82
+ res.reverse! if res.is_a?(Array)
83
+ end
78
84
  res
79
85
  end
80
86
 
@@ -107,6 +113,11 @@ module StaticRecord
107
113
  self
108
114
  end
109
115
 
116
+ def no_sql
117
+ @only_sql = false
118
+ self
119
+ end
120
+
110
121
  def to_a
111
122
  exec_request
112
123
  end
@@ -1,3 +1,3 @@
1
1
  module StaticRecord
2
- VERSION = '1.0.0.pre.4'.freeze
2
+ VERSION = '1.0.0'.freeze
3
3
  end
@@ -85,6 +85,11 @@ RSpec.describe StaticRecord::Relation, :type => :model do
85
85
  expect(Article.last.class).to eql(ArticleTwo)
86
86
  expect(Article.see_sql_of.last).to eql("SELECT * FROM articles ORDER BY articles.name DESC LIMIT 1")
87
87
  end
88
+
89
+ it 'returns use default sort when no primary key has been defined' do
90
+ expect(Role.last.class).to eql(RoleTwo)
91
+ expect(Role.see_sql_of.last).to eql("SELECT * FROM roles LIMIT 1 OFFSET #{Role.all.count - 1}")
92
+ end
88
93
  end
89
94
 
90
95
  context 'with a parameter' do
@@ -92,6 +97,11 @@ RSpec.describe StaticRecord::Relation, :type => :model do
92
97
  expect(Article.last(2).map(&:class)).to eql([ArticleThree, ArticleTwo])
93
98
  expect(Article.see_sql_of.last(2)).to eql("SELECT * FROM articles ORDER BY articles.name DESC LIMIT 2")
94
99
  end
100
+
101
+ it 'returns up to specified number of records from the end when no primary key is set' do
102
+ expect(Role.last(2).map(&:class)).to eql([RoleOne, RoleTwo])
103
+ expect(Role.see_sql_of.last(2)).to eql("SELECT * FROM roles LIMIT 2 OFFSET #{Role.all.count - 2}")
104
+ end
95
105
  end
96
106
  end
97
107
 
@@ -1,4 +1,4 @@
1
- class RoleOne < Article
1
+ class RoleOne < Role
2
2
  attribute :name, 'Role One'
3
3
  attribute :description, 'This is a description'
4
4
  end
@@ -0,0 +1,4 @@
1
+ class RoleTwo < Role
2
+ attribute :name, 'Role Two'
3
+ attribute :description, 'This is another description'
4
+ end
@@ -15,8 +15,13 @@ RSpec.describe StaticRecord::HasStaticRecord, :type => :module do
15
15
  expect(t.article.name).to eql(article.name)
16
16
  end
17
17
 
18
+ it 'must assign correct instance' do
19
+ expect { Test.new.article = Article.last }.not_to raise_error
20
+ expect { Test.new.article = Role.last }.to raise_error(StaticRecord::ClassError)
21
+ end
22
+
18
23
  it 'cannot add getter to ActiveRecord if no primary key is set' do
19
24
  Test.has_static_record :role
20
- expect { Test.new.role = Role.last }.to raise_error
25
+ expect { Test.new.role = Role.last }.to raise_error(StaticRecord::NoPrimaryKey)
21
26
  end
22
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: static-record
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hugo Chevalier
@@ -173,6 +173,7 @@ files:
173
173
  - spec/test_app/app/models/articles/article_two.rb
174
174
  - spec/test_app/app/models/role.rb
175
175
  - spec/test_app/app/models/roles/role_one.rb
176
+ - spec/test_app/app/models/roles/role_two.rb
176
177
  - spec/test_app/app/models/test.rb
177
178
  - spec/test_app/config/application.rb
178
179
  - spec/test_app/config/boot.rb
@@ -209,9 +210,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
210
  version: '0'
210
211
  required_rubygems_version: !ruby/object:Gem::Requirement
211
212
  requirements:
212
- - - ">"
213
+ - - ">="
213
214
  - !ruby/object:Gem::Version
214
- version: 1.3.1
215
+ version: '0'
215
216
  requirements: []
216
217
  rubyforge_project:
217
218
  rubygems_version: 2.4.8
@@ -235,6 +236,7 @@ test_files:
235
236
  - spec/test_app/app/models/articles/article_two.rb
236
237
  - spec/test_app/app/models/role.rb
237
238
  - spec/test_app/app/models/roles/role_one.rb
239
+ - spec/test_app/app/models/roles/role_two.rb
238
240
  - spec/test_app/app/models/test.rb
239
241
  - spec/test_app/config/application.rb
240
242
  - spec/test_app/config/boot.rb