flounder 0.9.5 → 0.9.6

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: 5e50bc0d92b9351ee20f0dbf9ca3881acf3c58a7
4
- data.tar.gz: 45da1bd52d62d5fd874f45788564d068e1c47e3a
3
+ metadata.gz: 7f8e5bfe7c23126db0ec99a746217736f7e45577
4
+ data.tar.gz: d69fc270320c38da007f28e1bb8a426e000dd828
5
5
  SHA512:
6
- metadata.gz: 87dfe61309ca308686f916ad8475649210720162d660426a6dbaf43dde7e23d8be1c3bc4ce893a901a3623157bc8a2127ff4a52b1f97b9f1f04e5748f5e9bce4
7
- data.tar.gz: 067d2ef4f6e7adc18e4a1c9a4ef1b5c11ce0bcc00d7ad95648776cccbbcfaf0835e2f995dfa9aec8a633aa2d1cec2cec6354194bcc552ae0400d66da4cbd37a9
6
+ metadata.gz: cadf55075780bd232fdae1b7aecf695d6a7772f439a696c04ad93b30562ed9e664d781cdfb0e5a4eb5c411eeaccc015b564b0413a25b59abbd3cdfd588de8b2c
7
+ data.tar.gz: 24b28594cd17524a688982771b87864bf9de0bb9009aa2b93fedf36b09e5ad3e223432e50a8fa03b4f65a4aea1a36eb1c39085521d43c6a74f806c360a2aa6bd
data/Gemfile.lock ADDED
@@ -0,0 +1,33 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ flounder (0.8.1)
5
+ arel (~> 5, > 5.0.1)
6
+ connection_pool (~> 2)
7
+ hashie (~> 3, >= 3.2)
8
+ pg (> 0.17)
9
+
10
+ GEM
11
+ remote: https://rubygems.org/
12
+ specs:
13
+ ae (1.8.2)
14
+ ansi
15
+ ansi (1.4.3)
16
+ arel (5.0.1.20140414130214)
17
+ brass (1.2.1)
18
+ connection_pool (2.0.0)
19
+ facets (2.9.3)
20
+ hashie (3.2.0)
21
+ pg (0.17.1)
22
+ qed (2.9.1)
23
+ ansi
24
+ brass
25
+ facets (>= 2.8)
26
+
27
+ PLATFORMS
28
+ ruby
29
+
30
+ DEPENDENCIES
31
+ ae
32
+ flounder!
33
+ qed
data/HISTORY CHANGED
@@ -20,5 +20,4 @@
20
20
 
21
21
  0.9.5
22
22
  + subquery support
23
- + localized where as in where(entity, :field => value)
24
23
 
data/flounder.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "flounder"
5
- s.version = '0.9.5'
5
+ s.version = '0.9.6'
6
6
  s.summary = "Flounder is a way to write SQL simply in Ruby. It deals with everything BUT object relational mapping. "
7
7
  s.email = "kaspar.schiess@technologyastronauts.ch"
8
8
  s.homepage = "https://bitbucket.org/technologyastronauts/oss_flounder"
@@ -31,22 +31,12 @@ module Flounder::Query
31
31
  # query.where(:id.noteq => 1) # ... WHERE id != 1
32
32
  #
33
33
  def where *conditions
34
- conditions = conditions.dup
35
-
36
- resolve_entity = entity
37
-
38
- # is the first argument an entity? if yes, interpret field names relative
39
- # to that entity.
40
- if conditions.size > 1 && conditions.first.kind_of?(Flounder::Entity)
41
- resolve_entity = conditions.shift
42
- end
43
-
44
34
  # is this a hash? extract the first element
45
35
  if conditions.size == 1 && conditions.first.kind_of?(Hash)
46
36
  conditions = conditions.first
47
37
 
48
38
  conditions.each do |k, v|
49
- manager.where(transform_tuple(resolve_entity, k, v))
39
+ manager.where(transform_tuple(k, v))
50
40
  end
51
41
  return self
52
42
  end
@@ -135,31 +125,21 @@ module Flounder::Query
135
125
  # * #where
136
126
  # * #on
137
127
  #
138
- def transform_tuple entity, field, value
128
+ def transform_tuple field, value
139
129
  if value.kind_of? Flounder::Field
140
130
  value = value.arel_field
141
131
  end
142
132
 
143
- if defined?(DataMapper) &&
144
- defined?(DataMapper::Query::Operator) &&
145
- field.kind_of?(DataMapper::Query::Operator)
146
-
147
- # interop: datamapper hijacks some of our operators, let's reverse this
148
- field = Flounder::SymbolExtensions::Modifier.new(
149
- field.target, field.operator)
150
- end
151
-
152
133
  case field
