dashdog 0.2.0 → 0.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
2
  SHA1:
3
- metadata.gz: e5a209f39a8e469b2ff1a4ae3c37c9ef0f29a9fe
4
- data.tar.gz: 75e706697dfad0acaf3bd8e2cf0a34820d5d2a19
3
+ metadata.gz: f6f386b275c48a47a0045b7185fecde628df9559
4
+ data.tar.gz: 004b08212a20a2e55a4cd9ce36c0d1af6d09ab1b
5
5
  SHA512:
6
- metadata.gz: 382cca04591f69297f3bbc7b41ec2c736bf03f52ee9be2486f4f09b552bb3d0c66a13e2c00358e95f8c4ba01180b9172a76ae3c16d7e5021225a52c56d548bc0
7
- data.tar.gz: 11c397cdfedf957a1f9fd38b2aa83ccf80a62b0a8656a4ab07139f82dfa07d6a8c40c5da1ccab1fe1f937815fadd75ad88dd66927085714e20f9c86d6e6c893b
6
+ metadata.gz: 60b4e24201a7b27f245992f3b296de39fcd1c070e02a44203a498e79d683bd086ee4d9b476a43edc254d92d968fba6a334af7bac81a2d5d54c6a650965cb1ea9
7
+ data.tar.gz: ce8b1718de7432e021e6d4240ddf85be9396ac6ab0144bfc0624735d30342dee8daa49c9ff958e0dbe45ee888a66af50bfe5dd7f58f5bf1c23e4c6bb617ee5c3
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.3.0
2
+
3
+ - Add template support [#5][] ([@winebarrel][])
4
+ - Diff the sorted json [#6][] ([@winebarrel][])
5
+
1
6
  ## 0.2.0
2
7
 
3
8
  - Add `split` opton [#4][] ([@winebarrel][])
@@ -18,4 +23,6 @@
18
23
  [#2]: https://github.com/serverworks/dashdog/issues/2
19
24
  [#3]: https://github.com/serverworks/dashdog/issues/3
20
25
  [#4]: https://github.com/serverworks/dashdog/issues/4
21
- [@winebarrel]: https://github.com/winebarrel
26
+ [#5]: https://github.com/serverworks/dashdog/issues/5
27
+ [#6]: https://github.com/serverworks/dashdog/issues/6
28
+ [@winebarrel]: https://github.com/winebarrel
data/dashdog.gemspec CHANGED
@@ -20,11 +20,12 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ["lib"]
21
21
 
22
22
  spec.add_dependency "dogapi"
23
- spec.add_dependency "dslh", "~> 0.3.8"
23
+ spec.add_dependency "dslh", "~> 0.3.9"
24
24
  spec.add_dependency "thor", "~> 0.19.1"
25
25
  spec.add_dependency "coderay"
26
26
  spec.add_dependency "diffy"
27
27
  spec.add_dependency "parallel"
28
+ spec.add_dependency "hashie"
28
29
 
29
30
  spec.add_development_dependency "bundler", "~> 1.12"
30
31
  spec.add_development_dependency "rake", "~> 10.0"
data/lib/dashdog.rb CHANGED
@@ -6,6 +6,7 @@ require "dashdog/client"
6
6
  require "dashdog/converter"
7
7
  require "dashdog/actions"
8
8
  require "dashdog/cli"
9
+ require "dashdog/dsl_context"
9
10
 
10
11
  module Dashdog
11
12
  # Your code goes here...
@@ -61,40 +61,8 @@ EOS
61
61
  end
62
62
 
63
63
  def to_h(dsl_file)
64
- @_dsl_file = dsl_file
65
- instance_eval(File.read(dsl_file), dsl_file)
66
- @boards
64
+ context = DSLContext.new
65
+ context.eval_dsl(dsl_file)
67
66
  end
68
-
69
- private
70
-
71
- def require(file)
72
- boardfile = (file =~ %r|\A/|) ? file : File.expand_path(File.join(File.dirname(@_dsl_file), file))
73
-
74
- if File.exist?(boardfile)
75
- instance_eval(File.read(boardfile), boardfile)
76
- elsif File.exist?(boardfile + '.rb')
77
- instance_eval(File.read(boardfile + '.rb'), boardfile + '.rb')
78
- else
79
- Kernel.require(file)
80
- end
81
- end
82
-
83
- def timeboard(value = nil, &block)
84
- hash = Dslh.eval(
85
- allow_empty_args: true,
86
- &block)
87
- hash['title'] = value
88
- @boards['timeboards'] << hash
89
- end
90
-
91
- def screenboard(value = nil, &block)
92
- hash = Dslh.eval(
93
- allow_empty_args: true,
94
- &block)
95
- hash['board_title'] = value
96
- @boards['screenboards'] << hash
97
- end
98
-
99
67
  end
100
68
  end
@@ -0,0 +1,78 @@
1
+ require 'hashie'
2
+
3
+ module Dashdog
4
+ class DSLContext
5
+ def initialize
6
+ @boards = {'timeboards' => [], 'screenboards' => []}
7
+ @templates = {}
8
+ @context = Hashie::Mash.new()
9
+ end
10
+
11
+ def eval_dsl(dsl_file)
12
+ @_dsl_file = dsl_file
13
+ instance_eval(File.read(dsl_file), dsl_file)
14
+ @boards
15
+ end
16
+
17
+ private
18
+
19
+ def template(name, &block)
20
+ @templates[name.to_s] = block
21
+ end
22
+
23
+ def context
24
+ @context
25
+ end
26
+
27
+ def require(file)
28
+ boardfile = (file =~ %r|\A/|) ? file : File.expand_path(File.join(File.dirname(@_dsl_file), file))
29
+
30
+ if File.exist?(boardfile)
31
+ instance_eval(File.read(boardfile), boardfile)
32
+ elsif File.exist?(boardfile + '.rb')
33
+ instance_eval(File.read(boardfile + '.rb'), boardfile + '.rb')
34
+ else
35
+ Kernel.require(file)
36
+ end
37
+ end
38
+
39
+ def timeboard(value = nil, &block)
40
+ hash = dslh_eval(block)
41
+ hash['title'] = value
42
+ @boards['timeboards'] << hash
43
+ end
44
+
45
+ def screenboard(value = nil, &block)
46
+ hash = dslh_eval(block)
47
+ hash['board_title'] = value
48
+ @boards['screenboards'] << hash
49
+ end
50
+
51
+ def dslh_eval(block)
52
+ scope_hook = proc do |scope|
53
+ scope.instance_eval(<<-'EOS')
54
+ def include_template(template_name, context = {})
55
+ tmplt = @templates[template_name.to_s]
56
+
57
+ unless tmplt
58
+ raise "Template '#{template_name}' is not defined"
59
+ end
60
+
61
+ context_orig = @context
62
+ @context = @context.merge(context)
63
+ instance_eval(&tmplt)
64
+ @context = context_orig
65
+ end
66
+
67
+ def context
68
+ @context
69
+ end
70
+ EOS
71
+ end
72
+
73
+ scope_vars = {templates: @templates, context: @context}
74
+
75
+ Dslh.eval(allow_empty_args: true, scope_hook: scope_hook, scope_vars: scope_vars, &block)
76
+ end
77
+ end
78
+ end
data/lib/dashdog/utils.rb CHANGED
@@ -7,8 +7,8 @@ module Dashdog
7
7
 
8
8
  def self.diff(hash1, hash2)
9
9
  Diffy::Diff.new(
10
- JSON.pretty_generate(hash1),
11
- JSON.pretty_generate(hash2),
10
+ JSON.pretty_generate(self.deep_sort_hash(hash1)) + "\n",
11
+ JSON.pretty_generate(self.deep_sort_hash(hash2)) + "\n",
12
12
  :diff => '-u'
13
13
  ).to_s(:color)
14
14
  end
@@ -31,5 +31,24 @@ module Dashdog
31
31
  def self.print_json(json)
32
32
  puts CodeRay.scan(json, :json).terminal
33
33
  end
34
+
35
+ def self.deep_sort_hash(obj)
36
+ case obj
37
+ when Hash
38
+ new_hash = {}
39
+
40
+ obj.sort_by{|k, _| k.to_s }.each do |key, value|
41
+ new_hash[key] = self.deep_sort_hash(value)
42
+ end
43
+
44
+ new_hash
45
+ when Array
46
+ obj.map do |value|
47
+ self.deep_sort_hash(value)
48
+ end
49
+ else
50
+ obj
51
+ end
52
+ end
34
53
  end
35
54
  end
@@ -1,3 +1,3 @@
1
1
  module Dashdog
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dashdog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Serverworks Co.,Ltd.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-22 00:00:00.000000000 Z
11
+ date: 2016-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dogapi
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.3.8
33
+ version: 0.3.9
34
34
  type: :runtime
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: 0.3.8
40
+ version: 0.3.9
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: thor
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: hashie
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: bundler
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -161,6 +175,7 @@ files:
161
175
  - lib/dashdog/cli.rb
162
176
  - lib/dashdog/client.rb
163
177
  - lib/dashdog/converter.rb
178
+ - lib/dashdog/dsl_context.rb
164
179
  - lib/dashdog/logger.rb
165
180
  - lib/dashdog/utils.rb
166
181
  - lib/dashdog/version.rb