active-fixtures 0.0.3 → 0.0.4

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: 54ad16c565dbbcd5ef8a693818e5d7ddf09d24b7
4
- data.tar.gz: 724dda464a6113e9e43a150ed8541c1484462127
3
+ metadata.gz: 8fb9b6ca8e5e19862750be9fb2a2ebc12be640bd
4
+ data.tar.gz: cbebe7c918bfb00b824a282b24ca935787c3309b
5
5
  SHA512:
6
- metadata.gz: c5148dc1008bd4098924d0f53cf788c55abb28ce63a60c77180edc4e3ec63a783508cb505375efbaa4e633cbbfff5fc81adceecb75a22c2ccf89a6b88350b1f0
7
- data.tar.gz: 4cfa03063c2a45f3e6ded18e34d4f1aac595a76fd9d4f2eb3fabdc337e0b74e0878b700d9a7e6c479f03ddf5fe2ff378260991a47a5a13521ede2bd63bcfc96a
6
+ metadata.gz: 3ae89f016fb515ce79cf08e7bdc25bdb1f78aa3559df9cb389bddb451e1ac0330c734e5cc70b252b8e0a60ac765896be3ef0d7ffa0efcabbd6d270ec51a29806
7
+ data.tar.gz: 694ebbbd72fd4d53a3266fd836ae12ed424b961876891f4b1105172ca8b7f18e4a675b67eb51973e29eb1894d311aa5a853b7e2cb5d617d99a4f23e4d14b0bcd
data/README.md CHANGED
@@ -172,6 +172,34 @@ it 'should pass' do
172
172
  end
173
173
  ```
174
174
 
175
+ ### Active time
176
+ Lets stop to use the magic time moments for time freezing and traveling.
177
+ Use the `named` time moments:
178
+ ```ruby
179
+ ActiveFixtures.populate(:default) do
180
+ time(:today) { Time.new(1983, 1, 2, 3, 4) }
181
+ time(:yesterday) { af_time(:today) - 1.day }
182
+ time(:week_ago) { af_time(:today) - 7.days }
183
+
184
+ resource(:invited_admin) {
185
+ af_time(:week_ago) {
186
+ AFUser.create(login: 'new_user@lvh.me')
187
+ }
188
+ }
189
+ end
190
+ ```
191
+
192
+ In the tests:
193
+ ```ruby
194
+ describe 'Users' do
195
+ around { |example|
196
+ af_time(:today) { example.run }
197
+ }
198
+
199
+ it 'should pass' do; end
200
+ end
201
+ ```
202
+
175
203
  ### How it works
176
204
  ActiveFixtures work fairly, but effectively.
177
205
 
@@ -1,11 +1,15 @@
1
1
  require 'active-fixtures/version'
2
2
  require 'active-fixtures/railtie'
3
3
  require 'active_attr'
4
+ require 'timecop'
4
5
 
5
6
  module ActiveFixtures
7
+ autoload :Context, 'active-fixtures/context'
8
+
6
9
  autoload :Resource, 'active-fixtures/resource'
7
10
 
8
11
  autoload :Session, 'active-fixtures/session'
12
+ autoload :Time, 'active-fixtures/time'
9
13
  autoload :StateBuilder, 'active-fixtures/state_builder'
10
14
  autoload :State, 'active-fixtures/state'
11
15
  autoload :StateDumper, 'active-fixtures/state_dumper'
@@ -0,0 +1,22 @@
1
+ module ActiveFixtures
2
+ module Context
3
+
4
+ def self.extended(klass)
5
+ klass.instance_eval do
6
+ delegate :context, to: :class
7
+ define_method(:method_missing, &method(:method_missing))
8
+ end
9
+ end
10
+
11
+ def context
12
+ RSpec.current_example.example_group_instance
13
+ end
14
+
15
+ def method_missing(method, *args, &block)
16
+ context.respond_to?(method) ?
17
+ context.public_send(method, *args, &block) :
18
+ super
19
+ end
20
+
21
+ end
22
+ end
@@ -1,25 +1,11 @@
1
1
  module ActiveFixtures
2
2
  class Resource
3
+ extend Context
3
4
  include ActiveAttr::Model
4
5
 
5
- delegate :context, to: :class
6
-
7
6
  def self.[](name)
8
7
  ActiveFixtures.current_state.read_entity(name, self)
9
8
  end
10
9
 
11
- private
12
-
13
- def self.context
14
- RSpec.current_example.example_group_instance
15
- end
16
-
17
- def self.method_missing(method, *args, &block)
18
- context.respond_to?(method) ?
19
- context.public_send(method, *args, &block) :
20
- super
21
- end
22
-
23
- define_method(:method_missing, &method(:method_missing))
24
10
  end
25
11
  end
@@ -2,6 +2,7 @@ Dir[Rails.root.join('spec/active_fixtures/**/*.rb')].each { |f| require f }
2
2
 
3
3
  RSpec.configure do |config|
4
4
  config.include ActiveFixtures::Session::Helper
5
+ config.include ActiveFixtures::Time::Helper
5
6
 
6
7
  config.around(:each) do |example|
7
8
  ActiveFixtures.prepare!(:default)
@@ -1,5 +1,7 @@
1
1
  module ActiveFixtures
2
2
  class StateBuilder
3
+ extend Context
4
+
3
5
  attr_accessor :steps
4
6
 
5
7
  def initialize(block)
@@ -26,6 +28,10 @@ module ActiveFixtures
26
28
  steps << {type: :session, name: name, block: block}
27
29
  end
28
30
 
31
+ def time(name, &block)
32
+ steps << {type: :time, name: name, block: block}
33
+ end
34
+
29
35
  def build_resource(build_step)
30
36
  build_step[:block].call
31
37
  end
@@ -33,5 +39,9 @@ module ActiveFixtures
33
39
  def build_session(build_step)
34
40
  Session.new(build_step)
35
41
  end
42
+
43
+ def build_time(build_step)
44
+ Time.new(moment: build_step[:block].call)
45
+ end
36
46
  end
37
47
  end
@@ -0,0 +1,16 @@
1
+ module ActiveFixtures
2
+ class Time < Resource
3
+
4
+ module Helper
5
+ def af_time(name)
6
+ moment = Time[name].moment
7
+
8
+ block_given? ?
9
+ Timecop.freeze(moment){ yield } :
10
+ moment
11
+ end
12
+ end
13
+
14
+ attribute :moment, type: DateTime
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module ActiveFixtures
2
- VERSION = '0.0.3'.freeze
2
+ VERSION = '0.0.4'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active-fixtures
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Tokarenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-02 00:00:00.000000000 Z
11
+ date: 2017-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: timecop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description: active-fixtures provides the way how to populate the server state (DB,
42
56
  sessions) as an application user but not as programmer.
43
57
  email: private.tokarenko.sergey@gmail.com
@@ -48,6 +62,7 @@ files:
48
62
  - LICENSE
49
63
  - README.md
50
64
  - lib/active-fixtures.rb
65
+ - lib/active-fixtures/context.rb
51
66
  - lib/active-fixtures/railtie.rb
52
67
  - lib/active-fixtures/resource.rb
53
68
  - lib/active-fixtures/rspec.rb
@@ -55,6 +70,7 @@ files:
55
70
  - lib/active-fixtures/state.rb
56
71
  - lib/active-fixtures/state_builder.rb
57
72
  - lib/active-fixtures/state_dumper.rb
73
+ - lib/active-fixtures/time.rb
58
74
  - lib/active-fixtures/version.rb
59
75
  - lib/tasks/active_fixtures.rake
60
76
  homepage: https://github.com/Anadea/active-fixtures