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