verning 0.0.3 → 0.0.4

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: 4b2344c1e86b035196cf8e5c9ad6c157e52ad989
4
- data.tar.gz: 70f9d690637f5b606e0d516045fbc1e78b504152
3
+ metadata.gz: cbc0a2aa820782732e8733ee6c8d29a4ddf85f70
4
+ data.tar.gz: 842b6385be50a9eb49fb90435a352e2c71158e1a
5
5
  SHA512:
6
- metadata.gz: 8c6ce07a19201245cb4fa21988d260c09969768f1c8eb906390d954f5e71db208cab09a2c7d647d67cc35b736a3164e846a4706379c9701757952ecc3b397f90
7
- data.tar.gz: 53aa9cbdc0eb878893e161d316bd3220ac28b0eeee950fb45e82b763529324c131895736d116c96646ea666235cfc69980f381803c94a8bd05337581c75fba02
6
+ metadata.gz: 656b09916cb570f11fa151f153881f3985b9e4e48d57af5dc2ce24d964b499442feb21bba1483ddb2c225420296b76a1906bb2d37b9e485b4f8493b33db79cb5
7
+ data.tar.gz: f0305c6c86a9a935553a2c4b3c2316bc08628e61894bec91641df5f62508879d3601e44529a5a1f91565675612e2bc672a72ab22c3fca2d65739ab0ab4a796de
@@ -0,0 +1 @@
1
+ service_name: travis-ci
data/Gemfile CHANGED
@@ -1,3 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
+
5
+ group :documentation do
6
+ gem 'coveralls', :require => false
7
+ end
@@ -6,8 +6,21 @@ PATH
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
+ activesupport (4.0.4)
10
+ i18n (~> 0.6, >= 0.6.9)
11
+ minitest (~> 4.2)
12
+ multi_json (~> 1.3)
13
+ thread_safe (~> 0.1)
14
+ tzinfo (~> 0.3.37)
15
+ atomic (1.1.16)
9
16
  coderay (1.1.0)
10
17
  columnize (0.3.6)
18
+ coveralls (0.7.0)
19
+ multi_json (~> 1.3)
20
+ rest-client
21
+ simplecov (>= 0.7)
22
+ term-ansicolor
23
+ thor
11
24
  debugger (1.6.6)
12
25
  columnize (>= 0.3.1)
13
26
  debugger-linecache (~> 1.2.0)
@@ -15,7 +28,12 @@ GEM
15
28
  debugger-linecache (1.2.0)
16
29
  debugger-ruby_core_source (1.3.2)
17
30
  diff-lcs (1.2.5)
31
+ docile (1.1.3)
32
+ i18n (0.6.9)
18
33
  method_source (0.8.2)
34
+ mime-types (2.2)
35
+ minitest (4.7.5)
36
+ multi_json (1.9.2)
19
37
  pry (0.9.12.6)
20
38
  coderay (~> 1.0)
21
39
  method_source (~> 0.8)
@@ -24,6 +42,8 @@ GEM
24
42
  debugger (~> 1.3)
25
43
  pry (~> 0.9.10)
26
44
  rake (0.9.6)
45
+ rest-client (1.6.7)
46
+ mime-types (>= 1.16)
27
47
  rspec (2.14.1)
28
48
  rspec-core (~> 2.14.0)
29
49
  rspec-expectations (~> 2.14.0)
@@ -32,13 +52,27 @@ GEM
32
52
  rspec-expectations (2.14.5)
33
53
  diff-lcs (>= 1.1.3, < 2.0)
34
54
  rspec-mocks (2.14.6)
55
+ simplecov (0.8.2)
56
+ docile (~> 1.1.0)
57
+ multi_json
58
+ simplecov-html (~> 0.8.0)
59
+ simplecov-html (0.8.0)
35
60
  slop (3.5.0)
61
+ term-ansicolor (1.3.0)
62
+ tins (~> 1.0)
63
+ thor (0.19.1)
64
+ thread_safe (0.3.1)
65
+ atomic (>= 1.1.7, < 2)
66
+ tins (1.0.1)
67
+ tzinfo (0.3.39)
36
68
 
37
69
  PLATFORMS
38
70
  ruby
39
71
 
40
72
  DEPENDENCIES
73
+ activesupport (~> 4.0.4)
41
74
  bundler (~> 1.3)
75
+ coveralls
42
76
  pry (~> 0.9)
43
77
  pry-debugger (~> 0.2)
44
78
  rake (~> 0.9)
data/README.md CHANGED
@@ -2,6 +2,8 @@ Verning
2
2
  =========
