activerecord-blockwhere 1.0.0 → 1.0.1

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: 6188f0b42749735cf271522b4553caa3824e8ce8
4
- data.tar.gz: 5dac29b2a8de101982f52039e628810e5a57bb01
3
+ metadata.gz: 6f3b8e8805d1f91e2e41e92362468ce1aae18711
4
+ data.tar.gz: 2cea97fbc36a99e611048600c028f3e3f096f6a8
5
5
  SHA512:
6
- metadata.gz: f664af9db26928765b748e3044df7c80cfc0c2fef681e77d5479cd8b3f9697e43151241148a3ad71dfc4aa573675959dfc4cb7f1694c4ab4780abe161411448b
7
- data.tar.gz: 1719c1e6a3565f88b3eb0596382d24041c542deac61d9f15798e6652305f0e01f2d0c664a50d1b5ca0416eb0eda9952f844ce5be922f59305d06e0ca2bec42a6
6
+ metadata.gz: ee18dafb7d43e64f89ab7af77eb7e99050bbe816569f931ccc258e0823a99b1c00b08521a162645e4db9d1117fad865f585534344ad18ce8fcb8c53d4fb74d95
7
+ data.tar.gz: 9bab3b3a0e237745970230f10e5a40cf69ca9d0590d20cefe72de4113e50e2592e81e4abf8ea55de3b9d3ab1ec9f49cbab8ed6d5518cb6e9225d65fb366d25c6
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Activerecord::Blockwhere
1
+ # activeecord-blockwhere
2
2
 
3
3
  Simply conditions DSL for ActiveRecord.
4
4
  It helps using Arel Predications in the block.
@@ -19,30 +19,41 @@ Or install it yourself as:
19
19
 
20
20
  ## Usage
21
21
 
22
- # * person has many entries.
23
- # Person(id: integer, name: string)
24
- # Entry(id: integer, person_id: integer, name: string)
25
-
26
- Person.where { id.eq(1) }.to_sql
27
- # => SELECT "people".* FROM "people" WHERE "people"."id" = 1
28
-
29
- Person.where { !id.eq(1) }.to_sql
30
- # => SELECT "people".* FROM "people" WHERE (NOT ("people"."id" = 1))
31
-
32
- Person.where { id.eq(1) & name.matches('%alice%') }.to_sql
33
- # => SELECT "people".* FROM "people" WHERE ("people"."id" = 1 AND "people"."name" LIKE '%alice%')
34
-
35
- Person.where { id.in([1,2,3]) & name.not_eq('bob') }.to_sql
36
- # => SELECT "people".* FROM "people" WHERE ("people"."id" IN (1, 2, 3) AND "people"."name" != 'bob')
37
-
38
- Person.where { name.eq('alice') | name.eq('bob') }.to_sql
39
- # => SELECT "people".* FROM "people" WHERE (("people"."name" = 'alice' OR "people"."name" = 'bob'))
40
-
41
- # join association
42
- Person.where { name.eq('alice') & entries.name.matches('%hello%') }.to_sql
43
- # => SELECT "people".* FROM "people"
44
- # INNER JOIN "entries" ON "entries"."person_id" = "people"."id"
45
- # WHERE ("people"."name" = 'alice' AND "entries"."name" LIKE '%hello%')
22
+ # * person has many entries.
23
+ # Person(id: integer, name: string)
24
+ # Entry(id: integer, person_id: integer, name: string)
25
+
26
+ Person.where { id.eq(1) }.to_sql
27
+ # => SELECT "people".* FROM "people" WHERE "people"."id" = 1
28
+
29
+ Person.where { !id.eq(1) }.to_sql
30
+ # => SELECT "people".* FROM "people" WHERE (NOT ("people"."id" = 1))
31
+
32
+ Person.where { id.eq(1) & name.matches('%alice%') }.to_sql
33
+ # => SELECT "people".* FROM "people" WHERE ("people"."id" = 1 AND "people"."name" LIKE '%alice%')
34
+
35
+ Person.where { id.in([1,2,3]) & name.not_eq('bob') }.to_sql
36
+ # => SELECT "people".* FROM "people" WHERE ("people"."id" IN (1, 2, 3) AND "people"."name" != 'bob')
37
+
38
+ Person.where { name.eq('alice') | name.eq('bob') }.to_sql
39
+ # => SELECT "people".* FROM "people" WHERE (("people"."name" = 'alice' OR "people"."name" = 'bob'))
40
+
41
+ # join association
42
+ Person.where { name.eq('alice') & entries.name.matches('%hello%') }.to_sql
43
+ # => SELECT "people".* FROM "people"
44
+ # INNER JOIN "entries" ON "entries"."person_id" = "people"."id"
45
+ # WHERE ("people"."name" = 'alice' AND "entries"."name" LIKE '%hello%')
46
+
47
+ # in action method
48
+ def index
49
+ # you can use controller's method in the block. ex: params,request,etc..
50
+ # but cannot use instance variables.
51
+ @person = Person.where { id.eq(params[:id]) }.first
52
+ end
53
+
54
+ ## Introductory articles
55
+
56
+ * [techscore blog (in Japanese)](http://www.techscore.com/blog/2013/05/08/activerecord-blockwhere/ "techscore")
46
57
 
47
58
  ## Contributing
48
59
 
@@ -3,9 +3,12 @@ require "active_record/blockwhere/arel_node_operations"
3
3
 
4
4
  module ActiveRecord
5
5
  module Blockwhere
6
- def where(*args, &block)
6
+ def where(*args)
7
7
  relation = args.empty? ? self : super(*args)
8
- relation = WhereProxy.where(relation, block.binding.eval('self'), &block) if block
8
+ if block_given?
9
+ block = Proc.new
10
+ relation = WhereProxy.where(relation, block.binding.eval('self'), &block)
11
+ end
9
12
  relation
10
13
  end
11
14
  end
@@ -14,4 +17,4 @@ end
14
17
  ActiveSupport.on_load(:active_record) do
15
18
  ActiveRecord::Relation.send :include, ActiveRecord::Blockwhere
16
19
  Arel::Nodes::Node.send :include, ActiveRecord::Blockwhere::ArelNodeOperations
17
- end
20
+ end
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module Blockwhere
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.1"
4
4
  end
5
5
  end
@@ -23,7 +23,7 @@ module ActiveRecord
23
23
  reflection = @relation.reflections[name]
24
24
  if ::ActiveRecord::Reflection::AssociationReflection === reflection
25
25
  @relation = @relation.joins(name) unless @relation.joins_values.include?(name)
26
- return WhereProxy.new(reflection.klass.scoped, @context)
26
+ return WhereProxy.new(reflection.klass.scoped)
27
27
  end
28
28
  if @context && @context.respond_to?(name)
29
29
  return @context.__send__(name, *args, &block)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-blockwhere
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - yuki teraoka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-02 00:00:00.000000000 Z
11
+ date: 2013-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -177,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
177
  version: '0'
178
178
  requirements: []
179
179
  rubyforge_project:
180
- rubygems_version: 2.0.3
180
+ rubygems_version: 2.0.0
181
181
  signing_key:
182
182
  specification_version: 4
183
183
  summary: Simply conditions DSL for ActiveRecord. It helps using Arel Predications