153
134
  # covers: :field_a => ...
154
135
  when Symbol
155
- join_and_condition_part(entity, entity[field].arel_field, value)
136
+ join_and_condition_part(entity[field].arel_field, value)
156
137
  # covers: entity[:field] => ...
157
138
  when Flounder::Field
158
- join_and_condition_part(entity, field.arel_field, value)
139
+ join_and_condition_part(field.arel_field, value)
159
140
  # covers: :field_a.noteq => ...
160
141
  when Flounder::SymbolExtensions::Modifier
161
142
  join_and_condition_part(
162
- entity,
163
143
  field.to_arel_field(entity),
164
144
  value,
165
145
  field.kind)
@@ -167,7 +147,7 @@ module Flounder::Query
167
147
  fail "Could not transform condition part. (#{field.inspect}, #{value.inspect})"
168
148
  end
169
149
  end
170
- def join_and_condition_part entity, arel_field, value, kind=:eq
150
+ def join_and_condition_part arel_field, value, kind=:eq
171
151
  case value
172
152
  # covers subselects
173
153
  when Flounder::Query::Base
@@ -31,6 +31,10 @@ module Flounder::Query
31
31
  attr_reader :projection_prefixes
32
32
 
33
33
  def _join join_node, entity
34
+ if entity.kind_of?(Symbol)
35
+ entity = domain[entity]
36
+ end
37
+
34
38
  @last_join = entity
35
39
 
36
40
  table = entity.table
@@ -66,7 +70,7 @@ module Flounder::Query
66
70
  def on join_conditions
67
71
  join_conditions.each do |k, v|
68
72
  manager.on(
69
- transform_tuple(entity, k, join_field(v)))
73
+ transform_tuple(k, join_field(v)))
70
74
  end
71
75
  self
72
76
  end
data/lib/flounder.rb CHANGED
@@ -31,11 +31,6 @@ module_function
31
31
  def domain connection, &block
32
32
  Domain.new(connection).tap { |d| yield d if block_given? }
33
33
  end
34
-
35
- def literal str
36
- Arel::Nodes::SqlLiteral.new(str)
37
- end
38
- module_function :literal
39
34
  end
40
35
 
41
36
  Symbol.send(:include, Flounder::SymbolExtensions)
data/qed/index.md CHANGED
@@ -63,13 +63,6 @@ Fields can be used fully qualified by going through the entity.
63
63
  assert generates_sql("SELECT [fields] FROM \"users\" WHERE \"users\".\"user_id\" = \"users\".\"approver_id\"")
64
64
  ~~~
65
65
 
66
- By default, symbols are interpreted as field names in the entity that you start your query with. But you can localize your `#where` clause to any other entity.
67
-
68
- ~~~ruby
69
- users.where(posts, :id => 1).
70
- assert generates_sql("SELECT [fields] FROM \"users\" WHERE \"posts\".\"id\" = 1")
71
- ~~~
72
-
73
66
  # Some JOINs
74
67
 
75
68
  Here are some non-crazy joins that also work.
@@ -82,6 +75,16 @@ Here are some non-crazy joins that also work.
82
75
  assert generates_sql(%Q(SELECT [fields] FROM "users" LEFT OUTER JOIN "posts" ON "users"."id" = "posts"."user_id"))
83
76
  ~~~
84
77
 
78
+ Join also accepts symbols as argument - these will be turned into entities.
79
+
80
+ ~~~ruby
81
+ domain[:users].join(:posts).on(:id => :user_id).
82
+ assert generates_sql(%Q(SELECT [fields] FROM "users" INNER JOIN "posts" ON "users"."id" = "posts"."user_id"))
83
+
84
+ domain[:users].outer_join(:posts).on(:id => :user_id).
85
+ assert generates_sql(%Q(SELECT [fields] FROM "users" LEFT OUTER JOIN "posts" ON "users"."id" = "posts"."user_id"))
86
+ ~~~
87
+
85
88
  Joining presents an interesting dilemma. There are two ways of joining things together, given three tables. The sequence A.B.C might mean to join A to B and C; it might also be interpreted to mean to join A to B and B to C. Here's how we solve this.
86
89
 
87
90
  ~~~ruby
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flounder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ version: 0.9.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kaspar Schiess
@@ -88,11 +88,11 @@ extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
90
  - Gemfile
91
+ - Gemfile.lock
91
92
  - HACKING
92
93
  - HISTORY
93
94
  - LICENSE
94
95
  - README
95
- - flounder-0.9.4.gem
96
96
  - flounder.gemspec
97
97
  - lib/flounder.rb
98
98
  - lib/flounder/connection.rb
data/flounder-0.9.4.gem DELETED
Binary file