draftsman 0.1.1 → 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: 74e4cf230e28a0fa2b097c33c0a3bb40360b4c3e
4
- data.tar.gz: 549d0072468f067a86480273989d6a0b86118c99
3
+ metadata.gz: 7ecc44a2da54f76db70765c3faf9e515c3aba215
4
+ data.tar.gz: e54643b21e29a16872f83ca756592c2901220db7
5
5
  SHA512:
6
- metadata.gz: 5dfed02ea98a99d534b3833327f4927b47e93ee4237899fe7c75e02ccd660195c4d562b5bf1dbdafbddb0343e19280a945eb773ee80a41dfd7625a7e2d237cc2
7
- data.tar.gz: c4df9a57b0da2602328d995557a867936560965c6f4897d991107abc019789eea7d74ba4a35274e9777f469d353163b167aa00e5f23630b5cd89b2507377d092
6
+ metadata.gz: 5ec70e969b6bf40a9a8f69c87e504d2cd1fd0aa215757f022798b53d9d6d55ecc46d4282459058c277467d0eb47f397470432ab7c08e4d0641c7baf21396ec22
7
+ data.tar.gz: 6bcef513664f7de84d96ec42996a8d4130a37794446b0a8ff8df39866fc556d6dbeb24b2d2f8543c67bd9fdaddb9daadb177c2df475bed0ed7ea6af74a484171
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.0.0-p247
1
+ ruby-2.1.2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.2 - June 3, 2014
4
+
5
+ - Fixed [#4](https://github.com/live-editor/draftsman/issues/4) - Added `referenced_table_name` argument to scopes.
6
+
3
7
  ## v0.1.1 - March 7, 2014
4
8
 
5
9
  - Fixed [#3](https://github.com/minimalorange/draftsman/issues/3) - draft_publication_dependencies not honoring drafts
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- draftsman (0.1.1)
4
+ draftsman (0.2)
5
5
  activerecord (>= 3.0, < 5.0)
6
6
 
7
7
  GEM
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2013 Minimal Orange, LLC
3
+ Copyright (c) 2013-2014 Minimal Orange, LLC
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  this software and associated documentation files (the "Software"), to deal in
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Draftsman v0.1.1 (alpha)
1
+ # Draftsman v0.2 (alpha)
2
2
 
3
3
  Draftsman is a Ruby gem that lets you create draft versions of your database records. If you're developing a system in
4
4
  need of simple drafts or a publishing approval queue, then Draftsman just might be what you need.
@@ -50,7 +50,7 @@ Works well with Rails, Sinatra, or any other application that depends on ActiveR
50
50
  Add Draftsman to your `Gemfile`.
51
51
 
52
52
  ```ruby
53
- gem 'draftsman', '0.1.1'
53
+ gem 'draftsman', '0.2'
54
54
  ```
55
55
 
56
56
  Or if you want to grab the latest from `master`:
@@ -223,6 +223,14 @@ Widget.trashed # Limits to items that have been drafted for deletion (but not
223
223
  Widget.live # Limits to items that have not been drafted for deletion. Best used in an "admin" area in your application.
224
224
  ```
225
225
 
226
+ These scopes optionally take a `referenced_table_name` argument for constructing more advanced queries using `includes`
227
+ eager loading or `joins`. This reduces ambiguity both for SQL queries and for your Ruby code.
228
+
229
+ ```ruby
230
+ # Query live widgets and gears without ambiguity.
231
+ Widget.live.includes(:gears, :sprockets).live(:gears)
232
+ ```
233
+
226
234
  ### Draft Class Methods
227
235
 
228
236
  The `Draftsman::Draft` class has the following methods:
@@ -498,6 +506,8 @@ work on features or find bugs!
498
506
 
499
507
  ## License
500
508
 
509
+ Copyright 2013-2014 Minimal Orange, LLC.
510
+
501
511
  Draftsman is released under the [MIT License][9].
502
512
 
503
513
 
data/draftsman.gemspec CHANGED
@@ -4,9 +4,9 @@ require 'draftsman/version'
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'draftsman'
6
6
  s.version = Draftsman::VERSION
7
- s.summary = "Create draft versions of your ActiveRecord models' data."
7
+ s.summary = "Create draft versions of your ActiveRecord models' data. Works with Ruby on Rails and Sinatra."
8
8
  s.description = s.summary
9
- s.homepage = 'https://github.com/minimalorange/draftsman'
9
+ s.homepage = 'https://github.com/live-editor/draftsman'
10
10
  s.authors = ['Chris Peters']
11
11
  s.email = 'chris@minimalorange.com'
12
12
  s.license = 'MIT'
@@ -74,10 +74,40 @@ module Draftsman
74
74
  belongs_to self.draft_association_name, :class_name => self.draft_class_name, :dependent => :destroy
75
75
 
76
76
  # Scopes
77
- scope :drafted, lambda { where("#{self.draft_association_name}_id IS NOT NULL") }
78
- scope :published, lambda { where("#{self.published_at_attribute_name} IS NOT NULL") }
79
- scope :trashed, lambda { where("#{self.trashed_at_attribute_name} IS NOT NULL") }
80
- scope :live, lambda { where("#{self.trashed_at_attribute_name} IS NULL") }
77
+ scope :drafted, (lambda do |referenced_table_name = nil|
78
+ referenced_table_name = referenced_table_name.present? ? referenced_table_name : table_name
79
+
80
+ if where_not?
81
+ where.not(referenced_table_name => { "#{self.draft_association_name}_id" => nil })
82
+ else
83
+ where("#{referenced_table_name}.#{self.draft_association_name}_id IS NOT NULL")
84
+ end
85
+ end)
86
+
87
+ scope :published, (lambda do |referenced_table_name = nil|
88
+ referenced_table_name = referenced_table_name.present? ? referenced_table_name : table_name
89
+
90
+ if where_not?
91
+ where.not(referenced_table_name => { self.published_at_attribute_name => nil })
92
+ else
93
+ where("#{self.published_at_attribute_name} IS NOT NULL")
94
+ end
95
+ end)
96
+
97
+ scope :trashed, (lambda do |referenced_table_name = nil|
98
+ referenced_table_name = referenced_table_name.present? ? referenced_table_name : table_name
99
+
100
+ if where_not?
101
+ where.not(referenced_table_name => { self.trashed_at_attribute_name => nil })
102
+ else
103
+ where("#{self.trashed_at_attribute_name} IS NOT NULL")
104
+ end
105
+ end)
106
+
107
+ scope :live, (lambda do |referenced_table_name = nil|
108
+ referenced_table_name = referenced_table_name.present? ? referenced_table_name : table_name
109
+ where(referenced_table_name => { self.trashed_at_attribute_name => nil })
110
+ end)
81
111
  end
82
112
 
83
113
  # Returns whether or not `has_drafts` has been called on this model.
@@ -85,6 +115,11 @@ module Draftsman
85
115
  method_defined?(:draftsman_options)
86
116
  end
87
117
 
118
+ # Returns whether or not the included ActiveRecord can do `where.not(...)` style queries.
119
+ def where_not?
120
+ ActiveRecord::VERSION::STRING.to_f >= 4.0
121
+ end
122
+
88
123
  # Serializes attribute changes for `Draft#object_changes` attribute.
89
124
  def serialize_draft_attribute_changes(changes)
90
125
  serialized_attributes.each do |key, coder|
@@ -1,3 +1,3 @@
1
1
  module Draftsman
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -159,14 +159,8 @@ describe Vanilla do
159
159
  describe :drafted do
160
160
  subject { Vanilla.drafted }
161
161
  its(:count) { should eql 1 }
162
-
163
- it 'includes the unpublished item' do
164
- subject.should include drafted_vanilla
165
- end
166
-
167
- it 'does not include the published item' do
168
- subject.should_not include published_vanilla
169
- end
162
+ it { should include drafted_vanilla }
163
+ it { should_not include published_vanilla }
170
164
  end
171
165
 
172
166
  describe :live do
@@ -180,14 +174,8 @@ describe Vanilla do
180
174
  describe :published do
181
175
  subject { Vanilla.published }
182
176
  its(:count) { should eql 1 }
183
-
184
- it 'does not include the unpublished item' do
185
- subject.should_not include drafted_vanilla
186
- end
187
-
188
- it 'includes the published item' do
189
- subject.should include published_vanilla
190
- end
177
+ it { should_not include drafted_vanilla }
178
+ it { subject.should include published_vanilla }
191
179
  end
192
180
 
193
181
  describe :trashed do
metadata CHANGED
@@ -1,149 +1,150 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: draftsman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Peters
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-07 00:00:00.000000000 Z
11
+ date: 2014-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.0'
20
- - - <
20
+ - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '5.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - '>='
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
29
  version: '3.0'
30
- - - <
30
+ - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '5.0'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: capybara
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - '>='
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
40
  type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - '>='
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - '>='
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - '>='
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: railties
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - '>='
65
+ - - ">="
66
66
  - !ruby/object:Gem::Version
67
67
  version: '3.0'
68
- - - <
68
+ - - "<"
69
69
  - !ruby/object:Gem::Version
70
70
  version: '5.0'
71
71
  type: :development
72
72
  prerelease: false
73
73
  version_requirements: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - '>='
75
+ - - ">="
76
76
  - !ruby/object:Gem::Version
77
77
  version: '3.0'
78
- - - <
78
+ - - "<"
79
79
  - !ruby/object:Gem::Version
80
80
  version: '5.0'
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: sinatra
83
83
  requirement: !ruby/object:Gem::Requirement
84
84
  requirements:
85
- - - ~>
85
+ - - "~>"
86
86
  - !ruby/object:Gem::Version
87
87
  version: '1.0'
88
88
  type: :development
89
89
  prerelease: false
90
90
  version_requirements: !ruby/object:Gem::Requirement
91
91
  requirements:
92
- - - ~>
92
+ - - "~>"
93
93
  - !ruby/object:Gem::Version
94
94
  version: '1.0'
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: rspec-rails
97
97
  requirement: !ruby/object:Gem::Requirement
98
98
  requirements:
99
- - - '>='
99
+ - - ">="
100
100
  - !ruby/object:Gem::Version
101
101
  version: '0'
102
102
  type: :development
103
103
  prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
105
  requirements:
106
- - - '>='
106
+ - - ">="
107
107
  - !ruby/object:Gem::Version
108
108
  version: '0'
109
109
  - !ruby/object:Gem::Dependency
110
110
  name: shoulda-matchers
111
111
  requirement: !ruby/object:Gem::Requirement
112
112
  requirements:
113
- - - '>='
113
+ - - ">="
114
114
  - !ruby/object:Gem::Version
115
115
  version: '0'
116
116
  type: :development
117
117
  prerelease: false
118
118
  version_requirements: !ruby/object:Gem::Requirement
119
119
  requirements:
120
- - - '>='
120
+ - - ">="
121
121
  - !ruby/object:Gem::Version
122
122
  version: '0'
123
123
  - !ruby/object:Gem::Dependency
124
124
  name: sqlite3
125
125
  requirement: !ruby/object:Gem::Requirement
126
126
  requirements:
127
- - - ~>
127
+ - - "~>"
128
128
  - !ruby/object:Gem::Version
129
129
  version: '1.2'
130
130
  type: :development
131
131
  prerelease: false
132
132
  version_requirements: !ruby/object:Gem::Requirement
133
133
  requirements:
134
- - - ~>
134
+ - - "~>"
135
135
  - !ruby/object:Gem::Version
136
136
  version: '1.2'
137
- description: Create draft versions of your ActiveRecord models' data.
137
+ description: Create draft versions of your ActiveRecord models' data. Works with Ruby
138
+ on Rails and Sinatra.
138
139
  email: chris@minimalorange.com
139
140
  executables: []
140
141
  extensions: []
141
142
  extra_rdoc_files: []
142
143
  files:
143
- - .gitignore
144
- - .rspec
145
- - .ruby-gemset
146
- - .ruby-version
144
+ - ".gitignore"
145
+ - ".rspec"
146
+ - ".ruby-gemset"
147
+ - ".ruby-version"
147
148
  - CHANGELOG.md
148
149
  - Gemfile
149
150
  - Gemfile.lock
@@ -222,7 +223,7 @@ files:
222
223
  - spec/models/vanilla_spec.rb
223
224
  - spec/models/whitelister_spec.rb
224
225
  - spec/spec_helper.rb
225
- homepage: https://github.com/minimalorange/draftsman
226
+ homepage: https://github.com/live-editor/draftsman
226
227
  licenses:
227
228
  - MIT
228
229
  metadata: {}
@@ -232,20 +233,21 @@ require_paths:
232
233
  - lib
233
234
  required_ruby_version: !ruby/object:Gem::Requirement
234
235
  requirements:
235
- - - '>='
236
+ - - ">="
236
237
  - !ruby/object:Gem::Version
237
238
  version: '0'
238
239
  required_rubygems_version: !ruby/object:Gem::Requirement
239
240
  requirements:
240
- - - '>='
241
+ - - ">="
241
242
  - !ruby/object:Gem::Version
242
243
  version: '0'
243
244
  requirements: []
244
245
  rubyforge_project:
245
- rubygems_version: 2.0.6
246
+ rubygems_version: 2.2.2
246
247
  signing_key:
247
248
  specification_version: 4
248
- summary: Create draft versions of your ActiveRecord models' data.
249
+ summary: Create draft versions of your ActiveRecord models' data. Works with Ruby
250
+ on Rails and Sinatra.
249
251
  test_files:
250
252
  - spec/controllers/informants_controller_spec.rb
251
253
  - spec/controllers/users_controller_spec.rb