thorwald 0.1.0 → 0.1.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: ff771fc61017bb9503b1c888fcbab51e1b32e848
4
- data.tar.gz: 16096eb5bcaca85678bb781a5322819e8410b010
3
+ metadata.gz: eef5378d8599dab8f59020a40480d00b017e32ec
4
+ data.tar.gz: 3db390b3eec39ce26acd8d8294fab998531ac642
5
5
  SHA512:
6
- metadata.gz: b0be3a0b4d868304b66ef6377d9401f97c54ca4f5247a691fb732fbd49763ee2544dac8edefd2a3023107d9a9ed5cd364103e24ff4d05d4a5a62ed481c728a8d
7
- data.tar.gz: 6bf50d63e610d7d4269dbe883ea9f8cf3c1041730e767c8b9a7855567181d6fa9d647ef734b7ff72dbb4eecf0b09f2e1d19ffecc2707eba2f514ee4dc8033c3d
6
+ metadata.gz: a08ec0f0849056f9499e8d982622ccadce3ddd51ad00a87a75e213eb7d0988f03bf809310a6aedd35b11a8ea5e62294c0192c95db89980b106fdd44cb1dcd454
7
+ data.tar.gz: 4034aeab3c5a421997e82ea0e55031a1d24cfadab2a4cbb196d2c52d7b394b3fb4dfa13219518f2f41311496f451a1e6211edb05c111428a909c0a3f50c57203
data/.gitignore CHANGED
@@ -1 +1,3 @@
1
1
  pkg
2
+ Gemfile.lock
3
+ coverage
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,62 @@
1
+ require 'safe_attribute_assignment'
2
+
3
+ class Thorwald::Exporter
4
+ include SafeAttributeAssignment
5
+
6
+ attr_reader :clazz, :params
7
+ attr_accessor :includes, :attribute, :type
8
+
9
+ def initialize(clazz, params, options = {})
10
+ @clazz = clazz
11
+ @params = params
12
+
13
+ options = {
14
+ includes: [],
15
+ attribute: :id
16
+ }.merge(options)
17
+
18
+ assign_attributes(options)
19
+ end
20
+
21
+ def as_json(*args)
22
+ export.as_json(include: includes)
23
+ end
24
+
25
+ private
26
+
27
+ def scoped
28
+ @scoped ||= clazz.where(where, last_record_id).order(attribute)
29
+ end
30
+
31
+ def export
32
+ scoped.limit(count)
33
+ end
34
+
35
+ def last_record_id
36
+ params[:last_record] || clazz.last.try(attribute)
37
+ end
38
+
39
+ def count
40
+ params[:count] || 100
41
+ end
42
+
43
+ def where
44
+ "#{attribute} #{comparator} ?"
45
+ end
46
+
47
+ def comparator
48
+ if is_datetime? || params[:last_record].blank?
49
+ ">="
50
+ else
51
+ ">"
52
+ end
53
+ end
54
+
55
+ def is_datetime?
56
+ type == :datetime
57
+ end
58
+
59
+ def type
60
+ @type ||= %w(updated_at created_at).include?(attribute.to_s) ? :datetime : :id
61
+ end
62
+ end
@@ -1,3 +1,3 @@
1
1
  module Thorwald
2
- VERSION='0.1.0'
2
+ VERSION='0.1.1'
3
3
  end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe Thorwald::Exporter do
