azeroth 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 070e83adb3fe3ed96c09855aa29fab254a2ef308
4
- data.tar.gz: 69fc49613f73681b30644eb5f4d8bda4c3c3481e
3
+ metadata.gz: a25a470aa0a7ec2b2b2288071d32e319f45065d9
4
+ data.tar.gz: a4763a44d43aa42ff5b89c92d142fc11fe8ebc34
5
5
  SHA512:
6
- metadata.gz: 9474d8e8e18e871d73b55a22edbedae52c385b9af26bc0a7550a3b92055a2cd6f4842c1f184bfd922b7826932e97325a4ea9eef4087ef39c87f3de15da0cbef2
7
- data.tar.gz: b429dd9a425cf49039fe663f110202b6ec3731b73909ec31856a2b4f8d75f1fcfe6003766b6f0864c9ff0bc5f50dc24fa3b3d2a1d3b63949edc5f465acadcf8b
6
+ metadata.gz: ed300989d5b19a336b39b08bc08f0c7385030af5258a76326411b67f0776e4f778532e0a19c3581a6871a9f2f54922c1218acc68bc50ba462567ae0c703d260f
7
+ data.tar.gz: 66c85f82d6a6b58b47a8e7a1bf14cc3fcec1cd7a1ea98a16b1a8634ea775b3cf7fb7e069d122033c8b32d854e40ceab550f4f27ed55ec04ec1df53239bfded87
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ coverage/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
data/Gemfile.lock ADDED
@@ -0,0 +1,116 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ azeroth (0.0.2)
5
+ activesupport (~> 5.x)
6
+ darthjee-active_ext (>= 1.3.2)
7
+ sinclair (>= 1.0.0)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ actionpack (5.2.0)
13
+ actionview (= 5.2.0)
14
+ activesupport (= 5.2.0)
15
+ rack (~> 2.0)
16
+ rack-test (>= 0.6.3)
17
+ rails-dom-testing (~> 2.0)
18
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
19
+ actionview (5.2.0)
20
+ activesupport (= 5.2.0)
21
+ builder (~> 3.1)
22
+ erubi (~> 1.4)
23
+ rails-dom-testing (~> 2.0)
24
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
25
+ activemodel (5.2.0)
26
+ activesupport (= 5.2.0)
27
+ activerecord (5.2.0)
28
+ activemodel (= 5.2.0)
29
+ activesupport (= 5.2.0)
30
+ arel (>= 9.0)
31
+ activesupport (5.2.0)
32
+ concurrent-ruby (~> 1.0, >= 1.0.2)
33
+ i18n (>= 0.7, < 2)
34
+ minitest (~> 5.1)
35
+ tzinfo (~> 1.1)
36
+ arel (9.0.0)
37
+ builder (3.2.3)
38
+ coderay (1.1.2)
39
+ concurrent-ruby (1.0.5)
40
+ crass (1.0.4)
41
+ darthjee-active_ext (1.3.2)
42
+ activesupport (>= 5.x)
43
+ darthjee-core_ext (>= 1.5.6)
44
+ darthjee-core_ext (1.5.6)
45
+ activesupport (>= 5.x)
46
+ diff-lcs (1.3)
47
+ docile (1.3.1)
48
+ erubi (1.7.1)
49
+ i18n (1.0.1)
50
+ concurrent-ruby (~> 1.0)
51
+ json (2.1.0)
52
+ loofah (2.2.2)
53
+ crass (~> 1.0.2)
54
+ nokogiri (>= 1.5.9)
55
+ method_source (0.8.2)
56
+ mini_portile2 (2.3.0)
57
+ minitest (5.11.3)
58
+ nokogiri (1.8.3)
59
+ mini_portile2 (~> 2.3.0)
60
+ pry (0.10.4)
61
+ coderay (~> 1.1.0)
62
+ method_source (~> 0.8.1)
63
+ slop (~> 3.4)
64
+ pry-nav (0.2.4)
65
+ pry (>= 0.9.10, < 0.11.0)
66
+ rack (2.0.5)
67
+ rack-test (1.0.0)
68
+ rack (>= 1.0, < 3)
69
+ rails-dom-testing (2.0.3)
70
+ activesupport (>= 4.2.0)
71
+ nokogiri (>= 1.6)
72
+ rails-html-sanitizer (1.0.4)
73
+ loofah (~> 2.2, >= 2.2.2)
74
+ rake (12.3.1)
75
+ rspec (3.7.0)
76
+ rspec-core (~> 3.7.0)
77
+ rspec-expectations (~> 3.7.0)
78
+ rspec-mocks (~> 3.7.0)
79
+ rspec-core (3.7.1)
80
+ rspec-support (~> 3.7.0)
81
+ rspec-expectations (3.7.0)
82
+ diff-lcs (>= 1.2.0, < 2.0)
83
+ rspec-support (~> 3.7.0)
84
+ rspec-mocks (3.7.0)
85
+ diff-lcs (>= 1.2.0, < 2.0)
86
+ rspec-support (~> 3.7.0)
87
+ rspec-support (3.7.1)
88
+ simplecov (0.16.1)
89
+ docile (~> 1.1)
90
+ json (>= 1.8, < 3)
91
+ simplecov-html (~> 0.10.0)
92
+ simplecov-html (0.10.2)
93
+ sinclair (1.0.0)
94
+ activesupport (~> 5.2.0)
95
+ slop (3.6.0)
96
+ sqlite3 (1.3.13)
97
+ thread_safe (0.3.6)
98
+ tzinfo (1.2.5)
99
+ thread_safe (~> 0.1)
100
+
101
+ PLATFORMS
102
+ ruby
103
+
104
+ DEPENDENCIES
105
+ actionpack (~> 5.x)
106
+ activerecord (~> 5.x)
107
+ azeroth!
108
+ bundler (~> 1.6)
109
+ pry-nav
110
+ rake (>= 12.3)
111
+ rspec (>= 3.7)
112
+ simplecov (~> 0.16.1)
113
+ sqlite3 (>= 1.3.13)
114
+
115
+ BUNDLED WITH
116
+ 1.14.6
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task test: :spec
data/azeroth.gemspec ADDED
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'azeroth/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "azeroth"
8
+ gem.version = Azeroth::VERSION
9
+ gem.authors = ["Darthjee"]
10
+ gem.email = ["dev@gmail.com"]
11
+ gem.summary = "Azeroth"
12
+ gem.description = gem.description
13
+ gem.homepage = "https://github.com/darthjee/azeroth"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_runtime_dependency 'sinclair', '>= 1.0.0'
21
+
22
+ gem.add_runtime_dependency 'activesupport', '~> 5.x'
23
+ gem.add_runtime_dependency 'darthjee-active_ext', '>= 1.3.2'
24
+
25
+ gem.add_development_dependency 'activerecord', '~> 5.x'
26
+ gem.add_development_dependency 'actionpack', '~> 5.x'
27
+ gem.add_development_dependency 'sqlite3', '>= 1.3.13'
28
+
29
+ gem.add_development_dependency 'bundler', '~> 1.6'
30
+ gem.add_development_dependency 'rake', '>= 12.3'
31
+ gem.add_development_dependency 'rspec', '>= 3.7'
32
+ gem.add_development_dependency 'simplecov', '~> 0.16.1'
33
+ gem.add_development_dependency 'pry-nav'
34
+ end
35
+
@@ -0,0 +1,18 @@
1
+ version: '2'
2
+ services:
3
+ base: &base
4
+ image: ruby:2.4.0
5
+ working_dir: /home/app/azeroth
6
+ volumes:
7
+ - .:/home/app/azeroth
8
+ - azeroth_gems_2_4_0:/usr/local/bundle
9
+
10
+ #################### CONTAINERS ####################
11
+
12
+ azeroth:
13
+ <<: *base
14
+ container_name: azeroth
15
+ command: /bin/bash -c 'bundle install && bundle exec rspec'
16
+
17
+ volumes:
18
+ azeroth_gems_2_4_0:
@@ -0,0 +1,60 @@
1
+ require 'sinclair'
2
+
3
+ module Azeroth::Resourceable
4
+ class Builder < Sinclair
5
+ delegate :resource, to: :options_object
6
+
7
+ def initialize(clazz, resource, **options)
8
+ super(clazz, resource: resource.to_s, **options)
9
+
10
+ add_params
11
+ add_resource
12
+ add_resource_for_routes
13
+ add_routes
14
+ end
15
+
16
+ private
17
+
18
+ def add_params
19
+ add_method("#{resource}_id", "params.require(:id)")
20
+ add_method("#{resource}_params", "params.require(:#{resource}).permit(:#{permitted_attributes.join(', :')})")
21
+ end
22
+
23
+ def add_resource
24
+ add_method(resource_plural, "@#{resource_plural} ||= #{resource_class}.all")
25
+ add_method(resource, "@#{resource} ||= #{resource_plural}.find(#{resource}_id)")
26
+ end
27
+
28
+ def add_resource_for_routes
29
+ add_method(:new_resource, "@new_resource ||= #{resource_class}.new")
30
+ add_method(:create_resource, "@create_resource ||= #{resource_class}.create(#{resource}_params)")
31
+ add_method(:update_resource, "@update_resource ||= #{resource}.tap { |v| v.update(#{resource}_params) }")
32
+ add_method(:index_resource, resource_plural)
33
+ add_method(:edit_resource, resource)
34
+ add_method(:show_resource, resource)
35
+ end
36
+
37
+ def add_routes
38
+ %i(index show new edit create update).each do |route|
39
+ add_method(route, 'render_basic')
40
+ end
41
+ add_method(:destroy, %{
42
+ #{resource}.destroy
43
+ head :no_content
44
+ })
45
+
46
+ end
47
+
48
+ def resource_class
49
+ @resource_class ||= resource.camelize.constantize
50
+ end
51
+
52
+ def permitted_attributes
53
+ @permitted_attributes ||= resource_class.attribute_names - ['id']
54
+ end
55
+
56
+ def resource_plural
57
+ resource.pluralize
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,13 @@
1
+ require 'active_support'
2
+
3
+ module Azeroth::Resourceable
4
+ extend ActiveSupport::Concern
5
+
6
+ autoload :Builder, 'azeroth/resourceable/builder'
7
+
8
+ class_methods do
9
+ def resource_for(name, **options)
10
+ Builder.new(self, name, **options).build
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ module Azeroth
2
+ VERSION = '0.0.2'
3
+ end
4
+
data/lib/azeroth.rb ADDED
@@ -0,0 +1,3 @@
1
+ module Azeroth
2
+ autoload :Resourceable, 'azeroth/resourceable'
3
+ end
@@ -0,0 +1,92 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples 'a builder that adds a resource for route' do |route|
4
+ let(:params) { {} }
5
+ let(:instance) { clazz.new(params) }
6
+ let(:value) { instance.public_send("#{route}_resource") }
7
+
8
+ it "adds #{route}_resource" do
9
+ expect { subject.build }
10
+ .to change { clazz.new.respond_to?(:"#{route}_resource") }
11
+ .from(false).to(true)
12
+ end
13
+
14
+ it "#{route}_resource responds with correct resource" do
15
+ subject.build
16
+ expect(value.to_json).to eq(expected.to_json)
17
+ end
18
+ end
19
+
20
+ describe Azeroth::Resourceable::Builder do
21
+ subject { described_class.new(clazz, :document) }
22
+
23
+ let(:name) { 'The Doc' }
24
+ let(:document_params) { { name: name} }
25
+
26
+ let(:clazz) do
27
+ Class.new(Controller) do
28
+ end
29
+ end
30
+
31
+ describe '#build' do
32
+ describe 'index_resource' do
33
+ it_behaves_like 'a builder that adds a resource for route', :index do
34
+ let(:expected) { Document.all }
35
+ end
36
+ end
37
+
38
+ describe 'new_resource' do
39
+ it_behaves_like 'a builder that adds a resource for route', :new do
40
+ let(:expected) { Document.new }
41
+ end
42
+ end
43
+
44
+ describe 'create_resource' do
45
+ it_behaves_like 'a builder that adds a resource for route', :create do
46
+ let(:expected) { Document.last }
47
+ let(:params) { { document: document_params } }
48
+
49
+ it 'creates the resource' do
50
+ subject.build
51
+ expect do
52
+ instance.create_resource
53
+ end.to change(Document, :count).by(1)
54
+ end
55
+ end
56
+ end
57
+
58
+ describe 'show_resource' do
59
+ let(:document) { Document.create }
60
+
61
+ it_behaves_like 'a builder that adds a resource for route', :show do
62
+ let(:expected) { document }
63
+ let(:params) { { id: document.id } }
64
+ end
65
+ end
66
+
67
+ describe 'update_resource' do
68
+ let!(:document) { Document.create }
69
+
70
+ it_behaves_like 'a builder that adds a resource for route', :update do
71
+ let(:expected) { Document.find(document.id) }
72
+ let(:params) { { id: document.id, document: document_params } }
73
+
74
+ context 'after the methods has been built' do
75
+ before { subject.build }
76
+
77
+ it 'updates the resource the resource' do
78
+ expect do
79
+ instance.update_resource
80
+ end.to change { document.reload.name }.to(name)
81
+ end
82
+
83
+ it 'does not create the resource' do
84
+ expect do
85
+ instance.update_resource
86
+ end.not_to change(Document, :count)
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,22 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ require 'pry-nav'
5
+ require 'azeroth'
6
+
7
+ require 'active_record'
8
+ ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
9
+
10
+ support_files = File.expand_path("spec/support/**/*.rb")
11
+ Dir[support_files].each { |file| require file }
12
+
13
+ RSpec.configure do |config|
14
+ config.run_all_when_everything_filtered = true
15
+ config.filter_run :focus
16
+ config.filter_run_excluding :integration unless ENV['ALL']
17
+
18
+ config.order = 'random'
19
+
20
+ config.before do
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ require 'action_controller'
2
+
3
+ class Controller
4
+ def initialize(params = {})
5
+ @params = ActionController::Parameters.new(params)
6
+ end
7
+
8
+ private
9
+
10
+ attr_reader :params
11
+ end
@@ -0,0 +1,2 @@
1
+ class Document < ActiveRecord::Base
2
+ end
@@ -0,0 +1,10 @@
1
+ module Serializer
2
+ def self.serialize(object)
3
+ case object
4
+ when Hash
5
+ object
6
+ else
7
+ object.as_json
8
+ end
9
+ end
10
+ 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.string :name
6
+ end
7
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: azeroth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darthjee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-15 00:00:00.000000000 Z
11
+ date: 2018-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinclair
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.0.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: 5.x
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 5.x
41
+ - !ruby/object:Gem::Dependency
42
+ name: darthjee-active_ext
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.3.2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.3.2
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: activerecord
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +66,20 @@ dependencies:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
68
  version: 5.x