3
3
  Versioning for methods, modules or classes
4
4
 
5
+ [![Code Climate](https://codeclimate.com/github/eccyan/verning.png)](https://codeclimate.com/github/eccyan/verning)
6
+ [![Coverage Status](https://coveralls.io/repos/eccyan/verning/badge.png)](https://coveralls.io/r/eccyan/verning)
5
7
  [![Build Status](https://travis-ci.org/eccyan/verning.svg?branch=master)](https://travis-ci.org/eccyan/verning)
6
8
 
7
9
  ## Install
@@ -42,11 +44,40 @@ RELEASE_DATE = Date.parse("2014-3-26")
42
44
  class Foo; end
43
45
  class FooFeature; end
44
46
 
45
- versioned_method Foo, FooFeature do
47
+ versioned_module Foo, FooFeature do
46
48
  Date.today >= RELEASE_DATE
47
49
  end
48
50
  ```
49
51
 
52
+ ## Releaser
53
+
54
+ Releaser release if the conditions are releaseable.
55
+ The conditions defined with YAML.
56
+
57
+ ```yaml
58
+ super_pop_campaing:
59
+ date:
60
+ start: "2014-02-07"
61
+ end: "2014-02-07"
62
+ ```
63
+
64
+ Use this like :
65
+
66
+ ```ruby
67
+ require "verning"
68
+
69
+ # Load releaser from yaml
70
+ Verning.releaser = YAML.file_load "releaser.yml"
71
+
72
+ class Klass
73
+ def :foo; end
74
+ def :foo_feature; end
75
+
76
+ # set release name
77
+ versioned_method :foo, :foo_feature, :super_pop_campaing
78
+ end
79
+ ```
80
+
50
81
  # License
51
82
  Verning is released under the MIT license:
52
83
 
@@ -1,6 +1,13 @@
1
1
  require "verning/version"
2
2
  require "verning/core_ext"
3
+ require "verning/releaser"
3
4
 
4
5
  module Verning
5
- # Your code goes here...
6
+ def self.releaser=(options = {})
7
+ @releaser = Releaser.new(options)
8
+ end
9
+
10
+ def self.releaser
11
+ @releaser
12
+ end
6
13
  end
@@ -6,9 +6,15 @@ class Module
6
6
  # Time.now > "2013-04-01"
7
7
  # end
8
8
  #
9
- def versioned_method(downed, upped, key = nil)
10
- return if block_given? && yield.!
11
-
12
- alias_method downed, upped
9
+ # Select a method from release name
10
+ #
11
+ # versioned_method :downed, :upped, :release_name
12
+ #
13
+ def versioned_method(downed, upped, release_name = nil)
14
+ if block_given?
15
+ alias_method downed, upped if yield
16
+ else
17
+ alias_method downed, upped if Verning.releaser.send("#{release_name}_releaseable?")
18
+ end
13
19
  end
14
20
  end
@@ -6,20 +6,25 @@ class Object
6
6
  # Time.now > "2013-04-01"
7
7
  # end
8
8
  #
9
- def versioned_module(downed, upped, key = nil)
10
- return if block_given? && yield.!
11
-
12
- Object.send :remove_const, downed.to_s
13
- const_set downed.to_s, Object.const_get(upped.to_s)
14
- end
15
-
16
- # Select a class that matches the conditions given with block.
9
+ # Select a method from release name
17
10
  #
18
- # versioned_module :downed, :upped do
19
- # Time.now > "2013-04-01"
20
- # end
11
+ # versioned_module :downed, :upped, :release_name
21
12
  #
22
- def versioned_class(downed, upped, key = nil, &block)
23
- versioned_module(downed, upped, key, &block)
13
+ def versioned_module(downed, upped, release_name = nil)
14
+ if block_given?
15
+ if yield
16
+ Object.send :remove_const, downed.to_s
17
+ const_set downed.to_s, Object.const_get(upped.to_s)
18
+ end
19
+ else
20
+ if Verning.releaser.send("#{release_name}_releaseable?")
21
+ Object.send :remove_const, downed.to_s
22
+ const_set downed.to_s, Object.const_get(upped.to_s)
23
+ end
24
+ end
25
+ end
26
+
27
+ def versioned_class(downed, upped, release_name = nil, &block)
28
+ versioned_module(downed, upped, release_name, &block)
24
29
  end
25
30
  end
@@ -0,0 +1,38 @@
1
+ module Verning
2
+ class Releaser
3
+ def initialize(options = {})
4
+ options.each do |key, value|
5
+ key = key.to_s.gsub(/\.|\s|-|\/|\'/, '_').downcase.to_sym
6
+ set_schedule(key, value)
7
+ end
8
+ end
9
+
10
+ def set_schedule(name, release_conditions)
11
+ Releaser.class_eval do
12
+ define_method("#{name}_release_conditions", proc { release_conditions })
13
+ end
14
+
15
+ Releaser.class_eval do
16
+ define_method("#{name}_releaseable?", proc do
17
+ release_conditions = send("#{name}_release_conditions")
18
+
19
+ # implementation date condition only for the time being
20
+ start_date = release_conditions["date"]["start"].tap do |date|
21
+ break date && Time.parse(date.to_s)
22
+ end
23
+ end_date = release_conditions["date"]["end"].tap do |date|
24
+ break date && Time.parse(date.to_s)
25
+ end
26
+
27
+ if start_date.nil?
28
+ Time.now <= end_date
29
+ elsif end_date.nil?
30
+ Time.now >= start_date
31
+ else
32
+ Time.now <= end_date && Time.now >= start_date
33
+ end
34
+ end)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,3 +1,3 @@
1
1
  module Verning
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -1,28 +1,70 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Module do
4
- class TestClass
5
- def upped; :upped end
6
- def downed; :downed end
7
- end
8
-
9
4
  before do
10
- TestClass.send(:versioned_method, :downed, :upped) do condition end
5
+ Object.send :remove_const, "TestClass" if Object.const_defined? "TestClass"
6
+ Object.const_set("TestClass", Class.new(Object))
7
+
8
+ TestClass.class_eval do
9
+ define_method(:upped) { :upped }
10
+ define_method(:downed) { :downed }
11
+ end
11
12
  end
12
13
 
13
- describe "when not matches the conditions"do
14
- let(:condition) { false }
14
+ describe "when block given" do
15
+ before do
16
+ TestClass.send(:versioned_method, :downed, :upped) do condition end
17
+ end
18
+
19
+ describe "when not matches the conditions"do
20
+ let(:condition) { false }
15
21
 
16
- it "not aliased target method" do
17
- expect(TestClass.new.downed).to eq(:downed)
22
+ it "not aliased target method" do
23
+ expect(TestClass.new.downed).to eq(:downed)
24
+ end
25
+ end
26
+
27
+ describe "when matches the conditions"do
28
+ let(:condition) { true }
29
+
30
+ it "aliased target method" do
31
+ expect(TestClass.new.downed).to eq(:upped)
32
+ end
18
33
  end
19
34
  end
20
35
 
21
- describe "when matches the conditions"do
22
- let(:condition) { true }
36
+ describe "when release name given" do
37
+ let(:release_name) { :release_name }
38
+ let(:condition) { nil }
39
+ let(:releaser) { double(Releaser, "#{release_name}_releaseable?" => condition) }
40
+
41
+ before do
42
+ allow(Verning).to receive(:releaser).and_return(releaser)
43
+ end
44
+
45
+ it "call releaseable? method" do
46
+ expect(releaser).to receive(:"#{release_name}_releaseable?")
47
+ TestClass.send(:versioned_method, :downed, :upped, release_name)
48
+ end
49
+
50
+ before do
51
+ TestClass.send(:versioned_method, :downed, :upped) do condition end
52
+ end
53
+
54
+ describe "when not matches the conditions"do
55
+ let(:condition) { false }
56
+
57
+ it "not aliased target method" do
58
+ expect(TestClass.new.downed).to eq(:downed)
59
+ end
60
+ end
61
+
62
+ describe "when matches the conditions"do
63
+ let(:condition) { true }
23
64
 
24
- it "aliased target method" do
25
- expect(TestClass.new.downed).to eq(:upped)
65
+ it "aliased target method" do
66
+ expect(TestClass.new.downed).to eq(:upped)
67
+ end
26
68
  end
27
69
  end
28
70
  end
@@ -9,45 +9,122 @@ describe Object do
9
9
  Object.const_set("Upped", Class.new(Object))
10
10
  Object.send :remove_const, "Downed" if Object.const_defined? "Downed"
11
11
  Object.const_set("Downed", Class.new(Object))
12
-
13
- Object.send(method_name, Downed, Upped) do condition end
14
12
  end
15
13
 
16
- describe "versioned_module" do
17
- let(:method_name) { :versioned_module }
14
+ describe "when blck given" do
15
+ describe "versioned_module" do
16
+ before do
17
+ Object.send(:versioned_module, Downed, Upped) do condition end
18
+ end
19
+
20
+ describe "when not matches the conditions"do
21
+ let(:condition) { false }
22
+
23
+ it "not aliased target method" do
24
+ expect(Downed.new).to be_kind_of(Downed)
25
+ end
26
+ end
18
27
 
19
- describe "when not matches the conditions"do
20
- let(:condition) { false }
28
+ describe "when matches the conditions"do
29
+ let(:condition) { true }
21
30
 
22
- it "not aliased target method" do
23
- expect(Downed.new).to be_kind_of(Downed)
31
+ it "aliased target method" do
32
+ expect(Downed.new).to be_kind_of(Upped)
33
+ end
24
34
  end
25
35
  end
26
36
 
27
- describe "when matches the conditions"do
28
- let(:condition) { true }
37
+ describe "versioned_class" do
38
+ before do
39
+ Object.send(:versioned_class, Downed, Upped) do condition end
40
+ end
41
+
42
+ describe "when not matches the conditions"do
43
+ let(:condition) { false }
29
44
 
30
- it "aliased target method" do
31
- expect(Downed.new).to be_kind_of(Upped)
45
+ it "not aliased target method" do
46
+ expect(Downed.new).to be_kind_of(Downed)
47
+ end
48
+ end
49
+
50
+ describe "when matches the conditions"do
51
+ let(:condition) { true }
52
+
53
+ it "aliased target method" do
54
+ expect(Downed.new).to be_kind_of(Upped)
55
+ end
32
56
  end
33
57
  end
34
58
  end
35
- describe "versioned_class" do
36
- let(:method_name) { :versioned_class }
37
59
 
38
- describe "when not matches the conditions"do
39
- let(:condition) { false }
60
+ describe "when release name given" do
61
+ describe "versioned_module" do
62
+ let(:release_name) { :release_name }
63
+ let(:condition) { nil }
64
+ let(:releaser) { double(Releaser, "#{release_name}_releaseable?" => condition) }
65
+
66
+ before do
67
+ allow(Verning).to receive(:releaser).and_return(releaser)
68
+ end
69
+
70
+ it "call releaseable? method" do
71
+ expect(releaser).to receive(:"#{release_name}_releaseable?")
72
+ Object.send(:versioned_module, Downed, Upped, release_name)
73
+ end
74
+
75
+ before do
76
+ Object.send(:versioned_module, Downed, Upped, release_name)
77
+ end
78
+
79
+ describe "when not matches the conditions"do
80
+ let(:condition) { false }
81
+
82
+ it "not aliased target method" do
83
+ expect(Downed.new).to be_kind_of(Downed)
84
+ end
85
+ end
40
86
 
41
- it "not aliased target method" do
42
- expect(Downed.new).to be_kind_of(Downed)
87
+ describe "when matches the conditions"do
88
+ let(:condition) { true }
89
+
90
+ it "aliased target method" do
91
+ expect(Downed.new).to be_kind_of(Upped)
92
+ end
43
93
  end
44
94
  end
45
95
 
46
- describe "when matches the conditions"do
47
- let(:condition) { true }
96
+ describe "versioned_class" do
97
+ let(:release_name) { :release_name }
98
+ let(:condition) { nil }
99
+ let(:releaser) { double(Releaser, "#{release_name}_releaseable?" => condition) }
100
+
101
+ before do
102
+ allow(Verning).to receive(:releaser).and_return(releaser)
103
+ end
104
+
105
+ it "call releaseable? method" do
106
+ expect(releaser).to receive(:"#{release_name}_releaseable?")
107
+ Object.send(:versioned_class, Downed, Upped, release_name)
108
+ end
109
+
110
+ before do
111
+ Object.send(:versioned_class, Downed, Upped, release_name)
112
+ end
113
+
114
+ describe "when not matches the conditions"do
115
+ let(:condition) { false }
116
+
117
+ it "not aliased target method" do
118
+ expect(Downed.new).to be_kind_of(Downed)
119
+ end
120
+ end
121
+
122
+ describe "when matches the conditions"do
123
+ let(:condition) { true }
48
124
 
49
- it "aliased target method" do
50
- expect(Downed.new).to be_kind_of(Upped)
125
+ it "aliased target method" do
126
+ expect(Downed.new).to be_kind_of(Upped)
127
+ end
51
128
  end
52
129
  end
53
130
  end
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+
3
+ describe Releaser do
4
+ describe "#initialize" do
5
+ it "set schedule" do
6
+ expect_any_instance_of(Releaser).to receive(:set_schedule)
7
+ Releaser.new key: :value
8
+ end
9
+ end
10
+
11
+ describe "#set_schedule" do
12
+ let(:scheduler) { Releaser.new }
13
+ let(:name) { :name }
14
+ let(:release_conditions) { { } }
15
+
16
+ before do
17
+ scheduler.set_schedule(name, release_conditions)
18
+ end
19
+
20
+ it "define #{name}_release_conditions instance variable" do
21
+ expect(scheduler.methods)
22
+ .to be_include(:"#{name}_release_conditions")
23
+ end
24
+
25
+ it "define #{name}_releaseable? method" do
26
+ expect(scheduler.methods)
27
+ .to be_include(:"#{name}_releaseable?")
28
+ end
29
+
30
+ describe "##{name}_release_conditions" do
31
+ let(:release_conditions) do { test: :hash } end
32
+
33
+ it "returns release_conditions" do
34
+ expect(scheduler.send(:"#{name}_release_conditions"))
35
+ .to eq(release_conditions)
36
+ end
37
+ end
38
+
39
+ describe "##{name}_releaseable?" do
40
+ describe "when have date condition" do
41
+ describe "when in date range" do
42
+ let(:release_conditions) do
43
+ { "date" => { "start" => Time.now - 24*3600, "end" => Time.now + 24*3600 } }
44
+ end
45
+
46
+ it "returns true" do
47
+ expect(scheduler.send(:"#{name}_releaseable?")).to be_true
48
+ end
49
+ end
50
+
51
+ describe "when not in date range" do
52
+ let(:release_conditions) do
53
+ { "date" => { "start" => Time.now - 24*3600, "end" => Time.now - 24*3600 } }
54
+ end
55
+
56
+ it "returns false" do
57
+ expect(scheduler.send(:"#{name}_releaseable?")).to be_false
58
+ end
59
+ end
60
+
61
+ describe "when start date is nil" do
62
+ let(:release_conditions) do
63
+ { "date" => { "start" => nil, "end" => Time.now + 24*3600 } }
64
+ end
65
+
66
+ it "returns true" do
67
+ expect(scheduler.send(:"#{name}_releaseable?")).to be_true
68
+ end
69
+ end
70
+
71
+ describe "when end date is nil" do
72
+ let(:release_conditions) do
73
+ { "date" => { "start" => Time.now - 24*3600, "end" => nil } }
74
+ end
75
+
76
+ it "returns true" do
77
+ expect(scheduler.send(:"#{name}_releaseable?")).to be_true
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -2,7 +2,14 @@ require 'bundler/setup'
2
2
  Bundler.setup
3
3
 
4
4
  require 'pry'
5
+ require 'active_support'
6
+ require 'active_support/core_ext'
7
+
5
8
  require 'verning'
9
+ include Verning
10
+
11
+ require 'coveralls'
12
+ Coveralls.wear!
6
13
 
7
14
  RSpec.configure do |config|
8
15
  end
@@ -23,4 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "pry", "~> 0.9"
24
24
  spec.add_development_dependency "pry-debugger", "~> 0.2"
25
25
  spec.add_development_dependency "rspec", "~> 2.14"
26
+ spec.add_development_dependency "activesupport", "~> 4.0"
26
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: verning
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
  - eccyan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-26 00:00:00.000000000 Z
11
+ date: 2014-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: '2.14'
83
+ - !ruby/object:Gem::Dependency
84
+ name: activesupport
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '4.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '4.0'
83
97
  description: versioning for methods, modules or classes
84
98
  email:
85
99
  - g00.eccyan@gmail.com
@@ -87,6 +101,7 @@ executables: []
87
101
  extensions: []
88
102
  extra_rdoc_files: []
89
103
  files:
104
+ - .coveralls.yml
90
105
  - .gitignore
91
106
  - .rspec
92
107
  - .travis.yml
@@ -101,9 +116,11 @@ files:
101
116
  - lib/verning/core_ext/module/versioned_method.rb
102
117
  - lib/verning/core_ext/object.rb
103
118
  - lib/verning/core_ext/object/versioned_module.rb
119
+ - lib/verning/releaser.rb
104
120
  - lib/verning/version.rb
105
121
  - spec/core_ext/module/versioned_method_spec.rb
106
122
  - spec/core_ext/object/versioned_module_spec.rb
123
+ - spec/releaser.rb
107
124
  - spec/spec_helper.rb
108
125
  - verning.gemspec
109
126
  homepage: https://github.com/eccyan/verning
@@ -133,4 +150,5 @@ summary: versioning helper
133
150
  test_files:
134
151
  - spec/core_ext/module/versioned_method_spec.rb
135
152
  - spec/core_ext/object/versioned_module_spec.rb
153
+ - spec/releaser.rb
136
154
  - spec/spec_helper.rb