azeroth 0.0.1 → 0.0.2

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: 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