microscope 0.4.2 → 0.5
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 +4 -4
- data/.travis.yml +9 -0
- data/lib/microscope/scope.rb +8 -0
- data/lib/microscope/scope/datetime_scope.rb +9 -10
- data/lib/microscope/version.rb +1 -1
- data/microscope.gemspec +2 -0
- data/spec/spec_helper.rb +6 -9
- data/spec/support/macros/database/database_adapter.rb +9 -0
- data/spec/support/macros/database/mysql2_adapter.rb +16 -0
- data/spec/support/macros/database/postgresql_adapter.rb +17 -0
- data/spec/support/macros/database/sqlite3_adapter.rb +14 -0
- data/spec/support/macros/database_macros.rb +4 -15
- metadata +37 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ce7b5f37e16e39e35c66a3656f23102f8e93cf0
|
4
|
+
data.tar.gz: c9e3f907ff0e7115aad4b1e6fea83554c6669c3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8797bc1a795441eb0c4a90028ea8a94fade80a51a2883848be7ec2c065cccaac3911cbc39c34e1d28043653af376d18f5bfcd495c6dac4badbf9b34274cc5f2b
|
7
|
+
data.tar.gz: 416d448370602b907d27a6713cd180a93b3510b9ac88f66ba12ab9094af21b3fc1563fcfce8498b32f2ad2d2e74f4315facda104e67d144c3b8e90c48da1d566
|
data/.travis.yml
CHANGED
@@ -8,4 +8,13 @@ gemfile:
|
|
8
8
|
- gemfiles/Gemfile.activerecord-4.0
|
9
9
|
- gemfiles/Gemfile.activerecord-3.2.x
|
10
10
|
|
11
|
+
env:
|
12
|
+
- DB_ADAPTER=sqlite3
|
13
|
+
- DB_ADAPTER=mysql2
|
14
|
+
- DB_ADAPTER=postgresql
|
15
|
+
|
16
|
+
before_script:
|
17
|
+
- mysql -e 'create database microscope_test;'
|
18
|
+
- psql -c 'create database microscope_test;' -U postgres
|
19
|
+
|
11
20
|
script: "echo 'DO IT' && bundle exec rake spec"
|
data/lib/microscope/scope.rb
CHANGED
@@ -7,6 +7,14 @@ module Microscope
|
|
7
7
|
@table_name = model.name.tableize
|
8
8
|
end
|
9
9
|
|
10
|
+
def quoted_field
|
11
|
+
@quoted_field ||= "#{ActiveRecord::Base.connection.quote_table_name(@table_name)}.#{ActiveRecord::Base.connection.quote_column_name(@field_name)}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def cropped_field
|
15
|
+
@cropped_field ||= @field_name.gsub(@cropped_field_regex, '')
|
16
|
+
end
|
17
|
+
|
10
18
|
# Inject ActiveRecord scopes into a model
|
11
19
|
def self.inject_scopes(model, fields, options = {})
|
12
20
|
fields.each do |field|
|
@@ -11,7 +11,6 @@ module Microscope
|
|
11
11
|
|
12
12
|
def apply
|
13
13
|
return unless @field_name =~ @cropped_field_regex
|
14
|
-
@cropped_field = @field_name.gsub(@cropped_field_regex, '')
|
15
14
|
|
16
15
|
model.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
17
16
|
#{before_scopes}
|
@@ -25,30 +24,30 @@ module Microscope
|
|
25
24
|
|
26
25
|
def before_scopes
|
27
26
|
<<-RUBY
|
28
|
-
scope "#{
|
29
|
-
scope "#{
|
30
|
-
scope "#{
|
27
|
+
scope "#{cropped_field}_before", lambda { |time| where('#{quoted_field} < ?', time) }
|
28
|
+
scope "#{cropped_field}_before_or_at", lambda { |time| where('#{quoted_field} <= ?', time) }
|
29
|
+
scope "#{cropped_field}_before#{@now_suffix}", lambda { where('#{quoted_field} < ?', #{@now}) }
|
31
30
|
RUBY
|
32
31
|
end
|
33
32
|
|
34
33
|
def after_scopes
|
35
34
|
<<-RUBY
|
36
|
-
scope "#{
|
37
|
-
scope "#{
|
38
|
-
scope "#{
|
35
|
+
scope "#{cropped_field}_after", lambda { |time| where('#{quoted_field} > ?', time) }
|
36
|
+
scope "#{cropped_field}_after_or_at", lambda { |time| where('#{quoted_field} >= ?', time) }
|
37
|
+
scope "#{cropped_field}_after#{@now_suffix}", lambda { where('#{quoted_field} > ?', #{@now}) }
|
39
38
|
RUBY
|
40
39
|
end
|
41
40
|
|
42
41
|
def between_scopes
|
43
42
|
<<-RUBY
|
44
|
-
scope "#{
|
43
|
+
scope "#{cropped_field}_between", lambda { |range| where("#{@field_name}" => range) }
|
45
44
|
RUBY
|
46
45
|
end
|
47
46
|
|
48
47
|
def boolean_scopes
|
49
48
|
<<-RUBY
|
50
|
-
scope "#{
|
51
|
-
scope "not_#{
|
49
|
+
scope "#{cropped_field}", lambda { where('#{quoted_field} IS NOT NULL AND #{quoted_field} <= ?', #{@now}) }
|
50
|
+
scope "not_#{cropped_field}", lambda { where('#{quoted_field} IS NULL OR #{quoted_field} > ?', #{@now}) }
|
52
51
|
RUBY
|
53
52
|
end
|
54
53
|
end
|
data/lib/microscope/version.rb
CHANGED
data/microscope.gemspec
CHANGED
@@ -25,4 +25,6 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency 'rake'
|
26
26
|
spec.add_development_dependency 'rspec'
|
27
27
|
spec.add_development_dependency 'sqlite3'
|
28
|
+
spec.add_development_dependency 'pg'
|
29
|
+
spec.add_development_dependency 'mysql2', '~> 0.3.13'
|
28
30
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,24 +2,21 @@ $:.unshift File.expand_path('../lib', __FILE__)
|
|
2
2
|
|
3
3
|
require 'rspec'
|
4
4
|
require 'sqlite3'
|
5
|
+
require 'mysql2'
|
6
|
+
require 'pg'
|
5
7
|
|
6
8
|
require 'microscope'
|
7
9
|
|
8
10
|
# Require our macros and extensions
|
9
|
-
Dir[File.expand_path('../../spec/support/macros
|
11
|
+
Dir[File.expand_path('../../spec/support/macros/**/*.rb', __FILE__)].map(&method(:require))
|
10
12
|
|
11
13
|
RSpec.configure do |config|
|
12
14
|
# Include our macros
|
13
15
|
config.include DatabaseMacros
|
14
16
|
config.include ModelMacros
|
15
17
|
|
16
|
-
config.before
|
17
|
-
|
18
|
-
setup_database
|
19
|
-
end
|
20
|
-
|
21
|
-
config.after(:each) do
|
22
|
-
# Make sure we remove our test database file
|
23
|
-
cleanup_database
|
18
|
+
config.before :each do
|
19
|
+
adapter = ENV['DB_ADAPTER'] || 'sqlite3'
|
20
|
+
setup_database(adapter: adapter, database: 'microscope_test')
|
24
21
|
end
|
25
22
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative 'database_adapter'
|
2
|
+
|
3
|
+
class Mysql2Adapter < DatabaseAdapter
|
4
|
+
def database_configuration
|
5
|
+
{
|
6
|
+
adapter: 'mysql2',
|
7
|
+
database: @database,
|
8
|
+
username: 'travis',
|
9
|
+
encoding: 'utf8'
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
def reset_database!
|
14
|
+
ActiveRecord::Base.connection.execute("SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') FROM information_schema.tables WHERE table_schema = '#{@database}';")
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'database_adapter'
|
2
|
+
|
3
|
+
class PostgresqlAdapter < DatabaseAdapter
|
4
|
+
def database_configuration
|
5
|
+
{
|
6
|
+
adapter: 'postgresql',
|
7
|
+
database: @database,
|
8
|
+
user: 'postgres',
|
9
|
+
schema_search_path: 'public'
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
def reset_database!
|
14
|
+
ActiveRecord::Base.connection.execute('drop schema public cascade;')
|
15
|
+
ActiveRecord::Base.connection.execute('create schema public;')
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'database_adapter'
|
2
|
+
|
3
|
+
class Sqlite3Adapter < DatabaseAdapter
|
4
|
+
def database_configuration
|
5
|
+
{
|
6
|
+
adapter: 'sqlite3',
|
7
|
+
database: ':memory:'
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
def reset_database!
|
12
|
+
ActiveRecord::Base.connection.execute("select 'drop table ' || name || ';' from sqlite_master where type = 'table';")
|
13
|
+
end
|
14
|
+
end
|
@@ -11,23 +11,12 @@ module DatabaseMacros
|
|
11
11
|
klass.new.up
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
def setup_database
|
19
|
-
# Make sure the test database file is gone
|
20
|
-
cleanup_database
|
21
|
-
|
22
|
-
# Establish the connection
|
23
|
-
SQLite3::Database.new FileUtils.touch(DatabaseMacros.database_file).first
|
24
|
-
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: DatabaseMacros.database_file)
|
14
|
+
def setup_database(opts = {})
|
15
|
+
adapter = "#{opts[:adapter].capitalize}Adapter".constantize.new(database: opts[:database])
|
16
|
+
adapter.establish_connection!
|
17
|
+
adapter.reset_database!
|
25
18
|
|
26
19
|
# Silence everything
|
27
20
|
ActiveRecord::Base.logger = ActiveRecord::Migration.verbose = false
|
28
21
|
end
|
29
|
-
|
30
|
-
def cleanup_database
|
31
|
-
FileUtils.rm(DatabaseMacros.database_file) if File.exists?(DatabaseMacros.database_file)
|
32
|
-
end
|
33
22
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: microscope
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.5'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Prévost
|
@@ -95,6 +95,34 @@ dependencies:
|
|
95
95
|
- - '>='
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: pg
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: mysql2
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ~>
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 0.3.13
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.3.13
|
98
126
|
description: Microscope adds useful scopes targeting ActiveRecord boolean and datetime
|
99
127
|
fields.
|
100
128
|
email:
|
@@ -130,6 +158,10 @@ files:
|
|
130
158
|
- spec/microscope/scope/datetime_scope_spec.rb
|
131
159
|
- spec/microscope_spec.rb
|
132
160
|
- spec/spec_helper.rb
|
161
|
+
- spec/support/macros/database/database_adapter.rb
|
162
|
+
- spec/support/macros/database/mysql2_adapter.rb
|
163
|
+
- spec/support/macros/database/postgresql_adapter.rb
|
164
|
+
- spec/support/macros/database/sqlite3_adapter.rb
|
133
165
|
- spec/support/macros/database_macros.rb
|
134
166
|
- spec/support/macros/model_macros.rb
|
135
167
|
homepage: https://github.com/mirego/microscope
|
@@ -165,5 +197,9 @@ test_files:
|
|
165
197
|
- spec/microscope/scope/datetime_scope_spec.rb
|
166
198
|
- spec/microscope_spec.rb
|
167
199
|
- spec/spec_helper.rb
|
200
|
+
- spec/support/macros/database/database_adapter.rb
|
201
|
+
- spec/support/macros/database/mysql2_adapter.rb
|
202
|
+
- spec/support/macros/database/postgresql_adapter.rb
|
203
|
+
- spec/support/macros/database/sqlite3_adapter.rb
|
168
204
|
- spec/support/macros/database_macros.rb
|
169
205
|
- spec/support/macros/model_macros.rb
|