4
+ let(:subject) { described_class.new(Document, parameters, options) }
5
+ let(:options) { {} }
6
+ let(:parameters) { {} }
7
+
8
+ before do
9
+ Document.delete_all
10
+ end
11
+
12
+ describe '#as_json' do
13
+ context 'when there are no documents' do
14
+ it 'returns the documents found as json' do
15
+ expect(subject.as_json).to be_empty
16
+ end
17
+ end
18
+
19
+ context 'when there are documents' do
20
+ before do
21
+ 3.times { Document.create }
22
+ end
23
+
24
+ context 'but no paramters where given' do
25
+ it 'returns only the last document' do
26
+ expect(subject.as_json).to eq([Document.last.as_json])
27
+ end
28
+ end
29
+
30
+ context 'and last record parameter is given as the first element' do
31
+ let(:parameters) { { last_record: Document.first.id } }
32
+
33
+ it 'returns all documents but the first' do
34
+ expect(subject.as_json).to eq(Document.all.offset(1).limit(2).as_json)
35
+ end
36
+
37
+ context 'and count is given' do
38
+ let(:parameters) { { last_record: Document.first.id, count: 1 } }
39
+
40
+ it 'returns a limited set' do
41
+ expect(subject.as_json).to eq(Document.all.offset(1).limit(1).as_json)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,31 @@
1
+ require 'simplecov'
2
+ SimpleCov.profiles.define 'gem' do
3
+ add_filter '/spec/'
4
+ end
5
+
6
+ if ENV['CODECLIMATE_REPO_TOKEN']
7
+ require "codeclimate-test-reporter"
8
+ CodeClimate::TestReporter.start
9
+ end
10
+
11
+ SimpleCov.start 'gem'
12
+
13
+ require 'pry-nav'
14
+ require 'thorwald'
15
+
16
+ require 'active_record'
17
+ ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
18
+
19
+ support_files = File.expand_path("spec/support/**/*.rb")
20
+ Dir[support_files].each { |file| require file }
21
+
22
+ RSpec.configure do |config|
23
+ config.run_all_when_everything_filtered = true
24
+ config.filter_run :focus
25
+ config.filter_run_excluding :integration unless ENV['ALL']
26
+
27
+ config.order = 'random'
28
+
29
+ config.before do
30
+ end
31
+ end
@@ -0,0 +1,2 @@
1
+ class Document < ActiveRecord::Base
2
+ end
@@ -0,0 +1,7 @@
1
+ ActiveRecord::Schema.define do
2
+ self.verbose = false
3
+
4
+ create_table :documents, :force => true do |t|
5
+ t.timestamps null: true
6
+ end
7
+ end
@@ -17,7 +17,15 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|gem|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
+ gem.add_runtime_dependency 'safe_attribute_assignment'
21
+ gem.add_runtime_dependency 'activesupport'
22
+
23
+ gem.add_development_dependency "sqlite3"
24
+ gem.add_development_dependency "activerecord"
20
25
  gem.add_development_dependency "bundler"
21
26
  gem.add_development_dependency "rake"
22
27
  gem.add_development_dependency "rspec"
28
+ gem.add_development_dependency 'pry-nav'
29
+ gem.add_development_dependency 'simplecov'
30
+ gem.add_development_dependency 'codeclimate-test-reporter'
23
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thorwald
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darthjee
@@ -10,6 +10,62 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2017-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: safe_attribute_assignment
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sqlite3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activerecord
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
13
69
  - !ruby/object:Gem::Dependency
14
70
  name: bundler
15
71
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +108,48 @@ dependencies:
52
108
  - - ">="
53
109
  - !ruby/object:Gem::Version
54
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry-nav
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: codeclimate-test-reporter
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
55
153
  description: Gem for quick data exposure
56
154
  email:
57
155
  - darthjee@gmail.com
@@ -60,12 +158,17 @@ extensions: []
60
158
  extra_rdoc_files: []
61
159
  files:
62
160
  - ".gitignore"
161
+ - ".rspec"
63
162
  - Gemfile
64
- - Gemfile.lock
65
163
  - LICENSE
66
164
  - Rakefile
67
165
  - lib/thorwald.rb
166
+ - lib/thorwald/exporter.rb
68
167
  - lib/thorwald/version.rb
168
+ - spec/lib/thorwald/exporter_spec.rb
169
+ - spec/spec_helper.rb
170
+ - spec/support/models/document.rb
171
+ - spec/support/schema.rb
69
172
  - thorwald.gemspec
70
173
  homepage: https://github.com/darthjee/thorwald
71
174
  licenses: []
@@ -1,35 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- thorwald (0.1.0)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- diff-lcs (1.3)
10
- rake (12.0.0)
11
- rspec (3.5.0)
12
- rspec-core (~> 3.5.0)
13
- rspec-expectations (~> 3.5.0)
14
- rspec-mocks (~> 3.5.0)
15
- rspec-core (3.5.4)
16
- rspec-support (~> 3.5.0)
17
- rspec-expectations (3.5.0)
18
- diff-lcs (>= 1.2.0, < 2.0)
19
- rspec-support (~> 3.5.0)
20
- rspec-mocks (3.5.0)
21
- diff-lcs (>= 1.2.0, < 2.0)
22
- rspec-support (~> 3.5.0)
23
- rspec-support (3.5.0)
24
-
25
- PLATFORMS
26
- ruby
27
-
28
- DEPENDENCIES
29
- bundler
30
- rake
31
- rspec
32
- thorwald!
33
-
34
- BUNDLED WITH
35
- 1.12.5