railjet 2.1.1 → 3.3.0

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
- SHA1:
3
- metadata.gz: d092976ecd3a3258ec44edd6c62e1ba88f969444
4
- data.tar.gz: '08158874d5f23f745fb6c98e19e2a2a3e9f4431e'
2
+ SHA256:
3
+ metadata.gz: b6d6d6acf675dc2748a34616f8b557b249a3d2e0357691daf10e4392f32ff293
4
+ data.tar.gz: e8fc6a55ffe4a4b23ea98e005aa6af14ec7221cf89a719f71db1a7d7783cbfb6
5
5
  SHA512:
6
- metadata.gz: 3f7fbda03ee87bad58bd72dd033e400a46c6d5b9ef77f6d358aa801d1364ea2a5899a2247f3efb87e7f7227ccaec52a34fd39b604be2e5be3e1b25610a19cd1f
7
- data.tar.gz: 8037cc8eeab89a9c69c84e59a2b47629d04dd1870f44830a8252a9d554333e18d3f14d43b1b4efbd686a8534e76a98b982fb1aed41a130972a1d1c3455ed88e6
6
+ metadata.gz: d34e90c6aaef996d172c09c45226d9872593623f04ec83b82defd0fa92b14cc5287496dc069f6ffc2c53a5b021f638185285fa39ddcb87840756bf20d04ea3cf
7
+ data.tar.gz: ddc2eee2f9c1835ea48eb138655bf8ff9ad79bfa2a7a6cd95723ec56554cb7fe3ebdb472608afb8c6d2c070fc190507376d1a02770cb66e8b2b353647745bde3
@@ -0,0 +1,19 @@
1
+ name: Test
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ test:
7
+ runs-on: ubuntu-latest
8
+
9
+ steps:
10
+ - name: Checkout
11
+ uses: actions/checkout@v2
12
+
13
+ - name: Setup Ruby
14
+ uses: ruby/setup-ruby@v1
15
+ with:
16
+ bundler-cache: true
17
+
18
+ - name: Run tests
19
+ run: bundle exec rspec spec
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ Gemfile.lock
1
2
  *.rbc
2
3
  capybara-*.html