69
+ - !ruby/object:Gem::Dependency
70
+ name: actionpack
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 5.x
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 5.x
41
83
  - !ruby/object:Gem::Dependency
42
84
  name: sqlite3
43
85
  requirement: !ruby/object:Gem::Requirement
@@ -128,7 +170,23 @@ email:
128
170
  executables: []
129
171
  extensions: []
130
172
  extra_rdoc_files: []
131
- files: []
173
+ files:
174
+ - ".gitignore"
175
+ - Gemfile
176
+ - Gemfile.lock
177
+ - Rakefile
178
+ - azeroth.gemspec
179
+ - docker-compose.yml
180
+ - lib/azeroth.rb
181
+ - lib/azeroth/resourceable.rb
182
+ - lib/azeroth/resourceable/builder.rb
183
+ - lib/azeroth/version.rb
184
+ - spec/lib/azeroth/resourceable/builder_spec.rb
185
+ - spec/spec_helper.rb
186
+ - spec/support/models/controller.rb
187
+ - spec/support/models/document.rb
188
+ - spec/support/models/serializer.rb
189
+ - spec/support/schema.rb
132
190
  homepage: https://github.com/darthjee/azeroth
133
191
  licenses: []
134
192
  metadata: {}
@@ -152,4 +210,10 @@ rubygems_version: 2.6.11
152
210
  signing_key:
153
211
  specification_version: 4
154
212
  summary: Azeroth
155
- test_files: []
213
+ test_files:
214
+ - spec/lib/azeroth/resourceable/builder_spec.rb
215
+ - spec/spec_helper.rb
216
+ - spec/support/models/controller.rb
217
+ - spec/support/models/document.rb
218
+ - spec/support/models/serializer.rb
219
+ - spec/support/schema.rb