parelation 0.0.1 → 0.1.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: 037f22447840bf0175afad3ffc9877399f52e45a
4
- data.tar.gz: 245f4049e008a44245cc335f66efe0229e0702b3
3
+ metadata.gz: 909bd90faf2386e45af33c7f28586f14a5ae442c
4
+ data.tar.gz: d8792b67b2a9d034dbdfb17dadae325513de1c92
5
5
  SHA512:
6
- metadata.gz: 4974134e76747012c27f44408d9804040d15c183a03bc3258000e8e04734d46288ba5f1e2e1213cd906678830042e9913ffd6c7b65f196b68f73954e58f82180
7
- data.tar.gz: af3bcdb37c9ba6f84e27855816c6317ab809b800a5fe6519a5e9f76555da0169f9ebdd26cc1d2f318c54908ce4b3d87534fc55e341485c48950761e0395f2403
6
+ metadata.gz: ad4fd5fd7970aa0f453af670ed7875acaf0add58d8105b512d3da7d93d836a21316507d8e5c48f4aeeb6199a869d14b5cae5eef33b8f8ae97c7bcde0dca0e1d4
7
+ data.tar.gz: 5d8dc24b0bd2bb21b2a8b6cab208aec76523d7378bbdef3f465954eac496c8f2b09ed0a358a7c3ba88028ef06aa9a3ab63b276e88d64aa015f4c474e71019764
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+ gem "activerecord", "~> 4.2.0"
3
+ gemspec path: "../"
@@ -2,6 +2,7 @@ language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
4
  - 2.1.0
5
- - rbx-2.2
5
+ - 2.2.0
6
6
  gemfile:
7
7
  - .gemfiles/4.1.gemfile