3
4
  /log
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.3
1
+ 2.6.6
data/README.md CHANGED
@@ -1,7 +1,18 @@
1
- # Railjet, architecture for high-speed railway [![Build Status](https://travis-ci.com/nedap/railjet.svg?token=sx7KNHQkbW5qxVMs4wKk&branch=master)](https://travis-ci.com/nedap/railjet)
1
+ # Railjet, architecture for high-speed railway
2
+
3
+ [![Maintainability](https://api.codeclimate.com/v1/badges/457bb41a82546fd6e459/maintainability)](https://codeclimate.com/github/nedap/railjet/maintainability)
4
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/457bb41a82546fd6e459/test_coverage)](https://codeclimate.com/github/nedap/railjet/test_coverage)
2
5
 
3
6
  ![Railjet](https://www.swisspasses.com/railpass/popup/railjet/slideshow/RailJet-Zuerich-St.-Anton-Transfer-Ticket-from-Swisspasses.com.jpg)
4
7
 
8
+ ## Philosophy
9
+
10
+ We all know how good it feels to start a greenfield project in Rails. At that point Rails Way makes you move amazingly fast - you just create your models, include some gems in Gemfile and boom, your prototype is almost there. This is what almost every tutorial or a book will show you. But what's going to happen when your app is not generic small-to-mid-size-app? What if you have to start breaking those Rails conventions that made you fall in love with Rails in the first place? That could be because of using multiple data storages, working with legacy URLs or DB schemas, having tons of domain logic that is making your ActiveModel so fat that no diet can help. We all know DHH's answer to that - Concerns. And yeah, they're cool for extracting shared behaviour out of models, but that's it.
11
+
12
+ Seems like Rails does not have a good answer. But what if someone else already had it? People are writing complex software for decades now, they had to come up with some ideas how to keep them clean, simple and maintainable.
13
+
14
+ See our [wiki](https://github.com/nedap/railjet/wiki) for more extended information on railjet why and how
15
+
5
16
  ## Installation
6
17
 
7
18
  Add this line to your application's Gemfile:
@@ -18,7 +29,7 @@ Or install it yourself as:
18
29
 
19
30
  $ gem install railjet
20
31
 
21
- ## Usage
32
+ ## Example Usage
22
33
 
23
34
  ### Repository
24
35
 
@@ -242,7 +253,7 @@ end
242
253
 
243
254
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
244
255
 
245
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, run rake task to bump the version "rake version:bump:<major,minor,patch>" and then run "rake fury:release" to release it to gemfury
256
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, run rake task to bump the version `rake version:bump:<major,minor,patch>` and then run `rake release` to release it to https://rubygems.org/
246
257
 
247
258
  ## Contributing
248
259
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.1.1
1
+ 3.3.0
@@ -1,22 +1,6 @@
1
1
  ActiveModel::Errors.class_eval do
2
2
  def <<(other)
3
- copy_messages_from(other)
4
- copy_details_from(other) if respond_to?(:details)
5
-
3
+ self.merge!(other)
6
4
  self
7
5
  end
8
-
9
- private
10
-
11
- def copy_details_from(other)
12
- details.merge!(other.details) do |_, val_one, val_two|
13
- [*val_one] + [*val_two]
14
- end
15
- end
16
-
17
- def copy_messages_from(other)
18
- messages.merge!(other.messages) do |_, val_one, val_two|
19
- [*val_one] + [*val_two]
20
- end
21
- end
22
6
  end
data/lib/railjet.rb CHANGED
@@ -44,8 +44,17 @@ require "railjet/policy"
44
44
  require "railjet/composed_policy"
45
45
  require "railjet/use_case"
46
46
  require "railjet/presenter"
47
+ require "railjet/presenter_context"
47
48
 
48
49
  require "railjet/repository/registry"
49
50
  require "railjet/repository"
50
51
  require "railjet/repository/active_record"
51
52
  require "railjet/repository/redis"
53
+
54
+ if defined?(Rails)
55
+ Rails::Application.console do
56
+ require "railjet/console/debug_helpers"
57
+
58
+ Railjet::Console::RailjetHelpers.load
59
+ end
60
+ end
@@ -0,0 +1,143 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Railjet
4
+ module Console
5
+ # Adds helper methods for auditing of console customer usage
6
+ module RailjetHelpers
7
+ def setup_railjet(context_class: nil)
8
+ @context_class = context_class
9
+
10
+ @context_class ||= RailjetContextHelper.determine_context_class
11
+
12
+ railjet_helper_after_init_message
13
+ end
14
+
15
+ def railjet_helper_after_init_message
16
+ puts 'Setup finished. railjet helpers are now available from console'
17
+ puts 'available commands:'
18
+ puts "\t- use_case(<Class>)"
19
+ puts "\t- form(<Class>, params)"
20
+ puts "\t- console_context"
21
+ end
22
+
23
+ def railjet_helper_after_load_message
24
+ puts '*' * 61
25
+ puts "\nCall 'setup_railjet' to setup and debug Railjet"
26
+ puts 'Argument are:'
27
+ method(:setup_railjet).parameters.each do |param|
28
+ case param[0]
29
+ when :key, :keyreq
30
+ puts "\t- #{param[1]}:"
31
+ else
32
+ puts "\t- #{param[1]}"
33
+ end
34
+ end
35
+ puts "\n"
36
+ puts '*' * 61
37
+ end
38
+
39
+ def console_context
40
+ @context_class.init(
41
+ *context_params
42
+ )
43
+ end
44
+
45
+ def use_case(klass)
46
+ klass.new(console_context)
47
+ end
48
+
49
+ def form(klass, clean_params)
50
+ klass.new(clean_params).tap(&:validate)
51
+ end
52
+
53
+ def context_params
54
+ parameters, missing_methods = find_context_params
55
+
56
+ RailjetContextHelper.print_context_param_errors(missing_methods)
57
+
58
+ parameters
59
+ end
60
+
61
+ def find_context_params
62
+ parameters = []
63
+ missing_methods = []
64
+
65
+ @context_class.method(:init).parameters.each do |param|
66
+ param_value, missing_method_error = find_context_param(
67
+ param[0], param[1]
68
+ )
69
+
70
+ parameters.push(param_value)
71
+
72
+ if missing_method_error.present?
73
+ missing_methods.push(missing_method_error)
74
+ end
75
+ end
76
+
77
+ [parameters, missing_methods]
78
+ end
79
+
80
+ def find_context_param(type, method_name)
81
+ send("find_#{type}_context_param", method_name)
82
+ end
83
+
84
+ def find_req_context_param(method_name)
85
+ [send(method_name), nil]
86
+ rescue StandardError => e
87
+ [nil, { method_name => e.message }]
88
+ end
89
+ alias find_opt_context_param find_req_context_param
90
+
91
+ def find_keyreq_context_param(method_name)
92
+ [{ method_name => send(method_name) }, nil]
93
+ rescue StandardError => e
94
+ [{ method_name => nil }, { method_name => e.message }]
95
+ end
96
+ alias find_key_context_param find_keyreq_context_param
97
+
98
+ def self.load
99
+ Object.include(self)
100
+ end
101
+
102
+ class RailjetContextHelper
103
+ def self.determine_context_class
104
+ contexts_classes = Railjet::Context.descendants
105
+ contexts_classes.each_with_index do |context_class, index|
106
+ puts "(#{index + 1}) #{context_class}"
107
+ end
108
+
109
+ puts "\nPlease enter the number of needed railjet context"
110
+ puts "(default: #{contexts_classes.first})"
111
+ puts '-' * 61
112
+
113
+ begin
114
+ input = $stdin.gets.strip
115
+ if input.present?
116
+ chosen_index = Float(input)
117
+ contexts_classes.fetch(chosen_index - 1)
118
+ else
119
+ contexts_classes[0]
120
+ end
121
+ rescue StandardError
122
+ puts 'Invalid choice. Please try again.'
123
+ retry
124
+ end
125
+ end
126
+
127
+ def self.print_context_param_errors(missing_methods)
128
+ return if missing_methods.empty?
129
+
130
+ puts '!' * 61
131
+ puts "\nError raised while finding context value(s) for methods below using `nil` instead"
132
+ puts "To assign value simply define function(s) in console and it will be used the next time\n\n"
133
+ missing_methods.each do |error|
134
+ puts "\t- Method `#{error.keys.first}` => error: `#{error.values.first}`"
135
+ end
136
+ puts "\n"
137
+ puts '!' * 61
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end
143
+
@@ -8,25 +8,29 @@ module Railjet
8
8
  @object = object
9
9
  end
10
10
 
11
+ attr_reader :object
12
+
11
13
  def as_json(*)
12
14
  raise NotImplementedError
13
15
  end
14
16
 
15
17
  module ClassMethods
16
18
  def present_collection(objects)
17
- objects.map { |o| new(o) }
19
+ objects.map { |o| present(o) }
18
20
  end
19
21
 
20
- private
22
+ def present(object)
23
+ new(object)
24
+ end
21
25
 
22
- def present(name)
23
- define_method(name) { instance_variable_get(:@object) }
24
- private name
26
+ def object(name)
27
+ alias_method name, :object
25
28
  end
26
29
  end
27
30
 
28
31
  module WithContext
29
32
  extend ActiveSupport::Concern
33
+ include Railjet::Presenter
30
34
 
31
35
  included do
32
36
  attr_reader :context
@@ -40,7 +44,15 @@ module Railjet
40
44
 
41
45
  module ClassMethods
42
46
  def present_collection(context, objects)
43
- objects.map { |o| new(context, o) }
47
+ objects.map { |o| present(context, o) }
48
+ end
49
+
50
+ def present(context, object)
51
+ new(context, object)
52
+ end
53
+
54
+ def context(*context_members)
55
+ delegate *context_members, to: :context
44
56
  end
45
57
  end
46
58
 
@@ -0,0 +1,14 @@
1
+ module Railjet
2
+ class PresenterContext < SimpleDelegator
3
+ attr_reader :view
4
+
5
+ def initialize(context, view_context)
6
+ super(context)
7
+ @view = view_context
8
+ end
9
+
10
+ def repository
11
+ raise NoMethodError, "Acessing Repository from Presenter is a no-no 🙅‍♂️"
12
+ end
13
+ end
14
+ end
@@ -10,6 +10,10 @@ module Railjet
10
10
  record.all
11
11
  end
12
12
 
13
+ def find_by_id(id)
14
+ record.find(id)
15
+ end
16
+
13
17
  def find_by_ids(ids)
14
18
  record.where(id: ids)
15
19
  end
@@ -1,3 +1,3 @@
1
1
  module Railjet
2
- VERSION = "2.1.1"
2
+ VERSION = "3.3.0"
3
3
  end
data/railjet.gemspec CHANGED
@@ -19,15 +19,15 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.11"
23
- spec.add_development_dependency "rake", "~> 11.0"
22
+ spec.add_development_dependency "bundler"
23
+ spec.add_development_dependency "rake", "> 13"
24
24
  spec.add_development_dependency "rspec", "~> 3.0"
25
25
  spec.add_development_dependency "pry"
26
- spec.add_development_dependency "gemfury"
27
26
  spec.add_development_dependency "rake-version", "~> 1.0"
27
+ spec.add_development_dependency "simplecov", "~> 0.17.1"
28
28
 
29
- spec.add_dependency "activesupport", '> 4'
30
- spec.add_dependency "activemodel", '> 4'
29
+ spec.add_dependency "activesupport", '> 5.2'
30
+ spec.add_dependency "activemodel", '> 5.2'
31
31
  spec.add_dependency "virtus", "~> 1.0.2"
32
- spec.add_dependency "validates_timeliness", "~> 4.0.2"
32
+ spec.add_dependency "validates_timeliness", "~> 4.1"
33
33
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railjet
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krzysztof Zalewski
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-11 00:00:00.000000000 Z
11
+ date: 2021-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.11'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.11'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">"
32
32
  - !ruby/object:Gem::Version
33
- version: '11.0'
33
+ version: '13'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">"
39
39
  - !ruby/object:Gem::Version
40
- version: '11.0'
40
+ version: '13'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -67,61 +67,61 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: gemfury
70
+ name: rake-version
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '1.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '1.0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rake-version
84
+ name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.0'
89
+ version: 0.17.1
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '1.0'
96
+ version: 0.17.1
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: activesupport
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">"
102
102
  - !ruby/object:Gem::Version
103
- version: '4'
103
+ version: '5.2'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ">"
109
109
  - !ruby/object:Gem::Version
110
- version: '4'
110
+ version: '5.2'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: activemodel
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">"
116
116
  - !ruby/object:Gem::Version
117
- version: '4'
117
+ version: '5.2'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - ">"
123
123
  - !ruby/object:Gem::Version
124
- version: '4'
124
+ version: '5.2'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: virtus
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 4.0.2
145
+ version: '4.1'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 4.0.2
152
+ version: '4.1'
153
153
  description: Design patterns for Ruby on Rails
154
154
  email:
155
155
  - zlw.zalewski@gmail.com
@@ -157,13 +157,12 @@ executables: []
157
157
  extensions: []
158
158
  extra_rdoc_files: []
159
159
  files:
160
+ - ".github/workflows/test.yml"
160
161
  - ".gitignore"
161
162
  - ".rspec"
162
163
  - ".ruby-gemset"
163
164
  - ".ruby-version"
164
- - ".travis.yml"
165
165
  - Gemfile
166
- - Gemfile.lock
167
166
  - LICENSE.txt
168
167
  - README.md
169
168
  - Rakefile
@@ -182,10 +181,12 @@ files:
182
181
  - lib/railjet/auth/ability.rb
183
182
  - lib/railjet/auth/activity.rb
184
183
  - lib/railjet/composed_policy.rb
184
+ - lib/railjet/console/debug_helpers.rb
185
185
  - lib/railjet/context.rb
186
186
  - lib/railjet/form.rb
187
187
  - lib/railjet/policy.rb
188
188
  - lib/railjet/presenter.rb
189
+ - lib/railjet/presenter_context.rb
189
190
  - lib/railjet/repository.rb
190
191
  - lib/railjet/repository/active_record.rb
191
192
  - lib/railjet/repository/generic.rb
@@ -202,7 +203,7 @@ homepage: https://github.com/nedap/railjet
202
203
  licenses:
203
204
  - MIT
204
205
  metadata: {}
205
- post_install_message:
206
+ post_install_message:
206
207
  rdoc_options: []
207
208
  require_paths:
208
209
  - lib
@@ -217,9 +218,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
218
  - !ruby/object:Gem::Version
218
219
  version: '0'
219
220
  requirements: []
220
- rubyforge_project:
221
- rubygems_version: 2.5.2
222
- signing_key:
221
+ rubygems_version: 3.0.3
222
+ signing_key:
223
223
  specification_version: 4
224
224
  summary: Better architecture for high-speed railway
225
225
  test_files: []
data/.travis.yml DELETED
@@ -1,2 +0,0 @@
1
- ---
2
- language: ruby
data/Gemfile.lock DELETED
@@ -1,94 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- railjet (2.1.1)
5
- activemodel (> 4)
6
- activesupport (> 4)
7
- validates_timeliness (~> 4.0.2)
8
- virtus (~> 1.0.2)
9
-
10
- GEM
11
- remote: https://rubygems.org/
12
- specs:
13
- activemodel (5.2.3)
14
- activesupport (= 5.2.3)
15
- activesupport (5.2.3)
16
- concurrent-ruby (~> 1.0, >= 1.0.2)
17
- i18n (>= 0.7, < 2)
18
- minitest (~> 5.1)
19
- tzinfo (~> 1.1)
20
- axiom-types (0.1.1)
21
- descendants_tracker (~> 0.0.4)
22
- ice_nine (~> 0.11.0)
23
- thread_safe (~> 0.3, >= 0.3.1)
24
- coderay (1.1.2)
25
- coercible (1.0.0)
26
- descendants_tracker (~> 0.0.1)
27
- concurrent-ruby (1.1.5)
28
- descendants_tracker (0.0.4)
29
- thread_safe (~> 0.3, >= 0.3.1)
30
- diff-lcs (1.3)
31
- equalizer (0.0.11)
32
- faraday (0.11.0)
33
- multipart-post (>= 1.2, < 3)
34
- gemfury (0.7.0)
35
- faraday (>= 0.9.0, < 0.12.0.pre)
36
- highline (~> 1.6)
37
- multi_json (~> 1.10)
38
- netrc (>= 0.10.0, < 0.12.0.pre)
39
- thor (>= 0.14.0, < 1.0.0.pre)
40
- highline (1.7.8)
41
- i18n (1.6.0)
42
- concurrent-ruby (~> 1.0)
43
- ice_nine (0.11.2)
44
- method_source (0.9.0)
45
- minitest (5.11.3)
46
- multi_json (1.12.2)
47
- multipart-post (2.0.0)
48
- netrc (0.11.0)
49
- pry (0.11.1)
50
- coderay (~> 1.1.0)
51
- method_source (~> 0.9.0)
52
- rake (11.3.0)
53
- rake-version (1.0.0)
54
- rake (~> 11.1)
55
- rspec (3.6.0)
56
- rspec-core (~> 3.6.0)
57
- rspec-expectations (~> 3.6.0)
58
- rspec-mocks (~> 3.6.0)
59
- rspec-core (3.6.0)
60
- rspec-support (~> 3.6.0)
61
- rspec-expectations (3.6.0)
62
- diff-lcs (>= 1.2.0, < 2.0)
63
- rspec-support (~> 3.6.0)
64
- rspec-mocks (3.6.0)
65
- diff-lcs (>= 1.2.0, < 2.0)
66
- rspec-support (~> 3.6.0)
67
- rspec-support (3.6.0)
68
- thor (0.20.0)
69
- thread_safe (0.3.6)
70
- timeliness (0.3.10)
71
- tzinfo (1.2.5)
72
- thread_safe (~> 0.1)
73
- validates_timeliness (4.0.2)
74
- timeliness (~> 0.3.7)
75
- virtus (1.0.5)
76
- axiom-types (~> 0.1)
77
- coercible (~> 1.0)
78
- descendants_tracker (~> 0.0, >= 0.0.3)
79
- equalizer (~> 0.0, >= 0.0.9)
80
-
81
- PLATFORMS
82
- ruby
83
-
84
- DEPENDENCIES
85
- bundler (~> 1.11)
86
- gemfury
87
- pry
88
- railjet!
89
- rake (~> 11.0)
90
- rake-version (~> 1.0)
91
- rspec (~> 3.0)
92
-
93
- BUNDLED WITH
94
- 1.17.3