8
+ - .gemfiles/4.2.gemfile
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Michael van Rooijen
1
+ Copyright (c) 2015 Michael van Rooijen
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # Parelation
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/parelation.svg)](http://badge.fury.io/rb/parelation)
3
4
  [![Code Climate](https://codeclimate.com/github/meskyanichi/parelation.png)](https://codeclimate.com/github/meskyanichi/parelation)
4
5
  [![Build Status](https://travis-ci.org/meskyanichi/parelation.svg)](https://travis-ci.org/meskyanichi/parelation)
5
6
 
@@ -7,21 +8,21 @@ Parelation, for Rails/ActiveRecord 4.1.0+, allows you to query your ActiveRecord
7
8
 
8
9
  This library was developed for- and extracted from [HireFire].
9
10
 
11
+ The documentation can be found on [RubyDoc].
12
+
10
13
  ### Compatibility
11
14
 
12
15
  - Rails/ActiveRecord 4.1.0+
13
16
  - Ruby (MRI) 2.0+
14
- - Ruby (RBX) 2.2+
15
17
 
16
18
  ### Installation
17
19
 
18
- Compile and install the gem from source.
20
+ Add the gem to your Gemfile and run `bundle`.
19
21
 
20
22
  ```rb
21
- gem "parelation", github: "meskyanichi/parelation"
23
+ gem "parelation"
22
24
  ```
23
25
 
24
- *This library won't be hosted on RubyGems.org until it's been tested more in development.*
25
26
 
26
27
  ### Example
27
28
 
@@ -241,7 +242,6 @@ This will tell client developers what parameter failed in the HTTP response. Thi
241
242
  Contributions are welcome, but please conform to these requirements:
242
243
 
243
244
  - Ruby (MRI) 2.0+
244
- - Ruby (RBX) 2.2+
245
245
  - ActiveRecord 4.1.0+
246
246
  - 100% Spec Coverage
247
247
  - Generated by when running the test suite
@@ -267,6 +267,12 @@ rspec spec
267
267
  rubycritic lib
268
268
  ```
269
269
 
270
+ To run the local documentation server:
271
+
272
+ ```
273
+ yard server --reload
274
+ ```
275
+
270
276
  Create a new branch and start hacking:
271
277
 
272
278
  ```
@@ -278,11 +284,11 @@ Submit a pull request.
278
284
 
279
285
  ### Author / License
280
286
 
281
- Copyright (c) 2014 Michael van Rooijen ( [@meskyanichi] )<br />
282
- Released under the MIT [License].
287
+ Released under the [MIT License] by [Michael van Rooijen].
283
288
 
284
- [@meskyanichi]: https://twitter.com/meskyanichi
289
+ [Michael van Rooijen]: https://twitter.com/meskyanichi
285
290
  [HireFire]: http://hirefire.io
286
291
  [Passing Specs]: https://travis-ci.org/meskyanichi/parelation
287
292
  [Code Climate Score]: https://codeclimate.com/github/meskyanichi/parelation
288
- [License]: https://github.com/meskyanichi/parelation/blob/master/LICENSE
293
+ [RubyDoc]: http://rubydoc.info/github/meskyanichi/parelation/master/frames
294
+ [MIT License]: https://github.com/meskyanichi/parelation/blob/master/LICENSE
@@ -3,7 +3,7 @@ module Parelation
3
3
  require "parelation/errors/parameter"
4
4
  end
5
5
 
6
- module Criteria
6
+ class Criteria
7
7
  require "parelation/criteria/select"
8
8
  require "parelation/criteria/limit"
9
9
  require "parelation/criteria/offset"
@@ -1,4 +1,4 @@
1
- module Parelation::Criteria
1
+ class Parelation::Criteria
2
2
 
3
3
  # @return [ActiveRecord::Relation] the current criteria chain
4
4
  #
@@ -14,7 +14,7 @@ module Parelation::Criteria
14
14
 
15
15
  # @param chain [ActiveRecord::Relation]
16
16
  # @param param [String]
17
- # @param value [String, Symbol, Array, Hash]
17
+ # @param value [String, Array, Hash]
18
18
  #
19
19
  def initialize(chain, param, value)
20
20
  @chain = chain
@@ -1,5 +1,4 @@
1
- class Parelation::Criteria::Limit
2
- include Parelation::Criteria
1
+ class Parelation::Criteria::Limit < Parelation::Criteria
3
2
 
4
3
  # @param param [String]
5
4
  # @return [TrueClass, FalseClass]
@@ -1,5 +1,4 @@
1
- class Parelation::Criteria::Offset
2
- include Parelation::Criteria
1
+ class Parelation::Criteria::Offset < Parelation::Criteria
3
2
 
4
3
  # @param param [String]
5
4
  # @return [TrueClass, FalseClass]
@@ -1,5 +1,4 @@
1
- class Parelation::Criteria::Order
2
- include Parelation::Criteria
1
+ class Parelation::Criteria::Order < Parelation::Criteria
3
2
 
4
3
  require_relative "order/object"
5
4
 
@@ -1,5 +1,4 @@
1
- class Parelation::Criteria::Query
2
- include Parelation::Criteria
1
+ class Parelation::Criteria::Query < Parelation::Criteria
3
2
 
4
3
  # @param param [String]
5
4
  # @return [TrueClass, FalseClass]
@@ -1,5 +1,4 @@
1
- class Parelation::Criteria::Select
2
- include Parelation::Criteria
1
+ class Parelation::Criteria::Select < Parelation::Criteria
3
2
 
4
3
  # @param param [String]
5
4
  # @return [TrueClass, FalseClass]
@@ -1,5 +1,4 @@
1
- class Parelation::Criteria::Where
2
- include Parelation::Criteria
1
+ class Parelation::Criteria::Where < Parelation::Criteria
3
2
 
4
3
  require_relative "where/caster"
5
4
  require_relative "where/directional_query_applier"
@@ -22,7 +21,7 @@ class Parelation::Criteria::Where
22
21
  when "where_not"
23
22
  chain.where.not(field => value)
24
23
  when "where_gt", "where_gte", "where_lt", "where_lte"
25
- DirectionalQueryApplier.new(param, criteria, chain).apply
24
+ DirectionalQueryApplier.new(chain, param, field, value).apply
26
25
  end
27
26
  end
28
27
  end
@@ -1,49 +1,53 @@
1
- class Parelation::Criteria::Where::DirectionalQueryApplier
2
-
3
- # @return [Hash] keyword to operator mappings
4
- #
5
- OPERATOR_MAPPING = {
6
- "where_gt" => ">",
7
- "where_gte" => ">=",
8
- "where_lt" => "<",
9
- "where_lte" => "<="
10
- }
11
-
12
- # @return [String]
13
- #
14
- attr_reader :operator
15
-
16
- # @return [Hash]
17
- #
18
- attr_reader :criteria
19
-
20
- # @return [ActiveRecord::Relation]
21
- #
22
- attr_reader :chain
23
-
24
- # @param operator [String] the named operator from the params
25
- # @param criteria [Hash] the data to build query operations with
26
- # @param chain [ActiveRecord::Relation] the chain to apply to
27
- #
28
- def initialize(operator, criteria, chain)
29
- @operator = operator
30
- @criteria = criteria
31
- @chain = chain
32
- end
33
-
34
- # @return [ActiveRecord::Relation] the chain with newly applied operations
35
- #
36
- def apply
37
- criteria.inject(chain) do |chain, (key, value)|
38
- chain.where(sql, key, value)
39
- end
40
- end
41
-
42
- private
43
-
44
- # @return [String] the base SQL template to build queries on-top of
45
- #
46
- def sql
47
- %Q{"#{chain.arel_table.name}".? #{OPERATOR_MAPPING[operator]} ?}
48
- end
1
+ class Parelation::Criteria::Where::DirectionalQueryApplier
2
+
3
+ # @return [Hash] keyword to operator mappings
4
+ #
5
+ OPERATOR_MAPPING = {
6
+ "where_gt" => ">",
7
+ "where_gte" => ">=",
8
+ "where_lt" => "<",
9
+ "where_lte" => "<="
10
+ }
11
+
12
+ # @return [ActiveRecord::Relation]
13
+ #
14
+ attr_reader :chain
15
+
16
+ # @return [String]
17
+ #
18
+ attr_reader :operator
19
+
20
+ # @return [String]
21
+ #
22
+ attr_reader :field
23
+
24
+ # @return [String]
25
+ #
26
+ attr_reader :value
27
+
28
+ # @param chain [ActiveRecord::Relation] the chain to apply to
29
+ # @param operator [String] the named operator from the params
30
+ # @param field [String] the field to query on
31
+ # @param value [String] the value of the query
32
+ #
33
+ def initialize(chain, operator, field, value)
34
+ @chain = chain
35
+ @operator = operator
36
+ @field = field
37
+ @value = value
49
38
  end
39
+
40
+ # @return [ActiveRecord::Relation] the chain with newly applied operations
41
+ #
42
+ def apply
43
+ chain.where(sql, field, value)
44
+ end
45
+
46
+ private
47
+
48
+ # @return [String] the base SQL template to build queries on-top of
49
+ #
50
+ def sql
51
+ %Q{"#{chain.arel_table.name}".? #{OPERATOR_MAPPING[operator]} ?}
52
+ end
53
+ end
@@ -1,3 +1,3 @@
1
1
  module Parelation
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -18,12 +18,11 @@ Gem::Specification.new do |spec|
18
18
 
19
19
  spec.add_dependency "activerecord", ">= 4.1.0"
20
20
  spec.add_development_dependency "bundler"
21
- spec.add_development_dependency "rake"
22
- spec.add_development_dependency "rspec"
23
- spec.add_development_dependency "mocha"
24
- spec.add_development_dependency "sqlite3"
25
- spec.add_development_dependency "database_cleaner"
26
- spec.add_development_dependency "pry"
27
- spec.add_development_dependency "simplecov"
28
- spec.add_development_dependency "yard"
21
+ spec.add_development_dependency "rake", "~> 10.4.2"
22
+ spec.add_development_dependency "rspec", "~> 3.1.0"
23
+ spec.add_development_dependency "sqlite3", "~> 1.3.10"
24
+ spec.add_development_dependency "database_cleaner", "~> 1.4.0"
25
+ spec.add_development_dependency "pry", "~> 0.10.1"
26
+ spec.add_development_dependency "simplecov", "~> 0.9.1"
27
+ spec.add_development_dependency "yard", "~> 0.8.7.6"
29
28
  end
@@ -22,8 +22,9 @@ describe Parelation::Applier do
22
22
  "offset" => "100"
23
23
  }
24
24
 
25
- criteria = klass.new(Project.create.tickets, params).apply
26
- ar_query = Project.create.tickets
25
+ project = Project.create
26
+ criteria = klass.new(project.tickets, params).apply
27
+ ar_query = project.tickets
27
28
  .select(:id, :name, :state, :message)
28
29
  .where(state: ["open", "pending"])
29
30
  .where.not(state: "closed")
@@ -8,13 +8,6 @@ SimpleCov.start
8
8
  require "parelation"
9
9
 
10
10
  RSpec.configure do |config|
11
- config.mock_framework = :mocha
12
-
13
- config.before do
14
- DatabaseCleaner.start
15
- end
16
-
17
- config.after do
18
- DatabaseCleaner.clean
19
- end
11
+ config.before { DatabaseCleaner.start }
12
+ config.after { DatabaseCleaner.clean }
20
13
  end
@@ -1,7 +1,6 @@
1
- ActiveRecord::Base
2
- .logger = Logger.new(LOG_PATH)
3
- ActiveRecord::Base
4
- .establish_connection(adapter: "sqlite3", database: ":memory:")
1
+ ActiveRecord::Base.establish_connection(
2
+ adapter: "sqlite3", database: ":memory:"
3
+ )
5
4
 
6
5
  class Schema < ActiveRecord::Migration
7
6
 
@@ -1,14 +1,8 @@
1
- require "fileutils"
2
- require "logger"
3
1
  require "pry"
4
2
  require "sqlite3"
5
3
  require "active_record"
6
4
 
7
5
  ROOT_PATH = File.expand_path("../../..", __FILE__)
8
6
  SPEC_PATH = File.join(ROOT_PATH, "spec")
9
- TMP_PATH = File.join(ROOT_PATH, "tmp")
10
- LOG_PATH = File.join(TMP_PATH, "parelation.log")
11
-
12
- FileUtils.mkdir_p(TMP_PATH)
13
7
 
14
8
  require "#{SPEC_PATH}/support/db"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parelation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael van Rooijen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-19 00:00:00.000000000 Z
11
+ date: 2015-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -42,114 +42,100 @@ dependencies:
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 10.4.2
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 10.4.2
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 3.1.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: mocha
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
68
+ version: 3.1.0
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: sqlite3
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - ">="
73
+ - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '0'
75
+ version: 1.3.10
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - ">="
80
+ - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '0'
82
+ version: 1.3.10
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: database_cleaner
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - ">="
87
+ - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '0'
89
+ version: 1.4.0
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - ">="
94
+ - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '0'
96
+ version: 1.4.0
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: pry
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
- - - ">="
101
+ - - "~>"
116
102
  - !ruby/object:Gem::Version
117
- version: '0'
103
+ version: 0.10.1
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
- - - ">="
108
+ - - "~>"
123
109
  - !ruby/object:Gem::Version
124
- version: '0'
110
+ version: 0.10.1
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: simplecov
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
- - - ">="
115
+ - - "~>"
130
116
  - !ruby/object:Gem::Version
131
- version: '0'
117
+ version: 0.9.1
132
118
  type: :development
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
- - - ">="
122
+ - - "~>"
137
123
  - !ruby/object:Gem::Version
138
- version: '0'
124
+ version: 0.9.1
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: yard
141
127
  requirement: !ruby/object:Gem::Requirement
142
128
  requirements:
143
- - - ">="
129
+ - - "~>"
144
130
  - !ruby/object:Gem::Version
145
- version: '0'
131
+ version: 0.8.7.6
146
132
  type: :development
147
133
  prerelease: false
148
134
  version_requirements: !ruby/object:Gem::Requirement
149
135
  requirements:
150
- - - ">="
136
+ - - "~>"
151
137
  - !ruby/object:Gem::Version
152
- version: '0'
138
+ version: 0.8.7.6
153
139
  description:
154
140
  email:
155
141
  - michael@vanrooijen.io
@@ -158,6 +144,7 @@ extensions: []
158
144
  extra_rdoc_files: []
159
145
  files:
160
146
  - ".gemfiles/4.1.gemfile"
147
+ - ".gemfiles/4.2.gemfile"
161
148
  - ".gitignore"
162
149
  - ".rspec"
163
150
  - ".travis.yml"
@@ -213,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
213
200
  version: '0'
214
201
  requirements: []
215
202
  rubyforge_project:
216
- rubygems_version: 2.2.2
203
+ rubygems_version: 2.4.5
217
204
  signing_key:
218
205
  specification_version: 4
219
206
  summary: Translates HTTP parameters to ActiveRecord queries.